环境试验箱[易尔昌博客|Seo.YrcKJ.CN] 温湿度模拟|防水防尘试验箱|光老化试验|耐臭氧老化试验箱|盐雾污秽装置等

MODBUS-Rtu 单片机C51从机通信程序【老化试验箱】

MODBUS-Rtu 单片机C51从机通信程序【老化试验箱


#include "STC89C51RC_RD_PLUS.h"

#include "math.h"

#include "intrins.h"

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

extern volatile uchar IN_IO,OUT_IO;   //定义IO输入输出映射

extern void input_io(void);  //输入处理函数

extern void jd_on(uchar x);  //接通继电器函数

extern void jd_off(uchar x); //断开继电器函数

extern uint CRC16(uchar *pushMsg,unsigned short usDataLen);//modbus crc 函数

extern uchar *pushMsg;

uchar idata recebuf[16]=0;      //接收数据缓冲区

uchar idata recebuf_com[16]=0;  //接收命令数据缓冲区

uchar idata command_Len=0;      //待处理命令消息字节长度

uchar idata command_ok=0;       //接收到一个命令结束,等待处理时为1;否则为0.

uchar idata sendbuf[16]=0;      //发送数据缓冲区

uchar idata send_Len=1;         //发送数据长度

uchar idata rece_Len=0;         //接收数据长度

uint  idata ad1,ad2,ad3,ad4;                             //模拟量输入寄存器

uint  idata ad_1[5],ad_2[5],ad_3[5],ad_4[5];   //模拟量滤波器

uchar idata addr;                                       //本机地址

uint  idata crc_z;                                       //crc校验结果

uchar idata timer0_cn=0;

uchar code  check=1;            //奇偶校验。check=0时,偶校验;check=1时;奇校验

uchar idata js_check=0;         //奇偶校验检查位。js_check=1时正确,js_check=2时错误!

uint TLC2543(uchar prot);//AD转换函数老化试验箱

void group_out_ad(void); //数据上传函数

void group_out_io(void); //数据上传函数

void delay(uchar x);     //短延时函数

void AV_in(void);        //模拟量输入函数

void Serial(void);       //串口配置函数

void chenck_fun(uchar x);//

void command(void);      //接收到的消息命令处理函数

void command_01(void);

void command_02(void);

void command_03(void);

void command_04(void);

void command_05(void);

void command_06(void);

void  jc(void);

sbit XJ=P3^7;

sbit RUN=P3^6;

sbit cs=P3^5;

sbit clk=P3^2;

sbit din=P3^3;

sbit dout=P3^4;

uint code r[8]={128,64,32,16,8,4,2,1};

void delay(uchar x)

{ uchar i;

    while(x--){for(i=0;i<25;i++);}

}

uint TLC2543(uchar prot)

{uchar i;

    uchar ad_reg;     //通道号寄存器

    uint rdsh=0,rdsl=0;

    cs=0;             //使能AD转换

    ad_reg=prot;      //取通道号

    ad_reg=ad_reg<<4;

for(i=0;i<8;i++){

    din=(bit)(ad_reg&0x80);

    clk=1;clk=0;

    ad_reg=ad_reg<<1;

}

for(i=0;i<4;i++){din=0;clk=1;clk=0;} //补4个时钟



留言列表
发表留言
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。