单片机一次可接收8位数据,可将这8位数据赋给P0口或者其他口,但这样也只能控制一个P口,无法控制其他的IO口
弄个简单的方案,假设串口接收的一个字节有用D7:D5用来指明要控制的端口,D4指明是端口的高四位还是第四位,然后D3~D0就是写入到端口的数据,就是这样:P2 P1 P0 HL D3 D2 D1 D0
P2:P0的组合代表不同的端口,如000代表端口P0,001就是P1了,这样到111可以表示到端口P7
HL表示选择高四位或第四位,如HL=1选择高四位,HL=0选择第四位
D3:D0表示要让端口输出的电平。
如果想让P0口输出10100101,串口要发送的数据就是这样的:
00000101和00011010
如果让P2端口输出11111111,那串口就发送
01001111和01011111。
当然在单片机上就需要编写相应的程序来处理串口收到的内容。
追问
单片机同时接收了00000101和10100101我想知道如何让单片机接收到00000101之后如何将赋给P1?
回答
单片机肯定要运行程序判断接收的数据然后才赋值啊,比如设置一个变量t来接收串口收到的命令,然后执行t&0xE0取出高三位判断向哪个端口赋值,再执行t&0x10判断是向高四位还是第四位赋值,然后将t&0x0F向端口写入数据。简单的程序像这样:
if((t&0xE0)==0x00) //判断,如果是向P0口赋值
{
if(t&0x10) {P0&=0x0F;P0|=(t&0x0F)<<4;} //如果是向高四位赋值
else {P0&=0xF0;P0|=t&0x0F;} //如果是向第四位赋值。
}
通过串口控制单片机I/O口, 如控制单个 8 路 可以 收到的SBUF值赋给P0 口,要 可以所有的 就要设计一个 协议 如 (指令码 数据码 校验码 结束码) 你这个比较简单,可以用 两个字节
如 (指令码 数据码 ) 00 为 P0 , 01 为 P1 , 02 为 P2 , 03 为 P3 ,
如 发送 01 55 则单片机 收到 01 为 P1 口数据 等第二数据 赋给P1,P1=55
如果要确保不出错,协议要完整些。
可以用标志方法啊 先发00000001 再发10000000 再发数据 这样的一串数据赋值给一个口下一个标志先发00000010 再发01000000再发数据 根据不同的标志判断是付给谁的值
只是给你个思路哈 到复杂的地方都是有通信协议的按照协议写 (就是编程语言中的一种手语旗语一样 发什么有什么含义)