这几天开始学单片机,从STM32开始学。学习CRH和CRL寄存器的时候,学习资料里对于寄存器位与IO口之间的的对应关系没有清晰的说明,我对比了很久才明白,对我这种初学者是有点难的,所以我制作了这个寄存器与IO口的对应关系及设置说明表,帮助自己理解,更直观,也许有人用得着。
1、…做流水灯的时候。我宏定义了a来给LED的IO口赋值。
aa11111110这是二进制兄弟51单片机C语言编译器不支持二进制,可以十进制和十六进制,就不支持二进制,如果你想写二进制,那你写汇编程序把,汇编是学程序底层程序,直接寄存器操作。看你也是初学者,建议C语言也要学,但是汇编也要了解,汇编是必须的,不要嫌麻烦,搞开发小于500行以代码尽量用汇编。我只想说,你以为你只打0和1单片机就会知道它是二进制啊ps:没听说过C可以直接赋二进制值的。
2、51单片机中端口貌似不能使用二进制进行整体赋值吧例如P0=01010001…
大家一般都是用十六进制进行赋值,因为在51单片机头文件里都是以16进制进行地定义寄存器的,不能进行二进制赋值的原因,我想也是编译器的原因。希望对你有帮助。不能用二进制赋值,用了二进制就出错为什么我也不知道。51单片机是支持不同进制赋值的。只是C51不支持,用汇编是可以的汇编形式十六进制:MOVP0,#0A1H(H表示十六进制)十进制:MOVP0,
3、8051单片机中管脚赋值是否只能用16进制,能不能用二进制呢?
在汇编里可以使用,C语言用16进制。P0.01;就可以了。只是管脚电平的高低的问题。可以啊:(向P0口送数)二进:MOVp0,#b十六进:MOVp0,#0ffh十进:MOVp0,#255汇编就是简单!C语言只有三种:十进:就纯数字八进:纯数字前面加0十六进:在0~9,A~F组成的数值前面加0x。
4、单片机I/O号赋值问题
完全可以。P0口的本来就是一个寄存器映射,C51里P0等同于声明了char型的变量。就当char型的变量一样用,不过P0表达是不对的,C51并不支持二进制表达。二进制就是P00,二进制就是P0255,可以这样用的,P0 都行。0肯定是可以的1是高电平,驱动不行,把P0口加在三极管的基极放大,可以传出去,P00x00;P0P0 ;直接赋值没有问题。
加入收藏
+1
Copyright © 2007 - 河北华曙新能源汽车科技有限公司.All rights reserved