我看到C语言中是这样的:
TMOD=0X10;//设置定时器1为模式一,即16位计算模式
TH1=(65536-50000)/256; //给计数寄存器赋值,50毫秒时间
TL1=(65536-50000)%256;
为什么这里是/256和%256???
又看到汇编的书中
定时功能的计算初值的公式:X=2^n-t/mc (t是定时时间,mc是机器周期)
计算:X=2^16-50*1000/1=65536-50000=3CB0H
因此
MOV TMOD,#10H ;设置定时器1为1模式,即16位计算模式
MOV TH1,#03CH ;给计数寄存器赋值,50毫秒时间
MOV TL1,#0B0H
为什么这里装入16进制数?而且是分开装入的?
最重要的问题是,后者计算初值的方法是否可以用在前者(C语言)的编程中???
求高手帮帮忙!!!在线等。。。。
那两种方法是一样的么?
51定时器初值计算有什么简便算法吗?
51单片机定时器初值计算:void main(void){ s1=1;TMOD=0x01; \/\/使用定时器T0的模式1 TH0=(65536-46083)\/256; \/\/定时器T0的高8位设置初值 TL0=(65536-46083)%256; \/\/定时器T0的低8位设置初值 函数功能:定时器T0的中断服务函数 void Time0(void ) interrupt 1 using 0 \/\/定时器T0...
51单片机如何让定时计数50ms?
12MHZ的51单片机,定时器最大只能定时65.535ms,所以要定时500ms的时间,需要产生10次50ms的定时。步骤如下:1、每隔50ms定时器中断溢出,计数+1。2、当计数达到10次时,便产生了500ms的定时啦,然后,你自己根据你的设计,需要让单片机做什么就自己写些什么(比如让某个io口取反)3、计数达到10次...
单片机PMW波问题
建议你使用STC单片机,里面有专用的PWM硬件 你的程序有问题:void t0()interrupt 1{ D_count++; if( D_count==D_num) Duoj=0; \/\/低电平 if(D_count==40)\/\/500us*40=20ms { D_count=0; Duoj=1; \/\/高电平 } TH0=(65536-500)\/256; \/\/基本时间...
设MCS-51单片机使用的晶振是12MHz,欲使用定时器\/计数器1实现50ms定时中...
一、使用方式一:晶振频率为12MHz,机器周期为1us,50ms时间需要计数50000次,故计数器初值为(65536-50000),65536是因为方式一中,定时\/计数器的最大值为65536(2^16),当然写程序时不一定非要这么计算,因为定时\/计数器是溢出产生中断,也就是从最大加1就溢出,最大加1就是等于0的,只要计数个...
已知8051单片机的fosc=12MHz,用T1 定时,试编程由P1.2 和P1.3 引脚分别...
51单片机中有两个定时器T0和T1,分别是由两个8位的专用寄存器组成,即定时\/计数器T0由TH0和TL0组成,T1由TH1和TL1组成。单片机中的定时器溢出时申请的中断,达到计时或计数的目的。并使用定时控制寄存器控制它。其中的:TF1:定时器1溢出标志。定时\/计数器溢出时由硬件置位。中断处理时由硬件清除。或...
51单片机的定时器问题
假设要求50ms中断,求定时器初值。晶振11.0592M,每个机器周期时间为:t=12×(1\/11.0592M) 单位:us 50ms所需机器周期为:50×1000÷t=46080 那么需要初值为:0xFFFF-46080=65535-46080=19456=0x4C00 因此,置初值为TH=0x4c,TL=0x00,经过46080个指令周期,计数器将产生50ms定时中断。如果...
C51单片机计时器50ms程序编写
12MHz晶振,经典51核是12分频,因此时钟周期为1μs。50ms = 50000μs,因此定时器累加至溢出需要50000个周期。因此65536 - 50000 = 15536 = 0x3CB0 因此TH0 = 0x3C,TL0 = 0xB0。0x4C00这个初值对应的不是12MHz晶振,*而是11.0592MHz晶振。你抄错了。
51单片机的定时器的时间怎么算??
51单片机1个机器周期=12个时钟周期,频率为12MHZ,则一个机器周期为1US,具体到定时器程序就是,假如你想定1MS,那么单片机每次加一个一,就要过1US,那么1MS就要加1000次,所以用65535-1000=64535;再把64535换成16进制为FC17,把FC付给TH0,17给TLO,即可定时1MS,因为65535他就溢出进入中断。
设单片机8051的时钟频率为12MHZ,试编写50ms的软件延时程序。
Delay: MOV R7,#100 ; 12 MHz 1 uS L1: MOV R6,#250 ;DJNZ R6,$ ; 2 uS * 250 = 500 uS 2 uS DJNZ R7,L1 ; (500 + 2 + 1) * 100 = 50300 uS RET ; 延时为 50.3 mS
51单片机各种位数定时器初值计算方法?
对12MHz ,1个机器周期 1us ,12\/fosc = 1us 。方式0是13位定时器,最大时间间隔 = 2^13 = 8.192ms 方式1是16位定时器,最大时间间隔 = 2^16 = 65.536ms 方式2是8位定时器,最大时间间隔 = 2^8 = 0.256ms =256 us 方式3 仅适用于T0,此时T0分成两个8位计数器,T1...