|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | 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 |
請(qǐng)教高手:pic寫24lc01b的問題 |
| 作者:fanyi 欄目:單片機(jī) |
我在用PIC16C54寫24LC01時(shí)遇到很奇怪的問題,寫入的和讀出的不同。我想可能干脆就是沒寫進(jìn)去,那位高手可以幫忙?我把程序給你發(fā)過去 或是給我發(fā)一個(gè)調(diào)試通過的程序,我自己研究,先謝了 fanyilee@hotmail.com |
| 2樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/15 15:41:00 發(fā)布:
哪位高手幫幫忙??? 哪位高手幫幫忙。?? |
|
| 3樓: | >>參與討論 |
| 作者: mmf0809 于 2003/12/15 17:39:00 發(fā)布:
查 你可以在燒片機(jī)上看看你有沒寫進(jìn) |
|
| 4樓: | >>參與討論 |
| 作者: bronchbos 于 2003/12/15 19:31:00 發(fā)布:
問題在哪里 我前天調(diào)試了24LC64的程序, 用PIC16C57 的MCU. 還能夠幫你分析. |
|
| 5樓: | >>參與討論 |
| 作者: study51 于 2003/12/15 21:16:00 發(fā)布:
寫的操作有沒有完成?試試延時(shí)2ms后再讀 |
|
| 6樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/16 16:55:00 發(fā)布:
prom1 RB EQU 6 RA EQU 5 BUF EQU 8 TXBUF EQU 9 RXBUF EQU 0AH CNT EQU 0BH ADDR EQU 0CH FLAG EQU 0DH ADDRCOPY EQU 0EH NUMB EQU 0FH DO EQU 0 DI EQU 1 SCL EQU 1 SDA EQU 2 ;------------------------------------------------------------------------------------ ;-------------------------- ORG 1FFH GOTO MAIN ;-------------------------- ORG 0H ;********************************************************** ;子程序區(qū) ;********************************************************** ;================================================== ;數(shù)據(jù)處理 ;向24LC01B寫入1(位于NUMB中)字節(jié),1不能大于24LC01B的頁緩沖器容量, ;寫入的起始地址在ADDR中,原數(shù)據(jù)起始地址指針位于W中 WRBYTES CLRF FLAG MOVWF 4 MOVLW 0A0H MOVWF TXBUF CALL BSTART CALL TX MOVF ADDR,W MOVWF TXBUF CALL TX WRLOOP: MOVF 0,W MOVWF TXBUF CALL TX INCF 4 DECFSZ NUMB,1 GOTO WRLOOP CALL BSTOP INCF ADDR,1 RETLW 0 RDBYTES CLRF FLAG MOVWF 4 MOVLW 0A0H MOVWF TXBUF CALL BSTART CALL TX MOVF ADDR,W MOVWF TXBUF CALL TX CALL BSTART MOVLW 0A1H MOVWF TXBUF CALL TX RDLOOP CALL RX MOVF RXBUF,W MOVWF 0 INCF 4,1 DECFSZ NUMB,1 GOTO LOWACK MOVLW B'00000000' TRIS RB BSF RB,SDA BSF RB,SCL NOP NOP NOP BCF RB,SCL CALL BSTOP RETLW 0 LOWACK MOVLW B'00000000' TRIS RB BCF RB,SDA NOP NOP BSF RB,SCL NOP NOP BCF RB,SCL GOTO RDLOOP ;--------------------------------- BSTART MOVLW B'00000000' TRIS RB BSF RB,SDA BSF RB,SCL NOP NOP NOP BCF RB,SDA NOP NOP NOP BCF RB,SCL RETLW 0 ;---------------------------------- TX MOVLW 08 MOVWF CNT TXLP BCF FLAG,DO BTFSC TXBUF,7 BSF FLAG,DO MOVLW B'00000000' TRIS RB BTFSS FLAG,DO GOTO TX0 BSF RB,SDA GOTO TX1 TX0 BCF RB,SDA TX1 BSF RB,SCL NOP NOP NOP BCF RB,SCL RLF TXBUF,1 DECFSZ CNT,1 GOTO TXLP MOVLW B'00000100' TRIS RB BSF RB,SDA NOP NOP NOP BCF FLAG,DI BSF RB,SCL NOP NOP NOP BTFSC RB,SDA BSF FLAG,DI BCF RB,SCL RETLW 0 ;------------------------------------- BSTOP MOVLW B'00000000' TRIS RB BCF RB,SDA NOP   |
|
| 7樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/16 16:57:00 發(fā)布:
diao yong prom MOVLW 1 ;數(shù)據(jù)個(gè)數(shù)1 MOVWF NUMB MOVLW 10H MOVWF ADDR MOVLW 08H CALL WRBYTES ;保存F8 |
|
| 8樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/16 17:00:00 發(fā)布:
現(xiàn)象 我寫入的值和讀出的值不一致,且無論寫入何值讀出的值不變?yōu)?5h,我懷疑沒有寫進(jìn)去,程序是樹上的范例程序,我采用pb1為scl,pb2為sda 請(qǐng)高手指點(diǎn) |
|
| 9樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/16 17:02:00 發(fā)布:
致:bronchbos 請(qǐng)問能不能給我一份你調(diào)試通過的程序,謝謝 fanyilee@hotmail.com |
|
| 10樓: | >>參與討論 |
| 作者: fxmxh 于 2003/12/16 17:05:00 發(fā)布:
有沒有把RB口的內(nèi)部上拉關(guān)掉? |
|
| 11樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/16 17:16:00 發(fā)布:
有沒有把RB口的內(nèi)部上拉關(guān)掉? 我對(duì)pic不熟? 把RB口的內(nèi)部上拉關(guān)掉是不是指設(shè)置輸入輸出狀態(tài)? |
|
| 12樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/16 17:18:00 發(fā)布:
請(qǐng)教怎么關(guān)? 請(qǐng)教怎么關(guān)? |
|
| 13樓: | >>參與討論 |
| 作者: fxmxh 于 2003/12/16 20:59:00 發(fā)布:
搞錯(cuò)了:)54沒有上拉控制位的 |
|
| 14樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/18 13:29:00 發(fā)布:
請(qǐng)高手指點(diǎn)阿! 請(qǐng)高手指點(diǎn)阿! |
|
| 15樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/18 13:31:00 發(fā)布:
小弟真的很急! 請(qǐng)來此的高手賜教 |
|
| 16樓: | >>參與討論 |
| 作者: fanyi 于 2003/12/20 16:40:00 發(fā)布:
你好 eeproom你好,我找了一下,確實(shí)有一個(gè)i2c的,但他用的芯片是p16f876 程序多余的部分也很多,請(qǐng)問你有PIC16C54的程序嗎? |
|
| 17樓: | >>參與討論 |
| 作者: eeproom 于 2003/12/20 19:52:00 發(fā)布:
你沒找到?將有關(guān)腳改一下,有詳細(xì)的注解。 ; ; Declare: ; This subroutine copy from:http://www.piclist.com/techref/microchip/i2c-dv.htm ; pin set as: PIC16CXX ; ____________ ; | | ; | | ; | PORTb.2|----SDA(you can change to your PORT's pin) ; | PORTb.1|----SCL(change to your PORT's pin). ; | | ; ;------------------------------------------------------------------------ ; ; I^2C MASTER send/receive routines for 24Cxx EEPROM MEMORY chips ; by Andrew D. Vassallo ; ; email: snurple@hotmail.com ; ; Timing set for 4MHZ clock, 4.7K pullup resistors to SDA and SCL LINEs. ; Checks provided for failed ACK during EEPROM write access. ; Optimized for speed and clarity of function. ; Full comments provided. ; Bank switching correct. ; ;------------------------------------------------------------------------ ;------ NOTE: Locate all variables in Bank 1!! CBLOCK GenCount ; generic counter/temp register (use with caution) Mem_Loc ; EEPROM MEMORY address to be accessed Data_Buf ; byte read from EEPROM is stored in this register OutputByte ; used for holding byte to be OUTPUT to EEPROM flags ; flag bit register ENDC ;******************************************************************************* ; ;------ Define PORT pins: RB2=SDA=data, RB1=SCL=clock ;------ Pins are connected via 4.7K pullup resistors for passive CONTROL ;------ Any PORT pins can be used. #define SDA TRISB, 2 ; #define SCL TRISB, 1 ; ;------ The MEMORY address is predefined as Mem_Loc coming in to this routine to read from EPROM. ;------ Note that using the 24Cxx requires an address for bits <1:3> for CONTROL bytes. For a one- ;------ MEMORY CIRCUIT used here, just use address 000. This routine uses "random addressing." ;------ This code has been optimized for speed at 4MHZ, assuming Temperature is between -40 and +85 deg. C. ; ; Call with: EEPROM address in Mem_Loc ; Returns with: byte in Data_Buf ReadEPROM bcf STATUS, RP0 movf PORTB, 0 ; for EEPROM operation, andlw 0xF9 ; load zero into RB1 and RB2 movwf PORTB ; for passive CONTROL of bus bsf STATUS, RP0 ; SELECT Bank 1 for TRISB access (passive SCL/SDA CONTROL) bsf SDA ; let SDA LINE get pulled high bsf SCL ; let SCL LINE get pulled high bcf SDA ; START - data LINE low movlw 0xA0 ; send "DUMMY" write (10100000) to set address call Byte_Out btfsc flags, 0 goto Error_Routine ; NOTE: MUST USE "RETURN" FROM THERE movf Mem_Loc, 0 call Byte_Out btfsc flags, 0 goto Error_Routine bcf SCL ; pull clock LINE low in preparation for 2nd START bit nop bsf SDA ; pull data LINE high - data transition during clock low bsf SCL ; pull clock LINE high to begin generating START bcf SDA ; 2nd START - data LINE low movlw 0xA1 ; request data read from EPROM (read=10100001) call Byte_Out btfsc flags, 0 goto Error_Routine ;------ Note that Byte_Out leaves with SDA LINE freed to allow slave to send data in to MASTER. call Byte_In movf Data_Buf, 0 ; put result into W register for returning to CALL bcf SCL ; extra cycle for SDA LINE to be freed from EPROM nop bcf SDA ; ensure SDA LINE low before generating STOP bsf SCL ; pull clock high for S |
|
| 18樓: | >>參與討論 |
| 作者: yuntian 于 2003/12/22 15:43:00 發(fā)布:
#define SDA TRISB, 2 ; |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |