|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本人在学习stc15单片机官方的库函数中,遇到了如下问题
! J& e v; X& `- _/ s* O" @" ]在uart.h中,定义了这个结构体:typedef struct
& z4 e& ?8 z: Z5 f{
0 G* t" |. k2 Z) J, M u8 id; //串口号! q9 ]2 \; O8 Z: c; d
- L5 K9 H: u1 b u8 TX_read; //发送读指针
% w* W5 P9 `: L% x1 V: z: Y1 i u8 TX_write; //发送写指针
/ F& K3 [3 `5 w5 {5 t u8 B_TX_busy; //忙标志
7 P: o1 D1 M: ]" ^* U' \$ q3 u
3 m' i( p+ @) L2 p9 q6 I u8 RX_Cnt; //接收字节计数1 K$ I. z" L2 I0 q
u8 RX_TimeOut; //接收超时. r9 K2 C+ g7 b1 I5 n9 A2 } g
u8 B_RX_OK; //接收块完成4 ~' e8 ~' e* C+ [% h
} COMx_Define;+ I* p; N( {3 b' x
2 ?1 |- u% a9 G0 J' f3 J
在uart.c文件中,使用了如下函数:& U$ Z; j6 A( C, } D+ G, D- R
" k j9 q$ p8 v8 Z4 F: ]1 s
, s6 b) ~, H& o3 M# M/*************** 装载串口发送缓冲 *******************************/; c- m2 L4 j9 z) `1 M# W
# i/ u2 l. t \3 ^( M0 w
J% o" i" x, _! V' V7 p& R- [void TX1_write2buff(u8 dat) //写入发送缓冲,指针+19 \+ _+ X3 b$ v4 ? I) }+ C( o
{
: f* s9 V Y0 R TX1_Buffer[COM1.TX_write] = dat; //装发送缓冲 m8 G& ?- G/ b( w1 @
if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;2 F2 U. e: _7 Q
9 v: N6 y. M ?. d, c
+ s/ i8 c+ d/ p
if(COM1.B_TX_busy == 0) //空闲
j) \* O+ B l3 Y5 [& ~ { ' D+ @# s& T5 B/ B% w. n
COM1.B_TX_busy = 1; //标志忙/ n7 c- r" f9 E/ e) E
TI = 1; //触发发送中断
; b2 z0 ?% R/ W3 N, \3 R9 Q2 f, P }2 n6 u; U, M2 j5 r; M$ ^7 ~
}: y2 m$ \4 ^5 D+ {
0 i. B0 \( d7 y* e4 {7 U+ F O* w7 g' l: d; L
$ _: _" d5 Z. V& m$ [9 A5 ]: S4 ^
" v! x; L, Y5 h! Q6 N- U8 x: O$ ]6 M' c0 _7 X9 A8 i/ x
/********************* UART1中断函数************************/% G* e+ |5 k5 c& E0 x
void UART1_int (void) interrupt UART1_VECTOR9 y/ F6 U4 D6 \; a# r
{
4 c4 v5 B8 V5 X7 _ if(RI)
, r6 \% y& H, P) }- m {
3 X7 |/ X y. @9 c7 s RI = 0;
; b+ S( G) Y0 x2 b- w' P6 c/ w% @5 S; h if(COM1.B_RX_OK == 0): o8 q) @- z; P8 M& `8 o o1 t
{
6 {% s% u6 G/ l8 q( j2 o if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0;
& {6 G2 k+ k4 H0 D+ i" y5 P) h RX1_Buffer[COM1.RX_Cnt++] = SBUF;0 e+ k9 b" P, H$ K# [
COM1.RX_TimeOut = TimeOutSet1;
* Y' f9 L6 K, n' x9 k; d }' {# g3 f; s* A3 \; \+ t& H
}, i" m$ H+ }$ D: s" `9 J V
. c0 [0 C$ Y# v& Q
if(TI)$ k. G, Q9 q; [& K3 Z
{
' ^9 A* J, Q8 t+ s TI = 0;
T4 P! [8 `# C. G$ |2 f if(COM1.TX_read != COM1.TX_write)
( q3 O/ V' l# p; d {8 |" Q9 b2 d, Y, j$ s, B7 r& T
SBUF = TX1_Buffer[COM1.TX_read];4 j; K& R8 T+ q
if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0;
7 m7 d6 w0 W- x }
( G! k4 s1 C$ Q6 C, U else COM1.B_TX_busy = 0;
2 M7 H5 Q# @ e) ^) A6 ]) B }. O# s* m4 n" W R
}
* }2 h& a& Y9 u* ^+ A2 _% c8 b! g
6 Q) {% Q" h& ~5 S6 t0 m* ~[color=rgb(51, 102, 153) !important]
, D" g' y( b7 D: v& W' S- J- w3 w0 S' l! F
[color=rgb(51, 102, 153) !important]; j$ j0 K N$ H' }
, C! R$ t+ j: O5 l$ a, e[color=rgb(51, 102, 153) !important]2 c, X9 C" w( \5 V' B. p! }
& i" b2 m. U8 S2 F1 S
[color=rgb(51, 102, 153) !important]
* \# o# f, R% M2 K; l4 e1 a+ X$ v' X/ P) ~
% { `; c2 b5 y" }1 s2 T
|
|