实验3 外部中断 程序框架.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验3 外部中断 程序框架

实验三 定时中断实验 一、实验、实验 三、实验程序框架 1. 用外部中断0测量负跳变信号的累计数,同时在LED数码管上显示出来 用中断方式做计数器 。 //实验一: 用外部中断0测量负跳变信号的累计数,同时在LED数码管上显示出来。 #include #define uchar unsigned char //0-9各数字的数码管段码数组 uchar counter 0;// 全局变量counter作为计数变量 void main ;// 开总中断 // 开外部中断1中断 // 下降沿触发外部中断0 //等待中断(中断服务程序入口) void int_0 interrupt 0 //每触发一次外部中断,计数变量加1 //如果计数变量加到10,则清0,重新计数 P1 led[counter]; 2.用外部中断改变流水灯的方式。(根据原理图,低电平灯亮) 中断前:开始时,P0.0~P0.7的8个灯依次点亮。 外部中断0:P0.0~P0.7的左右4个灯闪烁亮8次 外部中断1: P0.0~P0.7的8个灯间隔闪烁8次 改变中断优先级和保护现场,观察运行结果 实验二要求: 初始状态为P0.0~P0.7的8个LED显示灯依次循环点亮;外部中断0服务程序为8个LED灯,左4个,右4个闪烁8次,外部中断1服务程序8个LED灯,间隔闪烁8次。 以下两种方案: ⑴ 设定外部中断0为高优先级,先执行外部1中断,过程中用外部0中断来将其中断,反之不行。注意保护现场。 ⑵ 设定外部中断1为高优先级,先执行外部0中断,过程中用外部1中断来将其中断,反之不行。注意保护现场。 //实验二: 用外部中断改变流水灯的方式 #include #define uchar unsigned char void delay uchar i ; uchar lamp[] 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 ;//将P0口,P0.0~P0.7依次亮的值放在数组中,注意二极管连接方式,为共阳极接法,引脚为低电平,二极管才会亮。 void delay uchar i //延时函数 uchar j,k; for k 0;k i;k++ for j 0;j 255;j++ ; void main uchar a; EA 1; //开放总中断 EX0 1; //允许使用外中断0 IT0 1; //选择下降沿来触发外中断 EX1 1; //允许使用外中断1 IT1 1; //选择下降沿来触发外中断 /*IP 0x01;//中断优先级别设定,设定外部中断0为高优先级中断,能打断其他中断服务程序; // 实验效果为按K2进入外部1中断后,只要按K1便能打断1中断*/ IP 0x04;//中断优先级别设定,设定外部中断1为高优先级中断,能打断其他中断服务程序,//实验效果为按K1进入外部0中断后,只要按K2便能打断0中断 while 1 for a 0;a 8;a++ //开始时,P0.0~P0.7依次亮 P0 ~lamp[a];//将数组中对应P0.0~P0.7依次亮的值送P0口 delay 250 ; void int0 interrupt 0 //外中断0的中断编号为0 K1按钮按下时左右4个灯闪烁亮八次 uchar a,b; EA 0;//关中断 b P0;//保护现场 EA 1;//开中断 for a 0;a 8;a++ P0 0xf0; delay 250 ; P0 0x0f; delay 250 ; EA 0;//关中断 P0 b;//恢复现场 EA 1;//开中断 void int1 interrupt 2 //外中断1的中断编号为2 K2按钮按下时8个灯间隔闪烁8次 依照上列interrupt0中断函数来编写本中断函数 3.使用定时器T1的方式2来控制P0.0、P0.1引脚的两个LED分别以1s和2s的周期闪烁。(调试下列程序,在错误行后面注明错误及改正方法): #include #define uchar unsigned char; sbit D0 P1^0; //定义位名称(定义P0.0引脚位名称为D0) 有时会如下注释:将D0定义为P0.0引脚: sbit D1 P1^1; uchar a,b; void main EA 1; ET1 1; TMOD 0x20; TL1 6; TH 6; TR1 1; While TF1! a 0; b 0; while 1 ; void t1 interrupt 1 a++; b++; if a 1000 D0 ~D0 a 0; if b 4000 D1 ~D1; b 0;

文档评论(0)

sb9185sb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档