你这种情况问题出在仿真上了,不是所有程序过程都能仿真出来的。如果你对SBUF这个寄存的特点了解了就能明白了。
SBUF寄存器虽然名称是这个,可实际上在单片机内部是两个,一个是接收的,另一个是发送的,名字是一个,物理地址也是一个,但却是两个,在数值上是没有关系的。
好吧,说说你的问题:
SBUF=0x01; 这是发送,将01送到发送寄存器SBUF中了。
而P0=SBUF是读接收寄存器SBUF中的数据,这个接收寄存器(并不是01)是必须由物理串口真正的接收到数据后才能赋值的,是仿真不出来的,需要从真的物理串口上接收到数据才行。而这个寄存器复位后的值是0,所以,这个结果是:P0值还为0x00。
这个问题你要做个实物,即实际电路板,在实物上向串口发送数据,然后再执行P0=SBUF,那就是向物理串口发送的数据了。