pic16f877a i2c ASM code voor 24C256 E2PROM

PIC16F877A heeft een hardware-IIC-interface, shoule u relatieve registreren om, of je gebruikt bleow code: (werk in 4MHZ)

;
;************************************************* ************************; Pagina3 (600-6ff)
;
; Pagina3 (600-6ff)
;; Pagina3 (600-6ff)
;************************************************* ****************************; Pagina3 (600-6ff)
; ** Twee wire/I2C Bus READ / WRITE Routines van Microchip's; Pagina3 (600-6ff)
; ** 24LCXX / 85Cxx seriële CMOS EEPROM interfacing naar een; Pagina3 (600-6ff)
; ** PIC16C57 8-bit CMOS-chip microcomputer; Pagina3 (600-6ff)
; ** Revsied Versie 2.0
; **; Pagina3 (600-6ff)
; ** Deel gebruik = PIC16F57
; ** Opmerking: 1) Alle tijden zijn gebaseerd op een referentie-kristal frequentie van 4MHz; Pagina3 (600-6ff)
; ** Die gelijkwaardig is aan een instructie cyclus tijd van 1 USEC.; Pagina3 (600-6ff)
; ** 2) Adres en letterlijke waarden worden gelezen in octale tenzij anders; Pagina3 (600-6ff)
; ** Opgegeven.
;************************************************* ****************************; Pagina3 (600-6ff)

;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Twee wire/I2C - CPU communicatie foutstatus tafel en subroutine
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Input: W-reg = error code; Pagina3 (600-6ff)
; Output: ERCODE = error code; Pagina3 (600-6ff)
; FLAG (FOUT) = 1; Pagina3 (600-6ff)
;
; Code foutstatus modus; Pagina3 (600-6ff)
; ------- ------------------------------------------ ------------; Pagina3 (600-6ff)
, 1: 3 vergrendeld laag apparaat (bus is nog steeds bezig); Pagina3 (600-6ff)
, 2: 4 laag vergrendeld door een apparaat (bus is nog steeds bezig); Pagina3 (600-6ff)
, 3: Geen erkennen van het apparaat (geen handdruk); Pagina3 (600-6ff)
, 4: 4 bus niet vrijgegeven voor de kapitein voor het genereren van STOP-bit; Pagina3 (600-6ff)
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
;
; Subroutine om de status van de seriële klok (3) en seriële gegevens; Pagina3 (600-6ff)
, (4) staat volgens de foutstatus tafel.Gegenereerde codes zijn; Pagina3 (600-6ff)
, handig voor bus / apparaat diagnose.
;

;
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; START bus communicatie routine
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Input: None
; Output: initialiseren bus communicatie
; Tijd gebruikt: MMAX 23 Cyclus.
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
;
; Genereer START bit (3 hoog is, terwijl 4 gaat van hoog naar laag overgang); Pagina3 (600-6ff)
en controleer de status van de seriële klok.

BSTART

MOVLW B'00000001 '; Zet 1,2 lijn in de uitgang van de staat; Pagina3 (600-6ff)
TRIS PORTB; Pagina3 (600-6ff)

;************************************************* **************************
BSF IIC_SDA; Zorg datalijn is hoog
; NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
BCF IIC_SCL; Zorg klok lijn is laag niveau
;************************************************* **************************
NOP
BSF IIC_SCL; Zorg klok lijn is 1
; NOP
; NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
BCF IIC_SDA; maken gegevens lin heeft 0 van 1 indien klok = 1

; NOP
; NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)

BCF IIC_SCL; Start klok trein; Pagina3 (600-6ff)

RETLW ,0; Pagina3 (600-6ff)

;
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; STOP bus communicatie routine
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Input: None
; Output: Bus communicatie, STOP conditie
; Tijd gebruikt: MMAX 18 Cyclus.
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
;
; Genereer STOP bits (4 gaat van laag naar hoog gedurende 3 hoog staat); Pagina3 (600-6ff)
en controleer bus voorwaarden.; Pagina3 (600-6ff)
;
BSTOP

BCF IIC_SDA; Zorg datalijn = 0; Pagina3 (600-6ff)

MOVLW B'00000001 '; Zet 1,2 lijn in de uitgang van de staat; Pagina3 (600-6ff)
TRIS PORTB; Pagina3 (600-6ff)

BCF IIC_SDA; Zorg gegevens lint = 0 weer
NOP; Pagina3 (600-6ff)
; NOP; Pagina3 (600-6ff)
NOP

BSF IIC_SCL; Stel klok = 1
NOP; Pagina3 (600-6ff)
; NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)

BSF IIC_SDA; Zorg data lijn 1 van 0 wanneer kloklijn = 1
; NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
BCF IIC_SCL; Zorg kloklijn laag
NOP

RETLW ,0; Pagina3 (600-6ff);------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Seriële data versturen vanaf PIC naar seriële EEPROM, bit-voor-bit subroutine; Pagina3 (600-6ff)
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Input: None
; Output: Voor (DI) van de seriële EEPROM hulpmiddel; Pagina3 (600-6ff)
; Tijd gebruikt: MAX 17 Cyclus.
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)

Bitin

BSF EEPROM, DI; In het geval van input data = 1
MOVLW B'10000001 '; Force SDA lijn als input; Pagina3 (600-6ff)
TRIS PORTB; Pagina3 (600-6ff)

; NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)

BSF IIC_SDA; Pagina3 (600-6ff)
BSF IIC_SCL; Klok hoog
NOP; Pagina3 (600-6ff)
; NOP; Pagina3 (600-6ff)
; NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
BTFSS IIC_SDA; Pagina3 (600-6ff)
BCF EEPROM, DI; Pagina3 (600-6ff)
BCF IIC_SCL; Pagina3 (600-6ff)

RETLW ,0; Pagina3 (600-6ff)

;
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Seriële data ontvangen van seriële EEPROM PIC-, bit-voor-bit subroutine
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Input: EEPROM bestand
; Output: Van (DO) van de seriële EEPROM apparaat PIC
; Tijd gebruikt: MAX 13 Cyclus.
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
;BITOUT

MOVLW B'00000001 '; Zet 1,2 lijn in de uitgang van de staat; Pagina3 (600-6ff)
TRIS PORTB; Pagina3 (600-6ff)

BTFSS EEPROM, DO; Controleer de status van het verzenden van gegevens; Pagina3 (600-6ff)
GOTO BIT0; = 0; Pagina3 (600-6ff)
BSF IIC_SDA; = 1; Pagina3 (600-6ff)
GOTO CLKOUT

BIT0

BCF IIC_SDA; Output bit 0; Pagina3 (600-6ff)

CLKOUT
BSF IIC_SCL; Pagina3 (600-6ff)
; NOP
; NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
NOP; Pagina3 (600-6ff)
BCF IIC_SCL; Pagina3 (600-6ff)RETLW ,0; Pagina3 (600-6ff);
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; SEND DATA subroutine
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Input: TXBUF
; Output: gegevens X'mitted te EEPROM-apparaat
; Tijd gebruikt: MMAX 201 Cyclus.; Pagina3 (600-6ff)
;================================================= ========================; Pagina3 (600-6ff)
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
;
TX
MOVLW .8; 8 bits van de gegevens; Pagina3 (600-6ff)
Movwf count; Pagina3 (600-6ff)
;
TXLP

BCF EEPROM, DO, in geval van de data = 0; Pagina3 (600-6ff)
BTFSC TXBUF, 7; ja?; Pagina3 (600-6ff)
BSF EEPROM, DO, neen, dus data = 1; Pagina3 (600-6ff)CALL BITOUT; gegevens te sturen; Pagina3 (600-6ff)
RLF TXBUF, 1; verschuiving gegevens; Pagina3 (600-6ff)
Decfsz COUNT, 1, 8 bit data te versturen over?; Pagina3 (600-6ff)

GOTO TXLP; NoCALL Bitin, ja, lees bevestigen bit; Pagina3 (600-6ff)

BTFSC EEPROM, DI; controleren bevestigen bit; Pagina3 (600-6ff)
BCF IIC_ACK; verzenden mislukt gegevens; Pagina3 (600-6ff)

RETLW ,0; Pagina3 (600-6ff);
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Receive Data subroutine
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
; Input: None
; Output: Ontvang RXBUF = 8-bit data
; Tijd gebruikt: MMAX 222 Cyclus.
;------------------------------------------------- ----------------------------; Pagina3 (600-6ff)
;
RX
MOVLW .8; 8 bits van de gegevens; Pagina3 (600-6ff)
Movwf count; Pagina3 (600-6ff)
Clrf RXBUF
BCF STATUS, C; Pagina3 (600-6ff)
;
RXLP
RLF RXBUF, 1; Shift gegevens buffer; Pagina3 (600-6ff)
CALL Bitin; Pagina3 (600-6ff)
BTFSC EEPROM, DI; Pagina3 (600-6ff)
BSF RXBUF, 0; Input bit = 1; Pagina3 (600-6ff)
Decfsz COUNT, 1, 8 bits?; Pagina3 (600-6ff)
GOTO RXLP; Pagina3 (600-6ff)
BSF EEPROM, DO; Set erkennen bit = 1; Pagina3 (600-6ff)

CALL BITOUT; STOP verdere input; Pagina3 (600-6ff)

RETLW ,0; Pagina3 (600-6ff)

 

Welcome to EDABoard.com

Sponsor

Back
Top