C语言在8051单片机上的扩展(interrupt、using关键字的用法)
直接访问寄存器和端口
定义
sfr P0 0x80
sfr P1 0x81
sfr ADCON; 0xDE
sbit EA 0x9F
操作
ADCON = 0x08 ;
P1
= 0xFF ;
io_status = P0 ;
EA
= 1 ;
在使用了interrupt 1关键字之后,会自动生成中断向量
在ISR中不能与其他"后台循环代码"(the
background loop code)共享局部变量
因为连接器会复用在RAM中这些变量的位置,所以它们会有不同的意义,这取决于当前使用的不同的函数
复用变量对RAM有限的51来将很重要。所以,这些函数希望按照一定的顺序执行而不被中断。
timer0_int() interrupt 1 using 2
{
unsigned char temp1 ;
unsigned char temp2 ;
executable C statements ;
}
"interrupt"声明表示向量生成在(8*n+3),这里,n就是interrupt参数后的那个数字这里,在08H的代码区域生成LJMP timer0_int这样一条指令
"using"
tells the compiler to switch register banks on entry to an interrupt routine.
This "context" switch is the fastest way of providing a fresh
registerbank for an interrupt routine's local data and is to be preferred to
stacking registers for very time-critical routines. Note that interrupts of the
same priority can share a register bank, since there is no risk that they will