欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機 下位機 MODBUS例程與資料下載
[打印本頁]
作者:
DREAKER
時間:
2017-7-1 20:26
標題:
51單片機 下位機 MODBUS例程與資料下載
51單片機 下位機 MODBUS例程
0.png
(47.15 KB, 下載次數: 83)
下載附件
2017-7-1 20:31 上傳
里面包含MODBUS協議與規格書詳解
單片機程序如下:
#include "main.h"
/******************************
modbus RTU 的C51程序
單片機89S52
通信波特率 9600 8位數據 1位停止位 偶校驗 485通位接口
單片機控制板地址 localAddr(變量)
通信可設置數據的地址:
字地址 0 - 255 (只取16位的低8位)
位地址 0 - 255 (只取16位的低8位)
*******************************/
uint32 dwTickCount,dwIntTick; //時鐘
uint8 idata sendBuf[16],receBuf[16]; //發送接收緩沖區
uint8 idata checkoutError; // ==2 偶校驗錯
uint8 idata receTimeOut; //接收超時
uint8 idata c10ms; //10ms 計時
bit b1ms,bt1ms,b10ms,bt10ms,b100ms,bt100ms; //定時標志位
// 串行中斷程序
void commIntProc() interrupt 4
{
if(TI)
{
TI = 0;
if(sendPosi < sendCount)
{
sendPosi++;
ACC = sendBuf[sendPosi];
TB8 = P; //加上校驗位
SBUF = sendBuf[sendPosi];
}
else
{
b485Send = 0; //發送完后將485置于接收狀態
receCount = 0; //清接收地址偏移寄存器
checkoutError = 0;
}
}
else if(RI)
{
RI = 0;
receTimeOut = 10; //通訊超時值
receBuf[receCount] = SBUF;
ACC = receBuf[receCount];
if(P != RB8)
checkoutError = 2; //偶校驗出錯
receCount++; //接收地址偏移寄存器加1
receCount &= 0x0f; //最多一次只能接收16個字節
}
} // void CommIntProc()
//定時器0 1ms 中斷
void timer0IntProc() interrupt 1
{
TL0 = TIMER_LOW;
TH0 = TIMER_HIGHT;
dwIntTick++;
bt1ms = 1;
c10ms++;
if(c10ms >= 10)
{
c10ms = 0; //10ms計時器清零
bt10ms = 1;
}
} // void Timer0IntProc()
//外部中斷0
void intEx0Proc(void) interrupt 0
{
}
//計數器1中斷
void counter1IntProc(void) interrupt 3 using 1
{
}
//定時處理
void timeProc(void)
{
static uint8 c200ms;
bWatchDog = ~ bWatchDog; //看門狗取反
b1ms = 0;
b10ms = 0;
b100ms = 0;
ET0 = 0;
dwTickCount = dwIntTick;
ET0 = 1;
if(bt1ms)
{
bt1ms = 0;
b1ms = 1;
if(receTimeOut>0)
{
receTimeOut--;
if(receTimeOut==0 && receCount>0) //判斷通訊接收是否超時
{
b485Send = 0; //將485置為接收狀態
receCount = 0; //將接收地址偏移寄存器清零
checkoutError = 0;
}
}
}
if(bt100ms)
{
bt100ms = 0;
b100ms = 1;
}
if(bt10ms) //判斷中斷10ms標志位是否1
{
bt10ms = 0; //清中斷10ms標志位
b10ms = 1;
c200ms++; //200ms計時器加1
if(c200ms >= 20) //判斷是否計時到200ms
{
c200ms = 0; //清200ms計時器
bRunLED = ~bRunLED; //取反運行指示燈
}
}
} // void TimerProc(void)
//初始化串口
void initUart(void)
{
//T2 用于波特率 9600
T2CON = 0x30;
RCAP2H = 0xff;
RCAP2L = 0xb8;
TR2 = 1;
//偶校驗
SCON = 0xd0;
PCON = 0;
ES = 1;
}//void initUart(void)
//初始化中斷
void initInt(void)
{
TMOD = 0x51;
TH0 = TIMER_HIGHT;
TL0 = TIMER_LOW;
TR0 = 1;
ET0 = 1;
TH1 = 0; //9600
TL1 = 0;
TR1 = 0; //定時器1用于計數定時器2用于波特
ET1 = 1;
//PT1 = 1;
IT0 = 1;
IT1 = 1;
EX0 = 0;
PX0 = 1;
EX1 = 0;
initUart();
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
51 單片機MODBUS例程.rar
(2.2 MB, 下載次數: 153)
2017-7-1 20:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
hdle
時間:
2017-7-8 21:52
好東東值得花時間去學習。
作者:
jiangqq
時間:
2018-9-17 22:51
得花時間去學習。
作者:
yulin3192
時間:
2019-2-18 16:45
謝謝樓主資料
作者:
jemery1030
時間:
2019-7-24 21:03
非常感謝
作者:
mycomputer
時間:
2020-4-3 07:52
好東東值得花時間去學習。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1