Hello,
Im sure as a new member there is a protocol im not following, I have read the sticky FAQ and a large number of posts about people fantastic projects.
Which makes it all the much more pathetic that i cant get my simple atempt to work.
The code should be a simple counter - the units and tens being desplayed on 1 LED each - tens are represented by blue LED's and units by white.
The only problem is it dosent work at all... hmm
Could someone possibly have a look at the code bellow and give me some pointers - both on getting it to work & on any style or best practice tips
Thanks very much
Piers
*************************************************************
; HEADER628C.ASM for 16F628. Using internal 37kHz RC
; PortA bits 0 to 7 are inputs
; PortsB bits 0 to 7 are outputs
; Prescaler /32
;***********************************************************************************
; EQUATES SECTION
TMR0 EQU 1 ;means TMR0 is file 1.
OPTION_R EQU 1 ;the OPTION register is file 1
PORTA EQU 5 ;means PORTA is file 5.
PORTB EQU 6 ;means PORTB is file 6.
TRISA EQU 5 ;TRISA (the PORTA I/O selection) is file 5
TRISB EQU 6 ;TRISB (the PORTB I/O selection) is file 86H
STATUS EQU 3 ;means STATUS is file 3.
ZEROBIT EQU 2 ;means ZEROBIT is bit 2.
CARRY EQU 0
EEADR EQU 1BH
EEDATA EQU 1AH
EECON1 EQU 1CH
EECON2 EQU 1DH
RD EQU 0
WR EQU 1
WREN EQU 2
PCON EQU 0EH
COUNT EQU 20H ;COUNT is file 20H, a register to count events.
PC EQU 2
TIMEU EQU 21H
TIMET EQU 22H
TIMEPA EQU 23H
TIMEPB EQU 24H
TEMP EQU 25H
TIMETEMP EQU 26H
;*********************************************************
LIST P=16F628 ; we are using the 16F628.
ORG 0 ;the start address in memory is 0
GOTO START ; goto start!
;*********************************************************
;SUBROUTINE SECTION.
;1 second delay.
DELAY1 MOVLW 10
MOVWF COUNT
LOOPB CALL DELAYP1
DECFSZ COUNT
GOTO LOOPB
RETLW 0
; 0.1 second delay.
DELAYP1 CLRF TMR0
LOOPA MOVF TMR0,W
SUBLW .29
BTFSS STATUS,ZEROBIT
GOTO LOOPA
RETLW 0
;UNITS SUB
UNITS INCF TIMEU
MOVF TIMEU,W
SUBLW .10
BTFSC STATUS,ZEROBIT
CALL TENS ;CALL TENS SUB IF TIMEU = 10
RETLW 0
;TENS SUB
TENS INCF TIMET
MOVF TIMET,W
SUBLW .6
BTFSC STATUS,ZEROBIT
CLRF TIMET ;CLEAR TIMET IF IS 6
CLRF TIMEU
RETLW 0
UNITTABLE ADDWF PC
RETLW B'00000000' ;0
RETLW B'00000001' ;1
RETLW B'00001001' ;2
RETLW B'00001011' ;3
RETLW B'01001011' ;4
RETLW B'01001111' ;5
RETLW B'01011111' ;6
RETLW B'11011111' ;7
RETLW B'11111111' ;8
MOVLW B'00000001' ;9 SET PORTA
MOVWF TIMEPA
RETLW B'11111111'
;TENS DISPLAY TABLE
TENSTABLE ADDWF PC
RETLW B'00000000' ;0
RETLW B'00000010' ;1
RETLW B'00000110' ;2
RETLW B'01000110' ;3
RETLW B'01001110' ;4
RETLW B'11001110' ;5
;CONVERT UNITS TO DISPLAY
CONVUNITS CLRF TIMEPA
MOVF TIMEU,W
CALL UNITTABLE
MOVWF TIMEPB
RETLW 0
;CONVERT TENS TO DISPLAY
CONVTENS MOVF TIMET,W
CALL TENSTABLE
IORWF TIMEPA
RETLW 0
;DISPLAY
DISPLAY MOVF TIMEPB,W
MOVWF PORTB
MOVF TIMEPA,W
MOVWF PORTA
RETLW 0
;*********************************************************
;CONFIGURATION SECTION
START BSF STATUS,5 ;Turns to Bank1.
MOVLW B'00000000' ;PORTA are OUTPUT
MOVWF TRISA
MOVLW B'00000000' ;ddd
MOVWF TRISB ;PORTB is OUTPUT
MOVLW B'00000100' ;Prescaler is /32
MOVWF OPTION_R ;TIMER is 1/32 secs.
CLRF PCON
BCF STATUS,5 ;Return to Bank0.
CLRF PORTA ;Clears PortA.
CLRF PORTB ;Clears PortB.
MOVLW 7
MOVWF 1FH
;*********************************************************
;Program starts now.
BEGIN CLRF TEMP
TEST CALL UNITS
CALL CONVUNITS
CALL CONVTENS
CALL DISPLAY
CALL DELAY1
GOTO TEST
END ;END
Im sure as a new member there is a protocol im not following, I have read the sticky FAQ and a large number of posts about people fantastic projects.
Which makes it all the much more pathetic that i cant get my simple atempt to work.
The code should be a simple counter - the units and tens being desplayed on 1 LED each - tens are represented by blue LED's and units by white.
The only problem is it dosent work at all... hmm
Could someone possibly have a look at the code bellow and give me some pointers - both on getting it to work & on any style or best practice tips
Thanks very much
Piers
*************************************************************
; HEADER628C.ASM for 16F628. Using internal 37kHz RC
; PortA bits 0 to 7 are inputs
; PortsB bits 0 to 7 are outputs
; Prescaler /32
;***********************************************************************************
; EQUATES SECTION
TMR0 EQU 1 ;means TMR0 is file 1.
OPTION_R EQU 1 ;the OPTION register is file 1
PORTA EQU 5 ;means PORTA is file 5.
PORTB EQU 6 ;means PORTB is file 6.
TRISA EQU 5 ;TRISA (the PORTA I/O selection) is file 5
TRISB EQU 6 ;TRISB (the PORTB I/O selection) is file 86H
STATUS EQU 3 ;means STATUS is file 3.
ZEROBIT EQU 2 ;means ZEROBIT is bit 2.
CARRY EQU 0
EEADR EQU 1BH
EEDATA EQU 1AH
EECON1 EQU 1CH
EECON2 EQU 1DH
RD EQU 0
WR EQU 1
WREN EQU 2
PCON EQU 0EH
COUNT EQU 20H ;COUNT is file 20H, a register to count events.
PC EQU 2
TIMEU EQU 21H
TIMET EQU 22H
TIMEPA EQU 23H
TIMEPB EQU 24H
TEMP EQU 25H
TIMETEMP EQU 26H
;*********************************************************
LIST P=16F628 ; we are using the 16F628.
ORG 0 ;the start address in memory is 0
GOTO START ; goto start!
;*********************************************************
;SUBROUTINE SECTION.
;1 second delay.
DELAY1 MOVLW 10
MOVWF COUNT
LOOPB CALL DELAYP1
DECFSZ COUNT
GOTO LOOPB
RETLW 0
; 0.1 second delay.
DELAYP1 CLRF TMR0
LOOPA MOVF TMR0,W
SUBLW .29
BTFSS STATUS,ZEROBIT
GOTO LOOPA
RETLW 0
;UNITS SUB
UNITS INCF TIMEU
MOVF TIMEU,W
SUBLW .10
BTFSC STATUS,ZEROBIT
CALL TENS ;CALL TENS SUB IF TIMEU = 10
RETLW 0
;TENS SUB
TENS INCF TIMET
MOVF TIMET,W
SUBLW .6
BTFSC STATUS,ZEROBIT
CLRF TIMET ;CLEAR TIMET IF IS 6
CLRF TIMEU
RETLW 0
UNITTABLE ADDWF PC
RETLW B'00000000' ;0
RETLW B'00000001' ;1
RETLW B'00001001' ;2
RETLW B'00001011' ;3
RETLW B'01001011' ;4
RETLW B'01001111' ;5
RETLW B'01011111' ;6
RETLW B'11011111' ;7
RETLW B'11111111' ;8
MOVLW B'00000001' ;9 SET PORTA
MOVWF TIMEPA
RETLW B'11111111'
;TENS DISPLAY TABLE
TENSTABLE ADDWF PC
RETLW B'00000000' ;0
RETLW B'00000010' ;1
RETLW B'00000110' ;2
RETLW B'01000110' ;3
RETLW B'01001110' ;4
RETLW B'11001110' ;5
;CONVERT UNITS TO DISPLAY
CONVUNITS CLRF TIMEPA
MOVF TIMEU,W
CALL UNITTABLE
MOVWF TIMEPB
RETLW 0
;CONVERT TENS TO DISPLAY
CONVTENS MOVF TIMET,W
CALL TENSTABLE
IORWF TIMEPA
RETLW 0
;DISPLAY
DISPLAY MOVF TIMEPB,W
MOVWF PORTB
MOVF TIMEPA,W
MOVWF PORTA
RETLW 0
;*********************************************************
;CONFIGURATION SECTION
START BSF STATUS,5 ;Turns to Bank1.
MOVLW B'00000000' ;PORTA are OUTPUT
MOVWF TRISA
MOVLW B'00000000' ;ddd
MOVWF TRISB ;PORTB is OUTPUT
MOVLW B'00000100' ;Prescaler is /32
MOVWF OPTION_R ;TIMER is 1/32 secs.
CLRF PCON
BCF STATUS,5 ;Return to Bank0.
CLRF PORTA ;Clears PortA.
CLRF PORTB ;Clears PortB.
MOVLW 7
MOVWF 1FH
;*********************************************************
;Program starts now.
BEGIN CLRF TEMP
TEST CALL UNITS
CALL CONVUNITS
CALL CONVTENS
CALL DISPLAY
CALL DELAY1
GOTO TEST
END ;END