求助,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-17 09:38
可以告知一下么
slytherinsun
2楼-- · 2019-07-17 11:55
进入中断服务之后先清除标志位,然后串口发送,最后再重新开启下次转换试试看。
冷风中
3楼-- · 2019-07-17 16:42
slytherinsun 发表于 2016-4-25 15:33
进入中断服务之后先清除标志位,然后串口发送,最后再重新开启下次转换试试看。

大神,还是不好使啊
冷风中
4楼-- · 2019-07-17 20:41
 精彩回答 2  元偷偷看……

一周热门 更多>