Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I am having issue determine the instructions where we create a program and activ

ID: 3880559 • Letter: I

Question

I am having issue determine the instructions where we create a program and activate flash LEDs in a given Hz frequency. I reviewed the HCS12 Microcontrollers and Embedded Systems, 1st Edition chapters more than once but a fail to develop program that relates step down below. I need help to solve this problem. It is due tomorrow tonight?

Textbook: HCS12 Microcontrollers and Embedded Systems, 1st Edition

Note: To become familiar with using clock frequency, running your program automatically in POD Mode, using Dragon12-Light boards.

Project: Please read Chapter 3 of your textbook for writing subroutines and Chapter 4 of your textbook; then, write assembly programs to do the following:

Flash all LEDs in one Hz frequency when running your program in the EVB mode (also called debug mode). In EVB mode, the clock frequency for instructions is 24MHz.

Flash all LEDs in one Hz frequency when running your program in the POD mode (also called auto mode). In POD mode, the clock frequency for instructions is 4MHz.

You must write a subroutine that consumes exactly one second of CPU time. To achieve the flashing effect, in your main program, you need to turn on all the LEDs, then, call this subroutine. Turn off all LEDs, then, call this subroutine.

Your program must flash LEDs continuously in one Hz frequency until a Reset.

Explanation / Answer

; DDRB        = 0x04
; PORTB      = 0x05
; TCCROB    = 0x25
; TCNT0       = 0x26
; 0b00000000 = OFF
; 0b00100000 = ON

setup:
    ldi r16, 0b00100000     ; Set r16 to LED ON value
    out 0x04, r16              ; Set DDRB to output
    out 0x05, r16              ; Set PORTB to ON
    ldi r16, 0b00000101     ; Set r16 with prescaler 1024 value
    out 0x25, r16              ; Set the TCCROB to 1024
    ldi r20, 0                     ; Reset r20
    ldi r21, 1                     ; Hold value 1 to increment r20
loop:
    in r17, 0x26                 ; Read the timer
    cpi r17, 128                 ; Check to see if the timer is halfway done (1/2 second, max 255 value)
    brbc 0, increment         ; If r17 <= 128 (max 255 val before resets to 0), invert current LED state
    rjmp loop
increment:
    adc r20, r21                 ; Add r21 (1) to r20 (with carry)
    brbs 0, reset                ; If the carry branch is set, reset the register
    rjmp loop                     ; Otherwise, run the clock
reset:
    ldi r20, 0                      ; Reset the delay register
    cpi r16, 0b00000000     ; Check if r16 is set to LED OFF
    brbs 1, switchon           ; If it is, change it to ON
    ldi r16, 0b00000000      ; Otherwise, change it to OFF
    out 0x05, r16                ; Set the LED to the new state
    rjmp loop                     ; Run the clock
switchon:
    ldi r16, 0b00100000       ; Set r16 to LED ON value
    out 0x05, r16                ; Set the LED to the new state
    rjmp loop                      ; Run the clock