请教printf用法的问题.试了一晚上也没找到原因

2020-01-27 11:24发布

这是一个将AD转换的值通过串口发送到PC上的程序,但是弄了一晚上PC始终收不到程序,实在弄不明白了,来请教各位大师..谢谢各位!!单片机是STC12系列,1T的单片机.串口设置使用波特率计算软件算出来的,应该没有问题
#include"STC12C5620AD.H"           //STC12C54系列单片机头文件
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int

void uinit(void)                //9600bps@11.0592MHz
{
        PCON &= 0x7f;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xfe;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0f;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xDC;                //设定定时初值
        TH1 = 0xDC;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
}


void delayms(uint xms)                               
{
        uint i,j;
        for(i=xms;i>0;i--)                      //i=xms即延时约xms毫秒
                for(j=110;j>0;j--);
}


void AD_Init()
{
        P1M0=0x0f;//0000 1111 设置P1口低4位为开漏模式,用来AD采集
        P1M1=0x0f;//0000 1111
        ADC_CONTR=0xe0;//1110 0000 开启AD转换器电源,设置最高转换速度
        delayms(100);
}


int GetAD(unsigned char channel) //channel为要取的通道号(0~7)
{
        unsigned char AD_finished=0;
        int result;
        ADC_CONTR|=channel;   //选择AD通道号
        ADC_CONTR|=0x08;      //启动AD转换
        while(AD_finished==0) //等待AD转换结束
        {
                AD_finished=(ADC_CONTR&0x10);//查询ADC_FLAG位是否置1
        }
        result=ADC_DATA*4+ADC_LOW2;//读走AD转换结果,由于ADC_DATA中存储12位中的
        //高8位,当要转换成10进制时,需将ADC_DATA中的数左移2位,即相当于*4
        ADC_CONTR&=0xf7;     //清除转换结束标志
        return (result);    //返回结果给函数
}


float Ad_Av(uchar channel)    //求100次采集电压的平均值
{
        float Val_Av=0;
        uchar num;
        for(num=100;num>0;num--)
        {
                Val_Av+=GetAD(channel);//100次采集求和
        }
        Val_Av/=100.0;            //求平均值
        Val_Av=Val_Av*5.0/1024;  //单片机电源为5V,求的真实电压值
        return (Val_Av);          //返回给函数
}


void main()
{
        float ad1,ad2,ad3,ad4;
        AD_Init();
        uinit();
        ad1=Ad_Av(1);
        ad2=Ad_Av(2);
        ad3=Ad_Av(3);
        ad4=Ad_Av(4);
        printf("The voltage is %fV ",ad1);
        while(1);
}
这是一个将AD转换的值通过串口发送到PC上的程序,但是弄了一晚上PC始终收不到程序,实在弄不明白了,来请教各位大师..谢谢各位!!单片机是STC12系列,1T的单片机.串口设置使用波特率计算软件算出来的,应该没有问题.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
Ian11122840
1楼-- · 2020-01-28 13:42
哎,对系统自带库函数完全不熟!~~
muzheyun
2楼-- · 2020-01-28 16:54
请教一下,如何通过AD转换出来的值计算VCC呢?比如1通道的电压是1.5V(精准电压),AD转换的结果是A,那么用什么公式计算出VCC呢?由于STC的基准是VCC,所以想要准确必须计算VCC电压.谢谢!!
fghfhgfh
3楼-- · 2020-01-28 21:59
 精彩回答 2  元偷偷看……
a20084666
4楼-- · 2020-01-28 22:36
呵呵 我也在解决这个问题
不要神话
5楼-- · 2020-01-29 01:08
学习了,MARK一下
yujietangying
6楼-- · 2020-01-29 04:37
MARK

一周热门 更多>