找回密码
 注册
关于网站域名变更的通知
查看: 463|回复: 5
打印 上一主题 下一主题

基于MODBUS协议的单片机主程序 测试通过

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-6 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于MODBUS协议的单片机主程序 测试通过8 O( L0 _0 P" _! O
6 q" J, U. b2 \9 v* V" R: }0 |3 v

/ }* i* o# o1 c4 P( Y$ _
/ C& M6 k3 ^# ^& e, k/ z) d) n( K; O
! D, ^% K2 B; D
单片机源程序:
; z9 p. I7 t6 e, `0 H3 ?#include"reg51.h"; y  n# ^  t5 I  q- \
#include"lcd.h". m; {8 |4 L- U. n1 R  Y2 C
#include"address.h"% n8 k. P6 b2 `2 l5 J! S- g
#include"intrins.h": m# y. I  y6 e! k: M( z( C& m
#include"crc.h", G4 I% \1 I" y( d
#define uint unsigned int) v: ~  F. K, O
#define uchar unsigned char, f# m. e# ?2 R' N% h! g) C) F
uchar code sendbuf[]={0x01,0x03,0x00,0x0b,0x00,0x01,0xf5,0xc8};         
6 _( r! V: p! F  {+ h+ m//0x01 从站地址,0x03功能码,0x00寄存器地址高位,0x09寄存器地址低位,0x00数据个数高位,0x01数据个数低位,0x54CRC校验码高位,0x08CRC校验码低位
# g( q' B, O2 Q* q: ^6 i2 U9 @5 Cuchar code tab[]={'0','1','2','3','4','5','6','7','8','9'};+ M( L! p9 I& G' |6 ~2 g, {4 u
uchar code error[]={"error!"};
) A. {) n% [3 tuchar tem[5],tem1[8];3 X/ M+ P3 v8 K4 e+ w
uchar resvbuf[7];$ e/ \  j, v, L) V3 g* ?
int i,j;9 m! l5 s7 N! {9 H
uchar resvend,temp2;( D) {. s( |, }$ k6 z, [: U+ V
uint crctemp,temp,temp1;( X: ?) L. [+ e. l) H2 ^
void convert10(uint dat)
! x8 t. P( g) s' s  M4 Q{
  @# c+ R; k* ~; }8 M8 b. o: s* x  uchar i;# |$ G4 O) ^5 x1 i  R% i" t. z: }
  tem1[0]='U';7 i1 }! J- d+ T6 C
  tem1[1]='=';
8 {/ X/ E. g* X7 u) f% B  tem1[7]='V';6 U* b  f) g4 |( {4 ^9 f! Z; K% p
  tem[0]=dat/10000;. @2 T7 s: O" ^& n! ^# d, z9 a
  dat=dat%10000;8 T# e+ W$ n% g7 m1 |8 e( h- r8 i
  tem[1]=dat/1000;* h/ S; }: B; z2 r+ X% v: U
  dat=dat%1000;2 m# j) w& h# ^5 `
  tem[2]=dat/100;
+ I" y' `6 |/ v: }  dat=dat%100;
* j3 W& o/ K( g9 T: p7 H  tem[3]=dat/10;* _8 m( k; c- T; K- p4 W( f
  tem[4]=dat%10;6 H& v% y& x* ?8 l: M* T% v
  for (i=0;i<5;i++)" p# K" p2 d& s, a: Y
  {
4 N* \4 _9 s6 T0 _2 e    tem1[i+2]=tab[tem];
+ i1 s) W1 X0 n+ Z0 P  }/ K8 S8 `; |& T
}- z$ p1 X4 T5 U- j
void serial_int() interrupt 4         using 1
- b  I4 ?$ @. K5 \$ c9 k{* Q% [  \. V8 V
if(RI)
3 T) \% c* m- D$ M {
5 f9 E* N+ U- S- p1 v) W" J   RI=0;# c  z' }0 K- d* X# x( O8 q+ o2 y
   //temp2=SBUF;8 a! X. w5 k# R  N, T
    resvbuf[j++]=SBUF;  
- }3 x: B9 S* N( A) d- n( k& u   if(j==7)
: p6 [, |8 O, E- g' y   {$ t* C8 X  i; ]8 A: {3 a
     j=0;0 l8 S9 \+ a+ r' D9 X: A9 E
         resvend=1;+ B6 G3 I" e9 c9 q! f* j! `: L2 _4 G
   }    * \' }3 J0 {; H- i( q: c
}        
' D! y, H5 [' y}            / N9 _8 u& l. l! Z/ d' X* [
void initserial        ()" m0 A  d% y9 E; {6 _
{
% h, I2 Q/ f& Z resvend=0;
* {1 Q( E2 e9 }: k TMOD=0x20;
% n; M9 k! x) O6 E% q' k6 X- Y8 { PCON=0x00;5 s! j7 I/ ^! d9 v" M! p2 {
SCON=0xd8;& s5 p! }7 x2 l3 B" O
TL1=0xfd;: Z& K, s  g% T- m) w' Y( I
TH1=0xfd;
# e# W6 g/ ?* M! o1 k' m) ?; F TR1=1;: g. _- v% G# m
ES=1;
* |' H( p+ }( b}1 e. ]0 U! R3 c/ m
void displayout()% p9 T) m$ V; ?7 I; O/ e8 A
{
2 {* K9 S! k, X2 g   crctemp=crccheck(resvbuf,5);
7 [5 d6 h6 H. }9 v5 Q   temp=resvbuf[5];
& X) ~* M6 D" @( w" M   temp=temp << 8 | resvbuf[6];- J% I" I' s5 h; N' E. O$ X. c# h
   if(temp==crctemp)
( T, `; a1 ^$ F6 d9 x8 H   {
: d  ^( o" y9 O        temp1=0;2 B. o. h9 x# K1 M# a9 H
            temp1 |=resvbuf[3];+ c6 ?5 @6 Z2 N, ^, _5 Y
                temp1= temp1<<8 | resvbuf[4];6 l. m. z5 M4 F' c6 |$ i# q
                convert10(temp1);* N& o' J( |7 y8 c9 b
                printf(tem1,8);
/ @9 t2 I, Z& r$ }& e8 S# f    }1 m; n2 P% {4 _9 G- V
  else
6 r1 q( \. j% B2 V8 v   {' h: n# ]* \/ M
      printf(error,16);
# z; ?' f4 P' y4 [: m0 A   }
* ~9 m/ N% R, r( R- M0 G. J}         
* k# U4 M4 K5 x1 W' Mvoid delay_10us(uchar n)0 R/ d% ~9 G* n+ ^1 |
{4 h! j2 t6 E; [" x
   do3 a) t+ ?) I6 d0 F
   {/ J$ P! [7 D( t
     _nop_();
/ r7 f$ Z2 w' _( S7 D- s0 W     _nop_();8 @4 L, y5 m+ C5 `% R& H
     _nop_();
$ W  {. L. T2 ~     _nop_();
. m6 r+ u5 H5 r* \9 ~     _nop_();. _% s1 ~; x2 M9 U' Y7 v
   }while(--n);# ~. c! x, F) o, z6 l
}
: Q7 m9 a+ y* S: l% D% i1 Ivoid delay_ms(uint n): x% x! s& [* {: n, D/ D. _
{
# S3 J) b7 z' Z2 Z2 f  do
, u" Y6 l$ y  ]9 I4 O# h/ `. b6 [: B  {$ \/ W' A6 @* V
    delay_10us(131);
; f/ W2 f/ ?% X# P: w: N   }while(--n);7 p7 M  t7 F% s+ d7 a1 X0 U7 f' V
}8 \/ s. z" A3 o8 D

8 N! D7 y9 W- n" D, p+ [# ^; x# jvoid main()' B) n$ a; |( h9 R5 L5 Z
{
& w4 j+ c/ l& o" ]' T initlcd();
' v5 l% B5 F% ~. l( d3 Y8 w initserial();/ k- C  T. ^, R# C2 Y
EA=1;  I) A+ f6 D" w. D$ M" Y1 [4 i# U
while(1)& U; D- h  Y. D6 |& O3 I% L- X
{
4 O  c. r+ l* ~3 k  i=0;
9 }- T2 y9 ?6 h2 |1 k, w; E1 [' `6 J
+ G  c! u; m$ @/ d" H5 G…………限于本文篇幅 余下代码请从论坛下载附件…………5 C' L, z2 b: H0 T. C" k/ z" q
游客,如果您要查看本帖隐藏内容请回复

) x, p. j2 K& y5 W# z
; x0 L. X: A6 X, [5 C

该用户从未签到

2#
发表于 2018-12-6 15:01 | 只看该作者
谢谢楼主分享

该用户从未签到

3#
发表于 2018-12-6 15:01 | 只看该作者
学习中 谢谢楼主

该用户从未签到

4#
发表于 2019-1-28 15:49 | 只看该作者
这个不错,看看楼主的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-25 06:27 , Processed in 0.109375 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表