51中的C关键字和中断
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C51中的关键字
关键a
continue ;程序语句 ;转向下一次循环
default ;程序语句 ;Switch语句中的失败选择项
do ;程序语句 ;构成do..while循环结构
double ;数据类型说明 ;双精度浮点数
else ;程序语句 ;构成if..else选择结构
enum ;数据类型说明 ;枚举
extern ;存储种类说明 ;在其他程序模块中说明了的全局变量
flost ;数据类型说明 ;单精度浮点数
for ;程序语句 ;构成for循环结构
goto ;程序语句 ;构成goto转移结构
if ;程序语句 ;构成if..else选择结构
int ;数据类型说明 ;基本整型数
long ;数据类型说明 ;长整型数
register ;存储种类说明 ;使用CPU内部寄存的变量
return ;程序语句 ;函数返回
short ;数据类型说明 ;短整型数
signed ;数据类型说明 ;有符号数,二进制数据的最高位为符号位
sizeof ;运算符 ;计算表达式或数据类型的字节数
static ;存储种类说明 ;静态变量
struct ;数据类型说明 ;结构类型数据
swicth ;程序语句 ;构成switch选择结构
typedef ;数据类型说明 ;重新进行数据类型定义
union ;数据类型说明 ;联合类型数据
unsigned ;数据类型说明 ;无符号数数据
void ;数据类型说明 ;无类型数据
volatile ;数据类型说明 ;该变量在程序执行中可被隐含地改变
while ;程序语句 ;构成while和do..while循环结构
附表1-1 ANSIC标准关键字
关键字 ;用 途 ;说 明
bit ;位标量声明 ;声明一个位标量或位类型的函数
sbit ;位标量声明 ;声明一个可位寻址变量
Sfr ;特殊功能寄存器声明 ;声明一个特殊功能寄存器
Sfr16 ;特殊功能寄存器声明 ;声明一个16位的特殊功能寄存器
data ;存储器类型说明 ;直接寻址的内部数据存储器
bdata ;存储器类型说明 ;可位寻址的内部数据存储器
idata ;存储器类型说明 ;间接寻址的内部数据存储器
pdata ;存储器类型说明 ;分页寻址的外部数据存储器
xdata ;存储器类型说明 ;外部数据存储器
code ;存储器类型说明 ;程序存储器
interrupt ;中断函数说明 ;定义一个中断函数
reentrant ;再入函数说明 ;定义一个再入函数
using ;寄存器组定义 ;定义芯片的工作寄存器
附表1-2 C51编译器的扩展关键字
附录二 AT89C51特殊功能寄存器列表(适用于同一架构的芯片)
符 号 ;地 址 ;注 释
*ACC ;E0H ;累加器
*B ;F0H ;乘法寄存器
*PSW ;D0H ;程序状态字
SP ;81H ;堆栈指针
DPL ;82H ;数据存储器指针低8位
DPH ;83H ;数据存储器指针高8位
*IE ;A8H ;中断允许控制器
*IP ;D8H ;中断优先控制器
*P0 ;80H ;端口0
*P1 ;90H ;端口1
*P2 ;A0H ;端口2
*P3 ;B0H ;端口3
PCON
;87H ;电源控制及波特率选择
*SCON ;98H ;串行口控制器
SBUF ;99H ;串行数据缓冲器
*TCON ;88H ;定时器控制
TMOD ;89H ;定时器方式选择
TL0 ;8AH ;定时器0低8位
TL1 ;8BH ;定时器1低8位
TH0 ;8CH ;定时器0低8位
TH1 ;8DH ;定时器1高8位
带*号的特殊功能寄存器都是可以位寻址的寄
51中断函数学习笔记
释疑:void Timer0() interrupt 1 using 1
Timer0 是函数名,随便取的
interrupt xx using y
跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中
0 外部中断0
1 定时器0
2 外部中断1
3 定时器1
4 串行中断
实际上编译的时候就是把你这个函数的入口地址方到这个对应中断的跳转地址
using y 这个y是说这个中断函数使用的那个寄存器组,51里面一般有4组 r0 -- r7寄存器,一共有32个,如果你的终端函数和别的程序用的不是同一个寄存器组则进入中断的时候就不会将寄存器组压入堆栈返回时也不会谈出来节省代码和时间
MCS-51中断函数注意如下:
(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。
(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。
(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。
(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。
(5)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。
(6)C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。
(7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。