-
问题内容:利用Keil C51循环读入P1.0到P1.7的串行数据
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4946059
- 所属论坛:单片机/工控
审核组:硬件/嵌入开发
- 提问者:suncyxy
解决者:lbing7
- 感谢:FirerFirerFirer icesnows tyj_3 lbing7 icesnows gniyliu gniyliu flowercity toofree
- 关键字:硬件/嵌入开发 单片机 串 个位 循环 寻址 var 单片机/工控 时序 bitpos 读
- 答案:
我现在利用Keil C51来进行单片机系统的开发,需要循环读入P1.0到P1.7的串行数据,但是不能定义位数组和位指针,我就想利用读入P1口的所有数据,再屏蔽掉无关位的办法来读取有效位的串行数据,不知可行否?(我试了一下,没有成功,不知是什么原因?)还有没有其他的解决办法?
---------------------------------------------------------------
这样读法应该没错,不过你的循环速度要够快,不快的话会丢数据。你也可以考虑用中断去读。
---------------------------------------------------------------
P1.0到P1.7的串行数据?怎么个时序啊?
---------------------------------------------------------------
P1口可以位寻址的哈!!!
---------------------------------------------------------------
#define SET_BIT(var,bitPos) ( var|=(1<<bitPos) )
#define GET_BIT(var,bitPos) ( var&(1<<bitPos) )
#define CLR_BIT(var,bitPos) ( var&=(0xff-(1<<bitPos)) )
你定义一个unsigned char,利用上面的GET_BIT宏就可以读每个位啦,用SET_BIT和CLR_BIT宏进行置位或者清零。
甚至你可以用P0直接读写,都没有问题
---------------------------------------------------------------
甚至你可以用P1直接读写,都没有问题
---------------------------------------------------------------
绝对可以
你的问题是,P1口又读又写了
读之前送1。
我以前就做过串出串入操作
- 评价:
给朵鲜花(0)
扔个鸡蛋(0)