ADC采集到的值通过串口发送出去,但发送数据时数据不太正常,大家帮忙看看,谢谢了,急急急!!!

2019-07-20 18:57发布

ADC采集到的值通过串口发送出去,但发送数据时数据不太正常,我想把采集到的16位数拆分成两个8位通过串口发送出去,测3.3V时输出对应的值应该是4096,结果不对,大家帮忙看看,谢谢了,急急急!!!

int main(void)
{
        u16 adcx;
        u8 dataH,dataL;
        My_USART1_Init();   //初始化串口1
        delay_init(100);    //初始化延时函数
        Adc_Init();         //初始化ADC
        while(1)
        {
                adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
                 adcx=adcx&0xfff;   //清高四位
                dataH = (adcx >> 8) & 0xff;  //取
                USART_SendData(USART1, dataH);//发送高8位
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
                 {} //等待发送数据寄存器为
                         
                        //delay_ms(20);         
                         
                 dataL = adcx & 0xff ;  //低8位
                USART_SendData(USART1, dataL);//发送低8位
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
                 {} //等待发送数据寄存器为
                         
                delay_ms(20);       
        }
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
正点原子
1楼-- · 2019-07-22 15:45
 精彩回答 2  元偷偷看……
库库03
2楼-- · 2019-07-22 16:38
正点原子 发表于 2016-11-1 18:57
看代码没问题。

原子哥,用你的程序
float temp;
temp=(float)adcx*(3.3/4096);  
adcx=temp;
USART_SendData(USART1, adcx);
采集3.3V串口是不是应该显示FF FF或者FE等接近的数?

xuyaqi
3楼-- · 2019-07-22 16:45
库库03 发表于 2016-11-1 16:21
值为0F 8F  0F 8A   0F C1等

根据你提供的3.3v是0F B4 0F A6,0V是00 02 00 04,1.65V是0F 8F  0F 8A正常,0F C1离谱是否有接触不良等硬件问题。
科费丹皓
4楼-- · 2019-07-22 19:52
我也差不多是这问题

一周热门 更多>