找回密码
 注册
关于网站域名变更的通知
查看: 910|回复: 8
打印 上一主题 下一主题

求助,AD转换数据不能通过串口发送。。

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-17 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
发表于 2019-4-17 10:22 | 只看该作者
串口感觉没有启动……直接附值就能传输么?

点评

我看手册就是可以的,你看看那stc12c5a60s2的手册,就是可以的  详情 回复 发表于 2019-4-17 10:35

该用户从未签到

3#
发表于 2019-4-17 10:30 | 只看该作者
是数据发送不出去还是发送出的数据有问题(注意单片机只能发送8位数据)。你可以单独测试一下发送数据(随便发送个数据),如果单独发送数据没问题的话,那问题就是出在adc转换了。* c0 \; @! C( R5 h) l& K+ N
0 f, A9 b5 G1 i# G. Q, h
那单片机是10位adc,不知你是发8位数据还是直接发10位数据(这样肯定有问题)

点评

串口助手上面显示没有接收,但是我测试串口发送没有问题 可以发10位,也可以发8位,只不过8位没有10位的精度高  详情 回复 发表于 2019-4-17 10:36

该用户从未签到

4#
发表于 2019-4-17 10:35 | 只看该作者
本帖最后由 码农 于 2019-4-17 10:49 编辑 & J2 ~+ O3 X+ {# c, _) ]
relchhiclty 发表于 2019-4-17 10:22
0 I5 L7 y/ Z( s- `3 y& L串口感觉没有启动……直接附值就能传输么?

! F/ _8 z% U" _" |/ m7 S我看手册就是可以的,你看看那stc12c5a60s2的手册,就是可以的

该用户从未签到

5#
 楼主| 发表于 2019-4-17 10:36 | 只看该作者
fanichicl 发表于 2019-4-17 10:300 l: {/ V6 z+ t) Y
是数据发送不出去还是发送出的数据有问题(注意单片机只能发送8位数据)。你可以单独测试一下发送数据(随 ...
+ g5 Q/ q! a" x  ~" I
串口助手上面显示没有接收,但是我测试串口发送没有问题+ T$ P5 o& u0 f% a

$ o5 M7 Z! y7 T/ Z
" p% u8 a/ s: Y! R! q
可以发10位,也可以发8位,只不过8位没有10位的精度高
% z( H- C6 W" g8 {- O, _

该用户从未签到

6#
发表于 2019-4-17 10:43 | 只看该作者
串口只识别字符串型的数据,不能读取单纯的数值型数据

该用户从未签到

7#
发表于 2019-4-17 10:48 | 只看该作者
进入中断服务之后先清除标志位,然后串口发送,最后再重新开启下次转换试试看。

该用户从未签到

8#
 楼主| 发表于 2019-4-17 11:16 | 只看该作者
谢谢各位的解答
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-26 09:34 , Processed in 0.156250 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表