今天学习了串口通信UART部分,理解得还不够深刻,总体来说感觉比IIC等简单一些,通用异步收发,实现发送接收指令控制的基础内容。
实现代码如下:
//UART串口通信
#include
unsigned char urdat;
void delayms(int ms);
void sendbyte(unsigned char dat);
void uart_init();
void sendstring(unsigned char *str);
void working();
void main(){
uart_init();
delayms(10);
sendstring("Hello,everyone\r\n");
while(1){
working();
}
}
void delayms(int ms){
int q,w;
for(q=0;q<ms;q++)
for(w=0;w<845;w++);
}
void uart_init(){
//定时器1设置波特率.自动重装模式,tl1=th1
TMOD=0x20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
SCON=0X50;
AUXR&=0X40;
//中断打开
ES=1;EA=1;
}
void uart_service() interrupt 4{
//接收完人工进行清零
if(RI==1){
RI=0;
urdat=SBUF;
}
}
void working(){
if(urdat!=0){
switch(urdat){
case 0x01:
sendstring("Hello\r\n");urdat=0x00;
break;
case 0x02:
sendstring("Goodbye\r\n");urdat=0x00;
break;
case 0x03:
sendstring("Happy\r\n");urdat=0x00;
break;
}
}
}
void sendbyte(unsigned char dat){
SBUF=dat;
while(TI==0);
TI=0;
}
void sendstring(unsigned char *str){
while(*str !='\0'){
sendbyte(*str++);
}
}