单片机延时1秒如何计算要最详细一点的要过程用C语言

如题所述

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个回答  2017-04-13
#include <reg51.h>
void delay_ms(unsigned int ms)
{
  unsigned int a;
  while(ms--)     //while()内的ms不为0,即为真
  for(a=0;a<123;a++);
}
void main()
{
while(1)
  {
  delay_ms(1000);
  P1=~P1;
  }
}

本回答被网友采纳

单片机延时1秒如何计算要最详细一点的要过程用C语言
MOD = 0x10; \/\/定时器1工作于模式1,(用工作于模式2也可以,而且更 简便)TR1=1; \/\/使能定时器1 ET1=1; \/\/开中断 EA=1; \/\/开全局中断 while(1){ if (IsOneSecondReach){ IsOneSecondReach = 0;\/\/do something,如果一秒延时标志为1,则清除此标志,等待下次1秒,在此处 \/\/执行需要执行...

哪位高手知道 单片机精确延时1秒得C语言子程序 谢谢了
LOOP4:DJNZ 70H,LOOP4 定时器延时:晶振12MHZ,延时1s,定时器0工作方式为方式1 DELAY1:MOV R7,#0AH ;;晶振12MHZ,延时0.5秒 AJMP DELAY DELAY2:MOV R7,#14H ;;晶振12MHZ,延时1秒 DELAY:CLR EX0 MOV TMOD,#01H ;设置定时器的工作方式为方式1 MOV TL0,#0B...

AT89C51单片机,如何实现延迟一秒
其实可以用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期 机器周期=12\/n(n指晶振频率),假设你要定时的时间为M 那么定时的初值为:M\/机器周期=初值;TH0=(65536-初值)%256;TL0=(65536-初值)\/256;将(65536-初值)...

单片机的程序怎么延时1s?
具体计算过程如下:每个指令需要执行3个机器周期;延时1s需要多少个指令周期?答案是12,000,000(晶振频率)\/3(每个指令周期需要的机器周期)=4,000,000(每秒钟可以执行的指令周期数),因此需要执行4,000,000条指令才能完成1秒的延时;因为每个指令需要执行3个机器周期,所以需要执行4,000,000\/3=1,...

51单片机中,写个延时函数,延时1ms,该怎么写,为什么?
用汇编语言写可以精确计算,但有时想拼出整数的ms或10ms也不容易,计算方法如下图说明:而C语言靠经验和实验得来的,如下面程序 如果不准(与晶振频率有关),调K的值,,软件仿真查看,直到大致准确,想更精确用定时器 void delay(unsigned char i) \/\/延时程序{ unsigned char i,k;for(j=i;j...

求一个1ms的单片机C语言延时程序
for(c=x;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--);} 学过标准C就知道了,char 和 int 是可以相互转换的,char的取值范围是-128~+127 unsigned char 的是0~255 可以用unsigned int啊,我一般都是用char的,用unsigned int的话占的字节比较多,运行速度也没char那么快,计算...

求一个1ms的单片机C语言延时程序
for(c=x;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--);} 学过标准C就知道了,char 和 int 是可以相互转换的,char的取值范围是-128~+127 unsigned char 的是0~255 可以用unsigned int啊,我一般都是用char的,用unsigned int的话占的字节比较多,运行速度也没char那么快,计算...

单片机c语言编写产生1秒定时的程序,怎么写?
如果是51单片机的话其实很简单的,这里假设晶振频率是12M(一般都是的),你可以选用定时器0,工作在工作状态2,因为这个状态下装入初始值几乎不需要时间,所以定时精确,也就是8位预置数状态,将初始值设为6,这样每次定时就是250微秒,在中断程序中定义一个静态变量,每次中断加一,这样当这个变量值为...

单片机C语言编程中,编一个延时约1s的语句
每一遍,如果是1us,才能是延时约1s。但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。在编写延时函数之前,首先确认一下系统对晶振的分频系数,从而确定每个单周期指令执行所需的时间,一般的单片机都将指令执行周期设置为1us,这样就可以写一个比较接近1秒的延时函数了。

单片机延时c语言程序怎么写?
在单片机编程中,实现延时功能可以通过多种方式,其中C语言是一种常用的选择。一种基本的延时函数使用了循环结构,例如以下代码:void delay(){ uint i;for(i=0;i<20000;i++);} 这里,`20000`是一个预定义的值,用于控制延时的长度。要计算这个函数的具体延时时间,可以将其转换为十六进制形式,即...

相似回答