- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
参考课件2中断编程实例文件
中断原理 中断的定义 计算机在突发事件到来时, (中断申请) 先中止当前正在进行的程序, (中断响应) 转而去处理突发事件, (中断服务) 待处理完成后,再返回到原先被中止的程序处,继续执行下去。 (中断返回) 中断的优点 提高CPU的效率 实现实时处理 可以及时处理故障 中断服务/处理过程 中断的处理过程 1.中断当前程序并保护断点 2.转入中断服务入口 3.保护现场 4.执行中断服务程序 5.恢复现场 6.中断返回 参考程序2 参考程序 if (run) if(dir) for(i=0;i=3;i++) { P2=led[i];//自上而下流动 delay(200); } else for(i=4;i=1;i--) { P2=led[i - 1];//自下而上流动 delay(200); } else P2=0;//灯全灭 } } 例:INT0 中断计数-pw eg-INT0及INT1中断计数 void main() { IT0 = 1; //? IT1 = 1;//? PX0 = 1;//? IE = 0x85;//? while(1) { if(k3 == 0) Count_A = 0; if(k4 == 0) Count_B = 0; Show_Counts(); } } void EX_INT0() interrupt 0 { Count_A++; } void EX_INT1() interrupt 2 { Count_B++; } #include reg52.h #define uchar unsigned char #define uint unsigned int sbit k3 = P3^4;//清0键 sbit k4 = P3^5; uchar code DSY_CODE[ ]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff//共阳极段码 }; uchar code Scan_BITs[ ]= { 0x20,0x10,0x08,0x04,0x02,0x01 // 阳极位码 }; uchar data Buffer_Counts[ ]={0,0,0,0,0,0};//显示缓冲,前3位,后3位 uint Count_A=0; uint Count_B=0; void DelayMS(uint x) { uchar t; while(x--) { for(t=0;t120;t++); } } void Show_Counts() { uint i; Buffer_Counts[2] = Count_A / 100; Buffer_Counts[1] = Count_A % 100 /10; Buffer_Counts[0] = Count_A % 10; if(Buffer_Counts[2]==0) { Buffer_Counts[2] = 0x0a; if(Buffer_Counts[1]==0) { Buffer_Counts[1]=0x0a; } } Buffer_Counts[5] = Count_B / 100; Buffer_Counts[4] = Count_B % 100 /10; Buffer_Counts[3] = Count_B % 10; if(Buffer_Counts[5]==0) { Buffer_Counts[5] = 0x0a; if(Buffer_Counts[4]==0) { Buffer_Counts[4]=0x0a; } } for(i=0;i6;i++) { P2 = Scan_BITs[i]; P1 = DSY_CODE[Buffer_Counts[i]]; DelayMS(1); } } Exercises-5.1 通过中断接口P3.2连接的独立按键测试,按一次P1口的8个LED灯流水显示,再全灭。 通过中断接口P3.3连接的独立按键测试, P0口的8个数码管动态显示“EA ET1”一段时间,然后再全灭。 通过中断接口P3.3连接的独立按键测试, P0口的8个数码管中,刚开始全黑,按一次按键后,有3个数码管显示0,再次按下后,显示1,以后显示2到9,再循环到灭。 #includereg52.h main() { P1=0x55; //P1口初始值 EA=1; //全局中断开 EX0=1;
文档评论(0)