adc0832的问题

2019-07-16 02:30发布

以下是程序,不知道哪里出错了,用protues仿真总是失败,DAti DAIO总是显示电平冲突(如图)。 请老师们解答,不甚感激!!!
ps:PIC16F877A,4M晶振。
#include<pic.h>
__CONFIG(0x3b31);
#define CS    TRISB7=0,RB7
#define Clk   TRISB6=0,RB6
#define DATI  TRISB5=0,RB5
#define DATO  TRISB5=0,RB5
#define uchar unsigned char
unsigned char dat = 0x00;
void delay(int t)
{
  uchar i,j;
  for(i=110;i>0;i--)
  for(j=t;j>0;j--);
}
void main()
{
unsigned char i,test,adval;
adval = 0x00;
test = 0x00;
TRISD=0;
PORTD=0;
while(1)  
{      
    Clk = 0;       //初始化
   CS=1;
    DATI = 1;
   
    CS = 0;
    NOP();
    Clk = 1;
    NOP();
    Clk = 0;           
    DATI = 1;      //通道0的第一位
    NOP();         
    Clk = 1;
    NOP();
    Clk = 0;
    DATI = 0;      //通道0的第二位
    NOP();
    Clk = 1;
    NOP();

    Clk = 0;    //写进空闲位 //clk上升沿写进去
    DATI = 1;
  NOP();
    Clk = 1;
  NOP();
    //读取前8位的值
    for( i = 0;i < 8;i++ )      //读取前8位的值
    {                           //clk下升沿读出来
       NOP();                 //高位先行
       adval <<= 1;
       Clk = 1;
      NOP();
       Clk = 0;
       if (DATO)
          adval |= 0x01;
     }  
     
     for (i = 0; i < 8; i++)      //读取后8位的值
      {                          //clk下升沿读出来
           test >>= 1;           //低位先行,时序图上
           if (DATO)
              test |= 0x80;
         NOP();
          Clk = 1;
        NOP();
           Clk = 0;
      }
     
  if(adval==test)
  dat=adval;
         NOP();
         CS = 1;        //释放ADC0832,关闭
         DATO = 1;
         Clk = 1;
     PORTD=dat;
         
  
}   
    delay(50);
}

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