51单片机之定时器

[size=large][b]定时1秒级联计算方法:
首先明确 1、机械周期= 1/晶振频率(12MHZ) * 12 =1μS
2、了解计算定时最大时间:2^16 *1μS=65.536ms
3、计算50ms 对应的16进制值
50ms/1μs=50000=0xC350
4、设置定时器工作为16bit 2^16= 0xFFFF
设置初值:T0=0xFFFF-0xC350=0x3CAF 即 从这个初始值开始,累计到最高 值时,用时50ms
5、累计20个50ms 得到1s 定时周期[/b][/size]


#include<reg51.h>
//共阳极数码管真值表
unsigned char code LedChar[]={
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};

void main()
{
unsigned int i=0;
unsigned char cnt=0;
unsigned int tcnt=0;
TMOD = 0x01; //设置工作模式
TH0 = 0xB8; //定义初值 高字节
TL0 = 0x00; //定义初值 低字节
TR0 = 1; //开始计数 从初值开始计数++

while(1)
{
if(TF0==1) // 从初值累计到最高时间0xFFFF 触发一次TF0 溢出标志位 ,先计算20ms 多少个机器周期 ,并且转成16进制 ,
{
TF0=0;
TH0=0xB8;
TL0=0x00;
tcnt++;

if(tcnt>=50)
{
tcnt=0;
if(cnt<8)
{
P0=~(0x01<<cnt); //0000 0001->1111 1110 0000 0010 ->1111 1101
P2=LedChar[cnt+1];
}
else if(cnt>=8)
{
P0= ~(0x80>>(cnt-7)); //1000 0000->0111 1111
P2=LedChar[cnt-7];
}

cnt++;

if(cnt>=15)
{
cnt=0;
}
}
}
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值