51单片机定时器的问题。计算初值。程序的编写问题。设fosc=12MHz。初值50ms。

我看到C语言中是这样的:TMOD=0X10;//设置定时器1为模式一,即16位计算模式TH1=(65536-50000)/256;//给计数寄存器赋值,50毫秒时间TL1... 我看到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语言)的编程中???
求高手帮帮忙!!!在线等。。。。
展开
 我来答
天天奕想
推荐于2016-07-06 · TA获得超过744个赞
知道小有建树答主
回答量:170
采纳率:0%
帮助的人:225万
展开全部
单片机定时器的方式一是一个十六位的定时器。但51单片机是8位的,装不下十六位数据,所以,想要用单片机来装一个十六位的数怎么弄?单片机提供了两个寄存器(8位的)来装这个十六位的数。
c语言中怎么实现把一个十六位的数装进两个八位的寄存器里?就是:
TH1=(65536-50000)/256; //把(65536-50000)这个初值的高八位取出来,放在TH1,用十六进制表示是03CH
TL1=(65536-50000)%256; //把(65536-50000)这个初值的低八位取出来,放在TL1,用十六进制表示是0B0H
在c语言中,直接写
TH1 = 0X3C;
TL1 = 0XB0;
效果跟
TH1=(65536-50000)/256; //给计数寄存器赋值,50毫秒时间
TL1=(65536-50000)%256;
一样的。
区别在于一个人工算,直接赋值;一个交给单片机去算。
QQ249638266
2012-04-27
知道答主
回答量:13
采纳率:0%
帮助的人:15.1万
展开全部
单片机一个寄存器有256个单元共有256个地址,用两位16进制数表示,即存储器的地址(00H~FFH)。存储器中每个存储单元可存放一个八位二进制信息。
就是说你想把一个大于2的8次方(即256)的初值装进去得用到两个寄存器,于是就有所谓的高八位寄存器TH1和低八位寄存器TL1。TL1装满之后,向TH1进1。
一个是C语言的方法,一个是汇编的方法。
多看看书吧。
追问
那两种方法是一样的么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式