《单片机技术习题课5、6、7章.ppt》由会员分享,可在线阅读,更多相关《单片机技术习题课5、6、7章.ppt(20页珍藏版)》请在三一办公上搜索。
1、单片机技术习题课,(第五、六、七章),第五章 单片机中断系统,5.利用外部中断源INT0、INT1,实现中断及中断嵌套,设INT1为高优先级。如图5-1所示,用两个按键S1和S2,分别接到P3.2和P3.3引脚,按动两个中断按键,产生两个不同的中断。先按动低优先级中断源S1键,紧接着按动高优先级按键S2键,将产生中断嵌套。设中断为边沿触发方式,试编写程序,实现上述功能,无中断请求时,两个二极管全灭,低优先级中断请求时,LED1亮5秒,高优先级中断时,LED2亮5秒。,中断相关寄存器,05H,85H,04H,C语言源程序,#include sbit P1_0=P10;sbit P1_1=P11;
2、sbit P3_2=P32;sbit P3_3=P33;void delay(void)/5秒钟延时函数unsigned int m,n;for(m=620;m0;m-)for(n=1000;n0;n-);,void main(void)TCON=0X05;/外部中断为边沿触发方式IE=0X85;/开外部中断1,2IP=0X04;/int1为高优先级中断,int0为低优先级中断,P1_0=1;/两个LED灯熄灭P1_1=1;while(1);/等待中断,C语言源程序,void int0_int(void)interrupt 0P1_0=0;delay();P1_0=1;void int1_in
3、t(void)interrupt 2P1_1=0;delay();P1_1=1;,C语言源程序,Proteus仿真,第六章 MCS-51单片机的定时器/计数器,10.用方式1设计两个不同频率的方波,P3.6输出频率为200Hz,P3.7输出频率为 100Hz,晶振频率12MHz。,分析:定时时间:频率200Hz,周期=5ms,则定时2.5ms;工作方式:方式1,TMOD=初值:x=216-2500=65536-2500=63036D=0F63CH所以:TH1=0F6H;TL1=3CH也可以写成:TH1=63036/256,TL1=63036%256,10H,#include sbit P3_6
4、=P36;sbit P3_7=P37;void main()TMOD=0 x10;TL1=0 x3c;TH1=0 xf6;TR1=1;ET1=1;EA=1;F0=0;while(1);,void serve()interrupt 3 TL1=0 x3c;TH1=0 xf6;P3_6=P3_6;if(F0=0)F0=1;else F0=0;P3_7=P3_7;,Proteus仿真,15设fosc=12MHz。试编写一段程序,对定时器T1初始化,使之工作在模式2,产生200s定时,并用查询T1溢出标志的方法,控制P1.1输出周期为2ms的方波。,分析:工作方式:T1模式2,TMOD=20H。初值:
5、x=28-200=256-200=56方波周期2ms,则每定时5次P1.1电平翻转一次。,TF1=0;i+;if(i=5)P1_1=P1_1;i=0;,#include sbit P1_1=P11;void main()unsigned char i,j;TMOD=0 x20;TL1=56;TH1=56;TR1=1;while(1)while(TF1=1),Proteus仿真,第七章 MCS-51单片机的串行口,3简述串行口接收和发送数据的过程。,答:发送时,执行一条将数据写入发送缓冲器SBUF的指令,启动数据发送,发送完毕硬件将中断标志TI置1;接收时,用软件置REN=1、RI=0,即启动接
6、收功能,当从RXD引脚接收到一帧数据后由硬件使中断标志RI置1。,7设fsoc=11.059 2MHz,试编写一段程序,其功能为对串行口初始化,使之工作于方式1,波特率为1 200b/s;并用查询串行口状态的方法,读出接收缓冲区的数据并回送到发送缓冲区。,分析:串口工作方式1,允许接收,则SCON=波特率1200b/s,设T1工作于模式2,则:TMOD=初值x=,50H,20H,E8H,while(RI=0);RI=0;ACC=SBUF;SBUF=ACC;,#include void main()SCON=0 x50;TMOD=0 x20;TH1=0 xE8;TL1=0 xE8;TR1=1;,
7、Proteus仿真,12当89C52串行口按工作方式1进行串行数据通信时,假定波特率为4800b/s,以中断方式传送数据,请编写全双工通信程序。,分析:串口工作方式1,允许接收,则SCON=50H。波特率4800b/s,设T1工作于模式2,则:TMOD=20H,初值x=FAH,#include unsigned char data txbuf;unsigned char data rebuf;void main()SCON=0 x50;TMOD=0 x20;,TH1=0 xFA;TL1=0 xFA;TR1=1;ES=1;EA=1;SBUF=txbuf;,void serial_server()interrupt 4if(TI)TI=0;elseRI=0;rebuf=SBUF;,