专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

51单片机定时器0工作在模式1

作者:佚名   来源:本站原创   点击数:  更新时间:2009年06月06日   【字体:

51单片机的定时器0工作在模式1,溢出时间为50ms,每20次中断,相当于定时1秒钟。秒变量second实现秒计数,采用两位数码管显示秒计数值。源程序如下:
//本程序来源:51hei单片机
#include < AT89X51.H>
unsigned char   code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xF8,0x80,0x90};      //数码管七段译码表
unsigned char second;       //定义秒变量
unsigned char tcount;          //定义中间变量
void main(void)                 //主函数
{ TMOD=0x01;                 //定时器0工作在模式1,GATE=0,C/T=0,16位模式
TH0=(65536-50000)/256;        //设定时器高8位初值  0x3C=60(10)
TL0=(65536-50000)%256;       //设定时器低8位初值   0xB0==176(10)
TR0=1;                      //启动定时器0
ET0=1;                      //允许定时器0中断
EA=1;                       //使能总中断
tcount=0;                 //设置中间变量初值
second=0;              //设置秒变量初值
P1=dispcode[second/10];        //显示秒变量的十位
P0=dispcode[second%10];      //显示秒变量的个位
while(1);              //无限循环,没有循环体
}
void t0(void) interrupt 1 using 0     //定时器0中断服务程序
{
tcount++;                       //每次中断,中间变量tcount加1
if(tcount==20)                 //若20次中断后,执行如下语句
{
tcount=0;                     //将中间变量清0
second++;                   //使秒变量加1
if(second==60)           //如果秒变量等于60
{ second=0; }               //将秒变量清0
P1=dispcode[second/10];        //将秒变量的十位送P1口显示
P0=dispcode[second%10];      //将秒变量的个位送P0口显示
}
TH0=(65536-50000)/256;       //设置定时器0高8位初值
TL0=(65536-50000)%256;      //设定定时器0低8位初值

 
 

关闭窗口