微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 电子元器件 > ADC0809串口显示总是255

ADC0809串口显示总是255

时间:10-02 整理:3721RD 点击:
[qq]1009083442[/qq]


#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='\t';
                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--);
                }         
        }      
}

上面是运行的程序  每次运行   串口老是显示如下图

这是串口读到的数据


读的过程通道0   的   ad有改变   我已经用别的板读过    有哪位大神救命啊。

255就是溢出了,程序本身并没有写进去或者并没有执行

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top