Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. *************************************************************************
  2. * Program 4 HARDFLSH.ASM To flash LEDS (PortB) using hardware delay loop*
  3. * with duration read from switches (PortA) *
  4. * Hardware JP2 in, JP4 Optional, JP5 ground, JP6 Vcc *
  5. *************************************************************************
  6. *define addresses
  7. PORTA EQU 0 ;Port A (switches)
  8. PORTB EQU 1 ;Port B (LEDs)
  9. DDRA EQU 4 ;Data Direction Register for PortA
  10. DDRB EQU 5 ;Data Direction Register for PortB
  11. COUNT EQU 5000T ;Timer clock cycles (base ten)
  12. TSR EQU $13 ;Timer status register
  13. OCFLAG EQU 6 ;Bit 6 of status register is compare flag
  14. OCHR EQU $16 ;Compare register 1 high
  15. OCLR EQU $17 ;Compare register 1 low
  16. CHR EQU $18 ;Counter high register
  17. CLR EQU $19 ;Counter low register
  18.  
  19. ORG $50
  20. TICKS RMB 1
  21. ORG $250 ;Storage for value from switches
  22. START: lda #0 ;set all bits of port A as input
  23. sta DDRA ;by setting DDRA to 0
  24. lda #$FF ;Port B set to output
  25. sta DDRB ;by setting DDRB to all 1's
  26. LOOP: lda #0 ;As Ports must sink current to turn on
  27. sta PORTB ;Zeros set LEDs on
  28. LDX #$00; ;Load index with 0 value
  29. LDA PORTA ;Load accumulator with switches values
  30. FIND_ONE:
  31. ASRA
  32. BCC NOT_FOUND
  33. INCX
  34. STX $0060
  35. JMP CONTINUE
  36. NOT_FOUND:
  37. INCX
  38. CPX #$08
  39. BLO FIND_ONE
  40. CONTINUE:
  41. jsr DELAY ;Jump to subroutine delay
  42. ;lda #$FF ;Ones set LEDs off
  43. ;sta PORTB ;
  44. ;jsr DELAY ;Delay again
  45. bra LOOP ;Repeat
  46. *
  47. DELAY: LDA $0060 ;Store value;;
  48. sta TICKS ;from $0060 ;;
  49. lda CHR ;read current value of counter H
  50. sta OCHR ;store in compare register H
  51. lda CLR ;same for counter low byte
  52. sta OCLR ;store in compare register L
  53. LDX #$00
  54. STX $0055 ;clearing $0055
  55. LOOP1:
  56. LDA NUMBERS,X
  57. STA PORTB ;sending values to sevenseg
  58. lda OCLR ;read last low byte of compare register
  59. add #{COUNT%256T} ;add low byte of count
  60. tax ;save temporarily in X register
  61. lda OCHR ;read last high byte of compare register
  62. adc #{COUNT/256T} ;add in high byte of count plus any carry
  63. sta OCHR ;store Acc in high byte of compare register
  64. stx OCLR ;store X in low byte of compare register
  65.  
  66. HOLD: brclr OCFLAG,TSR,HOLD ;hold until counter = register
  67. LDX $0055
  68. INCX
  69. STX $0055
  70. CPX TICKS
  71. BLO LOOP1 ;repeat until X < TICKS
  72. rts ;return to main program
  73. END ;end of program
  74.  
  75. *
  76. * Codes for 7 segment display, 0 turns on segment
  77. *
  78. NUMBERS: fcb %11000000,%11111001,%10100100,%10110000 ; '0','1','2','3'
  79. fcb %10011001,%10010010,%10000010,%11111000 ; '4','5','6','7
  80. fcb %10000000,%10010000,%00000100; '8'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement