现在很多人拿51单片机起步,其中用的最多的当属STC89C52RC,但随着学习的深入,越来越感觉到这款单片机功能的落后,再加上现在物联网技术的发展,通信成了重要的一环,而许多模块比如蓝牙模块,串口屏,无线模块,GSM模块,串口语言模块等等都用串口通信,而这款单片机的串口就只有一个,远远不能满足功能复杂的大型应用,所以有些人就转向12,15,AVR,STM32等等,但这些单片机的学习资源远不如STC89C52RC,编程复杂了很多,但实际作品并不一定需要这么高级的单片机怎么办,本文将介绍几种常见的方法帮你扩展51单片机的串口:
1:先发一个常用的传统串口程序,里面包含了各种收发程序。
#include #define MAIN_Fosc 11059200UL /*使用11.0592M晶体,UL相当于无符号整型,也就是unsigned int*/ //函数声明 void ConfigUART(unsigned int baud); void SendByte(unsigned char d); void SendString(unsigned char * pd); //定义一个全局变量a存储接受到的数据 unsigned int a; void main() { EA = 1; //使能总中断 ConfigUART(9600); //配置波特率为9600 SendByte(0x03); SendString("ok"); while(1); } //串口初始化程序 void ConfigUART(unsigned int baud) { SCON = 0x50; //配置串口为模式1 TMOD &= 0x0F; //清零T1的控制位 TMOD |= 0x20; //配置T1为模式2 TH1 = 256 - (MAIN_Fosc/12/32)/baud; //计算T1重载值 TL1 = TH1; //初值等于重载值 ET1 = 0; //禁止T1中断 ES = 1; //使能串口中断 TR1 = 1; //启动T1 } //发送一个字节的数据,形参d即为待发送数据。 void SendByte(unsigned char d) { SBUF=d; //将数据写入到串口缓冲 while(!TI); //等待发送完毕 TI=0; } //发送一个字符串 void SendString(unsigned char * pd) { while((*pd)!='