Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *************************************************************************
- * Program 4 HARDFLSH.ASM To flash LEDS (PortB) using hardware delay loop*
- * with duration read from switches (PortA) *
- * Hardware JP2 in, JP4 Optional, JP5 ground, JP6 Vcc *
- *************************************************************************
- *define addresses
- PORTA EQU 0 ;Port A (switches)
- PORTB EQU 1 ;Port B (LEDs)
- DDRA EQU 4 ;Data Direction Register for PortA
- DDRB EQU 5 ;Data Direction Register for PortB
- COUNT EQU 5000T ;Timer clock cycles (base ten)
- TSR EQU $13 ;Timer status register
- OCFLAG EQU 6 ;Bit 6 of status register is compare flag
- OCHR EQU $16 ;Compare register 1 high
- OCLR EQU $17 ;Compare register 1 low
- CHR EQU $18 ;Counter high register
- CLR EQU $19 ;Counter low register
- ORG $50
- TICKS RMB 1
- ORG $250 ;Storage for value from switches
- START: lda #0 ;set all bits of port A as input
- sta DDRA ;by setting DDRA to 0
- lda #$FF ;Port B set to output
- sta DDRB ;by setting DDRB to all 1's
- LOOP: lda #0 ;As Ports must sink current to turn on
- sta PORTB ;Zeros set LEDs on
- LDX #$00; ;Load index with 0 value
- LDA PORTA ;Load accumulator with switches values
- FIND_ONE:
- ASRA
- BCC NOT_FOUND
- INCX
- STX $0060
- JMP CONTINUE
- NOT_FOUND:
- INCX
- CPX #$08
- BLO FIND_ONE
- CONTINUE:
- jsr DELAY ;Jump to subroutine delay
- ;lda #$FF ;Ones set LEDs off
- ;sta PORTB ;
- ;jsr DELAY ;Delay again
- bra LOOP ;Repeat
- *
- DELAY: LDA $0060 ;Store value;;
- sta TICKS ;from $0060 ;;
- lda CHR ;read current value of counter H
- sta OCHR ;store in compare register H
- lda CLR ;same for counter low byte
- sta OCLR ;store in compare register L
- LDX #$00
- STX $0055 ;clearing $0055
- LOOP1:
- LDA NUMBERS,X
- STA PORTB ;sending values to sevenseg
- lda OCLR ;read last low byte of compare register
- add #{COUNT%256T} ;add low byte of count
- tax ;save temporarily in X register
- lda OCHR ;read last high byte of compare register
- adc #{COUNT/256T} ;add in high byte of count plus any carry
- sta OCHR ;store Acc in high byte of compare register
- stx OCLR ;store X in low byte of compare register
- HOLD: brclr OCFLAG,TSR,HOLD ;hold until counter = register
- LDX $0055
- INCX
- STX $0055
- CPX TICKS
- BLO LOOP1 ;repeat until X < TICKS
- rts ;return to main program
- END ;end of program
- *
- * Codes for 7 segment display, 0 turns on segment
- *
- NUMBERS: fcb %11000000,%11111001,%10100100,%10110000 ; '0','1','2','3'
- fcb %10011001,%10010010,%10000010,%11111000 ; '4','5','6','7
- fcb %10000000,%10010000,%00000100; '8'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement