|
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
|
|