| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
//在Stc单片机上利用串口实现人机交互例(改编自KEIL C51 V7.0)& h6 ?- P4 x. E" S5 @ 
#include"STC8AXX.h" 
8 m2 W8 U- @& k- x: X9 R#include<stdio.h>. v  e2 @/ T6 }* c 
#include"types.h" 
7 N$ ]* c/ {: H#include"Qport.h") e3 R/ M6 Q; D; q& b! b  Y( U0 n 
#include"delay.h" 
! X+ o7 q# i: H: j! X1 f1 ` 
8 y1 T1 R! G1 S$ M$ D3 U#define uchar  unsigned char/ {, l5 W, {. _+ b5 B3 H' j2 G6 g 
#define uint   unsigned int         
' H% z# p1 M9 q( I1 C. R6 }#define FOSC    11059200UL 
% w1 b% K! H9 ]; u* M1 O#define BAUD1                9600UL 
3 X- L# M% N/ `' G9 b; N  o$ F#define BRT1    (65536 - FOSC / BAUD1 / 4)                                //FEE0 
0 s7 ~8 n! ]% P  H& G' I2 h' ^+ T6 l- g% ]( ?$ \ 
0 |% m  n5 `$ J2 X5 [7 Z! s 
uchar code *s ="Please input the following commands:\n"' M2 D" U) ]: X+ y. t8 Q, L 
                 "Inport  p         (read port)\n"# ~* f# J( f6 ?0 ]( }& I6 d9 |) ]8 ? 
                "Outport p nnn         (write port)\n" 
4 }) ]% `0 e1 F6 w                " where p=0..3, nnn=0..255\n" 
$ u4 X: u5 J! e: y                 "Help or ?  (display this text)\n";! o2 N. O- Z0 I- k. j4 e& {3 [8 A 
 
9 w4 v( c2 o4 F2 {* E9 z' a1 n+ G2 ?. V: a- V8 T; \+ T 
uchar help(){: w! |- Z, K! k  D7 h 
  printf( "\n%s\n", Q ); 
/ k5 H. |9 ?9 P" X8 U" R3 b  return 0; 
0 c4 P6 h9 N8 _}% e3 _9 h. i% c) v! v3 Y7 Z# Y 
- _2 G3 U+ K% M+ h( I* Q3 y 
0 p8 E4 ], [1 ~( y, h9 ]" ? 
uchar Inport( uchar idata *rbuf ) {+ F, d# m0 v* t* \* F. ?! h 
           uint p; 
* _6 R. G# Q3 g$ m  \                uchar v;) R) l6 u7 r8 N! ^) B* Q 
          if( sscanf( rbuf, "%i", &p ) != 1 ) 
+ S% p! C6 j3 f& m    return 1;                                                                                6 W; [( S3 [/ z& } 
                    case 0: v=P0; break;                 
- A% `0 m8 g( a1 d) i: ^2 G4 n                    case 1: v=P1; break;                ; g. k2 L- D  E+ g- O 
                    case 2: v=P2; break;                 
2 n0 l( N& {- K+ w                    case 3: v=P3; break;                 
8 {. r4 D9 q& l2 A+ @0 E' A- j                    case 4: v=P4; break;                6 y- O8 @* f+ Q4 ?3 w) e: C! Y  H 
                    case 5: v=P5; break;                * @; N& K7 \' c& a& b7 j0 o 
                    case 6: v=P6; break;                3 u: x9 G0 `; P3 ]( g 
                    case 7: v=P7; break;                * R$ A4 o0 |5 N2 G% c" K& E* N) u7 p 
 
! e# L9 G1 Q6 F+ `& n% r1 {0 V        default: return 2;                         
9 U" C# x1 i% n  L          } 
! U2 S3 f/ H( T9 _# u          printf( "Port P%d = %02X\n", p, (uint)v ); + |+ H7 W2 v6 F: o$ P 
          return 0;3 u! S- N0 [3 M; {! M) X# l 
} 
: z  R2 P$ Q+ V. J: G  w' P# o$ j7 X! C% i2 G 
/ l) ^8 A' f: [% x) p 
uchar Outport( uchar idata *rbuf ) {% K9 l7 n+ o8 r& _ 
          uint p, v; 
) P. o/ ^5 m! K7 i' V          if( sscanf( rbuf, "%i%i", &p, &v ) != 2 )! N0 m: J- g. _ 
                    return 1;                                        $ o# o& |" [7 ] 
          switch( p ){ 
6 L+ h' a% w5 x1 h4 ~& _. w4 f                    case 0: P0=v; break;                                                 
) m2 |$ F9 b$ y5 i; K0 _, o                    case 1: P1=v; break;                                                 
3 U, P+ F5 z; q) M. S( q                    case 2: P2=v; break;                                                 
6 z" [4 `7 Q9 n' }! R) h$ _: ?4 D: h                    case 3: P3=v; break;                                                4 [  [- Q9 b! M' W3 P 
                    case 4: P4=v; break;                                                1 k+ l& e4 z( w" j3 d) z- V 
                    case 5: P5=v; break;                                                 
3 C; O! S/ Z% t: X  ~6 I                    case 6: P6=v; break;                                                ( r5 H, l1 P9 s0 s8 {9 c$ z; \3 ? 
                    case 7: P7=v; break;                                                ( [4 c' e8 o7 J9 J5 U0 M 
 
7 e& C  D3 x8 ^2 T) H1 |, ^                        default: return 2;                                                        1 M5 {% I9 b7 j- \ 
          } 
- o, Q) H3 R& v          return 0; 
3 l  X9 b6 a. |( J/ D/ z  D* N! m* o} 
) u: G$ _. q) w0 [& o/ _. a% r4 u1 ?3 [7 C7 f; C 
7 A+ h/ c( A7 |# a, \ 
void main( void ) { 
, L0 q: C+ x0 T# euchar idata buf[41];" z4 m1 d( J7 x1 [ 
& \$ K; b: L; P- { 
        uchar elevel; 
0 s9 v0 B# U% M: k6 C# l        uchar mjs;* J% [8 d2 X2 Z6 ?0 _2 Y2 k7 v! Y 
        Qport_init();                                                                                                4 e+ K" f, m8 U) x# a% K' f5 } 
 
/ R9 U! `' y6 d5 {" L3 P: h, C//SCON:SM0 SM1 SM2 REN TB8 RB8 TI RI( M5 V; y4 _8 s* B/ z4 P6 f 
//      0   1   0   1   X   X   1  0  
" l! c: Z+ [  K        SCON = TI_+REN_+SM1_;                                                                //0x52 
: [3 M4 F( A! e) _* c% K) H/ t& N* T 
//TMOD: T1_GATE  T1_C/T  T1_M1 T1_M0 T1_GATE  T0_C/T  T0_M1  T0_M0 
6 n: \, h; q, m4 b1 V' q$ `4 R//         0        0      0     0     0        0       0      0 
' X4 P4 @2 x3 g) s! ]7 r) P0 i9 z//, F" P6 o- m$ @9 T& T' n% k7 K* w) ` 
  TMOD = 0x00;" b% W, ~* i# y" _3 x' p" Y 
//AUXR: T0x12 T1x12        UART_M0x6  T2R T2_C/T T2x12 EXTRAM S1ST29 I1 I# I8 C( z 
//        1     1        0       0    0     0      0     0 
  W6 n4 @6 b# l& u! _& W7 E 
1 r: F4 W' h( I; ^  \        AUXR = 0xc0; 
( u' r$ ?( s* _- ~        TL1 = BRT1; 
) ~1 B6 e9 v" o  TH1 = BRT1 >> 8; 
9 U* }& O9 r. S' J: b3 G. g  TR1 = 1;                                 
/ s& U8 ~2 I6 |+ Z9 l1 v 
: }& ~, g& b. M0 T7 r. q* |" F2 q$ a3 S5 i) [7 g: q2 k$ G 
        for(;;){$ q2 Y8 n7 O5 Q5 f" p* ~: m- \ 
# w% D' t/ m5 X1 y0 y/ y# K 
//                if(!P30) IAP_CONTR=0x60;                                                                                                                                                $ X1 N& U3 D  T- s 
//                        WDT_CONTR|=0x10;                                                                         
! m2 j7 i( S/ |# m+ y 
' S% F8 u' a4 l) ^7 ]* A" f# @                        for(mjs=0;mjs<=2;mjs++){ 
$ g7 x! d; X/ H, Z0 K2 L                                        DelayMs(200);' ~4 j' V* Q' s7 X7 j0 F 
//                                        LED1=!LED1; 
, D: @7 m: q* m2 ^$ K6 b                                        LED2=!LED2;, a4 W. d) ^1 a, p) r8 s1 Y+ i 
                                        LED3=!LED3; 
, E- q/ t* O" y9 W9 }8 b//                                        LED4=!LED4;+ ]; y' L8 A1 j( } 
                                                }& J# G7 a2 C1 v8 {; `8 p 
+ V- V/ v% `! A+ |/ R 
                                        help();                                                                                                                        9 ?' l) h" r; t6 `+ t* v 
                                        putchar('>');# n9 x: a5 K7 Z% @ 
                                        gets(buf,20);                                                        ) g; n% }$ |# Z9 V8 e& x" ~8 r 
                                        switch( elevel = command( buf ) ){         
4 E$ d0 f& B3 O2 h& U* O& W                                                case 0: break;  _$ j8 M4 d9 q% l4 b" j 
                                                default: printf( "Error %d\n\n", (uint)elevel );}( r4 z. H* B1 ~  m2 q 
                }: T, h3 c1 V" R6 G  S. C 
        } 
; y5 q# g. F/ o9 \6 B( x' E+ y, w* q: ]" A) ^ 
//命令解析        3 @9 V# L! m2 @4 m9 I 
#include<stdlib.h> 
, T; I2 S  i$ t, e#include<types.h>6 E9 v- |, T0 @5 | 
0 s. j# L4 S) s 
typedef struct { 
  ]+ H( M, X8 s& j2 F6 T& W0 d          uchar code *name; 
$ y4 [' e0 R9 E1 w. ^0 }          uchar (code *func)(uchar idata *);$ {6 l2 v8 _6 K4 Q' y7 _ 
}comm_struct; 
) [4 ^7 D. E# ^' t( Z, [  Q1 Z( `: ?+ c, @" _7 V0 [ 
 
9 p9 |5 b( J0 K4 X; L: ecomm_struct code comm_tab[] = {                        + ~# F. X& r8 e! m  r# p1 B' ? 
                "Inport", Inport, 
( E1 g+ l* b- M& @5 J  _+ j                "Outport", Outport, 
1 [6 a* f9 t& x/ V# g! c, k; P                "help", help,3 P6 Q9 n5 l. N! r/ |, ]' W 
                "?", help,: ^8 j. `1 z, y9 X/ E5 O+ |2 J 
                "", NULL                                                         
# r' I7 |: ^: ]1 l2 k- x}; 
& y/ J! p4 z% q3 B8 u! l" t% C 
2 ~9 U& m- l! A7 A; v# Q: Z0 Y3 R0 H# `/ O- S1 R/ v7 L; w 
uchar command( uchar idata *buf ) { 
) j! Y7 W7 U8 S! @          uchar i, j;                                        % `/ |5 C' G9 q1 |5 J 
          for( i = 0;; ) 
1 s* K: o) ^3 A! y                    for( j = 0;; ){9 z8 d: i5 e$ Z' c9 t/ o& b' d 
                      if( comm_tab[i].name[j] != 0 ){ 
% L2 r0 b9 H1 O1 \: n" _        if( ((comm_tab[i].name[j] ^ buf[j]) & 0x5F) == 0 ){ 
  H/ ]4 Y) x' i% a                                  j++; 
, G9 _: L8 |& ^3 G' R) k- r: F                                                  continue;                                 
0 }$ Y/ o0 h' e. o7 m                         }( T: ^+ e' N- H- d 
                                i++;5 a1 a: ^  ~$ |# b0 P' D" D0 T 
        break;                                  4 V' w5 i0 T0 h 
                      }5 f; Z! W: E6 B4 Z% {# Z- a 
                      if( j == 0 )        return 255;                        / }* w, B- s& @. k# A 
                      return comm_tab[i].func( buf+j );         
7 B! \! f% x' `; ^/ X) R- T& f+ {                    }, p* l8 E0 |9 z' \0 @0 c9 M 
}0 {  g% W. Y$ U. B) G2 Q0 O+ o 
 |   
 
 
 
 |