標(biāo)題:
51單片機新手入門之Modbus通訊程序
[打印本頁]
作者:
wuyangkeji
時間:
2022-3-25 11:52
標(biāo)題:
51單片機新手入門之Modbus通訊程序
代碼如下:
#include "STC12C5A60S2.H"
#include <intrins.H>.// 頭文件
#define uchar unsigned char
#define uint unsigned int
uchar sendbuffer[17];// 發(fā)送數(shù)據(jù)
uchar flag=0;
uchar re_buffer[32];
uchar count=0;
uint ad_data=0;
double ad_vol=0;
uint con_mid=0;
uint gascon=0;
long sum_o2=0;
uint average_counter=20;
uint idata oldtemp[21];
uchar idata Send_Buff[20]; //module
uint pre_contemp=0;
uint O2_con=0;
uchar idata test[21]; //module
uint temperature=0;
uint dat;
uint testlcd=0;
uchar c[]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9};
//MAX1241 模數(shù)芯片引腳設(shè)置,此電路板我沒焊^_^
//sbit ADC_CS=P0^1;
//sbit ADC_CLK=P0^0;
//sbit ADC_DOUT=P0^2;
sbit ADC_CS=P3^6;
sbit ADC_CLK=P3^5;
sbit ADC_DOUT=P3^7;
4
//LCD12864 LCD 屏幕引腳設(shè)置
sbit cs=P2^2;
sbit sid=P2^1;
sbit sclk=P2^0;
sbit DQ=P0^1; //DS18B20 溫度引腳設(shè)置,依然沒有⋯
#define N 11
#define N2 20
void delayms(unsigned char t)
{
unsigned char i;
unsigned char j;
for(j=t;j;j--)
for(i=192;i;i--);/*1ms 延時*/
}
void delayus(uint t)
{
uint i;
for(i=0;i<t;i++)
{
_nop_();
}
}
void delay(float sec)
{
unsigned int i;
unsigned int j;
j=sec*100;
while(j--)
{
i=1561;
while(--i);
}
}
void UART1_init() // 串口1 初始化,此串口和電腦通訊
{
TMOD=0x20;/設(shè)置定時器工作方式2
TH1=0xfd; // 波特率9600
5
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
//ES=1;
}
void UART2_init()// 串口2 初始化,和模塊通訊 Modbus
{
S2CON= 0x50; // 方式1,允許接收
BRT = 0xf4; // 波特率2400
AUXR = AUXR |0X10; // 允許獨立波特率允許
AUXR1 = AUXR1&0xef; // 將uart2 切換到P1 口
IE2 = IE2|0X01; // 允許串口2 中斷
}
void UART1_Send (unsigned char UART_data)//
{
//ES=0;
SBUF = UART_data; // 將接收的數(shù)據(jù)發(fā)送回去
while(TI!=1); // 檢查發(fā)送中斷標(biāo)志位
TI = 0; // 另發(fā)送中斷標(biāo)志位為0
//ES=1;
}
void UART2_Send(unsigned char UART_data)// 串口2 發(fā)送
{
//ES = 0 ;
S2BUF = UART_data;
while((S2CON&0x02)!=0x02);
S2CON &= ~0x02;
//ES = 1 ;
}
void UART1_Send_String (char *str, char len)// 串口1 發(fā)送字符串
{
unsigned char i;
for(i=0;i<=len;i++)
{
UART1_Send(str[i]);
}
}
6
void UART2_Send_String (char *str, char len) // 串口2 發(fā)送字符串
{
unsigned char i;
for(i=0;i<=len;i++)
{
UART2_Send(str[i]);
}
}
unsigned char Creat_Addr(unsigned char adr, unsigned char position)// 計算模
塊地址
{
unsigned char hich;
unsigned char loch;
hich = adr/16;
loch = adr%16;
if(hich>9)
hich+=7;
if(loch>9)
loch+=7;
if(position == 1)
{
return hich+0x30;
}
else if(position == 0)
{
return loch+0x30;
}
}
unsigned char CheckSum(unsigned char *str, unsigned char position, uchar len)/
計算校驗碼
{
uchar i;
unsigned int sum=0;
uchar hi, lo;
//uchar len = 12;
for(i = 1; i <= len; i ++)
{
*str ++;
sum += *str;
}
sum = 256-(sum%256);
7
hi = sum/16;
lo = sum%16;
if(hi > 9)
hi += 7;
if(lo > 9)
lo += 7;
hi += 0x30;
lo += 0x30;
if(sum == 256)
hi = lo = 0x30;
if(position == 1)
{
return hi;
}
else if(position == 0)
{
return lo;
}
}
void data_init()
{
sendbuffer[0]=0x5B;
sendbuffer[1]=0x30;
sendbuffer[2]=0x30;
sendbuffer[3]=0x30;
sendbuffer[4]=0x30;
sendbuffer[5]=0x30;
sendbuffer[6]=0x7C;
sendbuffer[7]=0x30;
sendbuffer[8]=0x30;
sendbuffer[9]=0x30;
sendbuffer[10]=0x30;
sendbuffer[11]=0x30;//TEM
sendbuffer[12]=0x30;
sendbuffer[13]=0x30;
sendbuffer[14]=0x5D;
sendbuffer[15]=0x0D;
sendbuffer[16]=0x0A;
}
復(fù)制代碼
以上內(nèi)容的pdf格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便大家保存):
51單片機新手入門之Modbus通訊.pdf
(816.34 KB, 下載次數(shù): 62)
2022-3-25 11:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1