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

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

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

51单片机定时器0工作在模式2,INT0(P3.2)引脚控制定时/计数器定时计数,定时/计数器0溢出中断,使P2.0引脚相连的LED灯闪烁。定时/计数器0溢出中断为250μs,与P2_0引脚相连的LED灯每2s亮灭一次。源程序如下:
//51hei单片机网原创作品,版权所有.
#include "reg_c51.h"
#define reload_value 0x06                //计数值为250,若时钟频率为12MHz,相当于250μs
unsigned char hex[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xC6,0xA1,0x86,0x8E};  //数码管十六进制译码表
unsigned char n,nn;      //定义中断次数变量
void main(void)               //主函数
{
TMOD &= 0xF0;        //定时/计数器0工作在模式2,8位重装模式
TMOD |= 0x0A;          //GATE0=1; C/T0#=0; M1=1; M0=0;
TL0 = reload_value;    //设置初值
TH0 = reload_value;   //设置初值
ET0=1;       //允许定时/计数器0中断
EA=1;         //允许总中断
TR0=1;       //启动定时/计数器0
while(1)     //无限循环
{
P1=hex[n/10];      //显示中断次数变量n的高位
P0=hex[n%10];     //显示中断次数变量n的低位
}} 
void it_timer0(void) interrupt 1  //定时/计数器0中断函数
{
nn=nn++;      //每次中断nn加1,每两次中断间隔250μs
if (nn==40)    //nn=40,就是中断40次,相当于40*250μs =10ms
{
nn=0;
n++;              //每10ms,n加1,
if(n==100)    //n=100,相当于时间10ms*100=1s
{n=0;
P2_0 = ~P2_0;   //每间隔1s,将P2_0引脚电平取反,使相连的LED灯闪烁
}}}
 

关闭窗口