Försöker igen alltså, angående PIC16F84A...
Postat: 5 februari 2009, 07:37:44
Har försökt programmera en PIC16F84A, men inte lyckats. Nu undrar jag om det är någon som vet vad det kan vara för fel. Programmeraren är en VM134 från Velleman, jag har använt deras program PIC programmer 2006 för att föra över HEX-koden till PIC:en. Det resulterar i att VM134 säger att det inte är rätt PIC, fast jag angett det.
Har två versioner av HEX-filen, en ny och en gammal, den nya är gjord med MPLAB, men den fungerade inte heller.
Vore bra om någon duktig programmerare kunde kolla assembler programmet för att se om det finns några uppenbara fel.
Här programmet i assembler form:
;**** 1 GHz COUNTER ****
;* Jan Kolar - Pira CZ *
;***********************
; http://pira.cz
;***********************
;Commercial use forbidden
LIST P=PIC16F84A
TMR EQU 01h
PORTA EQU 5
PORTB EQU 6
INTC EQU 0Bh
TRISA EQU 85h
TRISB EQU 86h
STATUS EQU 3
OPTN EQU 81h
PROGCNT EQU 02h
W EQU 0
F EQU 1
C EQU 0
Z EQU 2
CNTW EQU 0Ch
CNT1 EQU 0Dh
CNT2 EQU 0Eh
CNT3 EQU 12h
CNT4 EQU 10h
DIGIT0 EQU 11h
DIGIT1 EQU 0Fh
DIGIT2 EQU 17h
DIGIT3 EQU 14h
WORKA EQU 15h
CNT5 EQU 16h
CNT6 EQU 13h
BUFF0 EQU 19h
BUFF1 EQU 1Ah
BUFF2 EQU 1Bh
BUFF3 EQU 1Ch
BSF STATUS,5
MOVLW B'00010000' ;RA4 input
MOVWF TRISA
MOVLW B'00000001' ;RB0 input
MOVWF TRISB
MOVLW B'01110011' ;prescaler & pull-ups
MOVWF OPTN
BCF STATUS,5
CLRF DIGIT2
CLRF DIGIT1
CLRF DIGIT0
BSF DIGIT0,3
DECF DIGIT1
DECF DIGIT2
MOVF DIGIT1,W
MOVWF PORTA
BSF DIGIT0,2
CLRF DIGIT3
BCF DIGIT1,1
BCF DIGIT1,5
INCF DIGIT0
BSF DIGIT3,3
INCF DIGIT3
BCF DIGIT2,7
BCF DIGIT2,1
COUNT CLRF TMR
CLRF CNTW
BCF INTC,2
CLRF CNT2
CALL REFRESH
CALL REFRESH
CALL REFRESH
CALL REFRESH
READ MOVF TMR,W ;read from TMR0
MOVWF CNT1
BTFSS CNT1,7 ;is TMR>127?
GOTO READ2 ;no
GOTO READ3 ;yes
READ2 BTFSC INTC,2
INCF CNT2
READ3 MOVF CNTW,W
ADDWF CNT2
INCF CNT1
BTFSC STATUS,Z
INCF CNT2
CONVST BTFSC PORTB,0 ;*** IF frequency correction? ***
GOTO CONV01 ;NO
;YES
MOVLW 0xD6 ;= 20 * (IF in MHz)
SUBWF CNT1 ;SUBWF/ADDWF (-/+)
BTFSC STATUS,C
GOTO CONV01
MOVF CNT2,F
BTFSC STATUS,Z
GOTO CONVERR
DECF CNT2
CONV01 CLRF BUFF0
CLRF BUFF1
CLRF BUFF2
CLRF BUFF3
BTFSS CNT2,6 ;819.2
GOTO CONV02
MOVLW 8
MOVWF BUFF0
MOVLW 1
MOVWF BUFF1
MOVLW 9
MOVWF BUFF2
MOVLW 2
MOVWF BUFF3
CONV02 BTFSS CNT2,5 ;409.6
GOTO CONV03
MOVLW 4
ADDWF BUFF0
MOVLW 9
ADDWF BUFF2
MOVLW 6
ADDWF BUFF3
CONV03 BTFSS CNT2,4 ;204.8
GOTO CONV04
MOVLW 2
ADDWF BUFF0
MOVLW 4
ADDWF BUFF2
MOVLW 8
ADDWF BUFF3
CONV04 BTFSS CNT2,3 ;102.4
GOTO CONV05
MOVLW 1
ADDWF BUFF0
MOVLW 2
ADDWF BUFF2
MOVLW 4
ADDWF BUFF3
CONV05 BTFSS CNT2,2 ;51.2
GOTO CONV06
MOVLW 5
ADDWF BUFF1
MOVLW 1
ADDWF BUFF2
MOVLW 2
ADDWF BUFF3
CONV06 BTFSS CNT2,1 ;25.6
GOTO CONV07
MOVLW 2
ADDWF BUFF1
MOVLW 5
ADDWF BUFF2
MOVLW 6
ADDWF BUFF3
CONV07 BTFSS CNT2,0 ;12.8
GOTO CONV08
MOVLW 1
ADDWF BUFF1
MOVLW 2
ADDWF BUFF2
MOVLW 8
ADDWF BUFF3
CONV08 BTFSS CNT1,7 ;6.4
GOTO CONV09
MOVLW 6
ADDWF BUFF2
MOVLW 4
ADDWF BUFF3
CONV09 BTFSS CNT1,6 ;3.2
GOTO CONV10
MOVLW 3
ADDWF BUFF2
MOVLW 2
ADDWF BUFF3
CONV10 BTFSS CNT1,5 ;1.6
GOTO CONV11
MOVLW 1
ADDWF BUFF2
MOVLW 6
ADDWF BUFF3
CONV11 MOVLW 8
BTFSC CNT1,4 ;0.8
ADDWF BUFF3
MOVLW 4
BTFSC CNT1,3 ;0.4
ADDWF BUFF3
MOVLW 2
BTFSC CNT1,2 ;0.2
ADDWF BUFF3
MOVLW 1
BTFSC CNT1,1 ;0.1
ADDWF BUFF3
CONV20 MOVLW 0x0A
SUBWF BUFF3,W
BTFSS STATUS,C
GOTO CONV21
MOVWF BUFF3
INCF BUFF2
GOTO CONV20
CONV21 MOVLW 0x0A
SUBWF BUFF2,W
BTFSS STATUS,C
GOTO CONV22
MOVWF BUFF2
INCF BUFF1
GOTO CONV21
CONV22 MOVLW 0x0A
SUBWF BUFF1,W
BTFSS STATUS,C
GOTO CONV23
MOVWF BUFF1
INCF BUFF0
GOTO CONV22
CONV23 MOVF BUFF0,W
SUBLW 0x09
BTFSS STATUS,C
GOTO CONVERR
MOVLW 0xFF
MOVWF DIGIT0
MOVWF DIGIT1
MOVF BUFF0,W
BTFSC STATUS,Z
GOTO CONV32
CALL CISLICE
MOVWF DIGIT0
MOVF BUFF1,W
CALL CISLICE
MOVWF DIGIT1
GOTO CONV33
CONV32 MOVF BUFF1,W
BTFSC STATUS,Z
GOTO CONV33
CALL CISLICE
MOVWF DIGIT1
CONV33 MOVF BUFF2,W
CALL CISLICE
MOVWF DIGIT2
MOVF BUFF3,W
CALL CISLICE
MOVWF DIGIT3
GOTO COUNT
CISLICE ADDWF PROGCNT
RETLW B'10000001' ;0
RETLW B'10111011' ;1
RETLW B'00100101' ;2
RETLW B'00100011' ;3
RETLW B'00011011' ;4
RETLW B'01000011' ;5
RETLW B'01000001' ;6
RETLW B'10001011' ;7
RETLW B'00000001' ;8
RETLW B'00000011' ;9
CONVERR MOVLW B'01000101' ;Err_ indication
MOVWF DIGIT0
MOVLW B'01111101'
MOVWF DIGIT1
MOVWF DIGIT2
MOVLW 0xFF
MOVWF DIGIT3
GOTO COUNT
REFRESH BSF PORTA,3
MOVF DIGIT0,W
MOVWF PORTB
BCF PORTA,0
CALL TMRCHK
BSF PORTA,0
MOVF DIGIT1,W
MOVWF PORTB
BCF PORTA,1
CALL TMRCHK
BSF PORTA,1
MOVF DIGIT2,W
MOVWF PORTB
BCF PORTA,2
CALL TMRCHK
BSF PORTA,2
MOVF DIGIT3,W
MOVWF PORTB
BCF PORTA,3
CALL TMRCHK
NOP
NOP
NOP
RETURN
TMRCHK MOVLW 0x6F ;111x
MOVWF WORKA
NOP
NOP
NOP
TMRCHK2 BTFSS INTC,2 ;1
GOTO TMRCHK3
BCF INTC,2
INCF CNTW
GOTO TMRCHK4
TMRCHK3 NOP
NOP
NOP ;6
TMRCHK4 NOP ;1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;10
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;20
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;30
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ WORKA ;38
GOTO TMRCHK2
RETURN
END
CONFIG B'11111111111001' ;XT osc.
Har två versioner av HEX-filen, en ny och en gammal, den nya är gjord med MPLAB, men den fungerade inte heller.
Vore bra om någon duktig programmerare kunde kolla assembler programmet för att se om det finns några uppenbara fel.
Här programmet i assembler form:
;**** 1 GHz COUNTER ****
;* Jan Kolar - Pira CZ *
;***********************
; http://pira.cz
;***********************
;Commercial use forbidden
LIST P=PIC16F84A
TMR EQU 01h
PORTA EQU 5
PORTB EQU 6
INTC EQU 0Bh
TRISA EQU 85h
TRISB EQU 86h
STATUS EQU 3
OPTN EQU 81h
PROGCNT EQU 02h
W EQU 0
F EQU 1
C EQU 0
Z EQU 2
CNTW EQU 0Ch
CNT1 EQU 0Dh
CNT2 EQU 0Eh
CNT3 EQU 12h
CNT4 EQU 10h
DIGIT0 EQU 11h
DIGIT1 EQU 0Fh
DIGIT2 EQU 17h
DIGIT3 EQU 14h
WORKA EQU 15h
CNT5 EQU 16h
CNT6 EQU 13h
BUFF0 EQU 19h
BUFF1 EQU 1Ah
BUFF2 EQU 1Bh
BUFF3 EQU 1Ch
BSF STATUS,5
MOVLW B'00010000' ;RA4 input
MOVWF TRISA
MOVLW B'00000001' ;RB0 input
MOVWF TRISB
MOVLW B'01110011' ;prescaler & pull-ups
MOVWF OPTN
BCF STATUS,5
CLRF DIGIT2
CLRF DIGIT1
CLRF DIGIT0
BSF DIGIT0,3
DECF DIGIT1
DECF DIGIT2
MOVF DIGIT1,W
MOVWF PORTA
BSF DIGIT0,2
CLRF DIGIT3
BCF DIGIT1,1
BCF DIGIT1,5
INCF DIGIT0
BSF DIGIT3,3
INCF DIGIT3
BCF DIGIT2,7
BCF DIGIT2,1
COUNT CLRF TMR
CLRF CNTW
BCF INTC,2
CLRF CNT2
CALL REFRESH
CALL REFRESH
CALL REFRESH
CALL REFRESH
READ MOVF TMR,W ;read from TMR0
MOVWF CNT1
BTFSS CNT1,7 ;is TMR>127?
GOTO READ2 ;no
GOTO READ3 ;yes
READ2 BTFSC INTC,2
INCF CNT2
READ3 MOVF CNTW,W
ADDWF CNT2
INCF CNT1
BTFSC STATUS,Z
INCF CNT2
CONVST BTFSC PORTB,0 ;*** IF frequency correction? ***
GOTO CONV01 ;NO
;YES
MOVLW 0xD6 ;= 20 * (IF in MHz)
SUBWF CNT1 ;SUBWF/ADDWF (-/+)
BTFSC STATUS,C
GOTO CONV01
MOVF CNT2,F
BTFSC STATUS,Z
GOTO CONVERR
DECF CNT2
CONV01 CLRF BUFF0
CLRF BUFF1
CLRF BUFF2
CLRF BUFF3
BTFSS CNT2,6 ;819.2
GOTO CONV02
MOVLW 8
MOVWF BUFF0
MOVLW 1
MOVWF BUFF1
MOVLW 9
MOVWF BUFF2
MOVLW 2
MOVWF BUFF3
CONV02 BTFSS CNT2,5 ;409.6
GOTO CONV03
MOVLW 4
ADDWF BUFF0
MOVLW 9
ADDWF BUFF2
MOVLW 6
ADDWF BUFF3
CONV03 BTFSS CNT2,4 ;204.8
GOTO CONV04
MOVLW 2
ADDWF BUFF0
MOVLW 4
ADDWF BUFF2
MOVLW 8
ADDWF BUFF3
CONV04 BTFSS CNT2,3 ;102.4
GOTO CONV05
MOVLW 1
ADDWF BUFF0
MOVLW 2
ADDWF BUFF2
MOVLW 4
ADDWF BUFF3
CONV05 BTFSS CNT2,2 ;51.2
GOTO CONV06
MOVLW 5
ADDWF BUFF1
MOVLW 1
ADDWF BUFF2
MOVLW 2
ADDWF BUFF3
CONV06 BTFSS CNT2,1 ;25.6
GOTO CONV07
MOVLW 2
ADDWF BUFF1
MOVLW 5
ADDWF BUFF2
MOVLW 6
ADDWF BUFF3
CONV07 BTFSS CNT2,0 ;12.8
GOTO CONV08
MOVLW 1
ADDWF BUFF1
MOVLW 2
ADDWF BUFF2
MOVLW 8
ADDWF BUFF3
CONV08 BTFSS CNT1,7 ;6.4
GOTO CONV09
MOVLW 6
ADDWF BUFF2
MOVLW 4
ADDWF BUFF3
CONV09 BTFSS CNT1,6 ;3.2
GOTO CONV10
MOVLW 3
ADDWF BUFF2
MOVLW 2
ADDWF BUFF3
CONV10 BTFSS CNT1,5 ;1.6
GOTO CONV11
MOVLW 1
ADDWF BUFF2
MOVLW 6
ADDWF BUFF3
CONV11 MOVLW 8
BTFSC CNT1,4 ;0.8
ADDWF BUFF3
MOVLW 4
BTFSC CNT1,3 ;0.4
ADDWF BUFF3
MOVLW 2
BTFSC CNT1,2 ;0.2
ADDWF BUFF3
MOVLW 1
BTFSC CNT1,1 ;0.1
ADDWF BUFF3
CONV20 MOVLW 0x0A
SUBWF BUFF3,W
BTFSS STATUS,C
GOTO CONV21
MOVWF BUFF3
INCF BUFF2
GOTO CONV20
CONV21 MOVLW 0x0A
SUBWF BUFF2,W
BTFSS STATUS,C
GOTO CONV22
MOVWF BUFF2
INCF BUFF1
GOTO CONV21
CONV22 MOVLW 0x0A
SUBWF BUFF1,W
BTFSS STATUS,C
GOTO CONV23
MOVWF BUFF1
INCF BUFF0
GOTO CONV22
CONV23 MOVF BUFF0,W
SUBLW 0x09
BTFSS STATUS,C
GOTO CONVERR
MOVLW 0xFF
MOVWF DIGIT0
MOVWF DIGIT1
MOVF BUFF0,W
BTFSC STATUS,Z
GOTO CONV32
CALL CISLICE
MOVWF DIGIT0
MOVF BUFF1,W
CALL CISLICE
MOVWF DIGIT1
GOTO CONV33
CONV32 MOVF BUFF1,W
BTFSC STATUS,Z
GOTO CONV33
CALL CISLICE
MOVWF DIGIT1
CONV33 MOVF BUFF2,W
CALL CISLICE
MOVWF DIGIT2
MOVF BUFF3,W
CALL CISLICE
MOVWF DIGIT3
GOTO COUNT
CISLICE ADDWF PROGCNT
RETLW B'10000001' ;0
RETLW B'10111011' ;1
RETLW B'00100101' ;2
RETLW B'00100011' ;3
RETLW B'00011011' ;4
RETLW B'01000011' ;5
RETLW B'01000001' ;6
RETLW B'10001011' ;7
RETLW B'00000001' ;8
RETLW B'00000011' ;9
CONVERR MOVLW B'01000101' ;Err_ indication
MOVWF DIGIT0
MOVLW B'01111101'
MOVWF DIGIT1
MOVWF DIGIT2
MOVLW 0xFF
MOVWF DIGIT3
GOTO COUNT
REFRESH BSF PORTA,3
MOVF DIGIT0,W
MOVWF PORTB
BCF PORTA,0
CALL TMRCHK
BSF PORTA,0
MOVF DIGIT1,W
MOVWF PORTB
BCF PORTA,1
CALL TMRCHK
BSF PORTA,1
MOVF DIGIT2,W
MOVWF PORTB
BCF PORTA,2
CALL TMRCHK
BSF PORTA,2
MOVF DIGIT3,W
MOVWF PORTB
BCF PORTA,3
CALL TMRCHK
NOP
NOP
NOP
RETURN
TMRCHK MOVLW 0x6F ;111x
MOVWF WORKA
NOP
NOP
NOP
TMRCHK2 BTFSS INTC,2 ;1
GOTO TMRCHK3
BCF INTC,2
INCF CNTW
GOTO TMRCHK4
TMRCHK3 NOP
NOP
NOP ;6
TMRCHK4 NOP ;1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;10
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;20
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;30
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ WORKA ;38
GOTO TMRCHK2
RETURN
END
CONFIG B'11111111111001' ;XT osc.