看着像51单片机的汇编呢,大家初学都用这个吧,在51单片机,SBUF是在串行口中用到的缓冲器,用的一个名字,其实这是两个寄存器单元,你查一下有关51单片机的书应该就会明白了,,你如果用MOV SBUF,A这样的语句,那你是给向SBUF写数据,用的是发送的SBUF,相反你如果读数据用的就是接收的SBUF缓冲器,因为这是两个寄存器单元,所以可以一边发送一边接收,不冲突,再给你举个例子,比如语句SETB 30H和MOV 30H,#00H,这两句的30H也不是一个单元,一个是位地址的30H,一个是字地址30H,编译环境是通过前边那对位操作还是对字操作来区分的,希望对你有用
补充: 串行接收和发送缓冲寄存器在物理上是分开的,由于一个是只读,一个是只写,所以用同一个地址加上读写信号就可以区分它们两个(这时候,读写信号可理解为片选信号,后者其实也可视为地址信号),芯片设计者想,何必用两个地址呢,毕竟,单片机里寄存器地址总数不多(资源宝贵),能省一个只有好处没有坏处。进而在汇编语言里收发缓冲器的符号都用同一个,由指令译码“自动识别”当前使用的到底是“收”还是“发”缓冲器。一定程度上这还简化了编程——起码少记忆和书写了一个符号吧,还免了一些张冠李戴的笔误。
sbuf: 串行数据缓冲寄存器,实际是两个缓冲器,写它,完成待发送数据的加载,读SBUF的操作可得到已接受的数据。所以在单片机中,既能接受也能发送。
SBUF,这个单词,是两用的。
在 51 单片机中,代表两个单元。
对 SBUF 写入、从 SBUF 读出,
名称同一个,但是,它们并不是同一个单元。
即能接收也能发送的