晶振12M
TH0=(65536-1000)%256;
TL0=(65536-1000)%256;
这种定时方式是准确的
但是如果我用变量
x=1000;
TH0=(65536-x)%256;
TL0=(65536-x)%256;
定时时间就不对了,这是不是正常现象,还是我程序有问题,全部如下
#include <reg52.h>
#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;
}
我把a类型定义成int之后,定时时间还是和uint一样……和直接带数字的偏差很大。求帮助啊
追答你再试一些long int型
...为什么,求高手。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 <reg52.h> #define ucha... 展开 刚铎的哨子 | 浏览3020 次 |举报 我有更...
为啥51单片机TH0=(65535–x)\/256?
因为51单片机的计数器是+1计数器,每个单位时间计数值增加1,当计数值发生溢出时产生中断,溢出时间为65536-x 计数器是16位的,当TH0是计数器的高8位,所以要除以256然后取整
怎么计算51单片机定时器TH0和TL0的初值,比如我要让定时器20ms溢出一次...
最简单的计算方法就是 TH0=(65536-20000)\/256; TL0=(65536-20000)%256; 20000=20ms 如果1ms就是1000 想弄多少弄多少。。。
Tho=(65536-45872)\/256这句话在单片机定时器里面用到的,是什么意思
51单片机的定时器是16位的,分高8位和低8 位,最大65535,其中高8位(Tho)的数代表256的倍数,所以计算时要对256取模 低8位(TL0)代表不足256的部分,因此要对256取余数 由于该定时器是加法计数的,到65536产生溢出,因此 定时器初值=65536-定时的脉冲个数 假设晶振频率12MHZ,一个计时脉冲就...
...定时器C语言编程中:TH0与TL0为什么是TH0=(65536-50000)\/256;TL0=...
1、首先第一步要定时器0设置于模式1时,然后由高8位TH0和低8位TL0两个8位寄存器组成,注意的是当设定计算值为65536-50000=15536(D)时,转换为十六进制就是3CB0(H),此时,TH0=3C,TL0=B0分别装入就可以了。2、接这就是采用“TH0=(65536-50000)\/256;TL0=(65536-50000)%256“的编程方式,...
单片机中断装初值时为什么要对256求模和求余
定时器工作在16位计数模式的时候有两个个参数TH跟TL 这2个参数都是8位(0-255)的,不能直接接受16位(0-65535)数据 为了使高8位赋值到TH里面就要采用除以256的方法,等效于>>8(2的8次方=256),就相当于把高字8位移动到低8位的位置了 求余数是为了把低8位赋值到TL里面,当不能被256整除留下...
c51中定时器中TH0=(65536-10000)\/256与TL0=(65536-100000)%256是什么...
TH0高位TL0低位因为是八位的计数器,所以这个最大就是2^8=256,所以,如果部分高位和低位的话,是记录不下去的。然后这个高位就相当于存放的进位一样。然后这个(65536-10000)\/256就是取高位的意思,(65536-10000)%256取的是低位。为什么会是减呢,是因为这个计时器到了65536溢出了,就会发生中断,...
单片机定时里 TH0=(65536-45872)\/256; TL0=(65536-45872)%256; 这两 ...
\/256和%256 是用于计算TH,和TL的值。即高8位,和低8位。要了解定时器计数一次是多久,例如:定时器对系统时钟计数,系统时钟周期1US,那么定时器1US计数一次。要计数1MS,那么就计数1000次,计算方法:TH0=(65536-1000)\/256;TL0=(65536-1000)%256;依次类推。50MA定时初值应该是50000,但考虑到中断...
单片机中给定时器赋做值时 TH0=(65536-30000)\/256 TL0=(65536-30000...
TH0是定时器高位,TL0是定时器低位。\/是取整,%是取余。(65536-30000)%256 刚好就是TL0的计数初值,当计数到30000%256时候,也就是到了256了,这样TH0增加1. TL0下一次再从(65536-30000)%256开始计数。所以TH0要除256取整数,TL0除256取余数。
51单片机定时器初值为什么可以是十进制数
对于51单片机而言,定时器初值本身最终必须是二进制数才会被识别。TH0=(65536-5000)\/256;TL0=(65536-5000)%256;之所以可以是十进制表述出来,这是由编译器决定的,也即是说keilc允许这样表示,编译时会自动转换为二进制。