CASE WESTERN RESERVE UNIVERSITY
Case School of Engineering
Department of Electrical Engineering and Computer Science EECS 281. Logic Design and Computer Organization (4)
Guessing Game Due: December 17, 2016
Please upload your homework solutions to the Blackboard. Laboratory (50 pts + 50 pts Extra Credit)
In order to get the extra credit, your code should be working properly.
In this assignment, we will use MPLab to develop and simulate an assembly language program for the PIC microcontroller that plays the guessing game, as described in Section 7.7.1 of the Wakerly textbook, 4th ed. The assembly language program is to be tested using MPLab to apply the sequence of inputs given below.
This state machine has 4 inputs and 5 outputs. Students should use the PIC16F84A. The required pin assignments are given in the following table.
Required Pin Assignments
Inputs
Right Outputs
Function
PIC
Function
PIC
G1
RA0
L1
RB0
G2
RA1
L2
RB1
G3
RA2
L3
RB2
G4
RA3
L4
RB3
ERR
RB7
A high output is used to turn on a light while a low output signifies that the light is off.
Programs should initialize to state S1 and include a delay of ~1.0 second from one state to the next in the rotating light pattern. This delay could be created in different ways, for example, using a simple program loop, or using a timer with or without interrupts. It need not be precise, but should be accurate to ±0.05 seconds. You may choose your processor clock frequency to adjust the state delay.
The program should be tested using a stimulus workbook (“lab13.sbs”) that has been posted on Blackboard with this assignment. This external stimulus is applied using
Debuggerstimulusopen workbook being sure to “Apply” the stimulus.
Given the above timing, this stimulus makes a wrong guess, a correct guess, then simultaneous correct/wrong guess.
Your solution to this homework should include your documented assembly language code and stopwatch/watch displays to demonstrate that your game responds properly to stimulus. This example shows a stopwatch/watch display following the first wrong guess. Your solution should show this stopwatch/watch display following each state change. This can be done most easily by setting breakpoints immediately following each state change in your code, then running the processor, which will automatically stop at each state change. You need to use a processor frequency of 100kHz. You can adjust the frequency from Debugger Settings Osc/Trace tab: Processor Frequency.
Sample Display window following the first wrong guess
Hints and Suggested Approach
This general outline can be used. Main: ; start of the main program
; initialize the state machine
Mloop: ; beginning of one state machine cycle
; compute the next state
; compute new outputs
; delay for ~ 1.0 second – adjust for 1.0 second, state to state
goto Mloop
Computation of the next state could potentially follow the approach used in the textbook which is geared for implementation using Verilog and logic hardware. There are other approaches, however, which are more sensible for a byte oriented, general purpose machine such as the PIC. For example, the state could be “one-hot encoded” to match the outputs, and the next-state could be computed using the table look-up or by if-then statements that consider the present state and the inputs.