资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
中断编程实例1 用按键控制发光二极管从D1到D8循环点亮点亮顺序INT0ORG 0000HLJMP STAR ;主程序入口地址ORG 0003HLJMP STEPL ;外部中断 0的入口地址ORG 0100HSTAR:MOVP1,#0 ;点亮全部发光二极管 MOV R1,#0FEH ;R11111 111OBSETB EXO ;打开外部中断0 SETBIT0 ;下降沿触发SETB EA ;开放所有中断 LOOP:SJMPLOOP :等待按键STEPL:MOVA,R1 ;取原显示位MOVP1,A :点亮发光二极管 RLA ;A左移一位 MOVR1,A ;保存现显示位 RETI ;返回中断 END 增加一个按键控制发光二极管从D8到D1循环点亮INT0INT1ORG 0000HLJMP STARORG 0003HLJMP STEPL ORG 0013HLJMP STEPR ORG 0100HSTAR: MOV R1,#0FEH MOV R2,#07FH SETB EX0 SETBIT0 SETBEX1 SETBIT1SETB EA LOOP: SJMPLOOP中断服务程序STEPL:CLREA MOVA,R1 MOVP1,A RLA MOVR1,A SETBEA RETISTEPR:CLR EA MOVA,R2 MOVP1,A RRA MOVR2,A SETBEA RETI水箱水位控制-查询方式例:水池水位自动控制装置。要求:水位B停放电路中:1)输出:P1.0=1时,M放水; P1.0=0时,M关2)输入:水位B, T1、T2导通 P1.1=0,P1.2=0A水位B, T1止,T2通 P1.1=1,P1.2=0MOVP1,#00000110 ;P1.0输出,P1.1、P1.2输入 L1: JNB P1.2, L1 ;查询P1.2=“0”等待SETB P1.0 ;否则,置“1”P1.0 开ML2: JB P1.1, L2 ;查询P1.1 = “1”等待CLR P1.0 ; 否则,清P1.0 关MSJMP L1 ;返回继续查询 查询方式只能完成单独任务,存在CPU工作效 率低下问题 解决方法采用中断方式ORG 0003HLJMP INTPORG 0040HCLR P1.0CLR IT0 SETB PX0 SETB EA SETB EX0 ORG 0100H INTP:JB F0, FSCLR P1.0 ;F0=0,关水CPL F0RETI FS: SETB P1.0 ; F0=1,放水CPL F0RETI外部中断扩展 8051单片机有两个外部中断请求输入端(INT0和 INT1) 实际应用中,若外部中断源有两个以上,则需要 扩展外部中断源 利用定时器扩展外部中断源 中断加查询扩展外部中断源利用定时器扩展外部中断源 8051单片机有两个定时器,具有两个内部中断标志和外部 计数输入引脚(p3.4,p3.5) 将外部中断源信号接至T0或T1外部计数输入引脚 该定时器的溢出中断标志及中断服务程序作为扩充外 部中断源的标志和中断服务程序当定时器设置为计数方式2时(重置),计数初值设置为满量程FFH 一旦外部信号从计数器引脚输入一个负跳变信号,计数器加1 即产生溢出中断,从而转去处理该外部中断源的请求T0(T1 )外部中断 请求信号( 脉冲)中断加查询扩展外部中断源 每一根中断输入线可以通过“线或”的关系连接多个外部中 断源,同时利用输入端口线作为各个中断源的识别线 具体线路如图所示中断加查询扩展外部中断源电路如图所示,当CPU检测到 的中断请求信号时, 由P1口查询判断中断源,点亮相应的发光二极管ORG 0000HAJMP MAIN ;设主程序入口ORG 0003H ;INT0中断入口AJMP LL ;转中断服务程序ORG 0100H ;主程序起始地址MAIN: MOV P1,#0FFH ;P1口置输入SETB IT0 ;设 INT0 边沿触发SETB EX0 ;允许INT0 中断SETB EA ;开中断AJMP $ ;等待中断ORG 0200HLL: JNB P1.0, LED1 ;IN0没中断,再判断下一 个CLR P1.4 ;IN0中断,L0亮 LED1: JNB P1.1, LED2 ;IN1未中断CLR P1.5 ;IN1中断,L1亮 LED2: JNB P1.2, LED3 ;IN2未中断CLR P1.6 ;IN2中断,L2亮 LED3:JNB P1.3, END0 ;IN3未中断CLR P1.7 ;IN3中断,L3亮 END0:RETI ;返回END在中断服务程序中查询出租车计价器计程方法是车轮每运转一圈产生一个负脉冲,从 外中断(P3.2)引脚输入,行驶里程为轮胎周长运转圈数,设轮 胎周长为2m,试实时计算出租车行驶里程(m),数据存32H、 31H、30H。ORG 0000H;复位地址LJMP STAT;转初始化ORG 0003H;中断入口地址LJMP INT;转中断服务程序ORG 0100H;初始化程序首地址 STAT: MOV SP, #60H ;置堆栈指针SETB IT0 ;置边沿触发方式MOV IP,#01H;置高优先级MOV IE,#81H;开中MOV 30H,#0;里程计数器清0MOV 31H,#0MOV 32H,#0 AJMP $ ;等待中断ENDORG 0200H ;中断服务子程序首地址INT: PUSH Acc ;保护现场PUSH PSWMOV A,30H;读低8位计数器ADD A, #2;低8位计数器加2mMOV 30H,A;回存CLR AADDC A,31H;中8位计数器加进位MOV 31H,A;回存CLR AADDC A,32H;高8位计数器加进位MOV 32H,A;回存POP PSW ;恢复现场POP Acc RETI;中断返回
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号