ADC0809串口显示总是255

2019-07-17 11:51发布

[qq]1009083442[/qq]

ADC0809.PNG

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
1009083442
1楼-- · 2019-07-17 16:11
#include< reg52.h>
#include< stdio.h >
#include< delay.h >

#define uchar unsigned char
#define uint unsigned int
/****ADC0809引脚定义********************/
sbit CLK=P1^0;
sbit ST=P1^3;
sbit ALE=P1^1;
sbit OE=P1^1;
sbit EOC=P1^2;
sbit adda=P0^0;
//--声明全局函数--//
void UsartConfiguration();
void Delay10ms(unsigned int c);   //误差 0us
uchar Read_AD();

/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void main()
{
        unsigned char i,num=0;
        unsigned char temp[4];//显示区域临时存储数组
        UsartConfiguration();
        ST=0;
        while(1)
        {
                ST=1;                        //启动ADC0809
                ST=0;
            ALE=1;  //允许写入地址         
                adda=0;
                ALE=0;
                num=Read_AD();  //读取AD0809数据
                temp[0] = num %10000/1000+0x30;               
                temp[1] = num %1000/100+0x30;
                temp[2] = num %100/10+0x030;
                temp[3] = num %10/1+0x30;
        //sprintf(temp,"VO:%7c ",num);  //格式输出电压值,%3.2表示浮点输出,小数点后两位
                for(i=0; i<4; i++)
                {
                        SBUF = temp[i];   //将要发送的数据放入到发送寄存器
                        while(!TI);                  //等待发送数据完成
                        TI=0;                          //清除发送完成标志位
                }
                SBUF=' ';
                Delay10ms(50);                  //延时一下再发
        }
}


/*******************************************************************************
* 函 数 名         :UsartConfiguration()
* 函数功能                   :设置串口
* 输    入         : 无
* 输    出         : 无
***************************************************************************/
void UsartConfiguration()
{
        SCON=0X50;                        //设置为工作方式1
//        TMOD=0X20;                        //设置计数器工作方式2
        TMOD=0x21;
        PCON=0X80;                        //波特率加倍                                                                  11.0592MHz          
        TH1=0XF3;                    //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                            //打开计数器

//        TMOD=0x01;
        TH0=(65536-200)/256;
        TL0=(65536-200)%256;
        ET0=1;
        TR0=1;
//        EA=1;
        DelayMs(2);
}

void timer0(void) interrupt 1    //中断处理函数,产生约500KHz时钟供0809工作
{
        TH0=(65536-200)/256;
        TL0=(65536-200)%256;
        CLK=~CLK;

}

unsigned char  Read_AD()  //读ADC0809数据
{
        uchar temp=0;         //存放AD采集的数据
        while(EOC==0);        //等待转换完成
                  OE=1;
                 temp=P2;      //读取数据
                 DelayMs(1);
                 OE=0;
                 return temp;
}
/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能                   : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

        //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }         
        }      
}
1009083442
2楼-- · 2019-07-17 22:07
 精彩回答 2  元偷偷看……
1009083442
3楼-- · 2019-07-18 03:34
这是串口读到的数据
串口数据、.PNG
1009083442
4楼-- · 2019-07-18 08:01
读的过程通道0   的   ad有改变   我已经用别的板读过    有哪位大神救命啊。。。
yangxue1125
5楼-- · 2019-07-18 10:37
255就是溢出了,程序本身并没有写进去或者并没有执行

一周热门 更多>