//本程序采用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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务