/*******************************************************************************************
* 标题: RS485通信试验(接收与发送) *
* *
* 1.通过本例程了解串口的基本原理及使用 ,理解并掌握对串口进行初始化 *
* *
* 2.Baud 19200、数据位8、停止位1、效验位无 两台485设备 a机发 b机收 *
* *
* 说明: *
* 使用两个带有485功能硬件设备(例如:两个带485的开发箱等) 每个设备都有信号端A和B,通过导线 *
* 分别连接两台设备 A 连 A B 连 B 排线连接参考图片 *
* 现象:按A机的独立按钮 在B机的LED等显示其状态 对应位的LED灯亮 *
* 注意:18B20 请卸下,否则会影响RS485 *
* 请学员认真消化本例程,学会用C语言操作串口和485的实现简单收发功能 *
*********************************************************************************************/
#include <REG52.H>
#include <stdio.h>
sbit RS485E=P3^7; //定义485的使能脚
/**************************************
延时程序
**************************************/
void delay(unsigned char i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void main (void) {
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
while(1)
{
if (P0 != 0XFF) // max485(半双工通信) RE/DE定义 RE=0为接受状态 DE=1为发送状态(参考MAX485芯片管脚)
{
RS485E=1; // RS5485E=0为接收状态 RS5485E=1为发送状态
SBUF=P0; //发送数据
delay(40);
}
}
}
/*******************************************************************************************
* 标题: RS485通信试验(接收与发送) *
* *
* 1.通过本例程了解串口的基本原理及使用 ,理解并掌握对串口进行初始化 *
* *
* 2.Baud 19200、数据位8、停止位1、效验位无 两台485设备 a机发 b机收 *
* *
* 说明: *
* 使用两个带有485功能硬件设备(例如:两个带485的开发箱等) 每个设备都有信号端A和B,通过导线 *
* 分别连接两台设备 A 连 A B 连 B 排线连接参考图片 *
* 现象:按A机的独立按钮 在B机的LED等显示其状态 对应位的LED灯亮 *
* 注意:18B20 请卸下,否则会影响RS485 *
* 请学员认真消化本例程,学会用C语言操作串口和485的实现简单收发功能 *
*********************************************************************************************/
#include <REG52.H>
#include <stdio.h>
sbit RS485E=P3^7; //定义485的使能脚
unsigned int ReData;
/**************************************
延时程序
**************************************/
void delay(unsigned char i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void main (void) {
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
while(1)
{ P0 = 0xff;
P0 = ReData; // max485(半双工通信) RE/DE定义 RE=0为接受状态 DE=1为发送状态(参考MAX485芯片管脚)
RS485E=0; // RS5485E=0为接收状态 RS5485E=1为发送状态
delay(20);
}
}
/****************************************************
串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF; //SUBF接受/发送缓冲器
}
}
|