|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
//在Stc单片机上利用串口实现人机交互例(改编自KEIL C51 V7.0)8 ?! P! M u$ C8 h) L) e2 B
#include"STC8AXX.h"
1 k3 C6 F, D. y5 [, x; q3 l#include<stdio.h>
6 K1 d2 e% n* a& D) A& A* @: d#include"types.h". p/ z# p" J8 p1 g6 o
#include"Qport.h"
. Y2 ?: y4 y- t* Y) H* ]9 C4 c. z9 T#include"delay.h"
5 E2 D4 e1 Z8 U% K% @4 ~4 C/ u2 ` v; f4 ~& o) l" z3 w( k
#define uchar unsigned char
: P1 S% z# q8 }9 L#define uint unsigned int ; L; Z- I( Q0 J, Z
#define FOSC 11059200UL4 Q e( r& Q m; w4 ?. ~
#define BAUD1 9600UL
c! Z3 X* P+ Y/ R) e#define BRT1 (65536 - FOSC / BAUD1 / 4) //FEE0
% H* L l/ u& Z7 m5 I# P3 p' A( ?; Y/ n2 x* x# @) B
: H; O1 f5 m! [8 j0 ]) r- auchar code *s ="Please input the following commands:\n"
" j" U. X6 |( X% v "Inport p (read port)\n"5 a( X' B- n& M7 ?0 G; g( X
"Outport p nnn (write port)\n"
( K- }2 j! G3 d: U/ H " where p=0..3, nnn=0..255\n"
, A. p5 ?+ p, S9 S "Help or ? (display this text)\n";
+ M# R+ u! s$ K; f- W6 `! v& V# W6 h8 ]) \1 G! R9 o" B8 L6 N: |
+ M. q5 y) B: X+ R: m# o
uchar help(){
5 `& U# l1 K. f% s printf( "\n%s\n", Q );5 U% ~6 ^8 ^1 f& b: o
return 0;
! j) x* {$ c E8 Z}, S- A! M& W+ G8 _
" ` ` i v5 A2 D. D) G% H) I% U
" H0 ^1 P e- Q z. D( k4 j
uchar Inport( uchar idata *rbuf ) {
% g% N2 t1 G9 e6 z uint p;& K/ S) P4 `5 t& |5 x
uchar v;) S4 \* H8 L2 \) Z: s$ u
if( sscanf( rbuf, "%i", &p ) != 1 )4 g3 Q7 S6 \+ y# u) C
return 1; ( c! w C) L! r' L i- e$ ~" e2 I* s
case 0: v=P0; break;
8 x( w: o* `/ ]. W i5 k: j case 1: v=P1; break;
6 a: b1 F3 B+ E9 l+ R case 2: v=P2; break; 3 v$ @& K& H* L4 _
case 3: v=P3; break; : P) q( z: _5 [/ y# f* ~
case 4: v=P4; break;
. Q) m6 k3 t- p5 l1 w+ J7 k% q case 5: v=P5; break; 5 j3 e! p8 N: x
case 6: v=P6; break; ( ^& c7 |4 z( c( S
case 7: v=P7; break;
* I% O$ l9 o- ^# |. e- R) E4 [0 o G1 i. F1 ^
default: return 2;
9 R' w4 u' D+ p }
6 u( A0 B& R# `) d printf( "Port P%d = %02X\n", p, (uint)v );
$ Y3 v- e: r3 u; Y5 k* ~( V return 0;
$ |8 `! _. Q q7 x# j0 ^}
% T7 I: N# y& j+ Z+ H( r2 h4 R6 ^5 a! H" N
- T) v4 _+ j( j) H) I/ ]
uchar Outport( uchar idata *rbuf ) {
$ N' p$ D! ~* D3 f4 |5 }" u uint p, v;
7 y7 W) W/ v! I if( sscanf( rbuf, "%i%i", &p, &v ) != 2 )* ]# M. ^ B2 S5 E! A! n e
return 1; 9 F, k% ?; _4 R8 N& |; f
switch( p ){8 l4 }7 Q. S" |, T) C
case 0: P0=v; break;
, i1 x2 @0 \; j3 @ case 1: P1=v; break; : [6 e& v0 c$ t
case 2: P2=v; break; 3 [$ t4 ` ] u+ l3 a! j: D H/ @; ?9 ^
case 3: P3=v; break; . D. F) g! w1 p* J
case 4: P4=v; break;
: X- ^8 Z9 j% L5 Z0 D case 5: P5=v; break;
, z: W" e0 `: ] case 6: P6=v; break;
* `2 F" I; c9 Y2 N( W6 \5 y case 7: P7=v; break;
4 H# X' a1 X) V( O+ t1 {3 ^# B D( _, C) u6 U
default: return 2;
- A n n; w! @. w+ O) A% w }
9 x8 S# W% R9 f. m8 I return 0;/ H/ h2 F$ [1 W, Y7 Z( s: j; J
}8 Q# p" `3 t- ?& w) F
" O9 i o8 _9 W3 S. T w6 T5 | ]+ C" f5 o9 [6 L
void main( void ) {
+ S/ h8 D( m n+ G! C* q/ Q3 euchar idata buf[41];
/ S- \; B, }3 r" V" X# _
) r! P- P& k/ i0 P uchar elevel;
+ ?* {' m' V1 b' S+ H uchar mjs;: b, [. x- z7 O9 s2 N
Qport_init(); ) G0 L4 }6 d4 B0 i+ a; d+ a, ]
5 n5 u# Z0 L7 P+ i, @
//SCON:SM0 SM1 SM2 REN TB8 RB8 TI RI
3 ~: o ]3 V4 m// 0 1 0 1 X X 1 0 / w+ b- [0 r& L( G T
SCON = TI_+REN_+SM1_; //0x52, C! a0 e# x9 L1 s
' X; |6 f& X" A$ p) k" n6 M//TMOD: T1_GATE T1_C/T T1_M1 T1_M0 T1_GATE T0_C/T T0_M1 T0_M0
, J2 m8 f" x5 r// 0 0 0 0 0 0 0 0
8 R9 X3 D: t: A8 g8 r" f8 K//
: a* P! O! q" w6 C! \ TMOD = 0x00;
# T9 R* j1 k/ _9 R: c//AUXR: T0x12 T1x12 UART_M0x6 T2R T2_C/T T2x12 EXTRAM S1ST2
* x9 D v' }" B! D% T+ Y// 1 1 0 0 0 0 0 0
% G# |( j7 u$ @& e
' E7 \6 F- }0 o+ r( d% ^$ ? AUXR = 0xc0;! {$ {( J( e, l/ D& U' X
TL1 = BRT1;
6 u/ N9 r6 O6 u% i' M TH1 = BRT1 >> 8;
, j4 N& e7 x* G Z- M7 v* l5 z TR1 = 1; # P5 i. y+ J6 {2 Y+ r. a* H
' P$ p4 T( K3 I! X" J* \0 B' ?
/ `( O2 I0 w: ^/ q$ Q. N m
for(;;){% Z7 W/ y) H0 Y: `! @- L6 [0 J i
$ ?' l2 H: }9 P: W7 |// if(!P30) IAP_CONTR=0x60; : }: _- U1 e4 M4 l* P
// WDT_CONTR|=0x10;
# I; i1 [5 z! v# Z- O; @$ ?3 B ?
+ w7 K9 f9 `! g% F for(mjs=0;mjs<=2;mjs++){# w1 g! ]; l/ k% O+ I' o
DelayMs(200);- l `3 r6 I' _% Q
// LED1=!LED1;
+ U3 H. D! g6 j* q0 H) D LED2=!LED2;
' i& g8 y; U/ G+ g' R LED3=!LED3;# s, A: h/ z) M2 s# Y3 b4 z: a
// LED4=!LED4;1 \2 R+ }5 t! M
}3 n+ U. L" V- W* e {$ l
5 i# K- p5 J/ ?( T* Z( O
help();
' ? i. d) F+ g: n. ` putchar('>');
0 p6 b Z2 k4 N* G% x- w gets(buf,20);
4 P: ?* H( x6 B; O3 y. @ switch( elevel = command( buf ) ){
% P8 G: I) W! d6 n. S6 \0 L case 0: break;5 |0 N5 l3 O2 V: g
default: printf( "Error %d\n\n", (uint)elevel );}
4 t7 M0 X8 P1 Z }
# H% x, R( b2 c5 I }
0 n. \ R0 v4 o& \* K1 P5 m* M) e2 `* `2 Z
//命令解析 5 |; A- F5 A8 F* t# R% h
#include<stdlib.h>' P Q( B( B3 Y
#include<types.h>
6 M0 ^; P8 H3 L- i
5 A5 `9 M" l- ?typedef struct {
2 ^, {+ z# [. `/ m! ~; \ d2 L uchar code *name;
6 p( V3 r/ V0 _: U; a uchar (code *func)(uchar idata *);
# r; K! j2 s' C$ d}comm_struct;
# n; R2 v: B- T0 T* r% F- P% x
* Q9 t- g4 z; p% r8 s' M5 [+ [$ b
" ?+ T# N2 C1 p% H6 r- b+ J* b0 U! ncomm_struct code comm_tab[] = {
E. T) S3 Y- a: D. R "Inport", Inport,1 C' ?7 P3 P0 R' v
"Outport", Outport,
# d2 T; c+ W) z( f/ r2 [$ X "help", help,
: G2 ^+ b/ M6 e+ x( r, ~; ] "?", help,
8 V" w; c' ?/ s "", NULL
" p/ w5 y1 S2 q};$ v$ ^) Q: d: H8 L6 `( ~& C
4 e& a4 { A' s+ ?, ~6 v- l) F
; U) \$ B& g0 d8 J
uchar command( uchar idata *buf ) {0 \9 ]$ G9 }1 t0 ]5 X+ C
uchar i, j; ) S: w1 r, k& @# S0 x" @4 I$ |
for( i = 0;; )6 P% d; @' F0 r: B1 h# O5 Z8 M8 N
for( j = 0;; ){: T; ?% Z7 ]/ }9 U" B" ]8 C; e% G4 s
if( comm_tab[i].name[j] != 0 ){3 B9 k1 }7 Z L1 K6 L* Q
if( ((comm_tab[i].name[j] ^ buf[j]) & 0x5F) == 0 ){4 H1 u6 p8 k( V4 a
j++;
! a" B$ Z; |1 b, n; F/ e! o continue;
5 V( \- B" \2 x- A( ?- k9 |! B; b }% ]3 O+ ^5 s- o' G! h9 U
i++;
( o$ U& U% @, G, z7 D2 ~: [ break;
' Q" {9 h% S9 W$ U1 z2 v }
' q. b( ^2 M# R/ ?" k1 M9 q8 Y# Y if( j == 0 ) return 255; 2 Q( F2 J6 s0 X; w! n3 B
return comm_tab[i].func( buf+j ); 9 G/ X7 a% |2 p5 ?
}
! p& Y1 n2 H- j}8 q: S- [3 s9 u2 R1 ?: a" j
|
|