|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
没有好好学习,所以很多地方都不懂,过来请教一下。有没有大佬愿意提供一下思路,意见,万分感谢!控制板是SAB80c537,存储芯片M27C512。目的是能通过串口通信在电脑上检测一块控制板有没有故障,顺便采集电压并显示大小。
& W7 p: f( X3 X# u' o) i3 P1 I- k控制板有电压输出和采集,但是采集口较少,需要38译码器绘制PCB但是不太懂(电压采集 电压量的大小如何检测,是在要设计的PCB板上加一些东西嘛?)6 x5 x+ h5 _. ?; F
- w+ D0 R6 Y2 O, j# I, o串口调试方面,是不是只要能够实现通讯这个功能就可以,对程序有没有要求
1 h4 _; _4 ?" M5 u( Z如果我要对采集的IO数据编辑处理,设置面板那种电脑上按键控制后面直接显示某个电压值难度高嘛?是在绘制PCB的时候通过硬件电路就能直接处理,还是在采集完信号之后通过烧录的程序处理?
- w6 I3 c$ K- {& J9 z3 c' B
9 G1 f2 v9 D& w; [/ b附上目前的单片机程序:
: Q4 B* t+ D6 g3 f串口的:#include "reg52.h" //包函8051 内部资源的定义9 f9 G& J4 v! A5 T& Q2 b. a
unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
4 L; u1 w: h& O% I" x- n8 Jsbit gewei=P2^4; //个位选通定义
, k: n/ t/ y* U7 A2 @* D3 ~% ysbit shiwei=P2^5; //十位选通定义& e9 g, c1 |( t: t3 E+ U3 p( b9 \
sbit baiwei=P2^6; //百位选通定义
( t) G+ e+ a, ^, ?; Lunsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //1~10
. ?9 _8 y* u! n; m H. T" P: |5 m6 C9 ?* Jvoid Delay(unsigned int tc) //延时程序$ T6 _- |6 H9 E. o. z
{4 w. a8 O) _; _6 Q0 B5 y
while( tc != 0 )
2 A! O; c: r- v% Q% a4 j, V4 }{unsigned int i;# x" L+ }' g) S4 q1 q# x. b: w
for(i=0; i<100; i++);
9 c& \1 ^+ D, ~/ I& Y+ x: jtc--;} d! @5 e6 ^' [2 v
}
- Y# a8 K" L8 j; Y7 W T: Q$ lvoid LED() //LED显示接收到的数据(十进制)
) s8 ?/ w ] o$ L( B I- l4 I{2 Y; d0 X" k& f" d6 Q& i, G
gewei=0; P0=table[dat%10]; Delay(10); gewei=1;- q$ P2 z6 F% R4 f# ]5 e- }$ H' j
shiwei=0; P0=table[dat/10]; Delay(10); shiwei=1;
5 {9 ?4 p: I; @' l5 bbaiwei=0; P0=table[dat/100]; Delay(10); baiwei=1;$ e* H/ `0 `' z7 N6 }
}( q8 X# |8 [$ ~
///////功能:串口初始化,波特率9600,方式1/////////' ^1 Y" Y6 P; I, q
void Init_Com(void)
: J; i. B$ s# |+ L6 Q$ F& B{
. |7 x6 h H4 ^8 r! K* }$ {- n$ C) CTMOD = 0x20;7 R3 M6 U4 c# k1 i
PCON = 0x00;
3 P' e9 k2 P8 S: v5 ]: KSCON = 0x50;$ C' Y8 P8 @2 G) e4 k9 e
TH1 = 0xFd;
4 C$ l i$ { GTL1 = 0xFd;% l# r2 A) u. z, ^0 _8 G- t% T
TR1 = 1;8 V9 X. }! C+ T. |" F. ~- Y
}. M5 p! w& \! N: q2 g
/////主程序功能:实现接收数据并把接收到的数据原样发送回去///////
4 X& y9 `3 B( l" F9 n) h& uvoid main(); y; g8 w ^- C. h' |4 \7 w- v$ U
{
7 @# s! }5 V* ?4 Y1 ZInit_Com();//串口初始化5 R5 Q1 t7 _' D _3 n, c
while(1)
3 D7 |( Y9 g3 I' H/ s$ s0 }{
# ~: |6 s" \; w7 |7 b( t4 c( bif ( RI ) //扫描判断是否接收到数据,2 W$ ]+ d$ @7 m2 o2 L
{
3 v ?4 t. A, K$ o% M' J- Ldat = SBUF; //接收数据SBUF赋与dat
0 m: r" S" A' o/ [RI=0; //RI 清零。$ M# T' [' f b5 z
SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113). J7 N" ^0 A2 r+ l& P# k6 r
}- l% k2 s9 j! f: L1 j) s* z# m
LED(); //显示接收到的数据0 j. ~+ p( D& }
}( S8 A8 e* }/ M: C/ l
}
. S9 z% P' H7 f& X) Q. h
& M: L/ I0 }0 k6 d9 P' x/ Z
% \$ K* z8 _2 t1 W9 m4 n- z |
|