Digital Systems CW1: Calculator
You are viewing an old revision of this post, from 27 July, 2011 @ 3:11. See below for differences between this version and the current revision.
Post Revisions:
- 27 July, 2011 @ 3:15 [Current Revision] by Kay Leacock
- 27 July, 2011 @ 3:13 by Kay Leacock
- 27 July, 2011 @ 3:11 by Kay Leacock
Changes:
| 27 July, 2011 @ 3:11 | Current Revision | ||
|---|---|---|---|
| Content | |||
| + | <pre class="brush:plain"> | ||
| + | $include (reg66x.inc) | ||
| + | ; At the very beginning, jump to 40H... | ||
| + | ORG 0 | ||
| + | TIMECOUNT EQU 8h | ||
| + | MBUFFER EQU 10h | ||
| + | KBUFFERA EQU 18h | ||
| + | KBUFFERB EQU 20h | ||
| + | KEY EQU 28h | ||
| + | MODE EQU 30h | ||
| + | DISPLAYA EQU 38H | ||
| + | DISPLAYB EQU 40H | ||
| + | DISPLAYC EQU 48H | ||
| + | DISPLAYD EQU 50H | ||
| + | DISPLAYR EQU 58H | ||
| + | CLEARCALLED EQU 60H | ||
| + | LJMP CLEAR | ||
| + | ; ...which is where our code begins. | ||
| + | ORG 40H | ||
| + | ;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; | ||
| + | MAIN: ; Defines the MAIN loop. | ||
| + | ACALL INPUT ; INPUT subroutine. | ||
| + | ACALL CALCULATE ; CALCULATE subroutine. | ||
| + | ACALL OUTPUT ; OUTPUT subroutine. | ||
| + | SJMP MAIN ; Jump back to the beginning. | ||
| + | ;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;;;; Subroutine: CALCULATE | ||
| + | ;;;;; Purpose: Prepares calculations for output. | ||
| + | ;;;;; MODE: 1 = ADD, 2 = SUB, 3 = MULT | ||
| + | ;;;;; 4 = DIV, 9 = RESULT | ||
| + | CALCULATE: | ||
| + | MOV A, MODE | ||
| + | CJNE A, #0, STOREMODE | ||
| + | SJMP NONEOFTHEABOVE | ||
| + | STOREMODE: | ||
| + | CJNE A, #9, DOSTOREMODE | ||
| + | SJMP RESULT | ||
| + | DOSTOREMODE: | ||
| + | MOV MBUFFER, MODE | ||
| + | LJMP CALCULATEDONE | ||
| + | RESULT: | ||
| + | MOV A, MBUFFER | ||
| + | ADDITION: | ||
| + | CJNE A, #1, SUBTRACT | ||
| + | MOV A, KBUFFERA | ||
| + | ADD A, KBUFFERB | ||
| + | MOV R0, A | ||
| + | MOV B, #10 | ||
| + | DIV AB | ||
| + | CJNE A, #0, ADDTWODIGITS | ||
| + | MOV DISPLAYA, R0 | ||
| + | SJMP CLEANUP | ||
| + | ADDTWODIGITS: | ||
| + | MOV DISPLAYB, A | ||
| + | MOV DISPLAYA, B | ||
| + | SJMP CLEANUP | ||
| + | SUBTRACT: | ||
| + | CJNE A, #2, MULTIPLY | ||
| + | MOV A, KBUFFERA | ||
| + | SUBB A, KBUFFERB | ||
| + | MOV DISPLAYA, A | ||
| + | SJMP CLEANUP | ||
| + | MULTIPLY: | ||
| + | CJNE A, #3, DIVIDE | ||
| + | MOV A, KBUFFERA | ||
| + | MOV B, KBUFFERB | ||
| + | MUL AB | ||
| + | MOV R0, A | ||
| + | MOV B, #10 | ||
| + | DIV AB | ||
| + | CJNE A, #0, MULTWODIGITS | ||
| + | MOV DISPLAYA, R0 | ||
| + | SJMP CLEANUP | ||
| + | MULTWODIGITS: | ||
| + | MOV DISPLAYB, A | ||
| + | MOV DISPLAYA, B | ||
| + | SJMP CLEANUP | ||
| + | DIVIDE: | ||
| + | CJNE A, #4, CALCULATEDONE | ||
| + | MOV A, KBUFFERA | ||
| + | MOV B, KBUFFERB | ||
| + | DIV AB | ||
| + | MOV DISPLAYA, B | ||
| + | MOV DISPLAYR, #1 | ||
| + | MOV DISPLAYC, A | ||
| + | SJMP CLEANUP | ||
| + | NONEOFTHEABOVE: | ||
| + | MOV A, MBUFFER | ||
| + | CJNE A, #0, STOREB | ||
| + | STOREA: | ||
| + | MOV KBUFFERA, KEY | ||
| + | SJMP STOREDONE | ||
| + | STOREB: | ||
| + | MOV KBUFFERB, KEY | ||
| + | STOREDONE: | ||
| + | MOV A, KEY | ||
| + | CJNE A, #0, DISPLAYKEY | ||
| + | SJMP CALCULATEDONE | ||
| + | DISPLAYKEY: | ||
| + | MOV DISPLAYA, KEY | ||
| + | SJMP CALCULATEDONE | ||
| + | CLEANUP: | ||
| + | MOV KBUFFERA, #0 | ||
| + | MOV KBUFFERB, #0 | ||
| + | MOV MBUFFER, #0 | ||
| + | MOV KEY, #0 | ||
| + | MOV MODE, #0 | ||
| + | MOV A, #0 | ||
| + | MOV B, #0 | ||
| + | CALCULATEDONE: | ||
| + | RET | ||
| + | ;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;;;; Subroutine: OUTPUT | ||
| + | ;;;;; Purpose: Updates the display. | ||
| + | OUTPUT: | ||
| + | MOV P2, #3 | ||
| + | MOV P1, DISPLAYD | ||
| + | ACALL TIMER | ||
| + | MOV P2, #2 | ||
| + | MOV P1, DISPLAYC | ||
| + | ACALL TIMER | ||
| + | MOV P2, #1 | ||
| + | MOV A, DISPLAYR | ||
| + | CJNE A, #1, DISPLAYBNOW | ||
| + | MOV P1, #0FFh | ||
| + | CPL P2.4 | ||
| + | CPL P2.5 | ||
| + | SJMP DISPLAYANOW | ||
| + | DISPLAYBNOW: | ||
| + | MOV P1, DISPLAYB | ||
| + | DISPLAYANOW: | ||
| + | ACALL TIMER | ||
| + | MOV P2, #0 | ||
| + | MOV P1, DISPLAYA | ||
| + | RET | ||
| + | ;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;;;; Subroutine: INPUT | ||
| + | ;;;;; Purpose: Read buttons pressed on keypad. | ||
| + | INPUT: | ||
| + | MOV MODE, #0 | ||
| + | MOV P0, #0FFH | ||
| + | CLR P0.4 | ||
| + | ACALL TIMER | ||
| + | MOV A,P0 | ||
| + | ANL A, #0FH | ||
| + | CJNE A, #0FH, ROWONECOLONE | ||
| + | SETB P0.4 | ||
| + | CLR P0.5 | ||
| + | ACALL TIMER | ||
| + | MOV A, P0 | ||
| + | ANL A, #0FH | ||
| + | CJNE A, #0FH, ROWTWOCOLONE | ||
| + | SETB P0.5 | ||
| + | CLR P0.6 | ||
| + | ACALL TIMER | ||
| + | MOV A, P0 | ||
| + | ANL A, #0FH | ||
| + | CJNE A, #0FH, ROWTHREECOLONE | ||
| + | SETB P0.6 | ||
| + | CLR P0.7 | ||
| + | ACALL TIMER | ||
| + | MOV A, P0 | ||
| + | ANL A, #0FH | ||
| + | CJNE A, #0FH, ROWFOURCOLONE | ||
| + | RET | ||
| + | ROWONECOLONE: | ||
| + | CJNE A, #14, ROWONECOLTWO | ||
| + | MOV KEY, #1h | ||
| + | RET | ||
| + | ROWONECOLTWO: | ||
| + | CJNE A, #13, ROWONECOLTHREE | ||
| + | MOV KEY, #2h | ||
| + | RET | ||
| + | ROWONECOLTHREE: | ||
| + | CJNE A, #11, ROWONECOLFOUR | ||
| + | MOV KEY, #3h | ||
| + | RET | ||
| + | ROWONECOLFOUR: | ||
| + | MOV MODE, #1 ; mode 1 = ADD | ||
| + | RET | ||
| + | ROWTWOCOLONE: | ||
| + | CJNE A, #14, ROWTWOCOLTWO | ||
| + | MOV KEY, #4h | ||
| + | RET | ||
| + | ROWTWOCOLTWO: | ||
| + | CJNE A, #13, ROWTWOCOLTHREE | ||
| + | MOV KEY, #5h | ||
| + | RET | ||
| + | ROWTWOCOLTHREE: | ||
| + | CJNE A, #11, ROWTWOCOLFOUR | ||
| + | MOV KEY, #6h | ||
| + | RET | ||
| + | ROWTWOCOLFOUR: | ||
| + | MOV MODE, #2 ; mode 1 = SUB | ||
| + | RET | ||
| + | ROWTHREECOLONE: | ||
| + | CJNE A, #14, ROWTHREECOLTWO | ||
| + | MOV KEY, #7h | ||
| + | RET | ||
| + | ROWTHREECOLTWO: | ||
| + | CJNE A, #13, ROWTHREECOLTHREE | ||
| + | MOV KEY, #8h | ||
| + | RET | ||
| + | ROWTHREECOLTHREE: | ||
| + | CJNE A, #11, ROWTHREECOLFOUR | ||
| + | MOV KEY, #9h | ||
| - | + | RET | |
| + | ROWTHREECOLFOUR: | ||
| + | MOV MODE, #3 ; mode 1 = MULT | ||
| + | RET | ||
| + | ROWFOURCOLONE: | ||
| + | CJNE A, #14, ROWFOURCOLTWO | ||
| + | MOV CLEARCALLED, #1 | ||
| + | ACALL CLEAR | ||
| + | RET | ||
| + | ROWFOURCOLTWO: | ||
| + | CJNE A, #13, ROWFOURCOLTHREE | ||
| + | MOV KEY, #0h | ||
| + | RET | ||
| + | ROWFOURCOLTHREE: | ||
| + | CJNE A, #11, ROWFOURCOLFOUR | ||
| + | MOV MODE, #9 ; mode 9 = EQUALS | ||
| + | RET | ||
| + | ROWFOURCOLFOUR: | ||
| + | CJNE A, #7, NOKEYSCAN | ||
| + | MOV MODE, #4 ; mode 4 = DIVIDE | ||
| + | RET | ||
| + | NOKEYSCAN: | ||
| + | RET | ||
| + | ;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;;;; Subroutine: CLEAR | ||
| + | ;;;;; Purpose: Reset the shit out of it. | ||
| + | CLEAR: | ||
| + | MOV KBUFFERA, #0 | ||
| + | MOV KBUFFERB, #0 | ||
| + | MOV MBUFFER, #0 | ||
| + | MOV DISPLAYA, #0 | ||
| + | MOV DISPLAYB, #0 | ||
| + | MOV DISPLAYC, #0 | ||
| + | MOV DISPLAYD, #0 | ||
| + | MOV DISPLAYR, #0 | ||
| + | MOV KEY, #0 | ||
| + | MOV MODE, #0 | ||
| + | MOV A, #0 | ||
| + | MOV B, #0 | ||
| + | MOV A, CLEARCALLED | ||
| + | CJNE A, #0, CLEARRET | ||
| + | LJMP MAIN | ||
| + | CLEARRET: | ||
| + | MOV A, #0 | ||
| + | MOV CLEARCALLED, #0 | ||
| + | RET | ||
| + | ;;;;;;;;;;;;; ;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;;;; Subroutine: TIMER | ||
| + | ;;;;; Purpose: Produce a 58ms-ish delay on ACALL. | ||
| + | TIMER: | ||
| + | MOV R0, #255 | ||
| + | TIMELOOPA: | ||
| + | DJNZ R0, TIMELOOPA | ||
| + | TIMEDONE: | ||
| + | RET | ||
| + | END | ||
| + | </pre> | ||
Note: Spaces may be added to comparison text to allow better line wrapping.
Also Check Out
Tags
android
apache
applescript
assembler
autoit
bash
beta
bugfix
c
camera
code
cpld
essay
flash
html
irc
lighttpd
mac
micro
mobile
networking
not very good
palm
patch
perl
phones
photography
php
poe
proof of concept
robotics
screen scraping
sms
spherebot
tinyurl
tools
uni
uni first year
uni second year
vhdl
weather
web
webdav
windows
writing
Lifestream
-
Listened to Toxic (Britney Spears) - A Static Lullaby.
-
Listened to Phaze and Blood - Homestuck.
-
Listened to The Journey Ends - A Link to the Past (Re-arranged).
-
Listened to The Legend Of Zelda (Electrixx Remix) - Zedd.
-
Listened to The Goddess Appears - legend of zelda.
-
Listened to Little Sister - Codeine Velvet Club.
-
Listened to Expedition - Homestuck.
-
Listened to After Every Party I Die - IAMX.
-
Listened to Spit It Out - IAMX.
-
Listened to S.H.E. - IAMX.






