3733|11

3252

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

为什么一个数放入寄存器一定要对高位取商 对低位取余数后才能放呢? [复制链接]

 

为什么一个数放入寄存器一定要对高位取商 对低位取余数后才能放呢?

QQ图片20200630161709.png (493.53 KB, 下载次数: 0)

QQ图片20200630161709.png
此帖出自单片机论坛

最新回复

之所以TH0和TL0这两个字节,在装入16位数字时,必须把除以256的余数装入TL0,商装入TH0,那是因为TH0和TL0并不是 int 类型的变量,TH0和TL0必须分开装入。   详情 回复 发表于 2020-7-2 14:15
点赞 关注
 

回复
举报

2万

帖子

0

TA的资源

超级版主

沙发
 

“为什么一个数放入寄存器一定要对高位取商 对低位取余数后才能放呢?”

这可不是 “一个数放入寄存器”。

这是需要 t 微秒后16位定时器溢出产生中断。而这个16位定时器每1微秒加1。为了实现这个目的,必须为TH0和TL0赋初值。如何赋初值才能够实现这个目的,自己想。书中已经给出答案,你只要想通为什么要这样赋初值即可。

此帖出自单片机论坛
 
 

回复

2万

帖子

0

TA的资源

超级版主

板凳
 

实在想不出来,可以用笨办法计算:

要求1微秒后这个16位计数器产生溢出中断,TH0和TL0应该赋初值多少?

要求2微秒后这个16位计数器产生溢出中断,TH0和TL0应该赋初值多少?

要求3微秒后这个16位计数器产生溢出中断,TH0和TL0应该赋初值多少?

……

要求254微秒后这个16位计数器产生溢出中断,TH0和TL0应该赋初值多少?

要求256微秒后这个16位计数器产生溢出中断,TH0和TL0应该赋初值多少?

就清楚了。

此帖出自单片机论坛

点评

我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1  详情 回复 发表于 2020-7-1 08:21
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

4
 
maychang 发表于 2020-6-30 20:09 实在想不出来,可以用笨办法计算: 要求1微秒后这个16位计数器产生溢出中断,TH0和TL0应该赋初值多少? ...

我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1

此帖出自单片机论坛

点评

1楼红色框里面所说的设置公式,是使用十进制记数。65536-t除以256,注意TL0逢256进1到TH0。余数放入TL0,商放入TH0。具体放到TL0和TH0里面时,正是二进制数。这个从十进制转换成二进制的过程,由C编译程序自动完成  详情 回复 发表于 2020-7-1 10:14
把65536-t这个数放到TH0+TL0构成的二字节计数器,也可以将65536-t转换成16进制数,然后把低端两位16进制数放入TL0,高两位16进制数放入TH0。其实,转换成16进制数的方法如前所述,就是除以16,余数放入16进制数最  详情 回复 发表于 2020-7-1 10:09
“我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1‘ 再看看65536-t这个数如何 ”转换成16个二进制数“。 二进制数是 ”逢2进1“。把一个数转换成二进制数  详情 回复 发表于 2020-7-1 10:04
“我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1” 不是 t ,而是65536-t ! TH0+TL0 构成16位加计数器。每输入一个脉冲(机器周期或者外部输入脉冲)加1。当TL0溢出时向TH0进  详情 回复 发表于 2020-7-1 09:54
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

5
 
QWE4562009 发表于 2020-7-1 08:21 我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1

“我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1”

不是 t ,而是65536-t

TH0+TL0 构成16位计数器。每输入一个脉冲(机器周期或者外部输入脉冲)加1。当TL0溢出时向TH0进位,TH0加1。所以要在输入 t 个脉冲后TH0溢出产生中断申请,TH0+TL0构成的16位计数器必须预置为65536-t

此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

6
 
QWE4562009 发表于 2020-7-1 08:21 我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1

“我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1‘

再看看65536-t这个数如何 ”转换成16个二进制数“。

二进制数是 ”逢2进1“。把一个数转换成二进制数,方法就是这个数除以2,保留商,余数放到这个二进制数的最低位。然后商再除以2,保留商,余数放入这个二进制数的次低位。然后商再除以2,保留商,余数放入这个二进制数的次次低位……直到商为0。

16进制数是 ”逢16进1“。把一个数转换成16进制数,方法就是这个数除以16,保留商,余数放到这个16进制数的最低位。然后商再除以16,保留商,余数放入这个16进制数的次低位。然后商再除以16,保留商,余数放入这个16进制数的次次低位……直到商为0。

 

TH0+TL0,高字节和低字节可以看成256进制数,因为低字节TL0逢256向高字节TH0进1。那么,待装入TH0+TL0这个二字节计数器的数,除以256,余数放到低字节,商放到高字节,就对了。

此帖出自单片机论坛

点评

这个说的已经非常详细了    详情 回复 发表于 2020-7-1 11:10
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

7
 
QWE4562009 发表于 2020-7-1 08:21 我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1

65536-t这个数放到TH0+TL0构成的二字节计数器,也可以将65536-t转换成16进制数,然后把低端两位16进制数放入TL0,高两位16进制数放入TH0。其实,转换成16进制数的方法如前所述,就是除以16,余数放入16进制数最低位……

此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

8
 
QWE4562009 发表于 2020-7-1 08:21 我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1

1楼红色框里面所说的设置公式,是使用十进制记数。65536-t除以256,注意TL0逢256进1到TH0。余数放入TL0,商放入TH0。具体放到TL0和TH0里面时,正是二进制数。这个从十进制转换成二进制的过程,由C编译程序自动完成,不必你操心。

此帖出自单片机论坛
 
 
 

回复

3252

帖子

0

TA的资源

五彩晶圆(中级)

9
 
maychang 发表于 2020-7-1 10:04 “我的意思是这个 t为什么不直接转换成16个二进制数直接赋值给TH0 TH1‘ 再看看65536-t这 ...

这个说的已经非常详细了  

此帖出自单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

10
 

之所以装入负数最根本的原因是定时器计数为加计数

高位取商低位取余的运算是要把16位的二进制数拆成两个字节分别赋值

此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

11
 

你在另一帖中问:“i j k和定时的关系是怎样的?还是软件生成的?”。在那段程序中你写下 “ unsigned char i,j,k; ”,声明了三个 unsigned char 类型的变量,然后为这三个变量赋初值。

如果你声明了一个两个字节长度的 int 类型变量 abcd,然后为这个变量赋值 abcd=32768,那么编译程序就会将32768转换成二进制数,直接放入这两个字节。至于 abcd 这个变量的地址,你不必操心,编译程序自会安排。

 

此帖出自单片机论坛
 
 
 

回复

2万

帖子

0

TA的资源

超级版主

12
 

之所以TH0和TL0这两个字节,在装入16位数字时,必须把除以256的余数装入TL0,商装入TH0,那是因为TH0和TL0并不是 int 类型的变量,TH0和TL0必须分开装入。

此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表