单片机延时1秒如何计算要最详细一点的要过程 用C语言写的 晶振为12M 主要是计算过程和算法

如题所述

unsigned char rSecondCount; //秒计时数
unsigned char rMinuteCount; //分计时数
sbit IsOneSecondReach;

sbit Pulse_Sec=P1^0;
sbit Pulse_Min=P1^1;

main()
{
rSecondCount=0;
rMinuteCount=0;
TH1=0x3C;
TL1=0xAF; //定时器50ms产生一次中断 (FFFF-3CAF)us
MOD = 0x10; //定时器1工作于模式1,(用工作于模式2也可以,而且更 简便)
TR1=1; //使能定时器1
ET1=1; //开中断
EA=1; //开全局中断
while(1)
{
if (IsOneSecondReach)
{
IsOneSecondReach = 0;
//do something,如果一秒延时标志为1,则清除此标志,等待下次1秒,在此处
//执行需要执行的程序
}
}
}

/* 定时器50ms产生一次中断 */
void Timer(void) interrupt 3
{
/* 重新载入T1参数 */
TH1=0x3C;
TL1=0xAF;

/* 一秒累加 */
rSecondCount++;//秒计时+1
if (rSecondCount==20) //1sec到,50ms*20
{
IsOneSecondReach = 1;
}
}
/**************************************************************/
脉冲宽度为50ms,如果有其他要求的话,修改T1参数和“秒分”的参数凑下就行了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-21
用定时器1啊,12M晶振的话最大可以延时65点几ms,然后你定个初值让它定时50ms,再用一个变量累计定时函数执行的次数有20次,就是1秒了
第2个回答  2008-12-21
我会用汇编
相似回答