sfr16定义一个16位的特殊功能寄存器:
sfr16 name = address;
name | 16位特殊功能寄存器名称 |
address | 16位特殊功能寄存器地址 |
一些8051系列产品拥有16位的特殊功能寄存器,比如8052使用地址0XCC、0XCD表示定时/计数器2的低字节、高字节。C51编译器提供sfr16数据类型以便将两个8位特殊功能寄存器当做一个16位寄存器来访问。
sfr16只能在小端模式下使用,低字节的地址作为16位特殊功能寄存器的地址:
sfr16 T2 = 0xCC; /* Timer 2: T2L 0CCh, T2H 0CDh */
sfr16 RCAP2 = 0xCA; /* RCAP2L 0CAh, RCAP2H 0CBh */
sfr16在使用时遵循与sfr相同的规则,任意符号名称都能在声明时使用,=后面的地址必须为数字常量,不允许使用符号操作表达式来指定地址。
大部分的16位特殊功能寄存器是有两个连续的地址组成的。
一个16位的特殊功能寄存器有4种可能的配置:
sfr16声明的16位特殊功能寄存器,其低字节位于低地址,高字节位于高地址,比如低字节地址为0X9E,高字节地址为0X9F。
C51编译器生成的代码在对16位特殊功能寄存器执行写操作时,总是先写高地址,再写低地址。实际使用时,须注意这种写的次序,是否符合我们的要求。
sfr16类型的定义必须在函数体外部。
我们可以使用sfr来分别定义一个16位特殊功能寄存器的两个字节,这样在写的时候,我们就不用考虑sfr16那种谁先谁后的次序了。
关键字:Keil C51 sfr16
引用地址:
Keil C51对C语言的关键词扩展之十六:sfr16
推荐阅读最新更新时间:2024-03-16 16:06
keil5 stm32f407 环境转stm32f103 解决方法
问题:下载程序一直报错,是因为我之前是f4的库,现在的程序是f103的 ,所以环境需重新配置 解决办法:https://jingyan.baidu.com/album/25648fc18dfbb09190fd004a.html?picindex=10 打开keil软件 按下图标记点击操作 第三步,点击蓝色的一串字体,进入官网下载pack包, 下载完后到下载路径,会发现pack,双击。pack, 双击pac包,进入安装界面,确定好路径,点击‘Next' , 安装完成,点击’Finish' 进入keil软件,点击‘魔术棒’-----》device ---- 会发现多了stm32f103的包
[单片机]
基于C51单片机的校园自助导览仪设计
摘要:在分析MP3标准算法的基础上,基于C51单片机实现MP3的编解码,并对MP3编码进行了多方面的优化;在单片机上的MP3算法中加入无线功能,设计成为一种校园自助导览仪。经野外测试,效果良好。 关键词:MP3编解码;无线模块;自助导览 引言 MP3是MPEG-I的音频标准第三层压缩模式。虽然算法比较复杂,但压缩比最大在低码率条件下基本能达到CD的音质效果。其压缩比例高、音质失真小的特点使之成为用于当前PC、网络、PDA等最为流行的音频格式。在嵌入式系统中实现MP3音频编解码常见的有两种方案;一种是硬件解码(即通过专用的MP3解码硬件进行解码),其特点是可以实现较高的性能和较低的功耗,目前大多数商用MP3都采用这种方案;另外一
[单片机]
ISD4004语音芯片C51驱动程序源代码
ISD4004语音芯片C51驱动程序源代码 /*spi isd4004.h*/ #include reg51.h #include intrins.h sbit _cs = p0^0; sbit _sclk= p0^3; sbit _mosi= p0^1; sbit _miso= p0^2; sbit _rac = p0^4; sbit _int = p0^5; void delay(unsigned int i) //延时程序 { while(i--); } void stopmode() //停止 { unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x30; for(i=0;i
[单片机]
DS18B20单片机C51温度计实践
18B20温度计,正负温度显示。最大99摄氏度。用万能板手工焊接。调试成功,正常显示。共阳数码管由三极管驱动。 下面是C51程序,您一看就懂了: #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char uchar code table ={ 0x14,0xf5,0x19,0x51, //0 1 2 3 0xf0,0x52,0x12,0x75, // 4 5 6 7 0x10,0x50,0x30,0x92, // 8 9 a b 0x1e,0x
[单片机]
基于C51单片机的I/O并行口直接驱动LED显示电路图
如图 13 所示,利用 AT89S51 单片机的 P0 端口的 P0.0 - P0.7 连接到一个共阴码管的 a - h 的笔段上,数码管的公共端接地。在数码管上循环显示 0 - 9 数字时间间隔 0.2 秒。 把 “ 单片机系统 ” 区域中的 P0.0/AD0 - P0.7/AD7 端口用 8 芯排线连接到 “ 四路静态数码显示模块 ” 区域中的任一个数码管的 a - h 端口上;要求: P0.0/AD0 与a 相连, P0.1/AD1 与 b 相连,P0.2/AD2 与 c 相连, …… , P0.7/AD7 与 h 相连。
[模拟电子]
C51单片机学习笔记之LED
简介 LED就是一个发光二极管,没啥好说的。唯一 一点就是低电平有效! 原理图 代码部分 #include REGX52.H void delay() { unsigned int i; for(i=0;i 30000;i++); } main() { unsigned int i; unsigned char J; while(1) { /*P0=0xFE; delay(); P0=0xFD; delay(); P0=0xFB; delay(); P0=0xF7; delay(); P0=0xEF; delay(); P0=0x
[单片机]
C51中断(void timer1(void) interrupt 3 using 3)
interrupt 表示中断优先级,using表示所用工作寄存器组。 interrupt x using y 跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1 4 串行中断 其它的根据相应得单片机有自己的含义,实际上c在编译的时候就是把你这个函数的入口地址放到这个对应中断的跳转地址 using y 这个y是说这个中断函数使用的那个寄存器组就是51里面一般有4个 r0 -- r7寄存器,如果你的终端函数和别的程序用的不
[单片机]
在C51系统上实现YAFFS文件系统
随着NAND Flash存储器作为大容量数据存储介质的普及,基于NAND闪存的文件系统YAFFS(Yet Another Flash File System)正逐渐被应用到各种嵌入式系统中。本文将详细阐述YAFFS文件系统在C51系统上的实现过程。 1 NAND Flash的特点 非易失性闪速存储器Flash具有速度快、成本低、密度大的特点,被广泛应用于嵌入式系统中。Flash存储器主要有NOR和NAND两种类型。NOR型比较适合存储程序代码;NAND型则可用作大容量数据存储。NAND闪存的存储单元为块和页。本文使用的Samsung公司的K9F5608包括2 048块,每一块又包括32页,一页大小为528字节,依次分为2个256
[单片机]