实验三 定时器中断实验一、实验目的1、掌握 51 单片机定时器基本知识;2、掌握定时器的基本编程办法;3、学会使用定时器中断。二、实验内容1、运用定时器中断产生频率为 10HZ、5HZ 的方波,并在示波器观察波形;2、运用定时器设计一种秒表,计数范畴为 0—59,并在数码管实时显示。三、实验原理例子:当晶振为 12M 时机器周期为 1 微秒,要实现 2 毫秒的定时,需要个机器周期,对于 51 单片机内部定时器来说,最大只能定时 65536 个机器周期,能定时 65.535 毫秒。如果规定定时更长,必须借助软件循环进行扩展。例如:当需要得到 500 毫秒的定时中断定时,设定时为 50 毫秒时,再扩展 10 倍可得到 500 毫秒的定时,选择模式 1,每个 50ms 中断一次,设初值为 X,根据下面公式,可求得 X 的值。有关定时计数器的特殊功效寄存器,请参考课本。四、实验环节1、使用 Proteus 设计仿真原理图;2、使用 Keil 设计程序;3、联合调试仿真。五、实验成果1、运用定时器设计一种秒表,计数范畴为 0—59,并在数码管实时显示的程序2、运用定时器中断产生频率为 10HZ、5HZ 的方波,并在示波器观察波形的程序#include#define uchar unsigned char sbit aa= P0^0; sbit cc=P0^1;uchar m100=0,m200=0,second,i=0; void main(){ TMOD=0x01; //定时器 0 工作方式为 1 TH0=(65536-50000)/256; //装初值 TL0=(65536-50000)%256; EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1; //启动定时器 while(1) { P2=i/10; P3=i%10; } //等待中断}void timer0() interrupt 1 ////100ms 200ms 1s{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; m100++ ; m200++ ; second++; if(m100==2) //12M 晶振 定时 5*50MS=250MS { m100=0; aa=!aa; } if(m200==4) //12M 晶振 定时 5*50MS=250MS { m200=0; cc=!cc; } if(second==20) //12M 晶振 定时 5*50MS=250MS { second=0; i++; if(i>60) i=0; }}实验成果波形图六、实验心得 开始实验的时候,什么都不懂,通过老师的指导,做出了实验。