$MOD51 ORG 0 ; Po restarte bude program bezat od tadialto ORA EQU P1.0 ; Do ORA sme si definovali linku P1.0, vstup A hradla OR ORB EQU P1.1 ; Do ORB sme si definovali linku P1.1, vstup B hradla OR ORY EQU P1.2 ; Do ORY sme si definovali linku P1.2, vystup Y hradla OR NORA EQU P1.3 ; Do NORA sme si definovali linku P1.3, vstup A hradla NOR NORB EQU P1.4 ; Do NORB sme si definovali linku P1.4, vstup B hradla NOR NORY EQU P1.5 ; Do NORY sme si definovali linku P1.5, vystup Y hradla NOR ANDA EQU P3.0 ; Do ANDA sme si definovali linku P3.0, vstup A hradla AND ANDB EQU P3.1 ; Do ANDB sme si definovali linku P3.1, vstup B hradla AND ANDY EQU P3.2 ; Do ANDY sme si definovali linku P3.2, vystup Y hradla AND NANDA EQU P3.3 ; Do NANDA sme si definovali linku P3.3, vstup A hradla NAND NANDB EQU P3.4 ; Do NANDB sme si definovali linku P3.4, vstup B hradla NAND NANDY EQU P3.5 ; Do NANDY sme si definovali linku P3.5, vystup Y hradla NAND INVA EQU P1.6 ; Do INVA sme si definovali linku P1.6, vstup A hradla Invertor INVY EQU P1.7 ; Do INYY sme si definovali linku P1.7, vystup Y hradla Invertor OR1: JB ORA,OR2 ; Zisti stav P1.0, ak je log 1, tak skoci na OR2 MOV A,#0 ; Zapise do stradaca A cislo 0 JMP OR3 ; Skoci na OR3 OR2: MOV A,#1 ; Zapise do stradaca A cislo 1 OR3: JB ORB,OR4 ; Zisti stav P1.1 ak je log 1 tak skoci na OR4 MOV R1,#0 ; Zapise do registra R1 cislo 0 JMP OR5 ; Skoci na OR5 OR4: MOV R1,#1 ; Zapise do registra R1 cislo 1 OR5: ORL A,R1 ; Logicky scita stradac A a register R1 a vysledok zapise do stradaca A JNB ACC.0,OR6 ; Zisti stav nulteho bitu (A7 ... A1,A0) stradaca A, ak je log 1 skoci na OR6 SETB ORY ; Nastavi log 1 na linku P1.2 JMP NOR1 ; Skoci na NOR1 OR6: CLR ORY ; Nastavi log 0 na linke P1.2 NOR1: JB NORA,NOR2 ; *************************************************************** MOV A,#0 ; *************************************************************** JMP NOR3 ; *** To iste ako v OR1 az OR4, s tym rozdielom ze pracuje *** NOR2: MOV A,#1 ; *** *** NOR3: JB NORB,NOR4 ; *** s vyvodmi hradla NOR, P1.3, P1.4, P1.5 *** MOV R1,#0 ; *** *** JMP NOR5 ; *************************************************************** NOR4: MOV R1,#1 ; *************************************************************** NOR5: ORL A,R1 ; Logicky scita stradac A a register R1 a vysledok zapise do stradaca A CPL A ; Vysledok v stradaci neguje, log obrati (0->1, 1->0) JNB ACC.0,NOR6 ; *************************************************************** SETB NORY ; *** To iste ako v OR 5 len s tym rozdielom pacuje *** JMP AND1 ; *** s vyvodom hradla NOR, P1.5 *** NOR6: CLR NORY ; *************************************************************** AND1: JB ANDA,AND2 MOV A,#0 JMP AND3 AND2: MOV A,#1 AND3: JB ANDB,AND4 MOV R1,#0 JMP AND5 AND4: MOV R1,#1 AND5: ANL A,R1 ; Logicky sucin stradaca A, registra R1 a vysledok zapise do stradaca A JNB ACC.0,AND6 SETB ANDY JMP NAND1 AND6: CLR ANDY NAND1: JB NANDA,NAND2 MOV A,#0 JMP NAND3 NAND2: MOV A,#1 NAND3: JB NANDB,NAND4 MOV R1,#0 JMP NAND5 NAND4: MOV R1,#1 NAND5: ANL A,R1 CPL A JNB ACC.0,NAND6 SETB NANDY JMP INV1 NAND6: CLR NANDY INV1: JB INVA,INV2 MOV A,#0 JMP INV3 INV2: MOV A,#1 INV3: CPL A JNB ACC.0,INV4 SETB INVY JMP OR1 ; Vracia sa na OR1 INV4: CLR INVY JMP OR1 ; Vracia sa na OR1 END ; Koniec programu