单片机实验报告(二)
实验名称:
定时器及外部中断
南京理工大学紫金学院电光系
一、 实验目的
1、学习定时/计数器的应用;
2、学习外部中断技术的基本使用方法;
3、学习中断处理程序的编程方法。
二、 实验原理
(1)以P1口作为输出口,定时器实现1s定时,实现显示数的1s加1,外部中断0键盘外接BUTTON,实现对显示数快速加1的控制。
(2)系统板上硬件连线
把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。
把“单片机系统”A2区的INT0端口用导线连接到D1区的KEY1端口上;
三、 实验内容
利用定时器中断控制1s的输出,使用外部中断0使得显示的数加1.
程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
void delay()
{uint x,y;
for(x=100;x>0;x--)
for(y=110;y>0;y--);
}
uchar m,flag;
void main()
{
uchar a,b;
TMOD=0x01;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EX0=1; EX1=1; PX1=1; ET0=1; EA=1; 中断开启
TR0=1;
m=0; P1=0;
while(1)
{
while(flag==0); flag=0;
if(m==100) m=0;
m++;
a=m/10;
b=m+a*6;
P1=b;
}
}
void timer0() interrupt 1 using 0
{
uchar t;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(t<20) t++;
else { flag=1; t=0; }
}
void exter0() interrupt 0 using 1
{
if(INT0==0) delay();
if(INT0==0) flag=1;
}
void exter1() interrupt 2 using 2
{
if(INT1==0) delay();
if(INT1==0) m=0;
}
将编译好的程序下载到仿真电路中
四、 小结与体会
通过本次定时器中断实验,我对定时器的工作原理有了更加深入的理解,这也是建立在向同学请教的基础上。对于目前的我来说,学习不论过程,只看结果。当然,这次的实验也给了我很多启发,集思广益才是最好的。