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

i have a practice problem where we have to create an assembly language program.

ID: 3881549 • Letter: I

Question

i have a practice problem where we have to create an assembly language program. This involves setting up a DIP switch and then to activate the LEDs on the Dragon 12 light board. The problem I am having is to implement the instruction where I have to set up switch 1 and 8. Can you provide an example of the instructions using the Code Warrior shell text (see below) as a guideline?

I use the  HCS12 Microcontrollers and Embedded Systems as a reference.

1.     When both DIP switches #8 and #1 are high, turn on all LEDs.

2.     When both DIP switches #8 and #1 are low, turn off all LEDs

3.     When DIP switch #8 is high and #1 is low, turn on all the even numbered LEDs.

4.     When DIP switch #1 is high and #8 is low, turn on all the odd numbered LEDs.

5.      Your program must to read DIP switches and turn on/off corresponding LRDs continuously until a Reset.

Explanation / Answer

START: CPL P1.0

ACALL WAIT

SJMP START

WAIT: MOV R4,#05H

WAIT1: MOV R3,#00H

WAIT2: MOV R2,#00H

WAIT3: DJNZ R2,WAIT3

DJNZ R3,WAIT2

DJNZ R4,WAIT1

RET

START: CPL P1.0

ACALL WAIT

CPL P1.0

CPL P1.1

ACALL WAIT

CPL P1.1

SJMP START

WAIT: MOV R4,#05H

WAIT1: MOV R3,#00H

WAIT2: MOV R2,#00H

WAIT3: DJNZ R2,WAIT3

DJNZ R3,WAIT2

DJNZ R4,WAIT1

RET

; 5s_delay.asm 5 second delay timer for DRAGON12 Rev. E board

; (c)2002, EVBplus.com, written by Wayne Chu

;

; Function: 5 second delay routine using output comparator 6

; The PB0 LED will be turned on immediately after running

; this program. It will be turned off after 5 second delay.

; Change the DELAY_TIME to 36000 will delay 3 minutes.

PB0: equ 1

DB6: equ $40

;

TB1MS: equ 24000 ; 1ms time base of 24,000 instruction cycles

; ; 24,000 x 1/24MHz = 1ms at 24 MHz bus speed

;DELAY_TIME: equ 36000 ; 36000 X 5 ms= 180 sec = 3 min

DELAY_TIME: equ 5000 ; 5000 X 1 ms= 5 sec

REGBLK: equ $0

#include reg9s12.h ; include register equates

org $1000

;

flag_5s: rmb 1

cnt_5s: rmb 2

STACK: equ $2000

org $2000

start:

lds #STACK

ldx #timer6

stx $3E62 ; initialize the int vetctor

ldx #REGBLK

ldaa #$ff

staa ddrb,x ; make port B an output port

staa ddrp,x ; make port P an output port

staa ptp,x ; turn off 7-segment LED display

staa ddrj,x ; make port J an output port

clr ptj,x ; make PJ1 low to enable LEDs

ldaa #$80

staa tscr,x ; enable timer

ldaa #DB6

staa tios,x ; select t6 as an output compare

staa tmsk1,x

cli

bset portb,x PB0 ; turn on LED PB0

jsr delay_5s

bclr portb,x PB0 ; turn off LED PB0

stp: jmp stp

delay_5s:

clr cnt_5s

clr cnt_5s+1

clr flag_5s

delay: ldaa flag_5s

beq delay

rts

timer6:

ldx cnt_5s

inx

stx cnt_5s

cpx #DELAY_TIME

bne tmr6

clr cnt_5s

clr cnt_5s+1

ldaa #1

staa flag_5s

rti

tmr6: ldx #REGBLK

ldd #TB1MS ; reload the count for 1 ms time base

addd tc6,x

std tc6,x

ldaa #DB6

staa tflg1,x ; clear flag

rti

org $3E62

fdb timer6

end