0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机程序TH0=(65536-50000)/256;是什么意思?

倩倩 来源:电子开发网 2020-09-18 17:07 次阅读

TL0=(65536-50000)%256; 这两个是什么意思呢??为什么要是256,是固定的吗???在知道里看到了答案,可是还是不大懂,

这是网上的:

标准答案:定时器0设置于模式1时,计数寄存器为16位模式,由高8位TH0和低8位TL0两个8位寄存器组成,当设定计算值为65536-50000=15536(D)时,转换为十六进制就是3CB0(H),此时,TH0=3C,TL0=B0分别装入即可,为了免除这些计算步骤,很多编程者采用“TH0=(65536-50000)/256;TL0=(65536-50000)%256“的编程方式,去让单片机自己去计算结果,那么为什么要介入256呢?其实并不难理解,做一下10——16进制的换算就知道了,256(D)=0100(H),这里01就是高8位的数据,00就是低8位的数据,通俗点说,15536(D)里有多少个256,就相当于高8位有多少数值,就是除的关系了,商存入高8位寄存器后余下的数存入低8位即可,取商计算就是TH0=(65536-50000)/256;而取余计算就是TL0=(65536-50000)%256 。

答案:定时器工作于模式一时,计数器是16位的,16位的二进制可以表示0~2^16(65535),计数器时向上计数的,一个一个数的加,首先要设置它的计数初值(不设置默认为0),如果要它每数50000次溢出一次产生中断,那么初值就是2^16-50000+1=15536,现在将15536这个初值装到TH0和TL0中就行了,但是由于51是8位单片机,每次只能处理8位数据,所以就要将15536分成高8位和低8位分别给TH0和TL0,15536/256就是将高八位取出,15536%256就是将低八位取出,类似于十进制中25/10=2.。..。.5,将十位2和个位5取出一样。说白了就是数制的转换。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5997

    文章

    43948

    浏览量

    620553
  • 计数器
    +关注

    关注

    32

    文章

    2120

    浏览量

    92889
  • 定时器
    +关注

    关注

    23

    文章

    3144

    浏览量

    112006
收藏 人收藏

    评论

    相关推荐

    基于51单片机的智能频率计毕设,C代码,仿真,原理图,论文

    设计要求 (1)以MCS-51系列单片机为控制器件,用C语言进行程序开发,结合外围电子电路,设计一款数字频率计; (2)能够对1HZ~20MHZ正弦波、三角波、方波信号等周期信号的频率进行测量
    发表于 03-18 12:57

    单片机编程实例80例

    =(65536-46083)%256; //定时器T0的高8位赋初值 } } *实例43: 用定时器T1查询方式控制单片机发出1KHz音频 #include<reg51.h>
    发表于 11-21 12:00

    不到50行代码的51单片机的定时器0溢出速度怎么解决?

    ;//开总中断 ET0 = 1;//开定时器0中断 TH1 = (65536 - tmr0_value) / 16;//得到高8位
    发表于 10-26 06:02

    关于C51单片机定时器赋初值问题求解

    用89C52单片机,做一个LED灯闪烁的效果,亮一秒灭一秒 现在在给定时器的TH0和TL0赋初值上卡住了 看教程说,TL0初值为0
    发表于 10-25 06:06

    用串口给单片机发数据,为什么发送的数据无法修改产生的波形?

    ; uchar x;//256时100Hz;1时24.25KHz; uint H,L; ucharflag; void Initurat() { TMOD=0X20; TH0 = 0X
    发表于 10-17 08:17

    单片机无法显示频率值怎么解决?

    (void) { TMOD=0x15;//设置定时器工作方式 TH0=0; TL0=0; TH
    发表于 10-08 08:14

    求助,单片机不同按键控制不同IO口输出驱动三极管遇到难题求解答

    ,启动是打开,思路是有,但是C语音编程就是没效果。。。一直查资料2天了没进展,附上 按键和定时器的编码 单片机程序如下: void Key_Event_Handle() { if((K1==0
    发表于 10-08 07:14

    单片机控制LED灯第一次闪烁后常亮30分钟后熄灭,第二次按按键后一直亮是为什么?

    ; } /@@************************************* *************************************/ void Timer2Init()// { IE2|=0x04; T2H=(65536-50000)
    发表于 10-07 07:49

    单片机定时器0的高位和地位关系以及怎么赋值?

    我在网上看到的程序单片机定时器T0打开和给定时器高位和低位赋值: TMOD=0X01; EA=1; ETO=1; TH0=
    发表于 10-07 07:46

    求助,关于51单片机发出1KHz声音程序的疑问?

    =0; while(1) { if(TF0==1) { TF0=0; TH0=(65536-92
    发表于 10-07 07:00

    求助,关于数码管闪烁的问题

    ;=5flag_nao) { fs = ~fs; ledscan(sfm);} } } } void t0() interrupt 1 { TH0 = (65536-50000)/256
    发表于 09-27 07:48

    51单片机的定时器结构及工作原理详细说明

    由两个8位特殊功能寄存器TH0、TL0TH1、TL1构成。工作方式寄存器TMOD:用于设置定时器的工作模式和工作方式;控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器的状态;单片
    发表于 09-25 08:23

    N76E003 ADC中断影响了定时器中断是什么原因造成的?

    ; u8TL0_Tmp = (65536-TL0_INIT)%256; TH0 = u8TH0_Tmp; TL
    发表于 06-25 06:37

    分享一个51单片机做的简易电子琴

    ) { th=(65536-(1000000/Music_7[i]))/256; tl=(65536-(1000000/Music_7[i]))%
    发表于 06-19 06:34

    单片机中模拟I2C总线来控制E2pROM芯片进行掉电保护?

    (); num=read_byte(2); if(num>100) num=0; TMOD=0x01; TH0=(65536-50000)/2
    发表于 05-08 17:48