在编写串行口中断服务程序时,修饰符interrupt m中m的取值应为多少

在编写串行口中断服务程序时,修饰符interrupt m中m的取值应为多少,第1张

interrupt m修饰符

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的,你自己去掉吧


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12563664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存