您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页ADS1110程序

ADS1110程序

来源:抵帆知识网


//本程序采用IIC通信方式,4兆PIC16F877

//是ADS1100,ADS1110的通用程序。

刚通过。

# include

# 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) //{

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) // {

检查应答信号

TRISD1=1;

SCL=0;

SCL=1;

if (SDA )

{

ACK = 1;

}

else

{

ACK = 0;

}

SCL=0;

return(ACK);

}

void sendBYTE(uch data) // 发送一个字节

{

uch bitcount=8; //发送8位

do

{

TRISD0=0;

TRISD1=0; //置输出

if((data&0x80)==0x80)

{

SDA=1; //写 1

}

else

{

SDA=0; // }

SCL=0; // SCL=1;

asm(\"nop\");

asm(\"nop\");

asm(\"nop\");

asm(\"nop\");

asm(\"nop\");

SCL=0;

写 0

在时钟大于4u秒期间写数据

data=data<<1;

bitcount--;

} while(bitcount);

TRISD1=1 ; // asm(\"nop\");

asm(\"nop\");

asm(\"nop\");

asm(\"nop\");

asm(\"nop\");

}

uch reciveBYTE(void) //{

uch temp1=0;

释放总线等待应答

接受一个字节

uch bitcount1=8;

TRISD0=0;

TRISD1=1; //置输入

do

{ SCL=0; //在时钟大于4u秒期间读数据

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) // 发送连续读信号

{

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) // 发送不连续读信号

{

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()); //等待应答

sendBYTE(data); //写配置字

do{;

}while(check());

stop(); //结束写

}

void rdfromIIC(void) //从ADS1100中读出数据

{

start(); //开始读

sendBYTE(0x91); //写器件地址(读)

do{

;

}while(check()); //等待应答

TMR1H=reciveBYTE(); // 读高8位

ack(); //连续读

TMR1L=reciveBYTE(); //读低8位

ack(); //连续读

TMR2=reciveBYTE(); //读配置字

nack();

stop(); //结束读

// delay();

}

main()

{

while(1)

{

di();

wrtoIIC( 0x8c);

rdfromIIC();

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务