蓝桥杯单片机串口通讯与串口接收代码详解

2019-04-15 18:46发布

我们采用串行口1编程,主要用到的特殊功能寄存器有:数据缓冲寄存器SBUF、串行口1方式控制寄存器SCON、辅助寄存器AUXR等
两个补充链接;
C51中的ABSACC.H介绍https://blog.csdn.net/qq_34629988/article/details/53225293.
51单片机 XBYTE说明https://blog.csdn.net/shenhuxi_yu/article/details/54344362.
/*******************************************************************************
  • 文件名称:串口通讯实验
  • 实验目的:
  • 1.掌握51单片机串口工作模式及相关寄存器配置方法
    2.了解51单片机波特率的计算方法
  • 程序说明:
    1.通过USB连接线连接PC机,在计算机硬件管理器中查看串口号
    2.打开串口调试工具软件,并将串口通讯波特率设定为2400
  • 硬件说明:IAP15F2K61S2@11.0592MHz
  • 日期版本:2019-2-12/qingyu
    说明因为延时程序有_nop_();函数,代表一个机器周期,所以用到了定时器,需要进行相关的配置,同时用到了串行口1的中断标志位TI,注意辅助特殊功能寄存器AUXR,能够选择定时器的工作模式(1T和12T,这是和普通八位的区别,复位及默认情况下为12T模式,与普通相同),SBUF为串口的发送与接收数据缓冲器。
*******************************************************************************/ #include "reg52.h" #include "intrins.h" #include "absacc.h" #define BAUD 2400 //波特率 #define SYSTEMCLOCK 11059200L //系统时钟频率 sfr AUXR = 0x8e; void uart_sendstring(unsigned char *str); void delay() //延时函数 { unsigned char i, j, k; _nop_();//代表一个机器周期 _nop_(); i = 43; j = 6; k = 203; do { do { while (--k); } while (--j); } while (--i); } //主函数 void main(void) { SCON = 0x50; // 串行口1的方式控制寄存器sm0,SM1为工作方式选择位,先择了方式1REN允许接收位,为1有效 ; AUXR = 0x40; //1T选择定时器1的1T模式 TMOD = 0x00; // 采用系统时钟作为计数脉冲 TL1 = (65536 - (SYSTEMCLOCK/4/BAUD)); //设置定时初值与终值,为固定模板 TH1 = (65536 - (SYSTEMCLOCK/4/BAUD))>>8; TR1 = 1; //运行控制位 启动定时器1 while(1){ uart_sendstring("hello,world. "); //串口发送函数 delay(); } } //通过串口发送字符串 void uart_sendstring(unsigned char *str) //指针变量 { unsigned char *p; p = str; while(*p != '