单片机一次可接收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再发数据   根据不同的标志判断是付给谁的值    
只是给你个思路哈   到复杂的地方都是有通信协议的按照协议写   (就是编程语言中的一种手语旗语一样   发什么有什么含义)