Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

Pic16F84A EEPROM-i data kirjutamise probleem

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    Pic16F84A EEPROM-i data kirjutamise probleem

    Tere!
    Probleem siis selline, et kui täidan ära käsutsükli, millega kirjutan andmed EEPROM-i siis peale seda kui soovin kontrollida näiteks:
    BTFSC PORTB,0 ;kas nupp1 vajutatud? Kui ei siis jätame järgmise rea vahele
    GOTO ......
    Ja kui signaal antud bitil on 0 siis ta ikkagi võtab järgmise rea, mitte ei hüppa üle.
    Enne EEPROM-i kirjutamist seda jama ei ole seega kahtlustan, et minu EEPROM kirjutamise kood on veits vigane.
    Kood siis:
    ;EEPROM-i KIRJUTAMINE
    BCF STATUS, RP0
    MOVLW 0x00 ;mälupesa aadress,
    MOVWF EEADR ;kuhu kirjutama hakkan
    MOVFW TI ;muutuja, mida soovin mällu talletada
    MOVWF EEDATA ;muutuja pannakse EEDATA registrisse
    BSF STATUS,RP0
    BSF EECON1,WREN ;lubame mälumuutujasse kirjutamise
    MOVLW 55h ;järgm neli rida on tarvis, et
    MOVWF EECON2 ;oleks võomalik
    MOVLW 0AAh ;EEPROM-i
    MOVWF EECON2 ;üleüldse midagi kirjutada
    BSF EECON1,WR ;alustame kirjutamist
    ee_wr1 btfsc EECON1,WR ;kas valmis?
    goto ee_wr1 ;kui ei siis mine korda
    BCF EECON1,WREN ;keela EEPROM-i kirjutamine
    return ;jätkame programmi kohast, kust pooleli jäime

    Katsetatud MPLABIDEv7.22 simulaatoril

    Ette tänades
    opipoiss
    PIC16F877A

    #2
    Elou!

    Sul on lõpust puudu:
    BCF STATUS, RP0

    Parimat soovides,
    gOb
    Meie üle nalja ei mõisteta!

    Comment


      #3
      Suured tänud! krt olen sellega täna juba pool päeva jamanud

      Veel selline küsimus, et kuna mul on vaja kirjutada EEPROM-i tsüklite arv, mitu korda mingit toimingut läbitakse ja tsükleid võib juhtuda, et on rohkem, kui 256...siis eet kuidas tuvastada byte overflow ja siis teise baiti kordaja edasi kirjutada?
      PIC16F877A

      Comment


        #4
        loendi suurendamisel tekib ju overflow ja CARRY lipp pannakse püsti. Selle järgi määradki.
        - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
        - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

        Comment


          #5
          Tere jälle!
          Ikka veel jama selle EEPROM-i kirjutamisega.
          Nimelt MPLAD IDE simulaatoris töötab kõik nüüd normaalselt aga kui asja PIC-i laen siis esimesel korral loeb PIC-st numbri, mille EEPROM-i salvestanud olen normaalselt sisse ja kõik toimib nii nagu peab, aga kui on tarvis teist korda lugeda siis on sinna alati kirjutatud 239 sõltumata sellest, kas ma olen muutnud vahepeal muutujat, mida EEPROM-i kirjutada või mitte.

          KOOD:
          ;**************************E E P R O M*************************
          ;************************************************* *************
          ;EEPROM-i KIRJUTAMINE
          SALVESTA
          BCF STATUS, RP0
          MOVLW 0x00 ;mälupesa aadress,
          MOVWF EEADR ;kuhu kirjutama hakkan
          MOVFW TI3 ;muutuja, mida soovin mällu talletada
          MOVWF EEDATA ;muutuja pannakse EEDATA registrisse
          BSF STATUS,RP0 ;
          BSF EECON1,WREN ;lubame mälumuutujasse kirjutamise
          MOVLW 55h ;järgm neli rida on tarvis, et
          MOVWF EECON2 ;oleks võomalik
          MOVLW 0AAh ;EEPROM-i
          MOVWF EECON2 ;üleüldse midagi kirjutada
          BSF EECON1,WR ;alustame kirjutamist
          ee_wr1 btfsc EECON1,WR ;kas valmis?
          goto ee_wr1 ;kui ei siis mine korda
          BCF STATUS,RP0
          return ;jätkame programmi kohast, kust pooleli jäime

          ;EEPROM-st LUGEMINE
          LOE
          BCF STATUS,RP0
          MOVLW 0x00 ;mälupesa aadress, kust soovime muutujat lugeda
          MOVWF EEADR ;mälupesa aadress transporditakse EEADR-i
          BSF STATUS,RP0
          BSF EECON1,RD ;loe EEPROM-st
          BCF STATUS,RP0
          MOVF EEDATA,W ;saadud muutuja
          MOVWF TI ;kopeeri TI mälusse
          MOVFW TI
          MOVWF TI2
          BSF STATUS1,0
          return
          ;**************************E E P R O M*************************
          ;****************************L Õ P P***************************
          PIC16F877A

          Comment


            #6
            Kas rida: "MOVFW TI3 ;muutuja, mida soovin mällu talletada"
            ei peaks olema kujul: "movf TI3,w" ehk loe muutuja (mälupesa) TI3 registrisse W. Praegu kirjutad EEDATA-sse alati 0x00.
            - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
            - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

            Comment


              #7
              felch eksib, need kaks käsku on sisuliselt samasugused (kui ma ei eksi).
              Samas eeprom-i salvestatakse vist alati 0 aadressile? see vist testimiseks ainult. ok.

              Oli mul kunagi sarnane probleem, kuid teine kivi (pic16f870). Seal läks ta eeprom-i lugemise pealt ise ära flash lugemise peale, iga kord enne lugemist tuli anda käsk lugeda eeprom-i. Sul ei tohiks seda viga olla, sest flash-i ei saa lugeda-kirjutada.


              Keela eeprom-iga suhtlemise ajaks katkestused ära, see võib segada, kirjutamise kindlasti rikuks ära!


              Vaata üle lõpp:

              MOVWF TI Kas T1 on ikka mälupangas 0
              MOVFW TI Seda pole vaja, muutuja on ju ka W registris veel olemas
              MOVWF TI2
              BSF STATUS1,0 Mis see on? eks sa ise tead, vaata üle, et see siin valesti ei oleks, see on sinu defineeritud muutuja.

              Comment


                #8
                Microchipi andmeleht ütleb: MOVWF -> "move W toF"
                EEPROMi kirjutatakse ikka sellele aadressile, kuhu vaja.Adre kirjutatakse EEADR-i.
                KAtkestuste keelamise märkus on väga õige!
                - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
                - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

                Comment


                  #9
                  Ma väga vabandan!!! :unsure:

                  Krt hommikul pelta potil istudes kargas endalegi põhe, et ma ju lugemisel panen asja hoopis teise mälumuutujasse.

                  Veelkord vabandan.
                  PIC16F877A

                  Comment


                    #10
                    Originally posted by felch@Nov 28 2005, 08:44
                    Kas rida: "MOVFW TI3 ;muutuja, mida soovin mällu talletada"
                    ei peaks olema kujul: "movf TI3,w" ehk loe muutuja (mälupesa) TI3 registrisse W. Praegu kirjutad EEDATA-sse alati 0x00.
                    MOVFW F=>W
                    movf TI3,w F=>W
                    Ikka peaks sama tegema?

                    MOVWF W=>F
                    see on jah teine käsk.

                    Ei leia selles viga



                    Aga muidu jah, hommik on õhtust targem

                    Comment

                    Working...
                    X