C
choi_new
Guest
Hyvä ystävä,
Anteeksi, minua uudelleen.
Olen kirjoittanut 8051 koodi käyttää AT24C512 tietoja.
BTW, löysin oman ohjelman vain voi lukea FFH alkaen EPROM kun käytät EMU aluksella, mutta olen jo poltettu bmp-tiedosto EEPROM.
Näin ollen Mielestäni ohjelma on virhe.
Alla on oma koodi.
Voiko joku auttaa minua selvittämään ohjelma?
Kiitos miljoonaa!Peter
;;==== KoodiSDA BIT P2.2
SCL BIT P2.3
; SDA BIT P2.3
; SCL BIT P2.2
ADD0 BIT P2.0
ADD1 BIT P2.1
FADDR EQU 0A0H
ADDR_HI1 EQU 30H
ADDR_LO1 EQU 31H
ADDR_HI2 EQU 32H
ADDR_LO2 EQU 33 h
RAM_DATA EQU 34H
Org 00H
MOV ADDR_HI1, # 00H
MOV ADDR_LO1, # 00H
MOV ADDR_HI2, # 00H
MOV ADDR_LO2, # 00H
MOV RAM_DATA, # 00H
I2C:
INC DPTR
MOV ADDR_HI2, DPH
MOV ADDR_LO2, DPL
LCALL READ_RANDOM
NOP
MOV A, RAM_DATA
MOV A, RAM_DATA
MOV A, RAM_DATA
MOV A, RAM_DATA
SJMP I2C
READ_CURRENT:
; AT24Cxx Nykyinen Osoite Lue-toimintoa.
; Called ohjelmoitava osoite A. Palauttaa tiedot A.
; Palauttaa CY määrä osoittaa, että linja-auto ei ole käytettävissä
, Tai että osoitettu laite ei tunnistanut.
LCALL START
JC X_45; keskeyttää, jos bussi ei ole saatavilla
; RL A; ohjelmoitava osoite bittiä 3:1
; ORL A, # FADDR, lisätään kiinteä osoite
; SETB ACC.0; täsmentää lukea toiminta
MOV A, # 0A0H
LCALL huutaa; lähettää laitteen osoite
JC X_44; keskeyttää, jos mitään tunnustusta
LCALL Shin; vastaanottamaan dataa tavu
MOV RAM_DATA, A
LCALL NAK,
älä tunnustaa byte
CLR C; selvä virhe lippu
X_44:
LCALL STOP
RET
X_45:
RETREAD_RANDOM:
; AT24Cxx Satunnainen Lue-toimintoa.
; Called ohjelmoitava osoite A, byte osoite
; Rekisteröidä pari ADDR_HI: ADDR_LO.Palauttaa tiedot A.
; Palauttaa CY määrä osoittaa, että linja-auto ei ole käytettävissä
, Tai että osoitettu laite ei tunnistanut.
PUSH B
MOV B, A; tallentaa kopion ohjelmoitava osoite
; Lähetä harjoitustestien kirjoittaa komento asettaa sisäinen osoite.
LCALL START
JC X_47; keskeyttää, jos bussi ei ole saatavilla
; RL A; ohjelmoitava osoite bittiä 3:1
; ORL A, # FADDR, lisätään kiinteä osoite
; CLR ACC.0; täsmentää kirjoitustoiminto
MOV A, # 0A0H
LCALL huutaa; lähettää laitteen osoite
JC X_46; keskeyttää, jos mitään tunnustusta
MOV A, ADDR_HI1; lähettää korkean byte osoite
LCALL huutaa;
JC X_46; keskeyttää, jos mitään tunnustusta
MOV A, ADDR_LO1; lähettää alhainen byte osoite
LCALL huutaa;
JC X_46; keskeyttää, jos mitään tunnustusta
MOV A, ADDR_HI2; lähettää korkean byte osoite
LCALL huutaa;
JC X_46; keskeyttää, jos mitään tunnustusta
MOV A, ADDR_LO2; lähettää alhainen byte osoite
LCALL huutaa;
JC X_46; keskeyttää, jos mitään tunnustusta
; Call Nykyinen Osoite Lue-toimintoa.
MOV A, B; saada ohjelmoitava osoite
LCALL READ_CURRENT
LJMP X_47; poistuaksesi
X_46:
LCALL STOPX_47: POP B
RETSTART:
; Lähetä START,
jotka on määritelty korkea-to-alhainen SDA kanssa SCL korkea.
; Paluu SCL, SDA alhainen.
; Palauttaa CY vahvistaa, jos linja-auto ei ole käytettävissä.
SETB SDA
SETB SCL
; Tarkista bussi käytettävissä.
JNB SDA, X_40; hypätä ellei korkea
JNB SCL, X_40; hypätä ellei korkea
NOP; valvoa asennuksen viivästyminen ja syklin viive
CLR SDA
NOP; valvoa pidä viivyttää
NOP;
NOP;
NOP;
NOP;
CLR SCL
CLR C; selvä virhe lippu
SJMP X_41
X_40:
SETB C; asettaa virhe lippu
X_41:
RET
STOP:
; Lähetä STOP, määritellään matalasta korkeaan SDA kanssa SCL korkea.
; SCL odotetaan pieni merkintä.Paluu SCL, SDA korkea.
CLR SDA
NOP; valvoa SCL alhainen ja data-asetukset
NOP
SETB SCL
NOP; valvoa setup viive
NOP;
NOP;
NOP;
NOP;
SETB SDA
RETShout:
; Vaihto a tavu on AT24Cxx useimmat merkitsevää bittiä ensin.
; SCL, SDA odotetaan pieni merkintä.Paluu SCL alhainen.
; Called tiedot lähettämään A.
; Palauttaa CY asettaa ilmoittamaan laiminlyöntiä orja ilmoittaa.
; Tuhoaa A.
PUSH B
MOV B, # 8; bit counter
X_42:
RLC A; siirtää bittinen osaksi CY
MOV SDA-, C-, tuotanto-bittinen
NOP; valvoa SCL alhainen ja data-asetukset
SETB SCL; nostaa kellon
NOP; valvoa SCL korkea
NOP;
NOP;
NOP;
CLR SCL; pudota kellon
DJNZ B, X_42; ensi bittinen
SETB SDA; release SDA varten ACK
NOP; valvoa SCL alhainen ja TAA
NOP;
SETB SCL; nostaa ACK kellon
NOP; valvoa SCL korkea
NOP;
NOP;
NOP;
MOV C, SDA; saada ACK bittinen
CLR SCL; pudota ACK kellon
; LCALL ACK
POP-B
RET
Shin:
; Vaihto on byte alkaen AT24Cxx useimmat merkitsevää bittiä ensin.
; SCL odotetaan pieni merkintä.Paluu SCL alhainen.
; Palauttaa saanut tietoja byte in A.
; SETB SDA; tehdä SDA tulosignaalin
; PUSH B
; MOV B, # 8; bittinen count
; X_43:
; NOP; valvoa SCL alhainen ja data-asetukset
; NOP;
; NOP;
; SETB SCL; nostaa kellon
; NOP; valvoa SCL korkea
; NOP;
; MOV C, SDA; panos bittinen
; RLC A; siirtää bittinen osaksi byte
; CLR SCL; pudota kellon
; DJNZ B, X_43; ensi bittinen
; POP B
; RET
SETB SDA; tehdä SDA tekijä,使SDA为高,准备读
PUSH B;
MOV B, # 08D ;;;;; bittinen laskea,设置位计数器
L2: NOP; valvoa SCL alhainen ja data-asetukset,保持SCL为低且使数据稳定
NOP
SETB SCL; nostaa kello,升高时钟
NOP; valvoa SCL korkea,保持SCL为高
NOP
MOV C, SDA; panos bit,输入位
RLC A;; siirtää bittinen osaksi byte,将位移入A
CLR SCL; pudottaa kellon降低时钟
DJNZ B, L2; ensi bit,传送下一位
POP-B
RET
NAK:
; Kello ulos negatiivinen tunnustaa bittinen (korkea).
; SCL odotetaan pieni merkintä.Paluu SCL alhainen, SDA korkea.
SETB SDA; NAK bittinen
NOP; valvoa SCL alhainen ja data-asetukset
NOP;
SETB SCL; nostaa kellon
NOP; valvoa SCL korkea
NOP;
NOP;
NOP;
CLR SCL; pudota kellon
RET
ACK:
; Kello pois tunnustaa bittinen (alhainen).
; SCL odotetaan pieni merkintä.Paluu SCL, SDA alhainen.
CLR SDA; ACK bittinen
NOP; valvoa SCL alhainen ja data-asetukset
NOP;
setb SCL; nostaa kellon
NOP; valvoa SCL korkea
NOP;
NOP;Lisätty jälkeen 1 minuuttia:vain muistuttaa, en ole aurthor Tämän koodin.
Minä vain muuttaa koodin minun soveltamista, kun olen lukenut sen.
Joten, en ole kopio Oikeudenhaltija
Anteeksi, minua uudelleen.
Olen kirjoittanut 8051 koodi käyttää AT24C512 tietoja.
BTW, löysin oman ohjelman vain voi lukea FFH alkaen EPROM kun käytät EMU aluksella, mutta olen jo poltettu bmp-tiedosto EEPROM.
Näin ollen Mielestäni ohjelma on virhe.
Alla on oma koodi.
Voiko joku auttaa minua selvittämään ohjelma?
Kiitos miljoonaa!Peter
;;==== KoodiSDA BIT P2.2
SCL BIT P2.3
; SDA BIT P2.3
; SCL BIT P2.2
ADD0 BIT P2.0
ADD1 BIT P2.1
FADDR EQU 0A0H
ADDR_HI1 EQU 30H
ADDR_LO1 EQU 31H
ADDR_HI2 EQU 32H
ADDR_LO2 EQU 33 h
RAM_DATA EQU 34H
Org 00H
MOV ADDR_HI1, # 00H
MOV ADDR_LO1, # 00H
MOV ADDR_HI2, # 00H
MOV ADDR_LO2, # 00H
MOV RAM_DATA, # 00H
I2C:
INC DPTR
MOV ADDR_HI2, DPH
MOV ADDR_LO2, DPL
LCALL READ_RANDOM
NOP
MOV A, RAM_DATA
MOV A, RAM_DATA
MOV A, RAM_DATA
MOV A, RAM_DATA
SJMP I2C
READ_CURRENT:
; AT24Cxx Nykyinen Osoite Lue-toimintoa.
; Called ohjelmoitava osoite A. Palauttaa tiedot A.
; Palauttaa CY määrä osoittaa, että linja-auto ei ole käytettävissä
, Tai että osoitettu laite ei tunnistanut.
LCALL START
JC X_45; keskeyttää, jos bussi ei ole saatavilla
; RL A; ohjelmoitava osoite bittiä 3:1
; ORL A, # FADDR, lisätään kiinteä osoite
; SETB ACC.0; täsmentää lukea toiminta
MOV A, # 0A0H
LCALL huutaa; lähettää laitteen osoite
JC X_44; keskeyttää, jos mitään tunnustusta
LCALL Shin; vastaanottamaan dataa tavu
MOV RAM_DATA, A
LCALL NAK,
älä tunnustaa byte
CLR C; selvä virhe lippu
X_44:
LCALL STOP
RET
X_45:
RETREAD_RANDOM:
; AT24Cxx Satunnainen Lue-toimintoa.
; Called ohjelmoitava osoite A, byte osoite
; Rekisteröidä pari ADDR_HI: ADDR_LO.Palauttaa tiedot A.
; Palauttaa CY määrä osoittaa, että linja-auto ei ole käytettävissä
, Tai että osoitettu laite ei tunnistanut.
PUSH B
MOV B, A; tallentaa kopion ohjelmoitava osoite
; Lähetä harjoitustestien kirjoittaa komento asettaa sisäinen osoite.
LCALL START
JC X_47; keskeyttää, jos bussi ei ole saatavilla
; RL A; ohjelmoitava osoite bittiä 3:1
; ORL A, # FADDR, lisätään kiinteä osoite
; CLR ACC.0; täsmentää kirjoitustoiminto
MOV A, # 0A0H
LCALL huutaa; lähettää laitteen osoite
JC X_46; keskeyttää, jos mitään tunnustusta
MOV A, ADDR_HI1; lähettää korkean byte osoite
LCALL huutaa;
JC X_46; keskeyttää, jos mitään tunnustusta
MOV A, ADDR_LO1; lähettää alhainen byte osoite
LCALL huutaa;
JC X_46; keskeyttää, jos mitään tunnustusta
MOV A, ADDR_HI2; lähettää korkean byte osoite
LCALL huutaa;
JC X_46; keskeyttää, jos mitään tunnustusta
MOV A, ADDR_LO2; lähettää alhainen byte osoite
LCALL huutaa;
JC X_46; keskeyttää, jos mitään tunnustusta
; Call Nykyinen Osoite Lue-toimintoa.
MOV A, B; saada ohjelmoitava osoite
LCALL READ_CURRENT
LJMP X_47; poistuaksesi
X_46:
LCALL STOPX_47: POP B
RETSTART:
; Lähetä START,
jotka on määritelty korkea-to-alhainen SDA kanssa SCL korkea.
; Paluu SCL, SDA alhainen.
; Palauttaa CY vahvistaa, jos linja-auto ei ole käytettävissä.
SETB SDA
SETB SCL
; Tarkista bussi käytettävissä.
JNB SDA, X_40; hypätä ellei korkea
JNB SCL, X_40; hypätä ellei korkea
NOP; valvoa asennuksen viivästyminen ja syklin viive
CLR SDA
NOP; valvoa pidä viivyttää
NOP;
NOP;
NOP;
NOP;
CLR SCL
CLR C; selvä virhe lippu
SJMP X_41
X_40:
SETB C; asettaa virhe lippu
X_41:
RET
STOP:
; Lähetä STOP, määritellään matalasta korkeaan SDA kanssa SCL korkea.
; SCL odotetaan pieni merkintä.Paluu SCL, SDA korkea.
CLR SDA
NOP; valvoa SCL alhainen ja data-asetukset
NOP
SETB SCL
NOP; valvoa setup viive
NOP;
NOP;
NOP;
NOP;
SETB SDA
RETShout:
; Vaihto a tavu on AT24Cxx useimmat merkitsevää bittiä ensin.
; SCL, SDA odotetaan pieni merkintä.Paluu SCL alhainen.
; Called tiedot lähettämään A.
; Palauttaa CY asettaa ilmoittamaan laiminlyöntiä orja ilmoittaa.
; Tuhoaa A.
PUSH B
MOV B, # 8; bit counter
X_42:
RLC A; siirtää bittinen osaksi CY
MOV SDA-, C-, tuotanto-bittinen
NOP; valvoa SCL alhainen ja data-asetukset
SETB SCL; nostaa kellon
NOP; valvoa SCL korkea
NOP;
NOP;
NOP;
CLR SCL; pudota kellon
DJNZ B, X_42; ensi bittinen
SETB SDA; release SDA varten ACK
NOP; valvoa SCL alhainen ja TAA
NOP;
SETB SCL; nostaa ACK kellon
NOP; valvoa SCL korkea
NOP;
NOP;
NOP;
MOV C, SDA; saada ACK bittinen
CLR SCL; pudota ACK kellon
; LCALL ACK
POP-B
RET
Shin:
; Vaihto on byte alkaen AT24Cxx useimmat merkitsevää bittiä ensin.
; SCL odotetaan pieni merkintä.Paluu SCL alhainen.
; Palauttaa saanut tietoja byte in A.
; SETB SDA; tehdä SDA tulosignaalin
; PUSH B
; MOV B, # 8; bittinen count
; X_43:
; NOP; valvoa SCL alhainen ja data-asetukset
; NOP;
; NOP;
; SETB SCL; nostaa kellon
; NOP; valvoa SCL korkea
; NOP;
; MOV C, SDA; panos bittinen
; RLC A; siirtää bittinen osaksi byte
; CLR SCL; pudota kellon
; DJNZ B, X_43; ensi bittinen
; POP B
; RET
SETB SDA; tehdä SDA tekijä,使SDA为高,准备读
PUSH B;
MOV B, # 08D ;;;;; bittinen laskea,设置位计数器
L2: NOP; valvoa SCL alhainen ja data-asetukset,保持SCL为低且使数据稳定
NOP
SETB SCL; nostaa kello,升高时钟
NOP; valvoa SCL korkea,保持SCL为高
NOP
MOV C, SDA; panos bit,输入位
RLC A;; siirtää bittinen osaksi byte,将位移入A
CLR SCL; pudottaa kellon降低时钟
DJNZ B, L2; ensi bit,传送下一位
POP-B
RET
NAK:
; Kello ulos negatiivinen tunnustaa bittinen (korkea).
; SCL odotetaan pieni merkintä.Paluu SCL alhainen, SDA korkea.
SETB SDA; NAK bittinen
NOP; valvoa SCL alhainen ja data-asetukset
NOP;
SETB SCL; nostaa kellon
NOP; valvoa SCL korkea
NOP;
NOP;
NOP;
CLR SCL; pudota kellon
RET
ACK:
; Kello pois tunnustaa bittinen (alhainen).
; SCL odotetaan pieni merkintä.Paluu SCL, SDA alhainen.
CLR SDA; ACK bittinen
NOP; valvoa SCL alhainen ja data-asetukset
NOP;
setb SCL; nostaa kellon
NOP; valvoa SCL korkea
NOP;
NOP;Lisätty jälkeen 1 minuuttia:vain muistuttaa, en ole aurthor Tämän koodin.
Minä vain muuttaa koodin minun soveltamista, kun olen lukenut sen.
Joten, en ole kopio Oikeudenhaltija