|
幸福万岁 发表于 2013-7-23 11:52 ![]()
$ `" S+ W" ]# V$ {* H这个函数也可以写的简单点 ' ^. @) D I( v, I/ l4 c
我比较喜欢写成 这样 一目了然
" ~- B6 l7 D4 E9 }, R哈哈 7 s! u* X2 e: p! L4 c
非常感谢你的帮助,确实是延时问题,目前是发送6位,接收10位的问题例如发送5a 06 00 98 00 01 接收为5a 06 00 98 00 01 01 01 01 01
) o5 l2 ?. q( V* n
( C/ b0 @( u( z1 j- F) S#define uchar unsigned char' K f8 X, z( M, h0 M& ?
uchar port;
. U5 L' d& Z5 {: I* Luchar rec_data;# q' I4 e8 Z5 k$ A
uchar str[6];
% i* `7 E0 g4 K3 j+ E# f6 J+ ruchar point=0;: B b0 y$ X$ l7 W1 b
uchar flag=0;1 `; F9 _! X3 g, @/ c, C
//串口初始化
( a. X: i1 n/ D, E Avoid UART_Initial()
1 a0 }8 T) B! X% Z{
" b; w" o# R3 [ SCON = 0x50; //串口方式1,允许接收8 ?+ L: y1 f2 _: y6 d% j& C9 J
TMOD = 0x20; //定时计数器1方式2 W2 G2 g& ?- @) \# a
TH1 = 0xFD; //9600 波特率 FD
1 ~6 f5 ~4 H- Q, _7 ~6 _ TL1 = 0xFD;; f9 M6 `7 D* D: k* e6 y3 `
EA=1; % n: ^' x8 b+ [) X+ H+ w* y
ES=1; * ^: C. M+ i' C- ?* t1 p
TR1 = 1;
7 Q0 g: Q+ n+ m9 c3 J0 J}
; [6 ~, G) p# C3 F5 L0 e
, k5 u; |9 A0 e6 Z% |: w p6 rvoid waitsend()6 h+ s: k$ t9 _6 v
{" l) r0 M, B- {1 N: S
TI = 0;
T) o2 U& }" H7 c ES = 0;7 U2 j- \7 }$ Z
while(!TI)
; g- A1 x8 o, E& l7 B {* V2 J4 B) y7 c2 s& g
};
1 W/ ~: S3 M* r: q TI = 0;
2 Y" L: N& g9 [/ f6 `: v. S ES = 1;" @! h# a+ M$ C/ Q5 T- E Q, _
}
, ^2 d |. f% L/ u( ]' G
# n7 @* z2 U1 J3 x5 Uvoid delay(long i), }$ e$ T: I- U- U7 @
{
! J% J2 [- Z: k# D9 n% l2 V. _$ n long j; x0 D; c* Q/ k7 V
for(j=0;j<i;j++)
. c4 y: I8 {& Q1 v, | {$ ]6 o7 C1 O9 v. N7 ^% N; t
SomeNOP();
1 [, g3 e# X0 T k$ T SomeNOP();
: O9 t' e' H/ l9 G6 c9 i }
5 z( l+ X# h! _5 b3 l9 F}+ }4 s- w+ l! p3 ^
, ]- b% ]" z- c- R. o! W- U: E
void delay1ms(long i)$ M# F' T0 a, R4 ~- b ^/ J! l
{
3 {9 ^ B$ U3 _( t$ N long j;8 Q' i x7 s7 k2 a$ V! w' K5 o
for(j=0;j<i;j++)1 y8 y" ^8 e, v# n9 Z
{
7 y4 R! o U* E delay(70);
9 j$ O! W( D$ L }
) P- d. h7 ]- C4 _ U}- X& t$ x9 L; ]7 \* P
void COM_REC(void) interrupt 4
* }) ^2 A5 c6 o7 C6 g6 a0 e6 D& ~# J{
/ ]) W1 ~! n( }; Z 7 c3 M! n1 Y7 h+ p
if(RI)
/ @# d1 `/ U0 V y! s7 W { //清除串行接受标志位. w% p) R1 ~$ y8 T2 E
RI = 0;
5 H, {- k' Z: Q3 w- g5 v rec_data = SBUF; //从串口缓冲区取得数据
- P6 b4 C }% z+ Y for(point=0;point<6;point++)
" s1 h0 M- c9 e" T5 u {
2 w& @, W4 u0 n8 D- y str[point] =rec_data;
) ^/ B! H- H, k- N //delay1ms(1);9 C/ {7 H9 a4 O9 Q/ f ~7 t5 C
SomeNOP();$ |1 {/ V9 n" J S) c
SomeNOP();
9 D! c( n7 S, F9 j }" H \2 e# a1 ^/ }1 h5 A
point=0;
6 r% D0 J" e/ j flag=1;& k% [1 G4 }* E7 p/ b
}$ I; I# \3 y; }; e4 P1 Y% y3 L
}
3 U; h+ u; y0 d9 r, u8 E6 Evoid COM_SEND(void)
# w1 h$ \7 q* d3 K{( h) Y9 E D% d! {2 i" F) Z5 @
for(point=0;point<6;point++) //连续发送数据 & J4 C% p3 @6 I8 i# r- Z0 [$ n
{
3 C, g* L& I7 Z TI=0;7 f5 b+ f M; l
SBUF=str[point],waitsend(); //把缓存区的数据都发送到串口) q# U* B' e: c( Q, X
//delay1ms(1);
* B W0 q- n; q! |1 O# [ SomeNOP();; |7 h0 l# X. f3 f
SomeNOP();
* m, G) g5 P% O- C SomeNOP();! m0 j8 I$ w- A* J- U! [ d v
}
/ k& ~% L$ e& R3 P; N/ i //SBUF=Read_OneByte(str[3],str[5],str[2]);
$ | l/ s0 Q) X: `
8 k4 l) I) C; f' o1 N7 A}
# N6 z+ R( [; W# o/ z$ Z" Q, ^void main()* r, _# u6 p4 n% L# l: J: ]6 k
{
5 ?/ G* b' m6 T" h5 {! y: g UART_Initial();
1 K& E$ C1 n4 I# Y& {& O/ f+ G delay1ms(2);
9 s* B/ `+ K `: Z( ~) ~ while(1)2 r. u3 W0 _! b" u+ G4 `
{
2 t$ [3 p Z& t: q: B- {1 v while(flag)* G; b, _- E8 L
{9 l4 X' D! Y$ q% V# }- h
//RI=0;
' ~( H" V: F5 i. [ COM_SEND(); P- w/ E( P$ {
flag=0;/ j: J3 P8 I- R6 J9 g
}
+ o. z0 d0 Z3 Z }
0 n V) G$ d2 V. Y) b( K& f. ?} |
|