|
|
幸福万岁 发表于 2013-7-23 11:52 ![]()
3 q1 O/ m. ~/ G( f1 J这个函数也可以写的简单点 7 ~4 v4 y; v! p, ^" v3 M
我比较喜欢写成 这样 一目了然
1 Z0 }! P6 {& ]: x哈哈 $ g. ?, n) [7 F4 N4 l. f
非常感谢你的帮助,确实是延时问题,目前是发送6位,接收10位的问题例如发送5a 06 00 98 00 01 接收为5a 06 00 98 00 01 01 01 01 01
- @7 c$ `8 T9 u; W/ N8 C# v 1 v1 l- T& T4 y x
#define uchar unsigned char4 e0 C, c2 F- B# Z# l5 u
uchar port;
) c5 A+ `3 u3 V2 e: Q0 ?uchar rec_data;% r7 @$ k2 ]( \9 r6 R l/ i
uchar str[6];
& a6 k. x! {7 j' N* V$ } Ruchar point=0;) H- D+ m k2 T8 Y
uchar flag=0;
% E$ M$ L: n0 N# _4 s4 K! @/ z& U//串口初始化 7 }$ s' a+ K% j# b/ z# L" H7 O7 x
void UART_Initial()
1 a& I% K- z: m; k3 \{
~/ J8 K/ t1 J SCON = 0x50; //串口方式1,允许接收
* b# V1 L2 X- n( v7 q) B( p- _ TMOD = 0x20; //定时计数器1方式2+ _" ?; W2 H+ b& n" }1 C
TH1 = 0xFD; //9600 波特率 FD
$ n; }' J8 J" o# w. z( C% t3 p TL1 = 0xFD;
! e' a( v" y' Q3 h- { `5 t& D EA=1;
* [* S# F7 f, z+ k k3 B ES=1; V) b! w! a, J5 C, Y, O( O
TR1 = 1; " }6 l0 J" O& @4 N; @
}* N9 Y2 Q3 R7 k! B3 h9 r6 n
$ [/ }4 I" `) w( T
void waitsend()
' g7 Y/ A4 V$ {+ P' f1 I; q{' a3 ^3 |* G: }
TI = 0; " U' g" k* r( C8 ^7 F7 ]
ES = 0;
. A8 I! L$ U d( f* t# f% p! Q while(!TI)
' n( \7 s# R! J7 S {
; j0 v, w; D( h |4 y };) j3 _, o8 p Q
TI = 0;0 _9 C% Z9 ~0 l. f: ^
ES = 1;
: l: t) _3 a" K( \ i! A7 S}
* f; l5 i5 N- M f; H
* C# B5 k) i8 J5 } Zvoid delay(long i)
5 {9 s- }5 u, @- s- v7 G" Y! a& S{
. p7 X% Q6 T$ J `- V; X4 I5 e1 L long j;
& n) G/ z! m% L for(j=0;j<i;j++)1 v' g: |+ o( [4 _3 x2 X A* Y
{( l5 F+ p, \ B* B8 P" G7 @
SomeNOP();
" B) \- `9 @* M4 C2 x SomeNOP();5 i' x. e5 X: _7 N1 N! c. L% |
}
% O( G" ~5 b, P" o- j$ j% A}0 }" z4 V1 Q4 ^7 G4 f
/ G# B) N; \$ K% [
void delay1ms(long i)
7 C. q' U. M6 Q0 B" P{
* I q; i9 F2 x- ^/ H' A long j;
$ L G4 U3 A7 E: B for(j=0;j<i;j++)# \" }+ O* ^$ P N. ]( |" F/ o& e
{, I. l; s( P8 T3 U
delay(70);
4 u4 D/ {% H( V) A* U. J }2 P. R9 ]! h( C5 }1 }
}
+ j8 z/ d+ D! f% a1 u4 w! Hvoid COM_REC(void) interrupt 4 6 }" c# M3 F4 K6 N
{
q0 F/ i, v6 g9 d+ w
1 i" L2 K6 c% i2 y8 i+ f4 u if(RI)
& [; A/ ] g r S) E { //清除串行接受标志位+ L7 |$ v, C! ]: v. x
RI = 0;
8 N3 z6 E7 d2 ^2 R rec_data = SBUF; //从串口缓冲区取得数据/ B9 w& S6 o3 \( M. |$ ]4 \
for(point=0;point<6;point++)2 c M, J( I2 c
{3 x3 n% D/ D+ q# q5 Y/ ^
str[point] =rec_data;5 P" U; i6 n4 r0 J
//delay1ms(1);
& ~( p0 ~# G" {% A SomeNOP();3 y0 N. E- o D! z4 x
SomeNOP();
+ O& u2 V! X4 S' \ c }3 U, L8 D0 @% x- @
point=0;
2 s6 k% S) l6 V flag=1;
" u: t3 {, i) m0 o+ H }
! l9 N4 I" ?9 J) N0 b; z, Z}
3 P7 s# s% C" W* ]3 Y4 Cvoid COM_SEND(void); v7 n' K& V9 {! p1 U" Q1 f/ q
{( A- r, N+ j" `7 e. y' e$ M$ ?! P
for(point=0;point<6;point++) //连续发送数据
5 T6 x6 H, X' O7 d6 R, a {9 }, O. C' o, l `7 t
TI=0;
3 X* F8 s; p% m# F9 G4 s7 P* Y( s SBUF=str[point],waitsend(); //把缓存区的数据都发送到串口( w; V4 X2 F" I: Y. S, S
//delay1ms(1);
?" U# m# O0 h' F+ x SomeNOP();
! ?! @* T, h6 m p4 B SomeNOP();& V9 K* X9 |& {: G
SomeNOP();
6 Z3 ]& H) D( s5 i; } }
. k2 u0 L- C: R b2 t //SBUF=Read_OneByte(str[3],str[5],str[2]);5 h" a9 c& f% ]& H
: |0 c- h! v# ] N* K; q- Z}) a- U7 X/ i. d3 K
void main()! A5 t, b$ z) v+ ^3 E
{. V3 l1 c6 u8 ?' ?
UART_Initial();
; Y1 ^( e4 x8 V) Z/ j% B delay1ms(2);( y# E* l- Y$ j/ Y/ m, K
while(1)
' _) x0 n! L a/ E {
! C( e% a% K; I. a$ U6 |8 X# i while(flag); {$ W# X6 {2 i, m4 z, q( E
{
$ V+ l+ C; e! d1 Z //RI=0;' [: z" G1 P, i1 r; X7 e# g
COM_SEND();# n! e# e8 F9 m8 ^9 o
flag=0;
- W( | p; C2 J1 _4 | }
# a! `/ @6 O' n/ g, t$ n }1 S( P6 e6 h4 M. j/ Q" c
} |
|