资源简介

基于80C51的RS485双机通信程序_01

资源截图

代码片段和文件信息

#include  
#include  
#include “intrins.h“    
#define uchar unsigned char
#define uint  unsigned int  
#define COMD_8279 XBYTE[0x3fff]
#define DAT_8279 XBYTE[0x3ffe]
#define ADC_0809_1 XBYTE[0x9ff8]
#define PRINT_COMD XBYTE[0x1fff]
#define PRINT_PA XBYTE[0x1ffc]

sbit DOG=P3^5;
sbit TFR=P3^3;
sbit RE_DE=P1^5;//RS485发送控制位
sbit STB=P1^6;
sbit BUSY=P1^7;

uchar code LED[]={0xFC0x600xDA0xF20x660xB60xBE0xE00xFE0xF60x00}; 
uchar code PRINT_NUMBER[]={0x300x310x320x330x340x350x360x370x380x39};
uchar Integer;
uchar Decimals;
uchar AD_value;
uchar rx_buff;//主机的接收缓存
uchar PRINT_FLAG;//打印标志,只有按键3才能打印

void delay1(uint x);
void delay2();
//void test();
void change_value();
void display_value();
void print_byte(uchar byte);
void print_string();
void print_votage();
void shake_hands();
void send_byte(uchar byte);
void send_data();
void fooddog();

void main()
{
/*8279初始化*/
COMD_8279=0xd1;//总清除命令
delay1(4);
COMD_8279=0x00;//8字符显示,左端入口方式,编码(指经过译码器后输出)扫描键盘,双键锁定(保证只有一个键按下)
COMD_8279=0x34;//时钟编程命令,用来设置分频系数,20分频

/*设置主机串口初始化*/
TMOD=0X20;//设置定时器T1为工作方式2
TL1=0Xe6;//初值的计算:X=2^8-2^SMOD*f/(384*波特率)这里算出波特率为2400
TH1=0xe6;
PCON=0X00;//设置SMOD的值为0
SCON=0X50;//设置串口为工作方式1,REN=1,允许接收

/*中断和定时器的开启*/
TCON=0x41;//INT0为负边缘触发,启动定时器1
IE=0x95;//允许INT0,INT1中断
PRINT_COMD = 0x80;

// shake_hands();//与从机握手
//test();//开机数码管全显示
while(1)
{
while(TFR==1)
fooddog();
change_value();// 转换为可显示的值
display_value();//显示电压值

send_data();//发送电压值
while(PRINT_FLAG==1)//打印电压值
{
print_votage();
PRINT_FLAG=0;
delay2();
}
}
}
void get_key(void) interrupt 0 using 1
{
int k;
COMD_8279=0x40;
k=DAT_8279;
if(k&0x03)
{
PRINT_FLAG=1;
}
}
void get_ADvalue() interrupt 2 using 2
{
ADC_0809_1=0;
AD_value=ADC_0809_1;
}
/*
void receive_byte(void) interrupt 4 using 3
{
if(RI)
{
rx_buff=SBUF;
}
RI=0;
}
*/

void display_value()
{
uint i;
COMD_8279=0x90;
DAT_8279=LED[Integer]|0x01;
DAT_8279=LED[Decimals];
for(i=2;i<8;i++)
DAT_8279=0x00;
}
void change_value()//转换为可显示的值
{
  AD_value=((AD_value*50)/255);
  Integer=AD_value/10;
  Decimals=AD_value%10;
}
void print_byte(uchar i)
{
while (BUSY==1)//判断打印机是否繁忙
fooddog();
PRINT_PA=i;
STB=0;
_nop_();
_nop_();
_nop_();
STB=1;
}
void print_string(uchar *str)
{
while (*str)
{
print_byte(*(str++));
}
}
void print_votage()
{
/*初始化打印机*/
print_byte(0x1b);
print_byte(0x40);
print_string(“voltage“);
print_byte(0x3d);
print_byte(PRINT_NUMBER[Integer]);//打印整数部分
print_byte(0x2e);//打印小数点
print_byte(PRINT_NUMBER[Decimals]);//打印小数部分
print_byte(0x56);//打印V
print_byte(0x0d);//换行
}
void shake_hands()//握手函数,发送0xbb,若收到回应0x55则发送成功,否则继续发送
{
send_byte(0xbb);
if(rx_buff!=0x55)
{
send_byte(0xbb);
}
}
void send_byte(uchar byte)//发送函数
{
RE_DE=1;//设置485为发送状态
SBUF=byte;
while(!TI);
TI=0;
RE_DE=0;//设置为接收状态

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-11-03 11:41  RS485_2\
     文件       10817  2015-11-03 07:31  RS485_2\RS485
     文件       74356  2015-11-03 07:42  RS485_2\RS485.uvopt
     文件       14048  2015-11-03 07:31  RS485_2\STARTUP.LST
     文件        6376  2006-02-20 01:51  RS485_2\STARTUP.A51
     文件       13605  2015-10-29 01:06  RS485_2\RS485_uvproj.bak
     文件       55638  2006-02-20 02:01  RS485_2\RS485_uvopt.bak
     文件       13419  2015-10-29 13:56  RS485_2\RS485.uvproj
     文件       11888  2015-11-03 07:31  RS485_2\main.OBJ
     文件       71684  2015-10-28 23:47  RS485_2\RS485.uvgui_Administrator.bak
     文件       72403  2015-10-29 01:06  RS485_2\RS485.uvgui.Administrator
     文件         465  2015-11-03 07:42  RS485_2\RS485.plg
     文件       14526  2015-11-03 07:31  RS485_2\RS485.M51
     文件          57  2015-11-03 07:31  RS485_2\RS485.lnp
     文件        1923  2015-11-03 07:31  RS485_2\RS485.hex
     文件         749  2015-11-03 07:31  RS485_2\STARTUP.OBJ
     文件        8619  2015-11-03 07:31  RS485_2\main.LST
     文件        3745  2015-11-04 12:46  RS485_2\main.c
     目录           0  2015-11-03 11:41  RS485_slave\
     文件       57021  2015-11-03 04:50  RS485_slave\RS485_slave.uvopt
     文件        7247  2015-11-03 04:50  RS485_slave\RS485_slave
     文件        7601  2015-11-03 04:50  RS485_slave\RS485_slave.OBJ
     文件       10733  2015-11-03 04:50  RS485_slave\RS485_slave.LST
     文件         758  2015-11-03 04:50  RS485_slave\STARTUP.OBJ
     文件       14048  2015-11-03 04:50  RS485_slave\STARTUP.LST
     文件        6376  2006-02-20 04:15  RS485_slave\STARTUP.A51
     文件       13243  2015-10-29 15:13  RS485_slave\RS485_slave_uvproj.bak
     文件       74694  2015-11-03 01:33  RS485_slave\RS485_slave_uvopt.bak
     文件       13419  2015-11-01 08:00  RS485_slave\RS485_slave.uvproj
     文件       71573  2015-10-29 05:05  RS485_slave\RS485_slave.uvgui.Administrator
     文件         575  2015-11-03 04:50  RS485_slave\RS485_slave.plg
............此处省略4个文件信息

评论

共有 条评论