?? ads1100.txt
字號:
//本程序采用IIC通信方式,4兆PIC16F877
//是ADS1100,ADS1110的通用程序。
剛通過。
# include<pic.h>
# define uch unsigned char
# define unint unsigned int
# define SDA RD1
# define SCL RD0
uch ACK;
unint j;
void delay() //延時
{
for(j=5535;--j;) continue;
}
void start (void) //開始
{
TRISD0=0;
TRISD1=0;
SDA=1;
asm("nop");
SCL=1;
asm("nop");
asm("nop");
asm("nop");
SDA=0;
asm("nop");
asm("nop");
asm("nop");
SCL=0;
asm("nop");
asm("nop");
}
void stop(void) //結(jié)束
{
TRISD0=0;
TRISD1=0;
SDA=0;
asm("nop");
SCL=1;
asm("nop");
asm("nop");
asm("nop");
SDA=1;
asm("nop");
asm("nop");
asm("nop");
SCL=0;
asm("nop");
asm("nop");
}
uch check(void) // 檢查應(yīng)答信號
{
TRISD1=1;
SCL=0;
SCL=1;
if (SDA )
{
ACK = 1;
}
else
{
ACK = 0;
}
SCL=0;
return(ACK);
}
void sendBYTE(uch data) // 發(fā)送一個字節(jié)
{
uch bitcount=8; //發(fā)送8位
do
{
TRISD0=0;
TRISD1=0; //置輸出
if((data&0x80)==0x80)
{
SDA=1; //寫 1
}
else
{
SDA=0; //寫 0
}
SCL=0; //在時鐘大于4u秒期間寫數(shù)據(jù)
SCL=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
SCL=0;
data=data<<1;
bitcount--;
} while(bitcount);
TRISD1=1 ; //釋放總線等待應(yīng)答
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
uch reciveBYTE(void) //接受一個字節(jié)
{
uch temp1=0;
uch bitcount1=8;
TRISD0=0;
TRISD1=1; //置輸入
do
{ SCL=0; //在時鐘大于4u秒期間讀數(shù)據(jù)
SCL=1;
asm("nop");
asm("nop");
if(SDA) //讀 1
{
temp1=temp1|0x01;
}
else //讀 0
{
temp1=temp1&0xfe;
}
SCL=0;
if(bitcount1-1)
{
temp1=temp1<<1;
}
bitcount1--;
}while(bitcount1);
return(temp1);
}
void ack(void) // 發(fā)送連續(xù)讀信號
{
TRISD0=0;
TRISD1=0;
SDA=0;
SCL=0;
SCL=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
SCL=0;
}
void nack(void) // 發(fā)送不連續(xù)讀信號
{
TRISD0=0;
TRISD1=0;
SDA=1;
SCL=0;
SCL=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
SCL=0;
}
void wrtoIIC(uch data) //寫器件地址和配置字
{
start(); //開始寫
sendBYTE(0x90); //寫器件地址(寫)
do{
;
}while(check()); //等待應(yīng)答
sendBYTE(data); //寫配置字
do{;
}while(check());
stop(); //結(jié)束寫
}
void rdfromIIC(void) //從ADS1100中讀出數(shù)據(jù)
{
start(); //開始讀
sendBYTE(0x91); //寫器件地址(讀)
do{
;
}while(check()); //等待應(yīng)答
TMR1H=reciveBYTE(); // 讀高8位
ack(); //連續(xù)讀
TMR1L=reciveBYTE(); //讀低8位
ack(); //連續(xù)讀
TMR2=reciveBYTE(); //讀配置字
nack();
stop(); //結(jié)束讀
// delay();
}
main()
{
while(1)
{
di();
wrtoIIC( 0x8c);
rdfromIIC();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -