51单片机定时器初值用变量设置定时不准确,为什么,TH0=(65536-X)/256,TL0=(65536-X)%256晶振12MTH0=(65536-1000)%256;TL0=(65536-1000)%256;这种定时方式是准确的但是如果我用变量x=1000;TH0=(65536-x)%256;TL0=(65536-x)%256;

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/04 01:37:30
51单片机定时器初值用变量设置定时不准确,为什么,TH0=(65536-X)/256,TL0=(65536-X)%256晶振12MTH0=(65536-1000)%256;TL0=(65536-100

51单片机定时器初值用变量设置定时不准确,为什么,TH0=(65536-X)/256,TL0=(65536-X)%256晶振12MTH0=(65536-1000)%256;TL0=(65536-1000)%256;这种定时方式是准确的但是如果我用变量x=1000;TH0=(65536-x)%256;TL0=(65536-x)%256;
51单片机定时器初值用变量设置定时不准确,为什么,TH0=(65536-X)/256,TL0=(65536-X)%256
晶振12M
TH0=(65536-1000)%256;
TL0=(65536-1000)%256;
这种定时方式是准确的
但是如果我用变量
x=1000;
TH0=(65536-x)%256;
TL0=(65536-x)%256;
定时时间就不对了,这是不是正常现象,还是我程序有问题,全部如下
#include
#define uchar unsigned char
#define uint unsigned int
uchar pwm;uint a,b,c,d;
sbit out=P0^0;
void main(void)
{
out=0;
pwm=50;
a=2000;
TMOD=0x11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
TR0=1;
TR1=0;
ET0=1;
ET1=1;
EA=1;
while(1);}
void timer0(void)interrupt 1
{
a=2000;
TR0=0;
TR1=0;
TH0=(65536-2000)/256; TL0=(65536-2000)%256;
TH1=(65536-1000)/256; TL1=(65536-1000)%256;
TR0=1;
TR1=1;
out=1;
}
void timer1(void)interrupt 3
{
TR1=0;
out=0;
}

51单片机定时器初值用变量设置定时不准确,为什么,TH0=(65536-X)/256,TL0=(65536-X)%256晶振12MTH0=(65536-1000)%256;TL0=(65536-1000)%256;这种定时方式是准确的但是如果我用变量x=1000;TH0=(65536-x)%256;TL0=(65536-x)%256;
看一下C代码编译后的汇编代码就知道了,用变量方式很耗时,而直接用数字,编译器已经将算式的值算好了,代码里就是一个MOV指令而已,只需1us!
TH0=(65536-2000)/256; TL0=(65536-2000)%256;
汇编后,只要2us就完事了.而用变量方式,单片机很忙,计算几十乃至上百微妙才完事!
15:TH0=(65536-a)/256;
C:0x0190 AE09 MOV R6,a(0x09)
C:0x0192 AF0A MOV R7,0x0A
C:0x0194 AB07 MOV R3,0x07
C:0x0196 AA06 MOV R2,0x06
C:0x0198 E4 CLR A
C:0x0199 C3 CLR C
C:0x019A 9B SUBB A,R3
C:0x019B FF MOV R7,A
C:0x019C E4 CLR A
C:0x019D 9A SUBB A,R2
C:0x019E FE MOV R6,A
C:0x019F 7401 MOV A,#0x01
C:0x01A1 9400 SUBB A,#0x00
C:0x01A3 FD MOV R5,A
C:0x01A4 E4 CLR A
C:0x01A5 9400 SUBB A,#0x00
C:0x01A7 FC MOV R4,A
C:0x01A8 E4 CLR A
C:0x01A9 FB MOV R3,A
C:0x01AA 7A01 MOV R2,#0x01
C:0x01AC F9 MOV R1,A
C:0x01AD F8 MOV R0,A
C:0x01AE 1201EA LCALL SLDIV(C:01EA)
C:0x01B1 8F8C MOV TH0(0x8C),R7
16:TL0=(65536-a)%256;
C:0x01B3 AE09 MOV R6,a(0x09)
C:0x01B5 AF0A MOV R7,0x0A
C:0x01B7 AB07 MOV R3,0x07
C:0x01B9 AA06 MOV R2,0x06
C:0x01BB E4 CLR A
C:0x01BC C3 CLR C
C:0x01BD 9B SUBB A,R3
C:0x01BE FF MOV R7,A
C:0x01BF E4 CLR A
C:0x01C0 9A SUBB A,R2
C:0x01C1 FE MOV R6,A
C:0x01C2 7401 MOV A,#0x01
C:0x01C4 9400 SUBB A,#0x00
C:0x01C6 FD MOV R5,A
C:0x01C7 E4 CLR A
C:0x01C8 9400 SUBB A,#0x00
C:0x01CA FC MOV R4,A
C:0x01CB E4 CLR A
C:0x01CC FB MOV R3,A
C:0x01CD 7A01 MOV R2,#0x01
C:0x01CF F9 MOV R1,A
C:0x01D0 F8 MOV R0,A
C:0x01D1 1201EA LCALL SLDIV(C:01EA)
C:0x01D4 AF03 MOV R7,0x03
C:0x01D6 8F8A MOV TL0(0x8A),R7
17:TH1=(65536-1000)/256;
C:0x01D8 758DFC MOV TH1(0x8D),#0xFC
18:TL1=(65536-1000)%256;
C:0x01DB 758B18 MOV TL1(0x8B),#0x18

51单片机定时器初值用变量设置定时不准确,为什么,TH0=(65536-X)/256,TL0=(65536-X)%256晶振12MTH0=(65536-1000)%256;TL0=(65536-1000)%256;这种定时方式是准确的但是如果我用变量x=1000;TH0=(65536-x)%256;TL0=(65536-x)%256; 51单片机定时器初值公式12M晶振,定时器方式1的时候,比如定十1MS,初值可以用公式:TH0=(65536-1000)/256,TL0=(65536-1000)%256,那如果11.0592M,方式0,定时1MS,也用类似上面的公式怎么表达?另外256是代 基于51单片机的定时器设计谁能帮我画个基于89C51单片机的定时器设计的电路图啊. 220v输入,用单片机控制是定时输出.程序我自己能编.只是模电学的不好,不知道电路图该怎么画.哭……小弟有 机械电高压锅定时器不定时,煮糊饭. 51单片机实验(关于定时器计数器)用P1.7驱动发光二极管亮一秒灭一秒地闪烁.时钟频率为6MHz.提示:长时间定时采用定时器和计数器结合.计数器设定用硬件方式,提议T0定时,T1计数T0的定时跳 单片机--题设单片机晶振频率为12MHz,使用定时器T1以方式1产生周期为2ms的等宽连续方波,试计算最大定时时间、TMOD寄存器的值、定时器的初值(TH1、TL1中的值)? 51单片机定时器1方式2怎么设置为什么TMOD=0x20(是怎么换算得) 定时器0方式2TMOD又是多少? 51单片机中设置定时器模式时,TMOD|=0x01和TMOD=0x01有什么区别 51单片机 定时器#include#define uint unsigned int uint pp;sbit led=P1^0;void main(){TMOD=0x01; //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1).TR0=1; //打开定时器TH0=0Xff; //定时器设置,每隔100微 MCS-51单片机定时器/计数器作定时和计数作用时,其计算脉冲分别由谁提供?其定时时间与哪些因素有关?很急,望大家帮忙 步进电机S型加减速控制定时常数求一个,51单片机控制步进电机的加减速 定时初值表,最好是S型曲线加减速,哪位大侠有,帮帮小弟…… 51单片机如何计算定时时间 假设单片机系统的晶振频率为12MHz,要求采用定时器时50毫秒,计算计数器的计数初值. 用单片机编程 (题目在下面)利用定时器T1的定时功能以方式0产生周期为20MS的方波脉冲,设晶振频率f=6MHZ,采用查询和中断两种方式实现? 主要方法和要求:利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,并且用LED数码管显示时间.是一个大作业的设计至少20 单片机定时器 和 555定时器区别我现在有个项目.用的555定时器做出方波来驱动LED,频率2K.单片机的定时器应该也能做出这种定时器.大家谈谈自己的看法.硬件是实现的定时器和单片机软件模拟 51单片机定时计数器工作方式疑点单片机定时器/计数器的工作方式,比如说方式1吧.TH0=(65536-X)/256 TL0=(65536-X)%256 这两句语句不是很明白,疑点在于/256 %256 这两点看不明白,哪位大侠知道的情告诉 用555定时器设计一个定时电路,定时时间到使LED灯亮.要电路图~我需要一小时就可以~