重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用C51写中断函数,和用汇编语言写中断程序,在用法上基本相同,都是中断源发出中断请求并允许中断时去执行中断程序的。并不能由主程序或其它程序调用。但中断程序的起始地址的定义方法不同。C语言用interrup n语句,n为中断源编号。而汇编语言则是用伪指令ORG直接定义的。如定时器T0的起始地址为000BH,则可写,ORG 000BH。
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、网站设计、外贸网站建设、察哈尔右翼中旗网络推广、成都小程序开发、察哈尔右翼中旗网络营销、察哈尔右翼中旗企业策划、察哈尔右翼中旗品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供察哈尔右翼中旗建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
将按键接到P3.2(INT0)或P3.3(INT1)
main(){
EA=1; //EA总中断控制,EA=0关,EA=1开
EX0=1;//INT0中断控制。0关1开,按键接P3.2用这个
EX1=1;//INT1中断控制。0关1开,按键接P3.3用这个
//默认情况下,直接使EX0=1或EX1=1来打开中断,INT0、INT1中断是电平触发的
while(1){
//主程序写这里
}
}
/** 外部中断0服务程序,按下接P3.2的开关k=0下面程序被执行 **/
int0()interrupt 0
{
//程序代码写这里面
}
/** 外部中断1服务程序,按下接P3.3的开关k=0下面程序被执行 **/
int1()interrupt 2
{
//程序代码写这里面
}
注意,上面的中断程序,如果执行完后,按键k还没有放开,则中断程序会再次被执行。为了防止这种情况发生,有以下几种处理办法以:
(1)可以在中断程序中进行判断,只有放开了按钮k=1了中断函数才返回。
(2)可以在进入中断后关闭中断,让EX0或EX1=0。然后在主程序中,需要的时候再开起。
是的,不同的中断源有不同的中断函数,但串口发送完和接收完共用一个中断函数,有两个中断标志。
例如定时器0中断:
void timer0_sev (void) interrupt 1
timer0_sev是中断程序名称,可自己定
interrupt 1指的是中断号,不能随意写
0 1 2 3 4 分别是外部中断0 定时器0 外部中断1 定时器1 串口中断。
有的还在中断序号后面写 using 0 using 1等,指的是用哪一个寄存器组,防止内存冲突,应该没什么用途
我编程写两个中断程序,专门注明 using 1 using 2 用不同的分组
可查反汇编代码,根本没有修改PSW寄存器的语句
两个中断都是 PUSH ACC PUSH PSW
中断结束前 POP ACC POP PSW
是指中断处理函数不能有输入参数也不能有函数返回。因为中断都是些硬件自动调用,没有程序去给他传递参数,也没有硬件去接收参数。
不过x86计算机的软中断可以有参数传递,不过他是用寄存器传递的。