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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于MODBUS协议的单片机主程序 测试通过. e9 I, Q" `# X3 U4 G

$ B3 l( \% s' P  y( b: X" h" t3 A0 d- A" z# P& t
6 m* ^# V, g& D) A) _9 [2 T$ j
2 f. D8 A# z8 A; Z6 j8 s, s
单片机源程序:& D# M0 V8 {3 m/ z. j
#include"reg51.h"& o! k! i' b  c$ i4 O, t* m
#include"lcd.h"/ x7 t+ ?& j5 r4 r4 a- y
#include"address.h"; g' ?/ p+ q6 R% Q1 h% \
#include"intrins.h"& i: S+ l% V' v: s
#include"crc.h"* \. \7 Z+ P8 n7 }2 ]( H8 b
#define uint unsigned int( |) h# l8 z7 h8 g( y) w* N
#define uchar unsigned char$ g7 e/ }$ L3 F# b$ _' P8 c" f
uchar code sendbuf[]={0x01,0x03,0x00,0x0b,0x00,0x01,0xf5,0xc8};         
7 h2 L. @% e% N! q7 r//0x01 从站地址,0x03功能码,0x00寄存器地址高位,0x09寄存器地址低位,0x00数据个数高位,0x01数据个数低位,0x54CRC校验码高位,0x08CRC校验码低位3 `0 k" H( D2 E# R( r* c
uchar code tab[]={'0','1','2','3','4','5','6','7','8','9'};
, Y) O! S, E; `% S  d. yuchar code error[]={"error!"};
- w8 b# T& j% U8 e0 Uuchar tem[5],tem1[8];) Z8 R1 m9 `4 L3 v4 y
uchar resvbuf[7];
/ w) N. V$ s9 w& Y- Wint i,j;+ M- o& S6 ]9 Q' [  S9 {
uchar resvend,temp2;' f9 a' l9 H) \
uint crctemp,temp,temp1;
" M* \0 f' }% `; m+ t- u$ q5 @# Xvoid convert10(uint dat)9 B; M& [4 e1 D/ [
{# U, g* g0 f; D, I7 u, @2 X3 ^
  uchar i;
( m' ~. B! y. o' ^. g& A: p6 q  tem1[0]='U';4 y) ]6 v  H; y
  tem1[1]='=';
0 i- A% U, Q4 t' q( l. n3 A  tem1[7]='V';1 A/ P# c5 X- u7 T& Z3 x
  tem[0]=dat/10000;
* W- O+ Z" F; @9 R9 q  dat=dat%10000;
, v  O0 M7 k6 y3 {  b  tem[1]=dat/1000;
' [1 M+ h$ d2 g. E+ g  dat=dat%1000;+ r" R) |( v& C# e9 O* P
  tem[2]=dat/100;
  a5 W- `5 f3 j+ B  dat=dat%100;( d6 w0 p" j7 z
  tem[3]=dat/10;* Q# P1 |$ B, A  \! w
  tem[4]=dat%10;
* j/ r1 j$ n. ]/ K0 L  for (i=0;i<5;i++)" f9 ^+ q! b( `: D$ O) w: z. j
  {: g* s8 s  [  e0 v9 |8 ^; C$ y
    tem1[i+2]=tab[tem];
$ i1 c% Z5 p5 u  }; h' e1 Y) I: z
}/ S0 K+ L& i1 e/ J: b* [! u
void serial_int() interrupt 4         using 1
$ I; y, G6 l/ J9 F( V) t{
" P) C& y- W- P# M+ v8 C if(RI)
: D+ N  Q7 D' L  [$ E% C! k {# }: V- j: _0 V! S. i3 Y  ~! `
   RI=0;' K+ K, l5 ~0 f# Z' v) V* c
   //temp2=SBUF;
. G# ?% r' u1 C' F* k( l+ y) L    resvbuf[j++]=SBUF;  % K( a# V; E% Z( o& s  F
   if(j==7)* _' J- R) R9 Q
   {
$ E9 O; E+ v1 H: B9 ~     j=0;
  g, g5 c; p7 r3 ~5 M         resvend=1;( B  H! U. K7 L; x% \! x
   }   
2 A7 ^- O/ Z6 _* D; [ }        
% h2 x3 ]( x) L% [2 g}            - n4 X% `2 ^  c. u2 `! ^; [
void initserial        ()
5 v4 ]2 m  V& w! l$ f{
' ^+ u1 d& V  r2 _) {5 Q0 e, h- \ resvend=0;# ]* {  W- E& p4 t
TMOD=0x20;
0 K& x. x8 I0 v$ e% Z0 C PCON=0x00;5 B0 _) w) P% H( d) `
SCON=0xd8;8 m5 _' Q! v4 I* d
TL1=0xfd;( v# C( {6 M$ X3 X  o( @8 w$ j
TH1=0xfd;
3 m: o' Q" T, _) Y1 d2 w9 o' p1 D TR1=1;4 e$ \" W# e# i/ {6 a& F4 R
ES=1;8 c% b; e; Q0 S( `# x/ I! k
}- c. h+ b' n7 ^" @# w
void displayout()* A# p7 ?( U4 Y4 v! a+ D
{7 o! `5 a5 d3 X( G" R) Y4 N5 f
   crctemp=crccheck(resvbuf,5);
) {% `. z* b- J3 P2 K   temp=resvbuf[5];
) o4 F3 W, C5 y. G) z; {- O   temp=temp << 8 | resvbuf[6];
/ f, |1 I' W( u  x( d. ~+ H" T; j4 y( [   if(temp==crctemp)
/ v: ]: m1 Q  C& X9 m   {
  e# _7 ^6 i+ x$ ^        temp1=0;
& I* b9 j5 B/ I4 n$ ]$ B            temp1 |=resvbuf[3];) j+ R) G  {$ e# h+ i$ Z
                temp1= temp1<<8 | resvbuf[4];. ]. ^' O, g, L$ h
                convert10(temp1);; H. O$ g1 c& |8 a
                printf(tem1,8);. {5 q$ o6 U$ x+ y( ^/ d
    }5 N6 X2 b3 P0 A# {" m8 U5 k
  else
. A6 V+ O4 C$ {6 x   {7 y  ?9 r1 S$ o# F' T
      printf(error,16);7 R+ V) A, G" S  p: K5 w
   }
- ~5 m; }4 p0 A2 f# a6 j}         
4 n9 o, t# W# S! f4 w  Zvoid delay_10us(uchar n)
1 g: }2 [+ H) E, \8 Z{2 w( q# Q# V& F; I1 U, l4 _& q
   do! j0 u, y2 O& M3 ?; E$ f8 @
   {" g6 O  p; o6 Z2 f8 S
     _nop_();% {; h- R9 ^: T* }8 f5 x* b
     _nop_();
3 [$ W; p$ J+ _( K3 R9 [     _nop_();7 L9 E( j0 \3 |. M) i+ \3 F7 e
     _nop_();
2 F5 `% M4 w6 F' j. t     _nop_();$ s/ y2 l: ~2 |5 F( K2 o0 S; z
   }while(--n);' h5 H% D+ h* H
}: t- x& n8 n8 ]6 r8 [, R7 g0 ?
void delay_ms(uint n)
" f* s5 c/ E+ J+ x& \2 @{
/ X/ A0 J+ v: V+ _1 Y5 x  do8 a7 r# J6 `" h
  {1 v6 t. ~4 U, @7 Z  ?: |/ G
    delay_10us(131);
' T( V& z. \8 y- Z- ?- N! ~: x   }while(--n);
$ P$ B9 d' q5 G5 H1 [9 q3 e}/ G2 e4 _# p2 r- n. a

4 Y5 H" u5 \# n6 ?. \. e2 Hvoid main()
: u& X  b, t& V  M9 Q/ R' ]2 A{, h# s+ c- s2 v+ e, p4 ]! E+ j9 t
initlcd();! B# t4 q6 l) t* B% Q) z7 G( B+ ?2 q
initserial();
! W9 H$ g. y$ O; `# G4 q: G EA=1;
- T) W. o( u+ D while(1)
5 e* @  ~: o& m% i+ y {2 ~, S& a: y$ `" Z* V) V6 P
  i=0;
! R( z- y' U6 j$ n) v( B4 T/ h3 l, T
8 x. S2 ^9 @0 s- w* H% y…………限于本文篇幅 余下代码请从论坛下载附件…………/ e% b$ W. J9 k5 o3 v
游客,如果您要查看本帖隐藏内容请回复
, b9 j& ?% y" ?: y
3 z. j. b6 G5 f, l- }! y. U

该用户从未签到

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-10-11 15:11 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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