C51中断函数必须通过该修饰符进行修饰。在C51程序设计中,当函数定义时用了interrupt m修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按51系统中断的处理方式自动把它安排在程序存储器中的相应位置。改瞎
在该修饰符中,m的取值为0~31,对应的中断情况如下:
0——外部中断0
1——定时/计数器T0
2——外部中断核虚空1
3——定时/计数器T1
4——串行口中断
5——定时/计数器T2
其它值预留。
C51编译器从绝对地址8m+3处产生一誉橘个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。
【例】编写一个用于统计外中断0的中断次数的中断服务程序
1 int x=02 void int0() interrupt 0 using 13 {4 x++5 }
using n修饰符
修饰符using n用于指定本函数内部使用的工作寄存器组,其中n的取值为0~3,表示寄存器组号。该修饰符可以省略,省略后系统自动选择
中断函数注意如下:
(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。
(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。
void sys_init(void)//UART TIMER0初始化{
TH0 = 0xB8TL0 = 0x00//20ms的时钟基准
//串口中断
TI=0
RI=0
SCON=0x50 //选用方式1
TMOD=0x20
TMOD = (TMOD &0xf0) | 1//MODE 1
TH1=0xfd //波特率唯迹为9600
TL1=0xfd
PCON=0x00 //倍频0x80
IE = 0x90 // EA ELVD EADC ES ET1 EX1 ET0 EX0
// IE = 0xb0 // EA XX ET2 ES ET0 EX0 ET1 EX1
TR1=1 //enable TIMER1
ES=1 //开串口开断
TR0=1//串口接收中断
ET0=0 //T0 中断
ET1=0 // T1 中断携歼
IT0=1EX0=1
EA=1
timer_1S_cnt=0
IGT=1
}
void receive(void) interrupt 4 using 1
{
if(RI)
{
// if(Rx<RxIn)
{*pBuf=SBUFpBuf++
// *(SystemBuf+Rx)=SBUF
//辩山冲 SystemBuf[Rx]=SBUF
Rx++
}
RI=0
}
}
有开定时器和AD的,你自己去掉吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)