一个关于赋值的小问题
IAP_ADDRL与IAP_ADDRH是单片机内部的两个八位的特殊功能寄存器,分别用来寄存地址的低八位与高八位,而addr是一个16位的无符号整型变量(用以存放地址数据)下面是两个寄存器的赋值语句(IAP_ADDRL与IAP_ADDRH 已声明为特殊功能寄存器)
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
我的问题是,当一个十六位数直接赋值给一个八位的寄存器时,寄存器只会保留低八位吗?同理将一个十六位的数赋值给一个八位的变量时情况是不是一样?
希望大家能帮忙解答一下,万分感谢。
跟你说个省事的方法,定义sfr16 求人不如求己,自己动手试一下不就知道了 lcw_swust 发表于 2013-4-18 09:41 static/image/common/back.gif
求人不如求己,自己动手试一下不就知道了
我试了,结果是这样~但是我想知道为什么 qllaoda1 发表于 2013-4-18 09:40 static/image/common/back.gif
跟你说个省事的方法,定义sfr16
如果你知道,你能不能回答一下我的问题? fsfwl 发表于 2013-4-18 12:40 static/image/common/back.gif
如果你知道,你能不能回答一下我的问题?
你这个问题是C语言里一个很基本的问题,不同长度类型的变量互相赋值的问题,如果记不得了去翻书吧。
用sfr16定义寄存器,可以一条语句解决你的赋值问题。原因就不解释了,想知道的话自己翻书去。 在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初始化的时候会方便一些! qllaoda1 发表于 2013-4-18 12:50 static/image/common/back.gif
你这个问题是C语言里一个很基本的问题,不同长度类型的变量互相赋值的问题,如果记不得了去翻书吧。
用sf ...
谢谢了~ 绿茶山人 发表于 2013-4-18 13:53 static/image/common/back.gif
在keil中有的单片机头文件比较死板,比如C8051f120.h里面就没定义16位的寄存器,赋值操作的时候不方便,干 ...
谢谢了~ fsfwl 发表于 2013-4-19 17:07 static/image/common/back.gif
谢谢了~
共同进步!
页:
[1]