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

2019-07-15 16:01发布

功能是用光敏传感器输入模拟量信号,通过采集模拟信号,然后转化成数字信号,然后通过串口助手反馈一个值,用hex模式显示,但是问题不知道出哪里了,串口没有数据接收,请各位帮忙看看,谢谢

#include <stc12c5a60s2.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//#define ADC_POWER   0x80
//#define ADC_SPEEDLL 0x00
//#define ADC_START   0x08
//#define ADC_FLAG    0x10


void Delay(uint n)
{
     uint x;

    while (n--)
    {
        x = 5000;
        while (x--);
    }
}

/*----------------------------
串口初始化
----------------------------*/
void Uartinit()        //9600bps@11.0592MHz
{
    PCON &= 0x7F;        //波特率不倍速
    SCON = 0x50;        //8位数据,可变波特率
    AUXR |= 0x04;        //独立波特率发生器时钟为Fosc,即1T
    BRT = 0xDC;        //设定独立波特率发生器重装值
    AUXR |= 0x01;        //串口1选择独立波特率发生器为波特率发生器
    AUXR |= 0x10;        //启动独立波特率发生器
}

/*----------------------------
串口发送函数
----------------------------*/
void SendData(uchar dat)
{
        SBUF = dat;
    while (!TI);                    
    TI = 0;                                            
}

/*----------------------------
ADC初始化
----------------------------*/
void InitADC()
{
    P1ASF = 0x80;    //设置P1.7作为模拟口使用
    ADC_RES = 0;    //清除之前的结果
        ADC_CONTR|=0X80;//打开ADC电源
        ADC_CONTR|=0X08;//启动ADC转换
        ADC_CONTR|=0X07;//选择P1.7作为AD输入口
        ADC_CONTR|=0X60;//选择AD转换速度
        Delay(2);                     
}

void main()
{
    UartInit();                     //Init UART, use to show ADC result
    InitADC();                     //Init ADC sfr
    IE = 0xa0;                      //Enable ADC interrupt and Open master interrupt switch                                //Start A/D conversion
    while (1);
}

/*----------------------------
ADC 中断服务程序
----------------------------*/
void adc_isr() interrupt 5
{
    ADC_CONTR|=0X80;//打开ADC电源
    ADC_CONTR|=0X08;//启动ADC转换
    ADC_CONTR|=0X07;//选择P1.7作为AD输入口
    ADC_CONTR|=0X60;//选择AD转换速度
    if(ADC_CONTR|=0x10)
    {
        ADC_CONTR &=0X10;         //清除标志位
        SendData(ADC_RES);        //得到ADC高8位数据发送到串口
    }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
破力达
1楼-- · 2019-07-16 17:23
那单片机是10位adc,不知你是发8位数据还是直接发10位数据(这样肯定有问题)
capslk
2楼-- · 2019-07-16 19:15
破力达 发表于 2015-9-27 12:15
那单片机是10位adc,不知你是发8位数据还是直接发10位数据(这样肯定有问题)

可以发10位,也可以发8位,只不过8位没有10位的精度高
capslk
3楼-- · 2019-07-17 00:10
破力达 发表于 2015-9-27 12:13
是数据发送不出去还是发送出的数据有问题(注意单片机只能发送8位数据)。你可以单独测试一下发送数据(随便发送个数据),如果单独发送数据没问题的话,那问题就是出在adc转换了。

串口助手上面显示没有接收,但是我测试串口发送没有问题
capslk
4楼-- · 2019-07-17 01:07
525355 发表于 2015-9-27 12:10
串口感觉没有启动……直接附值就能传输么?

我看手册就是可以的,你看看那stc12c5a60s2的手册,就是可以的
~追→光
5楼-- · 2019-07-17 02:31
 精彩回答 2  元偷偷看……
冷风中
6楼-- · 2019-07-17 06:01
同问,大神你是如何解决的啊

一周热门 更多>