|
幸福万岁 发表于 2013-7-23 11:52 ( j, u8 j3 O& W: t" p
这个函数也可以写的简单点 2 r& _1 Q) Q- q( @2 x. B0 W! i
我比较喜欢写成 这样 一目了然 7 r8 f; ^& \4 u1 F1 L! z) s2 ~
哈哈
! L4 ?4 }6 _" B+ Y8 b( M+ r非常感谢你的帮助,确实是延时问题,目前是发送6位,接收10位的问题例如发送5a 06 00 98 00 01 接收为5a 06 00 98 00 01 01 01 01 010 H! Q) ?! U# Q/ v
' Y. O8 t, j5 c" P) F
#define uchar unsigned char( V! |$ ~4 t, E& N1 e
uchar port;2 H- R% \6 ^, D! ~6 a+ T: R+ [& n9 x
uchar rec_data;
3 {8 j6 j1 i7 [. y# buchar str[6];/ W) m1 g0 b j% f8 s
uchar point=0;7 }8 {9 f# B1 h% i( K# n
uchar flag=0;
% p" p; F2 U7 |4 z, q; B. B//串口初始化
& b, B/ ?7 C' j- [; g5 wvoid UART_Initial() 5 v0 a$ f+ Z0 N m: H
{ : h' H. N( u" @3 ^7 A! J+ C
SCON = 0x50; //串口方式1,允许接收
$ J. u" |2 c; |5 k0 U# b+ M1 m TMOD = 0x20; //定时计数器1方式2
" p* P- b; [4 C( F TH1 = 0xFD; //9600 波特率 FD
! O+ J+ u/ J; Q! d: j6 j1 v TL1 = 0xFD;/ x* N" o+ ^7 u
EA=1;
- S; X* i* o, ~9 A6 S! x1 Z8 C ES=1;
% e1 n) V- P: Z) `8 u/ Z% q$ m TR1 = 1;
) N) e; q1 [' x4 g4 g. q}0 E- j$ R9 Y7 c
9 ^5 T( F# @# C% ^ A
void waitsend()
" |" r7 v) L6 C{
7 V% s/ K- X1 S1 _ TI = 0; p# n5 Z8 g& \+ R7 c' |
ES = 0;
3 B- Z/ b4 Y" z U3 ?. ]4 H V while(!TI)
6 C F7 S$ ]8 t4 k8 m5 H! U+ X3 ` {
) z/ b# c! @& [' O* { }; L$ n- m" M; a
TI = 0;
4 B+ x& \' C2 a! H T ES = 1;. b/ ~; \- ^* M( j: G
}; D3 T* E* H# f* s* M7 u
1 {8 I5 F, m( v9 V" m( }
void delay(long i)
" h, S. Y) G4 A- b' t4 B{
$ I# H- m, C# ]3 V long j;
8 x: q- Y t. }4 f) ^& k for(j=0;j<i;j++)3 ] a" K& l- z+ Q e' M
{" o8 ^/ c H3 K4 m
SomeNOP();
7 R7 q3 C4 |- @" m) Y8 B5 \( n SomeNOP();
' ?, S8 y5 b+ x* l- C5 n$ d M" i0 w }
7 p5 \2 l* |: X! A) R}) M0 L( w% R% b4 f
\$ o+ ?7 k) u+ ^! v4 {: J
void delay1ms(long i)1 _0 R7 W U* L* x
{
' p5 ?. e7 y; H4 `3 F1 d0 \# z H4 H& p long j;& z6 H' i5 X! I- ]
for(j=0;j<i;j++)& W& j" h4 l6 E( E& i @
{
5 [' z/ u" ]4 ?8 s2 G8 u$ P0 w delay(70);0 r# A7 K& A9 f, w
} T( E p: o, W$ B
}- I. c8 i2 \" B+ M7 X0 g
void COM_REC(void) interrupt 4
: T& K& `; p+ o! ^# u# E% s{" I4 L3 Z2 F V+ c1 H s" E
. h- \7 l3 n$ H6 ^$ Q9 b
if(RI)
" ^( B# v5 e5 d# K+ H5 p% Y& B { //清除串行接受标志位
7 Y. L- s# g: o" y0 \ RI = 0;! e0 k9 u! r, M& C r2 @
rec_data = SBUF; //从串口缓冲区取得数据 i% p: }, e/ J0 s: F
for(point=0;point<6;point++)
* k6 L% }3 v; k {3 ^; m7 b% I4 k- K. P2 K v+ d( ^
str[point] =rec_data;
" K& }3 o. W. v //delay1ms(1);6 ~: i0 k5 j2 r) O
SomeNOP();
[. v4 \7 M0 l7 `- W! Q+ h SomeNOP();5 F, C. Z) l7 C6 W1 P @6 n9 i
}; P$ S! s( M1 {
point=0;
) H) P' N7 x+ k% {- d flag=1;& q6 x5 H6 l; m* s
}
0 j7 T. |1 n' a- o$ J7 ?}
" }' O, o" [- d2 {5 ^3 o3 `void COM_SEND(void)1 d# r8 o. q- {) ]) D
{+ @ L) A- l2 {5 W2 Z
for(point=0;point<6;point++) //连续发送数据 & k* v) A# |: y1 T! }0 ^
{- p9 T8 U& ]$ ^4 w: p0 ]
TI=0;
& O9 r1 { N. {9 D5 O: L SBUF=str[point],waitsend(); //把缓存区的数据都发送到串口4 Y/ i9 O% {( l4 m8 G! ~
//delay1ms(1);
/ b3 J W& l6 l! [ SomeNOP();
% l X+ ?' W+ `' k9 }7 I7 E; O* l! X7 R SomeNOP();0 Q. y2 b+ ~# X a3 X
SomeNOP();
4 {2 |2 z9 ^' c) f; c! Z }, K. p9 s* w3 E$ K
//SBUF=Read_OneByte(str[3],str[5],str[2]);
/ o7 r8 a; ]4 N$ z/ `' O $ ~5 U* H* J5 w3 e
}3 u# Y: ]/ l7 W, E* ]# w
void main()
d% @( O% w( ], a6 E9 H$ J( D{8 M0 O h+ C: H, G4 {# @0 I; N x
UART_Initial();
: [; Q: j% K! q" J* i3 d) {3 ~ delay1ms(2);7 C( {7 \8 y- V
while(1)
- T: n$ F; V$ R {
) j4 T! |2 L% W3 @$ t4 _' w( p2 g while(flag)
7 U' U6 X) x% \! {, n8 d& o2 | {9 ]6 }7 E% n3 ]+ N7 N* \2 R8 x
//RI=0;
* E2 j) m! ?9 y1 @ COM_SEND();0 g" n7 y: F& n
flag=0;) O/ j6 X, ?6 ^! a
}! r7 A, E7 T" A& d! o ~# [
}0 A$ O6 s1 U3 Z, k# d- \
} |
|