标题:
STC12C60S2单片机双485通讯开发双485通讯控制程序
[打印本页]
作者:
zhangxinchun
时间:
2019-11-13 00:35
标题:
STC12C60S2单片机双485通讯开发双485通讯控制程序
电路原理图如下:
ALIM0001.JPG
(156.17 KB, 下载次数: 38)
下载附件
2019-11-13 00:35 上传
ALIM0012.JPG
(2 MB, 下载次数: 38)
下载附件
2019-11-13 00:35 上传
程序说明
接线 :MAX485-1 D+ 链接 MAX485-2 D+ ;MAX485-1 D- 链接 MAX485-2 D-
功能 :串口一 自动发送一个tab数据,串口二接收,接收后数据显示在P0口的led灯上
串口二 自动发送一个tab数据,串口一接收,接收后数据显示在p0口的led灯上
按key1,P0口显示0xAA
按key2,P0口显示0x55
按key3,P0口显示0xf0
按key4,P0口显示0x0f
*********************************************************************/
#include "STC12C5A60S2.h" //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
/********************************************************************
初始定义
*********************************************************************/
uchar dat1=0,dat2=0;
uchar tab[8]={0xfe,0xfd,0xfB,0xf7,0xef,0xdf,0xBf,0x7f};
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
/********************************************************************
串口初始化
*********************************************************************/
void init ()
{
TMOD = 0x20; //定时器1产生波特率
SCON = 0x50; //方式1,8位数据,波特率可变
TH1= TL1 = 0xfd; //波特率 9600
S2CON= 0x50; //方式1,八位数据,可变波特率
BRT= 0XFD; //设置波特率9600
TR1= 1; //启动定时器产生波特率
AUXR= 0x10; //启动波特率发生器
IP= 0x00; //优先级默认
EA = 1; //开总中断
ES= 1; //开串口1中断
IE2=0x01; //开串口2中断
}
/********************************************************************
串口一 发送一个字符
*********************************************************************/
void uart1_txd(uchar x)
{
SBUF = x;
}
/********************************************************************
串口二 发送一个字符
*********************************************************************/
void uart2_txd(uchar x)
{
S2BUF = x;
}
/********************************************************************
延时函数
*********************************************************************/
void delay ( uint t )
{
uint i,j;
for( i=0; i<t; i++)
for( j=0; j<250; j++);
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
uchar i;
init();
for(i=0;i<8;i++)
{
uart1_txd(tab[i]);//串口一发送数据
delay(500);
P0=dat2; //串口二接收数据在led灯显示
delay(500);
uart2_txd(tab[7-i]); //串口二发送数据
delay(500);
P0=dat1; //串口一接收数据在led灯显示
delay(500);
}
while(1)
{
if(key1==0){delay(20);while(!key1){P0=0xAA;} }
if(key2==0){delay(20);while(!key2){P0=0x55;} }
if(key3==0){delay(20);while(!key3){P0=0xf0;} }
if(key4==0){delay(20);while(!key4){P0=0x0f;} }
}
}
/********************************************************************
串口二 发送接收中断函数
*********************************************************************/
void uart2_isr() interrupt 8
{
if( S2CON & 0x01 )
{
S2CON &= ~0x01;
dat2= S2BUF;
}
if( S2CON & 0x02 )
{
S2CON &= ~0x02;
}
}
/********************************************************************
串口一 发送接收中断函数
*********************************************************************/
void uart_isr() interrupt 4
{
if( RI )
RI = 0;
dat1 = SBUF;
if( TI )
TI = 0;
}
/********************************************************************
结束
*********************************************************************/
复制代码
全部资料51hei下载地址:
双485互相自动通讯能自动检测485线是否断开.rar
(195.03 KB, 下载次数: 32)
2019-11-13 00:35 上传
点击文件名下载附件
下载积分: 黑币 -5
keil.rar
(22.84 KB, 下载次数: 28)
2019-11-13 00:35 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
aking991
时间:
2019-11-13 09:17
这样的程序只能作为测试用用看是可以,但要作为项目用,还要很多修改修改才行
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1