51单片机定时器0.5秒延时问题,程序仿真是led不会动.

作者&投稿:曲殃 (若有异议请与网页底部的电邮联系)
51单片机 timer0定时器控制led 每隔0.5秒点亮 并在2秒内熄灭 如此不断重复。求c语言程序 谢谢~

这个和晶振有关的,假设是12M吧
你给我邮箱,我发你一个工具吧,可以生成代码的

#include
sbit LED=P1^1;

void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
unsigned int time;
void main(void)
{
time=0;
LED=0;//1关 0开;
InitTimer0();
while(1);
}

void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0D8;
TL0 = 0x0F0;
time++;
if(time==200)//第二秒
{
LED=1;
}
if(time==500)//第五秒
{
LED=0;
time=0;
}
}

如果你的晶振是12M的话,程序是1秒后亮。
因为 是50MS进中断一次,计20次就是1秒。
另外,你的程序这样写 i=20时,亮。但过50ms就灭了。再过1秒才亮,又50ms灭,所以眼睛看不出。
如果写成if(i==20)
{
i=0;
P1=~P1;
}
就可以看出1秒闪烁了

ORG 0000H
AJMP MAIN
ORG 000BH
AJMP QD
ORG 0030H
MAIN:MOV SP,#60H
MOV A,#55H
MOV R0,#0AH
MOV TMOD,01H    ;这里错了,应该是 MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
MOV P0,A
SETB TR0
NOP
SJMP $
;这里也有问题,应该加上面一条语句,主程序和中断分开
QD:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,L1 ;这条语句位置错了,应该在这里
CPL A
MOV P0,A
MOV R0,#0AH
L1: RETI
END


NOP
SJMP $

QD:MOV TH0, ....
MOV TL0,...

原来的结构有问题.


单片机定时ET0=1表示什么意思?
单片机中的定时器通常用于计时和产生特定时间间隔的中断。对于一些单片机,比如常见的基于 8051 架构的单片机,ET0 是定时器0的启用控制位,而不是一个具体的计时值。ET0=1 意味着启用了定时器0中断。当 ET0 被设置为1时,定时器0计时完成后会产生中断请求,通知处理器执行与定时器0相关的中断服务程...

单片机系统晶振频率为12mhz,利用工作方式1定时器0.中断方式在p2.0输出...
根据50ms换算出计数初值,你的晶振是12mhz,那么计数周期就是1微秒,下面计算计数初值:公司为TH0=(65536-50000)\/256, TL0=(65536-50000)%256,然后启动定时器就行了,如果你看了中断还要在中断里面重新载入初值,你也可以用查询法,不断询问定时器0的中断溢出标志,定时时间到也别忘了重新赋值 ...

单片机内部定时器0和定时器1有何不同之处
单片机内部定时器0和定时器1虽然都是16位定时计数器,但在硬件结构和寄存器配置方面,还是有一些不同之处的,通过对寄存器的配置:1,定时器0可分成2个独立的8位定时器,而定时器1则不能;2,定时器1可作为串口的波特率发生器,而定时器0则不能。

单片机的定时器0工作在方式1,晶振频率为12MHZ,要实现定时20ms,定时器的...
定时器计数脉冲频率是1 MHZ,周期是1us,因此20ms是20000个脉冲 因此初值是65536-20000 高8位上的1代表256,因此高8位装的256倍数 TH0=(65536-20000)\/256;低8位装的是不足256部分;TL0=(65536-20000)%256;

单片机定时ET0=1什么意思?
单片机定时 ET0=1的意思是51单片机的定时器0允许中断。ET0是51系列单片机定时器0的中断允许开关,定时器中断是为了满足定时或计数溢出处理的需要而设置的,当发生计数溢出时,表示定时时间已到或者计数值已满,接着就以计数溢出信号作为中断请求去置位一个溢出标志位。这种中断请求是在单片机芯片内部发生的...

希望高手帮忙,说明一下单片机中定时器0和定时器1中断执行过程
定时器1 50ms中断一次,每次中断FLAG加1 40次即为2秒,所以在定时器0中断时,要判断是0-40,40-80等时间段 定时器0中断时,要再次装入定时时间常数,但在0-40,40-80等时间段内装入的时间常数是不同的,因此beep取反的频率就不同 但由于定时器0中断10次BEEP才取反一次,所以当fre=50000;...

单片机定时器0设置为工作方式1为TMOD=0x01;定时器1设置工作方式1时TMO...
答:单片机定时器0设置为工作方式1为TMOD=0x01;定时器1设置工作方式1时TMOD=0x10.阁下看TMOD里的各个位啥意思就知道了。include<reg52.h> void main(){ while(1){ SBUF=0xfe;while(!TI);if(RI==1)RI=0;REN=1;P0=SBUF;} } 这个程序不对。错误有:1.主程序没设定波特率、串口工作方式、...

52单片机定时器1执行中断程序时定时器0进入中断后 器0执行完程序退出到...
这个叫中断嵌套 定时器0能够中断定时器1的前提是0的优先级高于1 这时会回到的是中断1的主程序,因为定时器1也是中断的主程序 最后才回到主程序 中断一级一级嵌套

单片机编程中,只要TR0一直为1,定时器0就回一直循环记数吗?
单片机编程中,TR0一直为1,定时器T0不一定会一直循环计数\/定时的,方式1时,计数\/定时到就停止了,需要重写初始值才能再计数。方式2是可自动重写计数初始值,是可以一直循环计数的。

关于单片机中断程序的定时器0和定时器1
首先,你所说的两种赋值方法,实际上是一种,就是就是寄存器的高8为位个低8位赋值。你说的第二种(TH0=(65536-50000)\/256)所赋的值是经过计算(=(65536-50000)\/256)得到的,你知道定时计数器的工作原理就清楚了。其次,赋值大小要根据你的晶振以及单片机工作模式确定机器周期,然后才能确定...

四平市15584763608: 51单片机 定时器中断延时0.5秒 汇编 -
茶水醋酸: 告诉你原理,因为我现在用C了.弄一个全局变量COUNT,然后控制好你的定时器中断时间,比如10MS,那么你每次中断COUNT++判断当COUNT=50,(50*10ms=500ms=0.5s)就是0.5s了.此时清count,同时处理你要做的事情.

四平市15584763608: 51单片机延时 -
茶水醋酸: 你这是51(12T)的程序吧,STC12LE5608AD是1T的要要差10倍左右,当然不到1秒了 delay(5000);也就0.5秒 delay(50000);应该是5秒左右

四平市15584763608: 51单片机定时器模式1定时1us为什么用了好几秒啊 -
茶水醋酸: 你的程序只有这几行吗?那没有ET1=1,开定时器中断没有啊.定时到了,是不能中断的.其实,这么设置没有什么意义的,因为,执行完TR1=1,这条指令,就开始计时了,只要1个机器周期就定时到.执行完TR1=1,定时就到了.但是还没有执行EA=1;就不能中断,还得等到ET1=1以后,才能中断.其实,早就定时到了,但没有执行ET1=1是不能中断.单片机响应中断后,转去执行中断服务子程序,这需要更多的机器周期,远远超过1个机器周期,因此,你的设置是无理的.而你的程序就没有ET1=1,所以,不可能中断的.等了好几秒.........为什么啊?就应该等啊.

四平市15584763608: 如何算51单片机延时时间 -
茶水醋酸: 用KEIL软件可以计算时间,将while的起始位置和终止位置加红点(双击即可); 然后左侧的SEC后面的就是执行的时间.再给你几个延时程序做参考: 软件延时:(asm) 晶振12MHZ,延时1秒 程序如下: DELAY:MOV 72H,#100 LOOP3:...

四平市15584763608: 51单片机定时器0.5秒延时问题,程序仿真是led不会动. -
茶水醋酸: 可能是你没有做移位处理吧.

四平市15584763608: 定时器延时问题(51单片机,c语言)
茶水醋酸: 你的这两个函数void delayms(uint)和void display(uchar,uchar,uchar,uchar)我可以肯定的告诉你,没有问题.你的这个程序其实就是想显示0000~5959之间的数,而且这个数是每20秒+1顺序递增的.之所以没有任何反应,那是你的主程序没有挂...

四平市15584763608: 单片机中延时问题 -
茶水醋酸: 是什么芯片啊?如果是51的话,用keil编译成汇编语句应该是下面这段:MOV r7,#250 d1: nop 1机器周期 djnz r7,d1 2机器周期 选用12m晶振的情况下其延时大致是:(1+2)*250=750us=0.75 ms 如果把_nop_();去掉的话,编译结果如下:MOV r7,#250 djnz r7,d1 2机器周期 延时为0.5ms,我估计函数的本意是要求延时500us的,所以可以把_nop_();去掉.

四平市15584763608: 51单片机 延迟时间问题 -
茶水醋酸: 这是靠单片机指令周期延时的程序,12M晶振,每个周期为1us,每个for语句3个周期,所以124*3*3约等于1ms,所以可以进行简单的延时.

四平市15584763608: 为什么51单片机中中断程序调用住程序中0.5秒的延时会在27秒后才恢复运行 -
茶水醋酸: 一进入中断总是27秒后才恢复运行,...---- 中断程序 和 主程序,共用了同一个延时程序,互相干扰,造成混乱.可以换一个工作区,方法如下:JQ:PUSH PSW SETB RS1 ;换区.MOV P2,#24H ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY POP PSW ;恢复原区 RETI

四平市15584763608: 在单片机AT89C51芯片中,设计一个一秒的延时程序,有多少种方法,具体如何? -
茶水醋酸: 比较常用的有两种一种比较简单的就是粗略的软件延时;如:void delay_1s(void) { unsigned char i,j; for(i=0;i<128;i++) for(j=0;j<254;j++); }这种通过调整i和j的最终值来确定延时时间,没有办法精确计算的.另一种,做比较精确的延时,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网