关于“adc0804输出结果串口查询”

2019-07-15 14:46发布

  本人调通了串口输入的代码,但是若加上AD,给定AD转换一个固定的输入电压,就无法检测出串口的结果。请问有什么需要注意的问题吗?代码如下
#include<reg52.h>
#include<intrins.h>
sbit adc0804_cs=P3^0;
sbit adc0804_wr=P3^7;
sbit adc0804_rd=P3^6;
sbit adc0804_DB0=P1^0;
sbit adc0804_DB1=P1^1;
sbit adc0804_DB2=P1^2;
sbit adc0804_DB3=P1^3;
sbit adc0804_DB4=P1^4;
sbit adc0804_DB5=P1^5;
sbit adc0804_DB6=P1^6;
sbit adc0804_DB7=P1^7;//adc0804的管脚定义。

read_adc0804()
{
             unsigned char getdata;
                 adc0804_cs=1;
                 adc0804_rd=1;
                 adc0804_wr=1;
                 P1=0xff;
                 _nop_();
                           //初始状态时cs=1,rd=1,wr=1,p1口全为高阻态。

                 adc0804_cs=0;
                 adc0804_wr=0;
                 adc0804_wr=1;
                 _nop_();
                          //cs=0激活ad芯片,wr上升沿启动ad转换。

                 adc0804_rd=0;
                 _nop_();
                         //rd=0时读取转换完毕的8为数字量。

                 getdata=P1;
                 _nop_();
                        //输出转换后的结果。

                 adc0804_rd=1;
                 adc0804_cs=1;
                 return getdata;
}                 
//rd=1,cs=1关闭ad芯片。




#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,m,a,getdata;


void init()//总初始化。
{
        TMOD=0x20; //设置定时器1,工作模式为2.作为波特率发生器。
        TH1=0xfd;
        TL1=0xfd;//设置波特率。
        TR1=1;//启动T1定时器。
        REN=1;//允许串口接收。
        SM0=0;
        SM1=1;//设置串口的工作方式。
        EA=1;//开总中断。
        ES=1;//打开串口中断。
}
//初始化。
chuankou()
{
        while(1)
        {
                if(flag==1)//设置flag切换单片机的接收/停止状态。
                {
                        ES=0;//关闭串口中断。
                               for(m=0;m<=7;m++)
                                                {
                                                     SBUF=getdata;//传输数据至缓冲区。
                             while(!ti);//发送标志位,
                             TI=0;//TI清0.
                        }
                                                SBUF=a;//传输数据至缓冲区。
                        while(!TI);//发送标志位,
                        TI=0;//TI清0.
                                                ES=1;
                        flag=0;
                }
        }

}



#include<reg52.h>
#include<stdio.h>
#include"adc0804.c"
#include"chuankou.c"
#include"delay.c"

extern unsigned int i;
extern unsigned char flag,m,a,getdata;

void main()
{  
   init();
     while(1)
     {         
                  read_adc0804();//采样到一路信号后,启动ad转换。
                      chuankou();
                       delay(5);//完成1路信号的转换后
      }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。