
The flowchart that applies for this revision is available at
B164LFlowchart.
$include (reg66x.inc)
; B164L Group: Y53 Authors: KCL, ANG, MP
; Date: 29.10.2008 VERSION 1.0
; Summay: This is a framework for the ethernet project.
; Input: 3 buttons, "network data"
; Output: 3 LEDs, "network data"
; Assumptions: 11.0592
ORG 0
+SJMP START
ORG 40H
START:
MOV R1, #255 ; Initialise register R1 for the masterclock.
; 6 phases to each cycle.
MOV R2, #50 ; Initialise register R2 to count the cycles.
; 50 cycle counter.
SJMP MAIN ; Go to MAIN
;;;; SUBROUTINE: MAIN
MAIN: ; Define the MAIN subroutine..
ACALL COUNTERS
ACALL TIMING
ACALL TRANSMIT
ACALL RECEIVE
ACALL KEYBOARD
ACALL DISPLAY
SJMP MAIN ; JUMP to the beginning.
;;;;; IF ANY OF OUR COUNTERS < 1, FIX IT.
COUNTERS:
CJNE R1, #0, COMPARENEXT ;; If R1 IS NOT ZERO, JUMP TO COMPARENEXT, OTHERWISE:
MOV R1, #6 ;; MAKE IT 6.
COMPARENEXT:
CJNE R2, #0, COMPAREDONE ;; IF R2 IS NOT ZERO, JUMP TO COMPAREDONE, OTHERWISE:
MOV R2, #255 ;; MASTERCLOCK, COUNTDOWN TO 0
COMPAREDONE:
RET
;;;; ONE OF THESE = 1 PHASE OF 1 CYCLE.
TIMING:
MOV R0, #92 ;;ONE PHASE
TIMELORD: ;; ONE CLOCK TO COUNT 6 CYCLES
DJNZ R0, TIMELORD ;; IT LOOPS AROUND IN A CIRCLE UNTIL IT'S ZERO.
DJNZ R1, TIMELORDCONTINUED ;; COUNDOWN FROM 6 WHEN IT GETS TO ZERO, GO TO TIMELORDCONTINUED
TIMELORDCONTINUED: ;; ANOTHER CLOCK TO COUNT 50 CYCLES
CJNE R1, #0, TIMENEXT ;; IF R1 IS NOT ZERO, JUMP TO TIMENEXT, OTHERWISE:
DJNZ R2, TIMENEXT ;; COUNTDOWN FROM 50, R2, THEN GO TO TIMENEXT
TIMENEXT:
RET
TRANSMIT: ;;BREAKING THE LOOP, USING THE TWO COUNTERS SIMULTANEOUSLY,1.7 DOES STH WHEN ONE IS 2 AND THE OTHER IS 6
CJNE R1, #255, ENDTRANSMIT ;; TO TRANSMIT STH KEEP COMPARING UNTIL R1 IS NOT 2,IF IT IS NOT 2 THEN GO TO ENDTRANSMIT
CJNE R2, #50, ENDTRANSMIT ;; TO TRANSMIT STH KEEP COMAPRING UNTIL R2 IS NOT 6, IF IT NOT 6 GO TO ENDTRANSMIT
CPL P1.7 ;; If they ARE, toggle P1.7
ENDTRANSMIT:
RET ;; Back out.
RECEIVE:
CJNE R1, #255, ENDRECEIVE ;; If R1 != 4, jump to ENDRECEIVE
CJNE R2, #50, ENDRECEIVE ;; If R2 != 40, jump to ENDRECEIVE
CPL P1.6 ;; If they do though, toggle P1.6
ENDRECEIVE:
RET ;; Back out.
KEYBOARD:
CJNE R1, #255, ENDKEYBOARD ;; If R1 != 4, jump to ENDRECEIVE
CJNE R2, #50, ENDKEYBOARD ;; If R2 != 40, jump to ENDRECEIVE
CPL P1.5 ;; If they do though, toggle P1.5
ENDKEYBOARD:
RET ;; Back out.
DISPLAY: RET
END ; END the application.
Categories:
CategoryUni