reg51.h头文件详解(3)

时间:2025-04-20

sbit INT0 = 0xB2; //外中断0 sbit TXD = 0xB1; //串行发送 sbit RXD = 0xB0; //串行接收 /* SCON */

sbit SM0 = 0x9F; //

sbit SM1 = 0x9E; //串口工作方式

sbit SM2 = 0x9D; //什么鬼特征位,要用查书,或者等我以后解释,啊哈 sbit REN = 0x9C; //串行接收允许 sbit TB8 = 0x9B; //收到的第九位 sbit RB8 = 0x9A; //要发的第九位

sbit TI = 0x99; //哇,熟悉吧,发送完成中断标志 sbit RI = 0x98; //接收完成中断标志

当然,注释是加上去的,这里都是一些符号的定义,即规定符号名与地址的对应关系。下面理解一下sfr和sbit这两个符号:

1)sfr

注意到 sfr P0 = 0x80;

这一行,就是定义P0 与地址0x80 对应,P0 口的地址就是0x80

sfr 这个词并不是标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR(特殊功能寄存器) 而提供了一个新的关键词,其用法是:

sfrt 变量名=地址值。

2)sbit

注意到sbit EA = 0xAF; 这一行,就是定义EA与地址0xAF 对应,EA中断使能这一位的地址就是0xaf。 关于sbit,也不是标准的C关键字。而是Keil 为能直接访问80C51寄存器而提供了一个新的关键词,其用法是:

sbit X="A"^n。其中A是一个可位寻址的变量,而n表示该变量的第几位,而X就是一个位变量,它就是A中的第n位。这里的符号^已经不再是标准C语言中的异或操作符了,这里有它自己独特的意思,只能是这样的写法。

例如:sbit P15=P1^5; 就是定义用符号P15 来表示P1.5 引脚,如果你愿意也可以用其它名字,只要下面程序中也随之更改就行了。

另外,在培训过程中,发现有不少学生对上面定义存在这样一个疑惑,看下面两行

sfr SP = 0x81;

sbit P0_1 = 0x81; //P0^1=0x81;

这两行共用一个地址,岂不冲突了。 解答如下:

当然不会冲突,sfr跟sbit是两个不同的意义,sfr是给一个字节的地址起一个变量名,传给变量名的是该字节的首地址,如sfr P0=0x80,P0(8位IO口)已经代表了0x80到0x87整整8位的地址;而sbit定义的仅仅是一个位,如P0_1=0x80,P0_2=0x81 P0_7=0x87,他们是P0的具体表现,即是给0x80到0x87各起一个变量名。

ww w.wwhrw.bnhrbcbn.cbcom.c/bombs

reg51.h头文件详解(3).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219