资源简介
基于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个文件信息
- 上一篇:TreeView加载省市数据库
- 下一篇:verilog fifo 乒乓缓冲区操作
相关资源
- RS232-TTl-RS485转接口电路
- STM32F103ZET6单片机CAN总线通信程序例程
- 基于pic16f1947 和ADM2483、rs485电路发送接
- RS485一对四双向通信Proteus仿真+Keil收发
- DS1337 MSP430单片机C代码
- 一个自动收发的RS485电路图
- 基于单片机c51的计算器
- 单片机C51-电子钟1 LCD1602显示 上电正常
- 单片机C51-键盘 定时扫描
- FT4232设置为RS485接口输出教程.docx
- 中南大学单片机课设 密码锁
- 基于51单片机RS485多机通讯
- 基于51单片机的RS485的从机系统的设计
- 基于51单片机的RS485从机系统设计
- verilog rs485
- S7-200与RS485设备通讯
- 三菱PLC与变频器通讯(2台
- 51单片机实现的RS485通讯程序
- 富士G11和224CN RS485通信纸机传动.rar
- AVR-ATmega16双机通信双向,并带反馈I
- RS485_Verilog.rar
- RS485使用手册与指南[中文版、文字版
- 基于RS485通信协议的
- RS485总线的proteus环境下仿真,实现1主
- RS485多机通信,带C51源程序,带仿真!
- 单片机c51设计简易计算器数码管显示
- RS232和RS485 模块接口原理图
- proteus 双机通信仿真简单实用的单片机
- RS485_BMS.rar
- RS485通讯超声波流量计.pdf
评论
共有 条评论