一个关于赋值的小问题

2020-01-30 13:45发布

IAP_ADDRL与IAP_ADDRH是单片机内部的两个八位的特殊功能寄存器,分别用来寄存地址的低八位与高八位,而addr是一个16位的无符号整型变量(用以存放地址数据)
下面是两个寄存器的赋值语句(IAP_ADDRL与IAP_ADDRH 已声明为特殊功能寄存器)
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
我的问题是,当一个十六位数直接赋值给一个八位的寄存器时,寄存器只会保留低八位吗?同理将一个十六位的数赋值给一个八位的变量时情况是不是一样?
希望大家能帮忙解答一下,万分感谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
qllaoda1
1楼-- · 2020-01-30 14:05
跟你说个省事的方法,定义sfr16
lcw_swust
2楼-- · 2020-01-30 15:17
 精彩回答 2  元偷偷看……
fsfwl
3楼-- · 2020-01-30 19:10
lcw_swust 发表于 2013-4-18 09:41
求人不如求己,自己动手试一下不就知道了

我试了,结果是这样~但是我想知道为什么
fsfwl
4楼-- · 2020-01-30 20:47
qllaoda1 发表于 2013-4-18 09:40
跟你说个省事的方法,定义sfr16

如果你知道,你能不能回答一下我的问题?
qllaoda1
5楼-- · 2020-01-30 22:01
fsfwl 发表于 2013-4-18 12:40
如果你知道,你能不能回答一下我的问题?

你这个问题是C语言里一个很基本的问题,不同长度类型的变量互相赋值的问题,如果记不得了去翻书吧。
用sfr16定义寄存器,可以一条语句解决你的赋值问题。原因就不解释了,想知道的话自己翻书去。
绿茶山人
6楼-- · 2020-01-31 03:29
在keil中有的单片机头文件比较死板,比如C8051f120.h里面就没定义16位的寄存器,赋值操作的时候不方便,干脆自己在头文件中添加寄存器,比如以前是
sfr TMR2L = 0xCC; /*TIMER/COUNTER 2 LOW BYTE*/
sfr TMR2H = 0xCD;/*TIMER/COUNTER 2 LOW BYTE*/
现在添加
sfr16 TMR2 = 0xCC; /*TIMER/COUNTER 2*/
这样做在定时器2初始化的时候会方便一些!

一周热门 更多>