在51单片机上实现RS485,其实也是对UART的操作。
硬件连接如下图:
代码比较简单,如下:
#include
#include "Config.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
#define Fosc 6000000UL //晶振主频6MHz
#define BaudRate 1200UL //波特率为1200bps
sbit RS485_RE_ED = P2^2;
code uchar TestTab1[]={"www.EDNChina.com\n"};
void delay500ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=11;c>0;c--)
for(b=92;b>0;b--)
for(a=122;a>0;a--);
}
/********************
函数名称:UART_Initial
函数功能:串口初始化
入口参数:无
返回参数:无
备 注:无
*********************/
void UART_Initial(void)
{
EA = 0; //关中断
TMOD &= 0x0F; //定时器1模式控制在高4位
TMOD |= 0x20; //定时器1,工作模式2,自动重载
SCON = 0x50; //串口模式1
TH1 = -(Fosc/12/32/BaudRate);
TL1 = TH1;
PCON = 0x00; //串口波特率加倍
ES = 1; //串口中断允许
TR1 = 1; //启动定时器1
REN = 1; //允许接收
EA = 1; //允许总中断
RS485_RE_ED = 1;
}
/***********End of Function***********/
/********************
函数名称:PutString2UART
函数功能:向串口发送一个字符串
入口参数:uchar* pi——要向串口发送的字符串指针
返回参数:无
备 注:无
*********************/
void PutString2UART(uchar *ps)
{
EA = 0;
while((*ps)!='\0')
{
SBUF = *ps;
while(TI==0);
TI = 0;
ps++;
}
EA = 1;
}
/***********End of Function***********/
void main(void)
{
UART_Initial();
while(1)
{
PutString2UART(TestTab1);
delay500ms();
}
}
飞言走笔 2013-8-26 13:08
用户153223 2013-8-26 11:23
xucun915_925777961 2013-8-12 21:30