資源簡介
基于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 乒乓緩沖區操作
評論
共有 條評論