sbit用来定义一个特殊功能寄存器的某一位。
sbit name = sfr-name ^ bit-position;
sbit name = sfr-address ^ bit-position;
sbit name = sbit-address;
name | 特殊功能寄存器某一位的名称 |
sfr-name | 已定义的特殊功能寄存器名称 |
bit-position | 特殊功能寄存器比特位置 |
sfr-address | 特殊功能寄存器的地址 |
sbit-address | 特殊功能寄存器的比特地址 |
sbit提供了访问可位寻址特殊功能寄存器以及其他可位寻址对象的方法。
sbit EA = 0xAF;
该语句将EA定义为特殊功能寄存器某位,地址为0XAF,在8051单片机中代表开启中断使能寄存器的所有位。
以sbit访问的对象与sfr16相同为小端模式存储,而int、long型以大端模式存储。
为sbit 名称指定地址的三种方法:
1)
sbit name = 特殊功能寄存器名称^比特位置;
比如:
sfr PSW = 0xD0;
sfr IE = 0xA8;
sbit OV = PSW^2;
sbit CY = PSW^7;
sbit EA = IE^7;
2)
sbit name = 特殊功能寄存器地址^比特位置;
sbit OV = 0xD0^2;
sbit CY = 0xD0^7;
sbit EA = 0xA8^7;
特殊功能寄存器地址必须能被8整除。
3)
sbit name = 位地址;
比如:
sbit OV = 0xD2;
sbit CY = 0xD7;
sbit EA = 0xAF;
只有地址能够被8整除的特殊功能寄存器才是可位寻址的。
sbit用来访问bdata类型变量的某一比特位。
sbit变量不能在函数内部声明。
关键字:Keil C51 sbit
引用地址:
Keil C51对C语言的关键词扩展之十七: sbit
推荐阅读最新更新时间:2024-03-16 16:06
混合式调度器C51源代码和相关注释
/*============================================================== 1ms时标 混合式调度器(一个抢占式任务,多个合作式任务) 作者:shadow.hu ===============================================================*/ #include reg52.h #define uchar unsigned char #define ushort unsigned short #define SCH_MAX_TASKS 9 #define ERROR_SCH_TOO_MANY_TASKS 9 #define ERR
[单片机]
Keil C51必须注意的一些有趣特性
Keil c51号称作为51系列单片机最好的开发环境,大家一定都很熟悉。它的一些普通的特性大家也都了解,(书上也都说有)如:因为51内的RAM很小,C51的函数并不通过堆栈传递参数(重入函数除外),局部变量也不存储在堆栈中,而是存在于固定的RAM中及寄存器中。那么看一下下面的程序。 void fun1(unsigned char i) { … } 正常情况参数i通过R7传入函数,那么它的实际地址在什么地方呢?就是R7吗?回答这个问题之前我们先来了解keil c51的几个有趣的特性(不考虑重入函数)。 一、函数在调用前定义与在调用后定义产生的代码是有很大差别的(特别是在优化级别大于3级时)。(本人也不太清楚为什么,大概因
[单片机]
keil mini2440裸机代码问题解决笔记1
Warning: L6305W: Image does not have an entry point. (Not specified or not set due to multiple choices.) 加上启动代码 注释掉main,会出现 解决 在Options for Target选项的Linker—Misc controls加入入口地址:–entry Reset_Handler 帮助手册中 Controls Specify any directive for which there is no individual dialog control.
[单片机]
C51 UART 串口通信
SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。 串行口控制寄存器SCON(见表1) 。 表1 SCON寄存器 表1 SCON寄存器 表中各位(从左至右为从高位到低位)含义如下。 SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。 表2 串行口工作方式控制位 表2 串行口工作方式控制位 其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。 SM
[单片机]
Keil C51对C语言的关键词扩展之二: alien
alien关键词主要是为了C51编译器与PL/M-51编译器兼容。 在C51编译器中调用PL/M-51函数,须使用alien声明该函数,如下: extern alien char plm_func (int, char); char c_func (void) { int i; char c; for (i = 0; i 100; i++) { c = plm_func (i, c); /* call PL/M func */ } return (c); } 为了创建能被PL/M-51程序调用的C51函数,须使用alien关键词声明,如下: alien char c_func (char a
[单片机]
KEIL51用汇编语言建立工程的具体过程
1、启动keil 2、project-new project 3、找一个地方保存工程文件 4、在树形目录中点击atmel-at89c51,然后确定 5、file-new,出来一个空白框 6、file-save as,保存在你找的地方,输出文件名.asm 7、右击左右source group 1-add files to group source group 1 8、找到刚才的asm文件,选中后点add,再点close 9、现在就可以在那个空白框内写汇编程序了。写完后按F7编译。
[单片机]
C51---9 LED点阵屏
LED点阵屏介绍
[单片机]
单片机c语言教程:C51常量
上一篇学习了 KEIL c 单片机c语言 编译器所支持的数据类型。而这些c51数据类型又是怎么用在常量和变量的定义中的呢?又有什么要注意的吗?常量就是在程序运行过程中不能改变值的量,而变量是能在程序运行过程中不断变化的量。变量的定义能使用所有c51编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。这一篇学习常量定义和使用方法,而下一篇则学习单片机c语言的变量。 常量的数据类型说明是这样的 1. 整型常量能表示为十进制如 123,0,-89 等。十六进制则以 0x 开头如 0x34,-0x3B 等。长整型就在数字后面加字母 L,如 104L,034L,0xF340 等。 2. 浮点型常量可分为
[单片机]