今天小编要和大家分享的是接口,总线,驱动相关信息,接下来我将从52单片机实现IO口模拟串行口通信的设计,单片机实验8-rs232串行口实验ppt这几个方面来介绍。

接口,总线,驱动相关技术文章52单片机实现IO口模拟串行口通信的设计单片机实验8-rs232串行口实验ppt

接口,总线,驱动相关技术文章52单片机实现IO口模拟串行口通信的设计

52单片机实用的IO模拟串行口C语言源程序

用途:短距离、波特率要求不高、环境干扰不大的场合

特点:

程序简练、实用、移植方便

占用定时器T2

只消耗约600字节的ROM

有详细的注释

参数:

晶振:22.1184MHz

波特率:1200

起始位:1

数据位:8

校验位:无

停止位:1

52单片机实现IO口模拟串行口通信的设计

 

#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;