目录
1、概述
2、原理
3、硬件和软件设备
4、步骤
5、结果(分析)
1、概述
联系程序设计,并熟悉外部中断和按钮的使用;掌握单片机外部中断程序的设计方法;在外部中断0处接一个开关,作开始按钮,按下后8个LED灯依次闪烁(在中断服务程序中实验),设计一个停止按钮,按下后灯停止闪烁;
2、原理
(1)P3口是位准双向口,具有双重功能:第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可定义为输入输出;第二功能可以作为外部中断输入线。
(2)外部中断的产生的条件:中断允许寄存器IE:图片
外部中断源允许中断(中断0:EX0=1,中断1:EX1=1);CPU开中断(EA=1);外部中断方式CPU发出中断申请。
(3)外部中断方式选择:控制TCON:
ITO是选择文字则外部中断0请求(INTO)边沿触发方式或电平触发方式的控制位。前一方式IT0=1,后一方式ITO=0
IT1是选择外部中断1请求(INT1) 为边沿触发方式或电平触发方式的控制位。前一方式IT1=1,后一方式IT1=0,本实验采用了电平触发方式。
(4)通过特殊功能位sbit对两个开关进行位定义,为后续程序做准备。(sbit是指8051片内特殊功能寄存器的可寻地址位)
3、硬件和软件设备
(1)Protues软件中器件:AT89C51芯片、开关、电阻、电容、晶振、发光二极管、直流电源、开关。
(2)Keil软件中外部中断相关程序设计。
4、步骤
(1)先画一个程序框图,有一个大体思路。
(2)对硬件进行设计:选元件、接线、调试等一系列内容。
(3)对软件进行编程:为了实现实验目标,先在程序中写出相关头文件,本实验用到了字符循环左移,所以用到了#include ;然后定义变量,实验用到了开关,对开关进行了位定义;因为要在外部中断0处接一个按钮,作开始按钮,按下后8个LED灯依次闪烁(在中断服务程序中实验),设计一个停止按钮,按下后灯停止闪烁;在主函数中用到了if语句实现了对按钮的控制,让八个灯依次闪烁,用中断函数得到了实现。然后编译调试生成.hex文件,程序设计:
#author:hewang
#qq:207962168#include#include#define uchar unsigned char#define uint unsigned intsbit k1=P3^2;sbit k2=P3^3;char i=100;void main() //主函数
{ if (k1==0){TMOD=0x01;TH0=0Xee;TL0=0x00;P1=0xfe;EA=1;ET0=1;IT0=0;TR0=1;while(1){;}}
else {P1=0Xff;}}void time0() interrupt 1 //T0的中断函数
{TH0&#61;0xee; //重新赋初值TL0&#61;0x00;i--;if(i<&#61;0){P1&#61;_crol_(P1,1) ; //左移1位i&#61;100; //重置循环次数}else if(k2&#61;&#61;0){P1&#61;0xff;}}
&#xff08;4&#xff09;对Protues中电路和Keil进行联调。硬件设计&#xff1a;
5、结果&#xff08;分析&#xff09;
&#xff08;1&#xff09;结果&#xff1a;对Protues进行仿真&#xff1a;当把外部中断0处的按钮按下时&#xff0c;8个LED灯依次闪烁。当把另一个按钮按下后灯停止闪烁。
&#xff08;2&#xff09;分析&#xff1a;A、在软件中用到了分支结构&#xff0c;实现了对硬件中按钮的控制&#xff0c;且达到了预期目标。
B、用软件中中断函数实现了对硬件中8个LED依次闪烁目标的实现。
C、由于是电平触发&#xff0c;所以在按下按键的时候&#xff0c;会有好多灯一起亮&#xff0c;比如低电平&#xff0c;在低电平这段时间里&#xff0c;会不断地请求中断&#xff0c;所以就会进入很多次中断&#xff0c;在加上请求中断的速度快和LED灯有一定的的余晖&#xff0c;所以肉眼看起来就好像灯全是亮的。
D、为了让人眼能看清楚LED灯的变换&#xff0c;控制8只LED灯每0.5秒闪一次&#xff0c;本实验用到了定时器/计数器T1、T0的编程应用。