寒假过去一半了,这两天重新开始学习。这里来个小结,51单片机的一些关于串口通信的寄存器/锁存器。
首先放上一段代码,来自郭天祥的51单片机教程
功能是:向单片机发送一个字符(比如e),然后单片机返回字符串“ I get e”,串口通信。
#include <reg52.h> #include <intrins.h> typedef unsigned char uchar; typedef unsigned int uint; uchar flag, a; uchar code table[]=" I get "; //串口初始化 void Serial_Init() { TMOD = 0x20; //设定T1定时器工作方式2 TH1 = 0xfd; //T1定时器装初值 TL1 = 0xfd; //T1定时器装初值 TR1 = 1; //启动T1定时器 REN = 1; //允许串口接收 SM0 = 0; //设定串口工作方式1 SM1 = 1; //同上 EA = 1; //开总中断 ES = 1; //开串口中断 } void main() { Serial_Init(); while(1) { if(flag) { uchar i; ES = 0;//先关闭串口中断防止干扰 for(i=0; i<7; i++) { SBUF = table[i]; while(!TI);//即等待发送完成,因为发送完成后TI由硬件置位 TI = 0;//清零以进行下一次发送 } SBUF = a;//串行发送时,CPU向SBUF写入数据,sbuf的容量很大 while(!TI); TI = 0; ES = 1; flag=0; } } } void ser() interrupt 4 //串口中断,接收,a相当于接收缓存 { RI = 0;//接收完成后RI由硬件置1,中断里面清零以进行下一次接收 a = SBUF;//串行接收时,CPU从SBUF读出数据 flag = 1; }
1.SBUF
引用百科:
SCON | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
位地址 | 9FH | 9EH | 8DH | 9CH | 9BH | 9AH | 99H | 98H |
原文:http://www.cnblogs.com/Cmfvacks-IsLjj/p/3537274.html