关于蓝桥杯单片机——串口通信

#include "reg52.h"  //定义51单片机特殊功能寄存器
#include "absacc.h"


#define BAUD     2400   //波特率
#define SYSTEMCLOCK  11059200L  //系统时钟频率


sfr AUXR  = 0x8e; 


bit rxc = 0;
char rx = '1';
void uart_sendstring(unsigned char *str);


//主函数
void main(void)

    SCON = 0x50;                


    AUXR = 0x40;                //1T
    TMOD = 0x00;                //
    TL1 = (65536 - (SYSTEMCLOCK/4/BAUD));   //
    TH1 = (65536 - (SYSTEMCLOCK/4/BAUD))>>8;
    TR1 = 1;  
ES = 1;
EA = 1;

    while(1)
    {
if(rxc == 1){
rxc = 0;
switch(rx){
case '1':
XBYTE[0x8000] = 0xFE;
break;
case '2':
XBYTE[0x8000] = 0xFD;
break;
case '3':
XBYTE[0x8000] = 0xFB;
break;
case '4':
XBYTE[0x8000] = 0xF7;
break;
case '5':
XBYTE[0x8000] = 0xEF;
break;
case '6':
XBYTE[0x8000] = 0xDF;
break;
case '7':
XBYTE[0x8000] = 0xBF;
break;
case '8':
XBYTE[0x8000] = 0x7F;
break;
default:
uart_sendstring("error\r\n"); //输入其他数据返回error
break;
}
ES = 1;
}
    }
}


//串口中断服务函数
void isr_uart(void) interrupt 4
{
    if(RI)
    {
        RI = 0;  //清除接收标志位 
        rx = SBUF;
ES = 0;
rxc = 1;
}
}


//通过串口发送字符串
void uart_sendstring(unsigned char *str)
{
    unsigned char *p;
    
    p = str;
    while(*p != '\0')
    {
        SBUF = *p;
while(TI == 0);  //等待发送标志位置位
TI = 0;
        p++;
    }
}

你可能感兴趣的:(蓝桥杯)