void Timer0_Delay (int ms)
{
int i; // 毫秒计数器
TCON &= ~0x30; // 停止定时器T0并清除溢出标志
TMOD &= ~0x0f; // 配置定时器T0为16位模式
TMOD |= 0x01;
CKCON |= 0x08; // 定时器T0计数系统时钟
for (i = 0; i < ms; i++) { // 数毫秒
TR0 = 0; // 停定时器T0
TH0 = (-SYSCLK/1000) >> 8; // 设置定时器T0 1ms溢出
TL0 = -SYSCLK/1000;
TR0 = 1; // 启动定时器T0
while (TF0 == 0); // 等待溢出
TF0 = 0; // 清除溢出标志
}
}结石钱老板分手
{
int i; // 毫秒计数器
TCON &= ~0x30; // 停止定时器T0并清除溢出标志
TMOD &= ~0x0f; // 配置定时器T0为16位模式
TMOD |= 0x01;
CKCON |= 0x08; // 定时器T0计数系统时钟
for (i = 0; i < ms; i++) { // 数毫秒
TR0 = 0; // 停定时器T0
TH0 = (-SYSCLK/1000) >> 8; // 设置定时器T0 1ms溢出
TL0 = -SYSCLK/1000;
TR0 = 1; // 启动定时器T0
while (TF0 == 0); // 等待溢出
TF0 = 0; // 清除溢出标志
}
}结石钱老板分手
===================================================================
系统时钟是11.059MHz
那么定时器每走一次是1/11.059us,那么5ms就要n=5000/(1/11.059)次,向定时器(若是16位)初值就是65536-n.
===================================================================
那么定时器每走一次是1/11.059us,那么5ms就要n=5000/(1/11.059)次,向定时器(若是16位)初值就是65536-n.
===================================================================
void Timer0Ebable(void)
{
EA = 0;
TMOD = (TMOD&0xF0)|0x01;
TL0 = (65535 - 2000)%256;
TH0 = (65536 - 2000)/256;
TR0 = 1;
ET0 = 1;
EA = 1; 男人面相
{
EA = 0;
TMOD = (TMOD&0xF0)|0x01;
TL0 = (65535 - 2000)%256;
TH0 = (65536 - 2000)/256;
TR0 = 1;
ET0 = 1;
EA = 1; 男人面相
}
void Timer0Int(void ) interrupt 1 using 0
{
Count++;
}
====================================================================
void Timer0Int(void ) interrupt 1 using 0
{
Count++;
}
====================================================================
定时器延时程序
//定时器0模式1的延时程序 #include <reg51.h> void delay(unsigned int i); main() { TMOD=0x01; //设定定时器0模式1 for(;;) //无限循环 { P0=0X00; delay(100); P0=0xFF; delay(100); } } void delay(unsigned int i) { TR0=1; //启动定时器 i=100; //设定溢出中断的次数 while(i!=0) //检查次数是否到了。i!=0时,次数没到,循环;i=0时,次数到了,跳出循环,关闭定时器; { TH0=0xd8; TL0=0xf0; while(TF0!=1); //TF0!=1时,循环等待(空语句); TF0=1时,跳出循环,执行TF0=0; TF0=0; //溢出后马上清TF0; i--; } TR0=0; //关闭定时器 ==================================================================== |
因为你用while循环延时时,循环了100,000次。已知CPU晶振为12M赫兹,则1个机器周期为1us。而100,000次等于100,000us等于100ms等于0.1s。
定时器中断时高8初一数学练习题位TH0≈c3(十六进制)低8位TL0≈c3(十六进制),十六进制c3c3等于十进制50015,也就是你说的50,000。而使用定时中断时,CPU也是采用的12M赫兹的晶振,则计数频率位1M赫兹,即每微秒(us)计数器加1。
50,000等于50,000微秒等于50毫秒(ms)再乘以200则等于50ms*200=10000毫秒等于10s。这样差不多相差了100倍。
解决方法是用循环时要循环1000,000次。用定时器时50,000*20个周期就可以了:D
定时器中断时高8初一数学练习题位TH0≈c3(十六进制)低8位TL0≈c3(十六进制),十六进制c3c3等于十进制50015,也就是你说的50,000。而使用定时中断时,CPU也是采用的12M赫兹的晶振,则计数频率位1M赫兹,即每微秒(us)计数器加1。
50,000等于50,000微秒等于50毫秒(ms)再乘以200则等于50ms*200=10000毫秒等于10s。这样差不多相差了100倍。
解决方法是用循环时要循环1000,000次。用定时器时50,000*20个周期就可以了:D
定时器中断程序执行前系统要做一些保护现场的的工作,中断后要恢复现场,而且必须等到正在执行的那条指令完成后才会调用中断
《我用while 循环 延时 循环了100,000 次》
怎么算条数的的?
手足口病应急预案i++这样的算1条
while这样的算2条
怎么算条数的的?
手足口病应急预案i++这样的算1条
while这样的算2条
而不可能只是1个while得嵌套的 那么执行一次就不一定是几us了
软延时的时间最简单的是用软仿真测试具体时间
或者自己计算(c的不会看汇编会吧 编译成SRC文件看不就得了么)
软延时的时间最简单的是用软仿真测试具体时间
或者自己计算(c的不会看汇编会吧 编译成SRC文件看不就得了么)
C语言 编一段定时器0延时一分钟的程序
哪位武林高手...可以帮我编一段定时器0延时一分钟的程序...这个是5ms程序...怎么变成1分钟?要求定时器中断0程序到了一分钟,P37取反...
void timer0_int(void) interrupt 1
{
TH0=0xee;
TL0=0x00;
while(TF0!=1);
{P37=~P37;
TF0=0;}
}
void timer0_int(void) interrupt 1
{
TH0=0xee;
TL0=0x00;
while(TF0!=1);
{P37=~P37;
TF0=0;}
}
void timer0_int(void) interrupt 1
{
TR0=0;
unsigned long i=1;
TH0=0xee;
TL0=0x00;
i++
if(i==12000)
P37=~P37;
TR0=1
}
{
TR0=0;
unsigned long i=1;
TH0=0xee;
TL0=0x00;
i++
if(i==12000)
P37=~P37;
TR0=1
}
我刚学单片机的,我需要编写延时40ms的子程序,但不懂如何入手.麻烦高手们帮帮忙!
首先需要确定晶振频率,然后可以采用软件延时和硬件延时两种方法。
软件延时就是靠编写循环程序让其循环执行来达到延时目的,另一种方法是硬件延时,用
软件延时就是靠编写循环程序让其循环执行来达到延时目的,另一种方法是硬件延时,用
单片机内部的定时器来产生延时效果,这种方法不占用CPU资源,推荐用此方法。
首先需要确定晶振频率,然后可以采用软件延时和硬件延时两种方法。
软件延时就是靠编写循环程序让其循环执行来达到延时目的,另一种方法是硬件延时,用单片机内部的定时器来产生延时效果,这种方法不占用CPU资源,推荐用此方法。
假设晶振频率12MHz,那么一个机器周期为12/12MHz=1us
软件延时40ms:
MOV R3,#200
DIY1:MOV R2,#100
影流之主出装DIY:DJNZ R2,DIY;执行一次2us,共执行20000次
DJNZ R3,DIY1
首先需要确定晶振频率,然后可以采用软件延时和硬件延时两种方法。
软件延时就是靠编写循环程序让其循环执行来达到延时目的,另一种方法是硬件延时,用单片机内部的定时器来产生延时效果,这种方法不占用CPU资源,推荐用此方法。
假设晶振频率12MHz,那么一个机器周期为12/12MHz=1us
软件延时40ms:
MOV R3,#200
DIY1:MOV R2,#100
影流之主出装DIY:DJNZ R2,DIY;执行一次2us,共执行20000次
DJNZ R3,DIY1
硬件延时涉及到定时器,需要计算定时初值,40ms可以采用定时器的模式1,最大可延时65ms,这个涉及到的东西较多,我就不具体说了,你可以查看单片机的相关书籍,上面讲的很详细。
由于定时器最大溢出时间大约为65MS(12M),所以需要使用定时器中断,在每次定时器溢出时把一个变量加1。玉树怎么养2小时定时器需溢出几千次,变量应设置为16位。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论