Please answer the following using MPLAB

An assembler program has been written for a PIC 16F84 microprocessor which ‘flashes LEDs’ through a left or right sequence. The sample code for scenario tasks 1-4 is as follows:

; U19A2T1-4.asm

; blinks LEDs on outputs in a rotating pattern, with input option to reverse direction

;Set microprocessor as 16F84

INCLUDE <P16F84.INC>

; Setup processor configuration

__config _RC_OSC & _WDT_OFF & _PWRTE_ON

; label 2 symbols as memory addresses for counting loops

J equ 1F

K equ 1E


SETUP:

org 0 ;

BANKSEL TRISA ;

clrf TRISA ;

bcf STATUS , RP0 ;

bcf STATUS , RP1 ;

movlw 0x01 ;

movwf PORTB ;

bcf STATUS,C ;


ROTATE:

btfss PORTA,0 ;

goto RR

rlf PORTB,f ;

goto DELAY

RR: rrf PORTB,f ;


DeLAY:

movlw 0x32 ;

movwf J ;

jloop: movwf K ;

kloop: decfsz K,f ;

goto kloop

decfsz J,f ;

goto jloop


DIRECTION:

movlw 0x02 ;

xorwf PORTA,0;

goto ROTATE ;

end ;



Task 1 [P4]

  1. In order to explain the main instruction groups, you are required to annotate each line of code of the program above by explaining their meaning.

  2. In addition briefly explain the role of the program sections – SETUP, ROTATE, DELAY and DIRECION, and the role of 3 special function registers (SFRs) used in the program

Guidance: Take a copy of the program and paste it into your assessment answer and fill in the missing comment lines from ‘SETUP’ to ‘END’ in the same format as lines 1-3.

Task 2 [P5]

  1. Rewrite the delay section of the program as a subroutine with annotations. Also show how it works by including a ‘printscreen’ of the whole program.

  2. Also include a flowchart of the overall program and explain the subroutine section

  3. State two advantages a subroutine might have over keeping the delay section within the main program

  4. Explain with the aid of a diagram how the microprocessor stack operates.

Guidance: Use MPLAB to check that the code ‘builds’ correctly (this will check the syntax), print-screen a copy of code and build result into your answer and also email as ‘U19A2T2.asm’. There is no requirement to run or test the program.


Task 3 [P6]

  1. Rewrite the delay section of the program again using a built-in Timer0 function with annotations.

  2. Also explain with aid of a diagram how the timer function counts the delay, including the role carried out by 3 key SFRs used in the program (different SFRs to those in task 1)

  3. State two advantages an interrupt function might have over a subroutine

Guidance: Use MPLAB to check that the code ‘builds’ correctly (this will check the syntax), print-screen a copy of code and build result into your answer and also email as ‘U19A2T3.asm’. There is no requirement to run or test the program.

Task 4 [P7]

  1. From task 1 select MPLAB to build, run and test the program application.

  2. Briefly comment on your test (Watch) results explaining the values stored in the SFR and variable registers.

Guidance: To test, you will need to change the delay loop from 0X032 to 0X002 in order to speed up the process in the simulator. Take a print-screen of the simulation running and use ‘View -> Watch’ to show evidence of the operation of key variables (symbols) and SFRs such as: J&K counters, the working, status and port registers; and also email as ‘U19A2T4.asm’.