Additions:
CLEARCALLED EQU 60H
MOV CLEARCALLED, #1
ACALL CLEAR
MOV A, CLEARCALLED
CJNE A, #0, CLEARRET
CLEARRET:
MOV CLEARCALLED, #0
Deletions:
;MOV KEY, #0FFH
;MOV KEY, #0FFH
Edited on
2009-01-20 18:41:46 by cmantito
[clear seizes after 2 clears, div w/rmdr works, 2 digit results.]
Additions:
DISPLAYR EQU 58H
LJMP CALCULATEDONE
MOV R0, A
MOV B, #10
CJNE A, #0, ADDTWODIGITS
MOV DISPLAYA, R0
ADDTWODIGITS:
MOV DISPLAYB, A
MOV DISPLAYA, B
MOV R0, A
MOV B, #10
CJNE A, #0, MULTWODIGITS
MOV DISPLAYA, R0
MULTWODIGITS:
MOV DISPLAYB, A
MOV DISPLAYA, B
MOV DISPLAYA, B
MOV DISPLAYR, #1
MOV DISPLAYC, A
MOV A, KEY
CJNE A, #0, DISPLAYKEY
DISPLAYKEY:
MOV A, DISPLAYR
CJNE A, #1, DISPLAYBNOW
MOV P1, #0FFh
CPL P2.4
CPL P2.5
SJMP DISPLAYANOW
DISPLAYBNOW:
DISPLAYANOW:
MOV DISPLAYR, #0
Deletions:
CJNE KEY, #0, CALCULATEDONE
Additions:
KEY EQU 28h
MODE EQU 30h
DISPLAYA EQU 38H
DISPLAYB EQU 40H
DISPLAYC EQU 48H
DISPLAYD EQU 50H
MOV DISPLAYA, A
MOV DISPLAYA, A
MOV DISPLAYA, A
CJNE A, #4, CALCULATEDONE
MOV DISPLAYA, A
CJNE KEY, #0, CALCULATEDONE
MOV DISPLAYA, KEY
MOV P2, #3
MOV P1, DISPLAYD
MOV P2, #2
MOV P1, DISPLAYC
MOV P2, #1
MOV P1, DISPLAYB
MOV P1, DISPLAYA
CJNE A, #7, NOKEYSCAN
NOKEYSCAN:
MOV DISPLAYA, #0
MOV DISPLAYB, #0
MOV DISPLAYC, #0
MOV DISPLAYD, #0
MOV R0, #255
TIMELOOPA:
DJNZ R0, TIMELOOPA
TIMEDONE:
Deletions:
DISPLAY EQU 28h
KEY EQU 30h
MODE EQU 38h
MOV DISPLAY, A
MOV DISPLAY, A
MOV DISPLAY, A
CJNE A, #4, RESULT
MOV DISPLAY, A
MOV DISPLAY, KEY
MOV KEY, #0FFH
MOV P1, DISPLAY
MOV DISPLAY, #0
MOV TIMER, #255
TIMELOOP:
DJNZ TIMER, TIMELOOP
RET
Edited on
2009-01-20 14:18:43 by cmantito
[timer doesnt compile but everything else works still seizes]
Additions:
TIMECOUNT EQU 8h
ACALL CALCULATE ; CALCULATE subroutine.
MOV A, #0
MOV B, #0
MOV A, #0
MOV B, #0
MOV TIMER, #255
TIMELOOP:
DJNZ TIMER, TIMELOOP
END
Deletions:
ACALL CALCULATE ; CALCULATE subroutine.
MOV R0, #92
MOV R1, #255
MOV R2, #50
TIMELOOPA:
DJNZ R0, TIMELOOPA
DJNZ R1, TIMELOOPB
TIMELOOPB:
CJNE R1, #0, TIMEDONE
DJNZ R2, TIMEDONE
TIMEDONE:
Additions:
ACALL CALCULATE ; CALCULATE subroutine.
MOV MODE, #2 ; mode 1 = SUB
MOV MODE, #3 ; mode 1 = MULT
MOV MODE, #4 ; mode 4 = DIVIDE
MOV KEY, #0
RET
Deletions:
ACALL CALCULATE ; CALCULATE subroutine.
;MOV KEY, #'B'
;MOV KEY, #'C'
;MOV KEY, #'D'
RET
Additions:
ACALL INPUT ; INPUT subroutine.
ACALL CALCULATE ; CALCULATE subroutine.
ACALL OUTPUT ; OUTPUT subroutine.
SJMP CLEANUP
SUBB A, KBUFFERB
SJMP CLEANUP
MOV B, KBUFFERB
MUL AB
SJMP CLEANUP
MOV B, KBUFFERB
DIV AB
SJMP CLEANUP
CLEANUP:
RET
Deletions:
ACALL INPUT ; INPUT subroutine.
ACALL CALCULATE ; CALCULATE subroutine.
ACALL OUTPUT ; OUTPUT subroutine.
Additions:
LJMP CLEAR
ACALL INPUT ; INPUT subroutine.
ACALL CALCULATE ; CALCULATE subroutine.
ACALL OUTPUT ; OUTPUT subroutine.
SJMP MAIN ; Jump back to the beginning.
MOV KEY, #0FFH
LJMP CLEAR
MOV KEY, #0FFH
LJMP MAIN
TIMELOOPA:
Deletions:
SJMP MAIN
ACALL CLEAR
ACALL INPUT ; INPUT subroutine.
ACALL CALCULATE ; CALCULATE subroutine.
ACALL OUTPUT ; OUTPUT subroutine.
SJMP MAIN ; Jump back to the beginning.
MOV KEY, #0
ACALL CLEAR
MOV KEY, #0
TIMELOOPA:
Edited on
2009-01-14 14:22:07 by cmantito
[HOLY CRAP IT WORKS IT ADDS A SET AND THEN SEIZES BUT IT WORKS]
Additions:
MBUFFER EQU 10h
KBUFFERA EQU 18h
KBUFFERB EQU 20h
ACALL CLEAR
;;;;; MODE: 1 = ADD, 2 = SUB, 3 = MULT
;;;;; 4 = DIV, 9 = RESULT
MOV A, MODE
CJNE A, #0, STOREMODE
SJMP NONEOFTHEABOVE
STOREMODE:
CJNE A, #9, DOSTOREMODE
SJMP RESULT
DOSTOREMODE:
MOV MBUFFER, MODE
SJMP CALCULATEDONE
RESULT:
MOV A, MBUFFER
ADDITION:
CJNE A, #1, SUBTRACT
MOV A, KBUFFERA
ADD A, KBUFFERB
MOV DISPLAY, A
MOV KBUFFERA, #0
MOV KBUFFERB, #0
MOV MBUFFER, #0
MOV KEY, #0
SJMP CALCULATEDONE
SUBTRACT:
CJNE A, #2, MULTIPLY
MULTIPLY:
CJNE A, #3, DIVIDE
DIVIDE:
CJNE A, #4, RESULT
NONEOFTHEABOVE:
MOV A, MBUFFER
CJNE A, #0, STOREB
STOREA:
MOV KBUFFERA, KEY
SJMP STOREDONE
STOREB:
MOV KBUFFERB, KEY
STOREDONE:
MOV MODE, #1 ; mode 1 = ADD
ACALL CLEAR
MOV MODE, #9 ; mode 9 = EQUALS
;;;;; Subroutine: CLEAR
;;;;; Purpose: Reset the shit out of it.
CLEAR:
MOV KBUFFERA, #0
MOV KBUFFERB, #0
MOV MBUFFER, #0
MOV DISPLAY, #0
MOV KEY, #0
Deletions:
BUFFER EQU 20h
;MOV A, MODE
;CJNE A, #1, NOTADD
;MOV BUFFER, KEY
NOTADD:
;MOV A, DISPLAY
;CJNE A, #0FFH, OUTPUTNOW
;RET
OUTPUTNOW:
MOV MODE, #1
;MOV KEY, #'*'
;MOV KEY, #'#'
Edited on
2009-01-14 12:58:12 by cmantito
[removing implicit null on KEY and removing null checks. should stay set.]
Additions:
BUFFER EQU 20h
MOV MODE, #0
;MOV A, MODE
;CJNE A, #1, NOTADD
;MOV BUFFER, KEY
NOTADD:
CALCULATEDONE:
;MOV A, DISPLAY
;CJNE A, #0FFH, OUTPUTNOW
;RET
;MOV KEY, #0FFH
Deletions:
MOV A, DISPLAY
CJNE A, #0FFH, OUTPUTNOW
MOV KEY, #0FFH
Additions:
MOV DISPLAY, KEY
Deletions:
MOV KEY, DISPLAY
Additions:
DISPLAY EQU 28h
MODE EQU 38h
Deletions:
MODE EQU 31h
DISPLAY EQU 32h
Edited on
2009-01-14 12:38:12 by cmantito
[Fixed some overlapping var/sub name. Only outputs 0.]
Additions:
DISPLAY EQU 32h
CALCULATE:
MOV KEY, DISPLAY
MOV A, DISPLAY
MOV P1, DISPLAY
Deletions:
OUTPUT EQU 32h
MOV KEY, OUTPUT
MOV A, OUTPUT
MOV P1, OUTPUT
Additions:
MODE EQU 31h
OUTPUT EQU 32h
ACALL CALCULATE ; CALCULATE subroutine.
;;;;; Subroutine: CALCULATE
;;;;; Purpose: Prepares calculations for output.
MOV KEY, OUTPUT
MOV A, OUTPUT
MOV P1, OUTPUT
MOV MODE, #1
Deletions:
MOV A, KEY
MOV P1, KEY
;MOV KEY, #'A'
Additions:
CJNE A, #0FFH, OUTPUTNOW
Deletions:
CJNE A, #0FH, OUTPUTNOW
Edited on
2009-01-14 12:24:50 by cmantito
[Works again, but still only briefly displays the digit rather than persistantly like it's supposed t]
Additions:
CJNE A, #0FH, OUTPUTNOW
OUTPUTNOW:
Deletions:
CJNE A, #0FFH, OUTPUTSKIP
OUTPUTSKIP:
Edited on
2009-01-14 12:17:53 by cmantito
[This stopped it all from working, what changed was the CJNE and MOV before the output.]
Additions:
MOV A, KEY
CJNE A, #0FFH, OUTPUTSKIP
OUTPUTSKIP:
Additions:
KEY EQU 30h
MOV P2, #0
MOV P1, KEY
MOV P0, #0FFH
MOV KEY, #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
ROWONECOLONE:
CJNE A, #14, ROWONECOLTWO
MOV KEY, #1h
ROWONECOLTWO:
CJNE A, #13, ROWONECOLTHREE
MOV KEY, #2h
ROWONECOLTHREE:
CJNE A, #11, ROWONECOLFOUR
MOV KEY, #3h
ROWONECOLFOUR:
;MOV KEY, #'A'
ROWTWOCOLONE:
CJNE A, #14, ROWTWOCOLTWO
MOV KEY, #4h
ROWTWOCOLTWO:
CJNE A, #13, ROWTWOCOLTHREE
MOV KEY, #5h
ROWTWOCOLTHREE:
CJNE A, #11, ROWTWOCOLFOUR
MOV KEY, #6h
ROWTWOCOLFOUR:
;MOV KEY, #'B'
ROWTHREECOLONE:
CJNE A, #14, ROWTHREECOLTWO
MOV KEY, #7h
ROWTHREECOLTWO:
CJNE A, #13, ROWTHREECOLTHREE
MOV KEY, #8h
ROWTHREECOLTHREE:
CJNE A, #11, ROWTHREECOLFOUR
MOV KEY, #9h
ROWTHREECOLFOUR:
;MOV KEY, #'C'
ROWFOURCOLONE:
CJNE A, #14, ROWFOURCOLTWO
;MOV KEY, #'*'
ROWFOURCOLTWO:
CJNE A, #13, ROWFOURCOLTHREE
MOV KEY, #0h
ROWFOURCOLTHREE:
CJNE A, #11, ROWFOURCOLFOUR
;MOV KEY, #'#'
ROWFOURCOLFOUR:
;MOV KEY, #'D'
;;;;; Purpose: Produce a 58ms-ish delay on ACALL.
MOV R0, #92
MOV R1, #255
MOV R2, #50
TIMELOOPA:
DJNZ R0, TIMELOOPA
DJNZ R1, TIMELOOPB
TIMELOOPB:
CJNE R1, #0, TIMEDONE
DJNZ R2, TIMEDONE
TIMEDONE:
Deletions:
MOV P1, #009h ; 0x009 = 0b1001 (binary).
; Set
Port1 to 00001001
; (1s are high, 0s are low, ordered p1.7 - p1.0)
; p1.3 and p1.0 are high, display reads should read 9.
; (well actually, the display should read 9999 since
; we haven't defined anywhere which digit to update.)
; Placeholder.
;;;;; Purpose: Produce a 50ms delay on ACALL.
; Placeholder.
Additions:
Additions:
; At the very beginning, jump to 40H...
SJMP MAIN
; ...which is where our code begins.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN: ; Defines the MAIN loop.
ACALL INPUT ; INPUT subroutine.
ACALL OUTPUT ; OUTPUT subroutine.
SJMP MAIN ; Jump back to the beginning.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Subroutine: OUTPUT
;;;;; Purpose: Updates the display.
OUTPUT:
; p1.3 and p1.0 are high, display reads should read 9.
; (well actually, the display should read 9999 since
; we haven't defined anywhere which digit to update.)
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Subroutine: INPUT
;;;;; Purpose: Read buttons pressed on keypad.
INPUT:
; Placeholder.
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; Subroutine: TIMER
;;;;; Purpose: Produce a 50ms delay on ACALL.
TIMER:
; Placeholder.
RET
Deletions:
SJMP START
START:
SJMP MAIN ; Go to MAIN
;;;; SUBROUTINE: MAIN
MAIN: ; Define the MAIN subroutine..
; p1.3 and p1.0 are high, display reads 9s.
SJMP MAIN ; JUMP to the beginning.
Categories:
CategoryUni
$include (reg66x.inc)
ORG 0
SJMP START
ORG 40H
START:
SJMP MAIN ; Go to MAIN
;;;; SUBROUTINE: MAIN
MAIN: ; Define the MAIN subroutine..
MOV P1, #009h ; 0x009 = 0b1001 (binary).
; Set Port1 to 00001001
; (1s are high, 0s are low, ordered p1.7 - p1.0)
; p1.3 and p1.0 are high, display reads 9s.
SJMP MAIN ; JUMP to the beginning.
Categories:
CategoryUni