今天小编要和大家分享的是接口,总线,驱动相关信息,接下来我将从52单片机实现IO口模拟串行口通信的设计,单片机实验8-rs232串行口实验ppt这几个方面来介绍。
接口,总线,驱动相关技术文章52单片机实现IO口模拟串行口通信的设计
52单片机实用的IO模拟串行口C语言源程序
用途:短距离、波特率要求不高、环境干扰不大的场合
特点:
程序简练、实用、移植方便
占用定时器T2
只消耗约600字节的ROM
有详细的注释
参数:
晶振:22.1184MHz
波特率:1200
起始位:1
数据位:8
校验位:无
停止位:1
#include
//将T2定时器的自动重装寄存器定义成16位SFR,以方便访问
sfr16 RCAP2 = 0xCA;
//修改如下定义将方便程序移植
sbit RXD_pin = P3^0; //定义接收引脚
sbit TXD_pin = P3^1; //定义发送引脚
#define MAIN_CLK 22118400L //定义主频
#define BAUD_RATE 1200L //定义波特率(数值不能太高,因为要给T2中断服务程序留足执行时间)
#define HITS 8 //定义采样率(应当是偶数;减少采样率能提高波特率,但为保证可靠工作,最小不能少于6次)
#define RXD_BUF_LEN 32 //定义接收缓冲区大小
volatile unsigned char RXD_buf[RXD_BUF_LEN]; //定义接收缓冲区(循环队列)
volatile unsigned char RXD_p1; //指向缓冲区,由中断程序自动修改
volatile unsigned char RXD_p2; //指向缓冲区,由主程序修改
#define TXD_BUF_LEN 32 //定义发送缓冲区大小
volatile unsigned char TXD_buf[TXD_BUF_LEN]; //定义发送缓冲区(循环队列)
volatile unsigned char TXD_p1; //指向TXD_buf,由主程序修改
volatile unsigned char TXD_p2; //指向TXD_buf,由中断程序修改
//定时器T2初始化
extern void T2_init()
{
EA = 0;
T2CON = 0x00;
PT2 = 1; //将T2中断设置成高级优先级
RCAP2 = 65536L - ( MAIN_CLK / 12 ) / ( BAUD_RATE * HITS ); //此公式值得你琢磨一下
TH2 = RCAP2H;
TL2 = RCAP2L;
ET2 = 1;
TR2 = 1;
EA = 1;
}
//接收初始化
extern void RXD_init()
{
unsigned char i;
RXD_pin = 1;
RXD_p1 = 0;
RXD_p2 = 0;