0
Παιδια θελω την βοηθεια σας...
Εχω ενα προγραμματακι σε PIC16f877A.
Το firmware με λιγα λογια αυτο που κανει ειναι να ελεγχει με ενα IR remote 4 LED 7 segment displays.
Σε καποια φαση θελω ν' αποθηκευει στην EEPROM μερικες τιμες...
Κι ετσι αρχισε ο καυγας
Το ρημαδι, δεν λεει με τιποτα να γραψει στην βρωμο-EEPROM
Δοκιμασα τα παντα.
Στο τελος, το εβαλα στην αρχη-αρχη να κανει μια δοκιμαστικη εγγραφη, αλλα παλι τιποτα!!!
να προσθεσω οτι με τον ιδιο κωδικα, σε αλλη κατασκευη (παλι με το PIC16F877A), εγραφε μια χαρα.
Επισης στο simulation (gpsim) επισης γραφει!
Αν μπορειτε να δειτε κατι εσεις που εμενα μου ξεφευγει...
to firmware:
Κώδικας:__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_ON & _LVP_ON ;;blah, blah blah... INIT ;====================================================== ; INITIALIZATION SECTION START ;====================================================== clrf INTCON ; Disable all interrupts. clrwdt ; Clear the Watchdog timer ; Before anything else, check if an EEPROM write ; got interrupted due to a reset. ; BANKSEL EECON1 ; btfss EE_WRERR ; goto Normal_Init ; bcf EE_WRERR ; PAGESEL EE_DATA_WRITE ; call EE_DATA_WRITE ; *** IO Initialization *** Normal_Init PAGESEL $ BANKSEL PORTA clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE BANKSEL ADCON1 movlw 0x06 movwf ADCON1 ; All ports digital BANKSEL ADCON0 bcf ADCON0,0 ; Shutdown ADC. BANKSEL TRISA clrf TRISA ; PORTA output movlw B'00000001' ; All output but RB0 movwf TRISB clrf TRISC clrf TRISD movlw B'00000100' ; All output but RE2 movwf TRISE BANKSEL PORTA clrf PORTA movlw B'00100000' movwf PORTA ; All off but MAX_SCLK clrf PORTB ; All off clrf PORTC ; All off clrf PORTD ; All off movlw B'00000010' ; All off, MAX6957 disselected. movwf PORTE bcf T1CON,T1OSCEN ; Shutoff timer1 oscillator bcf T1CON,TMR1CS ; Timer1 internal clock source (every instruction) clrf TMR1H ; Initialize timer1 output clrf TMR1L ; Both LOW and HIGH bcf T1CON,TMR1ON ; Now timer1 inactive. Raise to activate. bcf OPTION_REG,INTEDG ; RB0/INT on falling edge ; bsf OPTION_REG,INTEDG ; RB0/INT on rising edge ; bsf INTCON,INTE ; Enable RB0/INT external interrupt bcf INTCON,PEIE ; Disable peripheral interrupts bcf INTCON,T0IE ; Disable timer0 interrupt (for now) bcf INTCON,RBIE ; Disable RB port change interrupts. ; bsf INTCON,GIE ; Enable interrupts in general ; MAX6957 ; PORT CFG movlw 0x09 movwf MAX_CMD_ADDR movlw 0x00 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX movlw 0x0A movwf MAX_CMD_ADDR movlw 0x00 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX movlw 0x0B movwf MAX_CMD_ADDR movlw 0x00 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX movlw 0x0C movwf MAX_CMD_ADDR movlw 0x00 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX movlw 0x0D movwf MAX_CMD_ADDR movlw 0x00 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX movlw 0x0E movwf MAX_CMD_ADDR movlw 0x00 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX movlw 0x0F movwf MAX_CMD_ADDR movlw 0x00 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX ; PORT CFG ; Config movlw 0x04 movwf MAX_CMD_ADDR movlw 0x01 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX ; 1:Display Test - 0:Normal movlw 0x07 movwf MAX_CMD_ADDR movlw 0x00 movwf MAX_DATA PAGESEL MAX_TX call MAX_TX PAGESEL $ BANKSEL remote_id ;====================================================== ; INITIALIZATION SECTION END ;====================================================== ;====================================================== ; MAIN PROGRAM LOOP ;====================================================== ;------------------------------------------------------ Main_Loop clrf ir_repeat_timer bcf BLINK_0 bcf BLINK_1 bcf BLINK_2 bcf BLINK_3 movlw 0 movwf DigitToBlink BANKSEL EECON1 btfsc EE_WR ; In case there is another write goto $-1 ; operation, wait it out. ; bcf EE_PGD ; Point to data memory ; bsf EE_WREN ; Enable writes bcf INTCON,GIE ; Disable interrupts BANKSEL EEADR movlw 0x11 movwf EEADR movlw 0x06 movwf EEDATA ; Data to be written. ; call EE_DATA_WRITE BANKSEL EECON2 bcf EE_PGD ; Point to data memory ; bsf EE_WREN ; Enable writes ; bcf INTCON,GIE ; Disable interrupts bsf EE_WREN ; Enable writes movlw 0x55 ; EEPROM movwf EECON2 ; write movlw 0xAA ; security movwf EECON2 ; sequence bsf EE_WR ; Start write operation ; bsf INTCON,GIE ; Enable interrupts btfsc EE_WR goto $-1 ; Wait until write finishes bcf EE_WREN ; Disable further writes BANKSEL PIR2 bcf PIR2,EEIF ; EEIF ;;blah blah blah....