EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
求助,AD转换数据不能通过串口发送。。
2 O: i6 u$ X9 `4 o; h+ j8 g
" Y* E$ j, j4 D! _4 A, G- G. {功能是用光敏传感器输入模拟量信号,通过采集模拟信号,然后转化成数字信号,然后通过串口助手反馈一个值,用hex模式显示,但是问题不知道出哪里了,串口没有数据接收,请各位帮忙看看,谢谢
3 h2 h( I5 Q- z, m) o" j/ e) e0 [4 c
( {6 [" Y0 e. O- o' B#include <stc12c5a60s2.h>9 \, V' R# g' H+ |
#include <intrins.h>7 D/ Y4 G( F: z
#define uchar unsigned char
/ n2 r2 @5 p+ k; R" U: Q) g#define uint unsigned int* d/ d$ ~2 h. O1 e6 v t
//#define ADC_POWER 0x80; E" c( q. T, I3 s
//#define ADC_SPEEDLL 0x00
9 p1 O8 ~5 p. F2 h$ s//#define ADC_START 0x087 b% m3 w* R& @
//#define ADC_FLAG 0x10' F @2 X6 A- _& m. r0 H+ q
, s; g9 B1 v; t1 s7 |: v9 L
0 v% Q/ U8 a* x, \$ k: Hvoid Delay(uint n)9 J: j5 I+ X$ l+ k; B2 @. c- g
{/ @) |5 V6 U+ d) H, E6 A4 k
uint x;0 U: }' m& a; c3 t- c# s
7 Q. y8 U/ u8 L. O i8 [! A8 G+ j) ` while (n--)# ]3 L- h( _) }# A! e* B9 @
{0 S7 U# t: O3 K$ Q; T0 B
x = 5000;; [6 ? Y: H& |9 r0 I
while (x--);
3 q3 r* q2 t2 } h$ u, r% ^ }, C7 H9 Z* b {0 K
}% k: a8 Y& o( N; i3 V, {# p
4 b5 ^( M N, S! Z/*----------------------------
% ^$ Y; G% y4 W6 ^串口初始化
' s6 X; ^4 j5 V$ g! \% i0 E----------------------------*/
- S. P) F5 C/ k1 N, ]void Uartinit() //9600bps@11.0592MHz
: s' v! X$ s% I7 r1 F& G{; U7 B( B0 d& p6 \" |$ G% N# h8 m1 l
PCON &= 0x7F; //波特率不倍速
4 ?3 D% T4 `& \& |: f7 L; M4 z& Y SCON = 0x50; //8位数据,可变波特率6 V" ?) y, C8 _+ O5 U9 a2 q
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T) P% w0 \! J2 j3 c
BRT = 0xDC; //设定独立波特率发生器重装值
( N0 D8 V" }# O: F/ a( y2 V AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器/ C: ]9 ^# {0 F! d3 C% w
AUXR |= 0x10; //启动独立波特率发生器, O( i$ G+ H1 h7 e7 N1 P
}$ N% b; P3 X5 D2 i/ @! i) u# ^
$ M3 e# A. J3 t3 `3 [5 k/*----------------------------
: l+ ?; j* a& a) {. x串口发送函数% K1 M, W4 U+ Z" c6 X# U
----------------------------*/
, K% J, }7 { x$ g, Z svoid SendData(uchar dat)
/ S+ w. D E) W& P O% z{7 q8 D5 c" W8 j. Q* g
SBUF = dat;0 q6 L! x, g/ v. f8 e( t
while (!TI);
( B6 l& d/ ]) U C5 k7 ~ TI = 0;
+ \/ d1 Q3 A9 _7 L( |: S# Q}
3 \* L' f# c1 ?# z( W1 b' Q
2 `4 w% c& x1 |3 [5 }$ q9 |/*----------------------------( _* W, J g1 m$ t$ o2 |" c6 [
ADC初始化 , e7 K6 Q% d& a0 t6 g
----------------------------*/% a& q4 H# @/ p# O
void InitADC(): q# v$ }* z7 q1 O+ S
{2 k+ Y3 |7 H0 p, f9 A9 a2 |' ^. D
P1ASF = 0x80; //设置P1.7作为模拟口使用
: h$ h; ~# \" D ADC_RES = 0; //清除之前的结果
( `1 N6 A3 N4 q9 J9 c) S ADC_CONTR|=0X80;//打开ADC电源) k5 |# L# B) V1 V: D) Y! u C
ADC_CONTR|=0X08;//启动ADC转换
# `1 o$ c. s, U4 P1 M ADC_CONTR|=0X07;//选择P1.7作为AD输入口
) a) W- `* y" q) B2 _8 l( s ADC_CONTR|=0X60;//选择AD转换速度
5 ?' h, Z& s% @$ l5 P& s! Q& y Delay(2);
& K" d6 X9 k5 ?# \- I}
. d" H( }' ]1 |6 S4 T2 u( H% ]5 B9 w2 R1 Y
void main() t& d# \/ l' q5 ]5 l- u& |
{0 P4 ^$ e1 j% l. m4 o4 M, r# D- ?
UartInit(); //Init UART, use to show ADC result
, t- \ o4 W# d% p" w) | InitADC(); //Init ADC sfr
: _* e$ y4 ^: H5 z. D- Q$ ^ o IE = 0xa0; //Enable ADC interrupt and Open master interrupt switch //Start A/D conversion
( V# S1 ~1 Z- ]2 A/ Q0 J while (1);
+ `; g. j& M3 V- S. ]}
5 H1 E w/ |+ i6 m8 b6 D1 f, y
( ?* U+ @! b$ ~# z2 W+ a/*----------------------------
6 J9 ^% M4 |( X u- V7 _/ s) c' x% ] sADC 中断服务程序8 a! W- ~- b3 e8 G \" q7 i
----------------------------*/: c. @/ _4 q# u$ B$ }0 Q- X3 q6 r
void adc_isr() interrupt 5
; S7 d% S2 L* P; ?$ X2 F9 Y{
9 S+ M) P- S. t( H2 U ADC_CONTR|=0X80;//打开ADC电源
% S# j$ B+ ^4 ^) O! I$ N8 F/ p. N ADC_CONTR|=0X08;//启动ADC转换) v$ v( C1 `. [' N4 Z6 p }
ADC_CONTR|=0X07;//选择P1.7作为AD输入口
" N3 u$ {& v% N* A$ V# Y; u ADC_CONTR|=0X60;//选择AD转换速度% r6 [$ D6 K' ^# P' C
if(ADC_CONTR|=0x10)% J4 w% n2 W) P9 A! O; {$ W8 `, w& b
{+ Y) J; m; c7 Q) v
ADC_CONTR &=0X10; //清除标志位: r' V3 r& o$ ?$ y
SendData(ADC_RES); //得到ADC高8位数据发送到串口; K" ]" }2 D r' ^6 ?. \
}
( n7 U& \% d8 d5 ?( ^" u8 W}
2 ]2 ~' p: j7 U( ^) b5 H4 p( V |