以下是程序,不知道哪里出错了,用protues
仿真总是失败,DA
ti 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);
}
-
哪里错了!!!
一周热门 更多>