|
幸福万岁 发表于 2013-7-23 11:52 2 p4 t, B2 m& C0 d9 C
这个函数也可以写的简单点 5 m8 J# R6 \2 g/ q& n' e7 t
我比较喜欢写成 这样 一目了然
7 e2 A$ Q* I( e/ j# ~( s) J* \2 }) U哈哈 ' E! o$ ]8 f) \$ ~% _2 H( s( e
非常感谢你的帮助,确实是延时问题,目前是发送6位,接收10位的问题例如发送5a 06 00 98 00 01 接收为5a 06 00 98 00 01 01 01 01 01
1 T" e& C' @+ Z: T/ E
; x' V) p E. I; Y0 g; \) B#define uchar unsigned char
7 F; y* I- J- B" t! P0 Suchar port;/ e! E1 m& G/ [; S/ _1 C1 x
uchar rec_data;
% _8 A+ P# c; B. A: t1 Iuchar str[6];. l9 c; c+ z, c. b
uchar point=0;9 q; G% B& S& k) N( a& Q
uchar flag=0;
1 ~3 }( i4 [% @/ Q; i* _//串口初始化
, Q% n8 Q( N! Z, X8 a/ ^void UART_Initial() ' D6 J4 F& ]' W( \/ z
{
6 `! Y$ e! e2 z j$ R SCON = 0x50; //串口方式1,允许接收& Y/ l3 e" k4 B) p5 s. V* U* X& C9 v
TMOD = 0x20; //定时计数器1方式24 |/ j4 } d% e ]" t
TH1 = 0xFD; //9600 波特率 FD) ?6 s) h( C9 v" V
TL1 = 0xFD;% O/ ^! e, ~( J; ^% m! {" ~: N) A3 k
EA=1;
$ c1 F$ {0 \% T$ @3 p8 \ ES=1;
, d7 H& _) x( E R! m/ s# m7 h TR1 = 1; / f2 ~. S0 Z: B+ H
}( C* X; x/ G, G6 o: a3 ~9 v+ L \
6 I4 \/ C' \9 V
void waitsend()
. m; h& `& x! p }# A( P* G9 R{) j6 e4 u$ Q; v& B
TI = 0;
! C; u+ e- T$ E4 _: d ES = 0;
; G2 C+ d: k3 D, A while(!TI)
. h( @) l; T& }2 g {0 s( I' q& n ?+ y% y
};
5 D1 D3 K9 r9 m4 M/ O TI = 0;
. C8 |/ \2 o3 C+ p& x2 ~0 N7 K/ m ES = 1;
+ K# K8 ?- e7 m0 ] w}- B* k( s3 R; ^ G% h7 w9 W2 e+ A
4 H- W3 J/ `. I; V/ A
void delay(long i)2 l( h1 p& M! P; E; ^8 y4 Z
{; p {1 _+ R ?9 ?' m
long j;6 `3 o0 u+ ^& g) y$ i
for(j=0;j<i;j++); j# z- D, S& `6 i0 _
{
7 l+ Y5 G& ^! G8 q6 _, g SomeNOP();
2 R0 v$ y* D! i7 F1 z) q5 S SomeNOP();
( a0 {1 ]# ^" B1 F) y6 f }4 i4 b/ r* c: b- p* s. c- ]
}
; u+ M4 M7 N) Z- m) w% j' z0 v( l& o
void delay1ms(long i)
0 ?( V5 m# H2 l) J2 d{
- X: k* z V5 m) C long j;
! J# @: I1 Q4 Y8 a( y+ Z4 c for(j=0;j<i;j++)& {; l6 [) t$ `% A
{2 s' [$ P+ n- f6 P9 ]$ w
delay(70);
1 {8 \- M r2 k }
% D: j! E/ R& i$ @1 V. H}0 c& y% n* G7 c b/ J: ~
void COM_REC(void) interrupt 4
$ Q) k6 I2 P+ _{
6 Z3 J" }8 D& e1 v% F% u ?1 u1 u
6 C* K6 P/ Q; \6 A# ]! P7 r if(RI)& N8 @$ y/ L4 F# W) F
{ //清除串行接受标志位
+ q. q0 G, I$ }9 J" Q RI = 0;. h: W, ^$ f1 ^3 F( J4 J# j
rec_data = SBUF; //从串口缓冲区取得数据7 [0 o& `+ M, T. j; Q4 s7 D
for(point=0;point<6;point++)
4 v; J* E3 T, z+ h( W6 G3 v {) c d r! i @0 U8 T
str[point] =rec_data;
, b4 V, K0 S, \7 W3 h4 Z9 F //delay1ms(1);6 P3 T( h- ~0 V' k' F; |
SomeNOP();
: y( Q4 s) ]/ V8 d( F5 x9 ^ SomeNOP();
/ ~# d4 m9 G# {# X4 E Z/ Z }1 ^* B( F; Z4 U# k2 o, T; T
point=0;
) I+ ~7 s& W* G flag=1;5 T- |' F4 C8 T- U. }
}$ b2 h' H( k- |0 h. a# C0 X/ z4 f+ E
}; M# u: [8 K& d) K8 J9 x
void COM_SEND(void): m+ \7 |2 z# \$ Q0 N; j" B
{
# o: F4 |2 r& d9 o5 ^% B- qfor(point=0;point<6;point++) //连续发送数据
* A) ?4 m+ C% O/ r {
# G6 a4 c( N8 @ TI=0;3 `, R4 b+ z3 j+ p4 y* ~- t
SBUF=str[point],waitsend(); //把缓存区的数据都发送到串口; B$ X4 T8 l3 R# V7 T; K
//delay1ms(1);
" a, ]: I" U3 u/ \1 c d$ s SomeNOP();. y, c5 |2 i4 O1 `# C& P
SomeNOP();
* _; o; E3 u8 s8 w' g SomeNOP();
2 v$ u# ~; g/ A' R% i- Y' y( | }
" w1 r1 S/ Q- d& U( [; @; V //SBUF=Read_OneByte(str[3],str[5],str[2]);# k4 k- ]6 ?/ g
" G5 r4 N2 T. I3 Y* ]( F! f
}- m. r. F& d$ x# ~- W' E
void main()$ h/ n( {1 D/ ?) d4 f" L
{
2 j5 y& R; R' ^7 N UART_Initial();
7 B# \4 {% X' {+ M delay1ms(2);3 H# q& y0 j( j6 W$ ^
while(1)
$ B# u+ x% [6 ~& F+ g {% u2 e J- \* F. m7 n4 K
while(flag)
% S+ N$ ` `. g' i' g8 B- _8 J {
2 T J) e2 P: s8 r# W. \ //RI=0;
- A$ n6 l2 N" U- z1 M" q% y4 s COM_SEND();. y; g; B" i) N! v. b
flag=0;
) F+ H, G- _: m/ {8 @" F }
( [/ _8 V1 w( x% N9 `( g }4 i5 o3 z6 s# t7 p! a/ i( r4 A
} |
|