Question: Write an assembly program with the following functionality. The program generates two random numbers in the range 1 1 - 9 9 and computes their

Write an assembly program with the following functionality. The program generates two random numbers in the range 11-99 and computes their sum and also asks the user to compute the sum. The user got 8 seconds to type in the answer. If no user response is obtained within 8 seconds, the program reports timeout and starts over. Otherwise, the program verifies user's answer, prints the corresponding report and starts over. This way the program can be used for training users to add integers (without using calculators).
Here is a sample dialog with a user, where all numbers to the right of the '=' sign are user input:
29+42=71 Correct! 32+18=42 Incorrect! Right answer is 5045+72=(here timeout occurred) Timeout. Answer is 11711+28=39 Correct!
Implement timeouts with RTCC_CC0 channel and detect keyboard key presses by using USART1_RX hardware interrupt and its processing in NVIC. For this you may modify ReadChar and ReadInt routines from the Terminal.lib library. Your program must have no polling loops which implies that RTCC interrupts must be also processed in NVIC and CPU must be put in sleep mode with wfi instruction while waiting for the user's input or timeout.
Hint: use software random number generator that generates next random number in the range [11-99] according to the recursive formula
rand =(((rand *1103515145)+12846)%89)+11
Before generating the random numbers initialize variable rand with 21. Recursive implementation of the random number generator is not required.
Write it in this format:
INCLUDE EFR32BG22.inc ; CPU register definitions
INCLUDE terminal.inc ; terminal function definitions
EXPORT main
IMPORT LETIMER_setup ; import names from other code files
IMPORT GPIO_setup
;------------------------------------- ; non-initialized DATA segment in RAM
AREA RAM, DATA, NOINIT, READWRITE, ALIGN=3
;myWord SPACE 4 ; 32-bit variable (MUST BE ALIGHED!)
;myHalf SPACE 2 ; 16-bit variable (MUST BE ALIGHED!)
;myByte SPACE 1 ; 8-bit variable (NO alighment required)
;------------------------------------- ; CODE segment in flash (ROM)
AREA |.text|, CODE, READONLY
main PROC ; main user code
bl Terminal_setup ; setup TeraTerm communication
; bl GPIO_setup ; configure port pins
; bl LETIMER_setup ; start 1-sec timer for periodic events
; your code starts here
loop ; periodic task starts here
b loop ; repeat periodic task
ENDP
;-------------------------------------
;prompt DCB "Enter a number: ",0 ; allocate constant strings here
ALIGN
;constW DCD 15 ; initialized 32-bit constant
;constH DCW 23 ; initialized 16-bit constant
;constB DCB 17 ; initialized 8-bit constant
ALIGN
END

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!