485通信c语言编程linux,Rs485通信单片机C程序

/*******************************************************************************

*  标题:                  RS485串口通信试验(接受与发送)                         *

*                                                                                                                                                            *

*  1.通过本例程了解串口的基本原理及使用 ,理解并掌握对串口进行初始化                            *

*                                                                                                                                                                *

*  2.请使用串口调试助手(Baud 4800、数据位8、停止位1、效验位无)做为上位机(发送)数据和(接受)数据,

*    请在字符串输入框中输入字符和数字(HEX),按发送按钮。观看接受窗显示情况.也可以用自动循环发送。

*

*  3.试验RS485需要用RS232转485的转换头。开板A对485转换头A  B对应485转换头B.接法大家可以参考原理图。

*                                                                                       *

* 请学员认真消化本例程,学会用C语言操作串口和485的实现                              *

********************************************************************************/

#include

#include

sbit RS485E=P3^7;   //定义485的使能脚

bit SendFlag;

unsigned int ReData,SenData;

/**************************************

延时程序

**************************************/

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。效验位无 (11.0592)

//TH1 = 0xF3;         // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)

TL1 = 0xF3;

TR1  = 1;

ES   = 1;        //开串口中断

EA   = 1;        // 开总中断

// IE = 0x0;

while(1)

{

if (SendFlag==1)    // max485(半双工通信) RE/DE定义 RE=0为接受状态  DE=1为发送状态(参考MAX485芯片管脚)

{   RS485E=1;           //                              RS5485E=0为接收状态  RS5485E=1为发送状态

SBUF=SenData;           //发送数据

delay(50);

}

else

{

RS485E=0;              //接收状态

}

}

}

/****************************************************

串口中断程序

******************************************************/

void ser_int (void) interrupt 4 using 1

{

if(TI == 1)

{

TI = 0;

SendFlag = 0;

}

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值