资源简介
基于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 乒乓缓冲区操作
相关资源
- USB转串口(RS232/RS485/RS422)驱动程序文
- 消防指示灯智能监控系统三端口网关
- 为RS-232/485的高频瞬态干扰提供的解决
- VC++ RS232 RS485串口通信源代码_
- RS485串口调试工具
- STM32通过串口实现双机通信,达到数据
- STM32通过串口实现双机通信,实现数据
- stm32实现modbus主机从机功能通信
- FreeModbus_For_STM32_USART1_RS485移植分享
- ATMEL AT91SAM7S64的RS485通讯程序源码
- stm32f103 通过485方式读取数据
- 汉枫_HF-LPB嵌入式WiFi模块_UART转WiFi_S
- 一款自动流向控制、宽接口电压的R
- STM32 RS485通信应用
- 基于RS-485的分布式多总线通信系统设
- RS422驱动.rar
- Modbus协议的工业自动化网络规范
- 单片机c51编译器COMP51
- 基于STM32F103的RS485通信主动发送中断接
- 基于STM32F103的RS485通信采用DMA方式发送
- RS485串口调试案例带CRC校检
- 基于1602的自制无线模块双机通信pro
- STM32四通道4-20ma
- STM32F103单片机基于RS485总线的MODBUS通讯
- 基于STM32RS485总线的数据采集系统设计
- stm32f103 CAN-RS232/RS485
- stm32 rs485 modbus协议
- stm32 RS485测试程序
- STM32F103C8T6 CAN总线 RS485 RS232 源代码
- RS485通信模块设计以及智能家居系统
评论
共有 条评论