- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
任务十中断1
日常中断的例子 单片机中断概念 中断技术的优点 分时操作 ——CPU可以同多个外设“同时”工作 实时处理 ——CPU及时处理随机事件 故障处理 ——电源掉电、存储出错、运算溢出 MCS-51中断系统 中断源 中断标志 中断允许 中断优先级 MCS-51中断系统结构 中断寄存器 MCS-51的中断系统——中断源 MCS-51的中断系统——中断标志 MCS-51的中断系统——中断允许 MCS-51的中断系统——中断优先级 TCON寄存器——T0和T1控制寄存器 TCON寄存器——T0和T1控制寄存器 SCON寄存器——串行口控制寄存器 IE寄存器——中断允许寄存器 IP寄存器——中断优先级寄存器 中断处理过程 当外部中断为电平触发方式时,CPU在每一个机器周期的S5P2期间对和引脚进行采样。若测得为低电平,则认为有中断请求,将外部中断请求标志位IE0或IE1置1;若测得为高电平,则认为没有中断请求或中断请求已撤除,将IE0或IE1清0。 在使用时,通常在这些地址单元中存放一条绝对转移指令,使程序转移到用户安排的中断服务程序入口处。 中断响应(以外部中断0为例) 中断响应 中断服务程序及例程 (1)建立单步执行的外部控制电路 (2)编写外部中断0的中断服务程序 void int0_int(void) interrupt 0 { EX0=0; //禁止外部中断0中断 添加中断服务程序 EX0=1;//允许外部中断0中断 } C51编译器支持在C源程序中直接嵌入中断服务程序,C51提供的中断函数定义语法如下: void 函数名(void) interrupt n using m { 函数体语句 } n对应中断源的编号,Keil C51支持最大值为31。 外部中断0 0 定时器0 1 外部中断1 2 定时器1 3 串行口中断 4 定时器2 5 Keil C51编译器用特定的编译器指令分配奇存器组。当前工作寄存器由PSW中RS1、RS0两位设置用using指定,“using”后的变量为一个0~3的整数。“using”只允许用于中断函数,它在中断函数入口处将当前寄存器组保留,并在中断程序中使用指定的寄存器组,在函数退出前恢复原寄存器组。 外部中断IN0端口接一开关,P1.0接一发光二极管,开关闭合接地时,发光二极管改变一次状态。 /* 说明:函数嵌套调用时一定要声明 采用查询方式 */ #includeAT89X52.h #includeintrins.h #define uchar unsigned char #define uint unsigned int sbit p10=P1^0; sbit p32=P3^2; void System_Init(); void System_Init() { EA=1; EX0=1; } ///////////////////////////////////// void Delay_ms(uchar delay) { uchar i; while(delay--) { for(i=125;i0;i--) {;} } } ////////////////////////////////// void Init0_Srv(void) interrupt 0 using 1 { {p10=!p10; } } //////////////////////////////////// void main() { System_Init(); while(1) { } } //////////////////////////////////// //////////////////////////////////// void main() { System_Init(); while(1) { } } //////////////////////////////////// 任务双键中断控制流水灯 任务目标: 1、利用两个按键实现流水灯的左移和右移,要求左移和右移的程序都写在中断服务程序中(包括延时程序);设置中断优先级,观察演示结果,得出结论。 2、利用两个按键实现流水灯的左移和右移,要求在中断服务程序中,调用左移和右移的子程序。(观察演示结果,得出结论) 任务双键中断控制流水灯 归纳总结 1、优先级高的可以打断优先级低的中断,优先执行,执行后,再执行低优先级的中断服务子程序。 2、在中断服务子程序中,不要调用子程序,中断服务子程序越小越好,最
文档评论(0)