|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
at128上的ads1100的通訊程序,請(qǐng)高手指點(diǎn) |
| 作者:ljhtj 欄目:單片機(jī) |
//ICC-AVR application builder : 97-1-1 1:35:57 // Target : M128 // CRYSTAL: 8.0000Mhz #include <iom128v.h> #include <macros.h> /**************************** **編譯器類型及版本:ICCAVR 6.26 **芯片類型ECU ATMEGA128L AD ADS1100 **硬件接口說(shuō)明: AD的管腳定義 AT128 ADS1100 SCL SCL SDA SDA *********************************/ ad(void) { unsigned int i,j; // 發(fā)出START信號(hào) TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // 等待TWINT置位,TWINT置位表示START信號(hào)已發(fā)出 while(!(TWCR & (1<<TWINT))) ; //檢驗(yàn)TWI狀態(tài)寄存器,屏蔽預(yù)分頻位,如果狀態(tài)字不是START轉(zhuǎn)出錯(cuò)處理 if((TWSR & 0xf8) != 0x08) ERROR(); //將deviceadd裝入TWDR寄存器 TWDR =0x90;//deviceadd; //TWINT清零,啟動(dòng)發(fā)送地址 TWCR = (1<<TWINT)|(1<<TWEN); //等待TWINT置位,TWINT置位表示deviceadd信號(hào)已發(fā)出,及收到應(yīng)答信號(hào)ACK/NACK while (!(TWCR & (1<<TWINT))) ; //檢驗(yàn)TWI 狀態(tài)寄存器,屏蔽預(yù)分頻位,如果狀態(tài)字不是MT_SLA_ACK 轉(zhuǎn)出錯(cuò)處理 if ((TWSR & 0xf8)!=0x18) ERROR(); //裝入數(shù)據(jù)到TWDR 寄存器, TWINT 清零,啟動(dòng)發(fā)送數(shù)據(jù) TWDR = 0x9c; i=TWDR; TWCR = (1<<TWINT)|(1<<TWEN); //等待 TWINT 置位, TWINT 置位表示總線數(shù)據(jù) DATA 已發(fā)送,及收到應(yīng)答信號(hào)ACK/NACK while (!(TWCR & (1<<TWINT))) ; //檢驗(yàn)TWI 狀態(tài)寄存器,屏蔽預(yù)分頻器,如果狀態(tài)字不是MT_DATA_ACK 轉(zhuǎn)出錯(cuò)處理 if ((TWSR&0xF8)!=0x28) ERROR(); //發(fā)送STOP 信號(hào) TWCR =(1<<TWINT)|(1<<TWEN)|(1<<TWSTO); TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); while(!(TWCR & (1<<TWINT))) ; if ((TWSR & 0xf8) != 0x08) ERROR(); //wait; TWDR =0x91;//deviceaddw; TWCR = (1<<TWINT)|(1<<TWEN); while (!(TWCR & (1<<TWINT))) ; if ((TWSR&0xf8)!=0x40) ERROR(); TWCR = (1<<TWINT|(1<<TWEA)|(1<<TWEN));//裝入數(shù)據(jù)到TWDR 寄存器, TWINT 清零,啟動(dòng)發(fā)送數(shù)據(jù) i=0; i=TWDR; while (!(TWCR & (1<<TWINT))) ; //等待 TWINT 置位, TWINT 置位表示總線數(shù)據(jù) DATA 已發(fā)送,及收到應(yīng)答信號(hào)ACK/NACK if ((TWSR&0xf8)!=0x50) //0x58 ERROR();//檢驗(yàn)TWI 狀態(tài)寄存器,屏蔽預(yù)分頻器,如果狀態(tài)字不是MT_DATA_ACK 轉(zhuǎn)出錯(cuò)處理 TWCR = (1<<TWINT)|(1<<TWEN);//裝入數(shù)據(jù)到TWDR 寄存器, TWINT 清零,啟動(dòng)發(fā)送數(shù)據(jù) j=0; j=TWDR; while (!(TWCR & (1<<TWINT))) ; //等待 TWINT 置位, TWINT 置位表示總線數(shù)據(jù) DATA 已發(fā)送,及收到應(yīng)答信號(hào)ACK/NACK if ((TWSR&0xf8)!=0x58) //0x58 ERROR();//檢驗(yàn)TWI 狀態(tài)寄存器,屏蔽預(yù)分頻器,如果狀態(tài)字不是MT_DATA_ACK 轉(zhuǎn)出錯(cuò)處理 TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); i=(i<<8); j=i+j; return j;//發(fā)送STOP 信號(hào) } void ERROR(void) { for(;;) ; } |
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號(hào) |