/*******************************************************************************************
* 標題: 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接受/發送緩沖器
}
}
|