单片机小程序:用定时器T0方式1,延时一秒怎么写?晶振为12

12hz

不管晶振频率是多少,一次就延时一秒是不可能的。
当晶振频率是12 M时,最大的延时是65.536毫秒。通常可以设置定时50毫秒,并设置为中断方式,这样,每次当定时到就中断一次,再对中断计数,中断计数20次就是一秒了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-30
定时器T0方式1 , 定时 50 mS , 再计数 20 次, 即定时中断 20 次 为 一秒,
( 定时器 12 MHz 晶振 最大定时 时间 为 65 mS 左右)
第2个回答  推荐于2016-11-09
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P0^0;
uchar T_Count = 0;
void main()
{
TMOD = 0x01;
TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
IE = 0x82;
TR0 = 1;
while(1);
}
void LED_Flash() interrupt 1
{
TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
if(++T_Count == 20)
{
LED = !LED;
T_Count = 0;
}
}
这个程序是1秒钟LED灯会亮与灭显示追问

TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
是怎么算出来一秒的?

追答

  那个是定时50MS

  方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。
  计数个数与计数初值的关系为:X=2的13次方-需要定时数

追问

TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
用16进制表示是什么

追答

TH0 = 0x3C;
TL0 = 0x0B0;

本回答被提问者采纳
相似回答