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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
求助,AD转换数据不能通过串口发送。。
( A0 v& P3 `4 s0 D& S( k; Z1 W1 W  i6 ~
功能是用光敏传感器输入模拟量信号,通过采集模拟信号,然后转化成数字信号,然后通过串口助手反馈一个值,用hex模式显示,但是问题不知道出哪里了,串口没有数据接收,请各位帮忙看看,谢谢9 _3 ^0 H8 e* J4 f; d* C

6 F/ C# _4 F; C6 j#include <stc12c5a60s2.h>
6 F1 o4 _$ Z5 P& K#include <intrins.h>9 \' V, O0 B' g
#define uchar unsigned char" ~6 L6 D9 a9 d, @7 t( |) x
#define uint unsigned int
6 ]& H# p8 h) k* F. W//#define ADC_POWER   0x80
; _  {) |: m( w% Y- @//#define ADC_SPEEDLL 0x00
$ }  K9 v# a8 M0 [. E" Y- Y//#define ADC_START   0x08# N$ e6 ~9 N5 H7 E+ O! q3 Q
//#define ADC_FLAG    0x107 x  l1 H  c5 [0 l) T6 Q' C

2 Q: f4 k+ ^' H  g- B4 \$ C. X0 v( G7 ?) k, G  M& M+ ]
void Delay(uint n)
2 L9 H8 r6 j& y( g4 q5 F5 Z4 U{
# Q, A4 d! q$ n: e     uint x;: Q% y% h! [0 a' u- v( ?
; w- T% X! b7 V8 _
    while (n--)! E7 _# a/ C0 G" o+ O: ^& I$ a+ H
    {
% g% L6 o2 V! Y# r        x = 5000;
* V8 e2 V: p) M) k4 i: e% g        while (x--);0 f1 w! [+ A( ^7 L$ ^3 t
    }
6 `3 D9 }& H# z7 h8 v. F: w2 t! S}
4 t$ y9 W- h2 N- S
8 x( H% t) o" Y$ x: Z/*----------------------------
/ i) b4 G% t: G" K1 L串口初始化
6 u: A- ]+ c5 h) }----------------------------*/
/ W, M1 N* A2 l/ C" Rvoid Uartinit()        //9600bps@11.0592MHz$ W% L7 R4 m2 @- r% M' d$ x( @
{
' E) [$ E5 u/ Q    PCON &= 0x7F;        //波特率不倍速
9 v6 l" i) G7 `    SCON = 0x50;        //8位数据,可变波特率
3 M: z8 i. B  x( m    AUXR |= 0x04;        //独立波特率发生器时钟为Fosc,即1T4 k; w/ ?! _1 D" x4 `
    BRT = 0xDC;        //设定独立波特率发生器重装值
0 M8 u2 J' H' @& a$ e. v    AUXR |= 0x01;        //串口1选择独立波特率发生器为波特率发生器" h: ?: P3 n7 U% M9 u" ^
    AUXR |= 0x10;        //启动独立波特率发生器- l; c' X' H: `8 J. C% k% ?
}, L0 f: j9 v, b4 o+ d# d
4 a& y: l9 f: M& T: Z: W# n; d
/*----------------------------* y8 J/ x6 n  d5 ]+ |
串口发送函数
( w7 R) K$ }% v- ?* m----------------------------*/
; u" r+ W) w/ v; x' m+ s; dvoid SendData(uchar dat)
. c) S) D% O/ u# P4 L( h{
, X2 y+ ?6 C4 K+ R( R; {8 C        SBUF = dat;! h+ l  @$ v, Y4 U  a( W( j% W( [9 ]( q
    while (!TI);                    , J6 j0 U2 R" C
    TI = 0;                                            ' z1 |! F( R7 V4 d7 P" W
}
! U& A/ a$ R6 {1 z4 E& \# t
: B: [) e, h/ Z$ O/*----------------------------9 U  R: F3 k0 ?; c9 \  J9 _
ADC初始化
3 T  x8 e/ @: m. P----------------------------*/
9 G+ w3 \* L3 ^. Evoid InitADC()
  W8 m9 _. ?4 X) w' `$ q{* ]) Z- u. ^) g, `
    P1ASF = 0x80;    //设置P1.7作为模拟口使用
9 S" p& u$ I9 Z$ q) O% _6 F    ADC_RES = 0;    //清除之前的结果
  `) O6 Y6 u" M        ADC_CONTR|=0X80;//打开ADC电源) X# [( p  N0 P! m  R7 [
        ADC_CONTR|=0X08;//启动ADC转换* b9 V' }& R) s  V% D6 v
        ADC_CONTR|=0X07;//选择P1.7作为AD输入口, P/ t$ m6 k8 \- m) z
        ADC_CONTR|=0X60;//选择AD转换速度  Y( ]( g+ }' \: Z% j, `
        Delay(2);                      ( h$ D) ^( g' |7 O8 u" V3 y6 h
}8 J& d( l2 T2 G% G. M7 H1 n/ H
' n5 W3 y6 m: X, G$ @
void main()# U) a1 \- w% k: l
{
$ |; Y+ q: u( Y1 _    UartInit();                     //Init UART, use to show ADC result5 Q, x8 b! L' q& N/ e9 f$ J& z
    InitADC();                     //Init ADC sfr! r8 [, ~9 H+ N; U& X
    IE = 0xa0;                      //Enable ADC interrupt and Open master interrupt switch                                //Start A/D conversion
& @2 w! g) r4 ]2 w1 N% [' R    while (1);
; S3 ?  A6 _( B& ^7 M1 i- X& F}
4 K+ R: z2 T0 R
3 K+ T$ L- c+ K1 F/*----------------------------6 N9 |' `1 n4 k2 k" `8 N/ M6 r) S
ADC 中断服务程序
; y; n. I2 H* q: ?3 O! p----------------------------*/
, v( t. r, `- U+ M% jvoid adc_isr() interrupt 5 % r. K- ~2 f: o. g4 \
{
( I7 ~/ w0 l; t* S: C    ADC_CONTR|=0X80;//打开ADC电源
, v! Y# p0 E1 o- u/ W    ADC_CONTR|=0X08;//启动ADC转换) Q" u4 ^" N; v  C: d4 D; s
    ADC_CONTR|=0X07;//选择P1.7作为AD输入口
( J- r% s/ N' m8 p7 q    ADC_CONTR|=0X60;//选择AD转换速度8 l% z3 U3 M# i  w, n% K, j7 V! @
    if(ADC_CONTR|=0x10)' C# m. ~$ Y+ E4 Z. [( X
    {
2 p: T. _- z, e2 F/ ~        ADC_CONTR &=0X10;         //清除标志位; o+ g# ~, B6 _1 a/ w
        SendData(ADC_RES);        //得到ADC高8位数据发送到串口" N( H3 {; t" @# r
    }
; n4 R; C, l7 G. t' B}
1 W- Z" A' F% O) @8 X

该用户从未签到

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

点评

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

该用户从未签到

3#
发表于 2019-4-17 10:30 | 只看该作者
是数据发送不出去还是发送出的数据有问题(注意单片机只能发送8位数据)。你可以单独测试一下发送数据(随便发送个数据),如果单独发送数据没问题的话,那问题就是出在adc转换了。
$ `9 _/ z  F, q2 f  X3 s  R! X, ?- r7 ^  a  {4 X& K( X; G
那单片机是10位adc,不知你是发8位数据还是直接发10位数据(这样肯定有问题)

点评

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

该用户从未签到

4#
发表于 2019-4-17 10:35 | 只看该作者
本帖最后由 码农 于 2019-4-17 10:49 编辑 4 a6 \( M* d8 I3 n
relchhiclty 发表于 2019-4-17 10:22  ]- [3 b7 [  ]
串口感觉没有启动……直接附值就能传输么?
+ Q8 _8 s% \6 }; I. m' @
我看手册就是可以的,你看看那stc12c5a60s2的手册,就是可以的

该用户从未签到

5#
 楼主| 发表于 2019-4-17 10:36 | 只看该作者
fanichicl 发表于 2019-4-17 10:30. I  K6 ^6 Z6 n( h
是数据发送不出去还是发送出的数据有问题(注意单片机只能发送8位数据)。你可以单独测试一下发送数据(随 ...
/ m# Z; _& |  O3 s
串口助手上面显示没有接收,但是我测试串口发送没有问题
6 v7 ]9 H+ w9 ?% n* P- ~; h9 A% p* r
2 W/ L' A0 |$ o- E

' b6 O/ w, Q$ T* A* m可以发10位,也可以发8位,只不过8位没有10位的精度高
; Q* T9 v& w# l( U. S

该用户从未签到

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-6-24 08:24 , Processed in 0.093750 second(s), 28 queries , Gzip On.

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

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

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