; LC-11, SVETLOSNI EFEKTI V.1.0 sa 8048 ; MIKROKONTROLER serije INTEL 80C39 ; by: Stankovic Goran dipl.ing. Decembar 1989. ; www.qsl.net/yt2fsg goranstank@email.com ; Sistemske promenjive ; ; $1E 30 Brzina = R6 ; $1F 31 Takt = R7 ; $20 32 Pocetak patera L bajt ; $21 33 Pocetak patera H bajt ; $22 34 Duzina patera ; $23 35 Brzina patera ; $24 36 Broj INPUT bafer ; $25 37 INPUT bafer 1 ; $26 38 INPUT bafer 2 ; $27 39 INPUT bafer 3 ; $28 40 FLEG ; $29 41 Broj patera ; $2A 42 Copy Broj patera ; $2B 43 Copy Brzina ; $2C 44 Copy Takt ;------------------------------------------------------------ .ORG 0 RESET JMP Pocetak .ORG 3 INT JF1 INT_STOP SEL RB1 MOV R2,A ;Sacuvaj ACC i STATUS MOV A,PSW MOV R3,A DJNZ R6,HOP1 ;? BRZ=0 MOV R0,#35 ;BRZ=BRZINA PAT. MOV A,@R0 MOV R6,A MOV R0,#32 MOV A,@R0 INC A ADD A,R7 MOV R5,A ;u R5 stavi nizi bajt CALL UZMI_PODATAK CALL IZLAZ INC R7 ;INC TAKT MOV R0,#34 ;? TAKT=DUZ.PAT. MOV A,@R0 CPL A INC A ADD A,R7 JNZ HOP1 MOV R7,#0 ;TAKT=0 HOP1 MOV A,R3 MOV PSW,A MOV A,R2 SEL RB0 RETR INT_STOP MOV R4,A ;Sacuvaj ACC i STATUS MOV A,PSW MOV R5,A MOV A,R6 CALL IZLAZ MOV A,R5 MOV PSW,A MOV A,R4 RETR ;------------------------------------------------------------ Pocetak CLR A CALL IZLAZ ;Postavi sistemske promenjive MOV R0,#30 MOV R2,#20 RIP1 CLR A MOV @R0,A INC R0 DJNZ R2,RIP1 MOV R0,#30 MOV @R0,#10 INC R0 INC R0 MOV @R0,#03 INC R0 MOV @R0,#4 INC R0 MOV @R0,#8 INC R0 MOV @R0,#10 MOV R0,#40 MOV @R0,#7 CLR F1 CLR F0 EN I ;--------------------------------------------------- START ; Ispitaj tastere ORL P1,#255 ANL P1,#%11111110 MOV R2,#100 LOOP1 IN A,P1 MOV R3,A ADD A,#2 JZ HOP2 ISPIT1 DJNZ R2,LOOP1 MOV A,R3 JB4 SK11 MOV R3,#7 JMP BROJ SK11 JB5 SK12 MOV R3,#8 JMP BROJ SK12 JB6 SK13 MOV R3,#9 JMP BROJ SK13 JB7 HOP2 JMP FUN HOP2 ORL P1,#255 ANL P1,#%11111101 MOV R2,#100 LOOP2 IN A,P1 MOV R3,A ADD A,#3 JZ HOP3 ISPIT2 DJNZ R2,LOOP2 MOV A,R3 JB4 SK21 MOV R3,#4 JMP BROJ SK21 JB5 SK22 MOV R3,#5 JMP BROJ SK22 JB6 SK23 MOV R3,#6 JMP BROJ SK23 JB7 HOP3 JMP STOP HOP3 ORL P1,#255 ANL P1,#%11111011 MOV R2,#100 LOOP3 IN A,P1 MOV R3,A ADD A,#5 JZ HOP4 ISPIT3 DJNZ R2,LOOP3 MOV A,R3 JB4 SK31 MOV R3,#1 JMP BROJ SK31 JB5 SK32 MOV R3,#2 JMP BROJ SK32 JB6 SK33 MOV R3,#3 JMP BROJ SK33 JB7 HOP4 JMP BRZINA HOP4 ORL P1,#255 ANL P1,#%11110111 MOV R2,#100 LOOP4 IN A,P1 MOV R3,A ADD A,#9 JZ HOP5 ISPIT4 DJNZ R2,LOOP4 MOV A,R3 JB4 SK41 JMP MINUS SK41 JB5 SK42 MOV R3,#0 JMP BROJ SK42 JB6 SK43 JMP PLUS SK43 JB7 HOP5 JMP PATTER HOP5 JMP START ;------------------------------------------------------------ .ORG $100 ;Broj sa tastature u BAFER BROJ JF1 BROJ_STOP MOV R0,#36 MOV A,@R0 ADD A,#253 JZ IZLAZ1 INC @R0 MOV R0,#38 MOV R1,#39 MOV A,@R0 MOV @R1,A DEC R0 DEC R1 MOV A,@R0 MOV @R1,A MOV A,R3 MOV @R0,A MOV R0,#40 MOV @R0,#0 IZLAZ1 CALL DEBAG JMP START BROJ_STOP MOV A,R3 JNZ SL0 ;? 0 MOV R6,#0 JMP IZLAZ1 SL0 ADD A,#247 ;? 9 JNZ SL9 MOV R6,#255 JMP IZLAZ1 SL9 MOV A,R3 MOV R2,A CLR C CPL C CLR A LOOPR RLC A DJNZ R2,LOOPR XRL A,R6 MOV R6,A JMP IZLAZ1 ; Posalji podatke na port IZLAZ CLR C ANL P2,#%10001111 MOV R4,#8 SKOK3 RLC A JC SKOK1 ORL P2,#%00010000 JMP SKOK2 SKOK1 ORL P2,#%00100000 ORL P2,#%00110000 SKOK2 ANL P2,#%10001111 DJNZ R4,SKOK3 ORL P2,#%01000000 RET ;Uzmi podatak iz MEM UZMI_PODATAK MOV R0,#33 ;visi bajt MOV A,@R0 ADD A,#252 ;? A=4 JNZ JAG11 CALL C400 JMP JAG12 JAG11 MOV A,@R0 ADD A,#251 ;? A=5 JNZ JAG21 CALL C500 JMP JAG12 JAG21 MOV A,@R0 ADD A,#250 ;? A=6 JNZ JAG31 CALL C600 JMP JAG12 JAG31 MOV A,@R0 ADD A,#249 ;? A=7 JNZ JAG41 CALL C700 JMP JAG12 JAG41 MOV A,#$55 JAG12 RET ;Pritisnut je taster "B" BRZINA CLR F1 MOV R0,#36 MOV A,@R0 JZ BIZLAZ CALL BINARY JZ BIZLAZ ;? <0 MOV R0,#30 ;BRZ MOV @R0,A MOV R0,#35 ;BRZINA PAT. MOV @R0,A BIZLAZ CALL CLBAFER MOV R0,#40 MOV @R0,#56 ;FLEG=56 JMP IZLAZ1 ;Pritisnut je taster "P" PATTER CLR F1 MOV R0,#36 MOV A,@R0 JZ PIZLAZ CALL BINARY MOV R4,A ADD A,#128 ;? veci od 127 JC PIZLAZ MOV A,R4 MOV R1,#41 MOV @R1,A ;Broj patera CALL BR_PAT PIZLAZ CALL CLBAFER MOV R0,#40 MOV @R0,#7 ;FLEG=7 JMP IZLAZ1 BR_PAT MOV R4,A ADD A,R4 ;pomnozi br.pat. sa 2 MOV R4,A MOVP3 A,@A ;uzmi sa 3.table MOV R0,#32 ;prvi bajt (nizu adresu) MOV @R0,A ;i stavi u memoriju MOV R5,A MOV A,R4 INC A MOVP3 A,@A ;uzmi sa 3.table INC R0 ;drugi bajt MOV @R0,A CALL UZMI_PODATAK MOV R0,#34 MOV @R0,A ;Duzina patera INC R0 MOV R1,#30 MOV A,@R0 ;BRZ=BRZINA PAT. MOV @R1,A INC R1 MOV @R1,#0 ;TAKT=0 RET ;------------------------------------------------------------ ;Testira dali je pusten taster DEBAG MOV R2,#100 TESTP IN A,P1 JB4 SK51 JMP DEBAG SK51 JB5 SK52 JMP DEBAG SK52 JB6 SK53 JMP DEBAG SK53 JB7 SK54 JMP DEBAG SK54 DJNZ R2,TESTP ;Sacekaj 200 ms CEKAJ MOV R2,#52 SK62 MOV R3,#0 SK61 NOP NOP NOP NOP DJNZ R3,SK61 DJNZ R2,SK62 RET ;------------------------------------------------------------ .ORG $200 ;Pritisnut je taster "+" PLUS JF1 GOTO1 MOV R0,#40 MOV A,@R0 ADD A,#249 ;? FLEG=7 JZ PINC MOV A,@R0 ADD A,#200 ;? FLEG=56 JZ BINC CALL CLBAFER JMP GOTO1 PINC MOV R1,#41 MOV A,@R1 INC A MOV R7,A ADD A,#129 ;? >127 JZ GOTO1 MOV A,R7 MOV @R1,A CALL BR_PAT GOTO1 JMP IZLAZ1 BINC MOV R1,#35 MOV A,@R1 INC A JZ GOTO1 MOV @R1,A MOV R1,#30 MOV @R1,A TESTM3 MOV R2,#52 TESTM2 MOV R3,#0 TESTM1 IN A,P1 JB6 SKM DJNZ R3,TESTM1 DJNZ R2,TESTM2 JMP BINC JMP TESTM3 SKM MOV R2,#100 TESTM4 IN A,P1 JB6 SKM1 JMP TESTM3 SKM1 DJNZ R2,TESTM4 CALL CEKAJ JMP START ;Pritisnut je taster "-" MINUS JF1 GOTO2 MOV R0,#40 MOV A,@R0 ADD A,#249 ;? FLEG=7 JZ PDEC MOV A,@R0 ;? FLEG=56 ADD A,#200 JZ BDEC CALL CLBAFER JMP GOTO2 PDEC MOV R1,#41 MOV A,@R1 DEC A MOV R7,A INC A JZ GOTO2 ;? <0 MOV A,R7 MOV @R1,A CALL BR_PAT JMP GOTO2 BDEC MOV R1,#35 MOV A,@R1 DEC A JZ GOTO2 ;? <1 MOV @R1,A MOV R1,#30 MOV @R1,A GOTO2 JMP IZLAZ1 CLBAFER MOV R2,#4 MOV R0,#36 GOTO3 CLR A MOV @R0,A INC R0 DJNZ R2,GOTO3 RET ;Pritisnut je taster "F" FUN JF1 FUN_STOP FUN1 CLR F1 MOV R0,#41 ;Sacuvaj vrednost broja pattera MOV R1,#42 MOV A,@R0 MOV @R1,A MOV R0,#35 ; i brzine INC R1 MOV A,@R0 MOV @R1,A MOV @R0,#10 ;brzina=10 MOV R0,#31 ; i TAKT INC R1 MOV A,@R0 MOV @R1,A MOV R0,#41 MOV A,#3 ;broj pat.=3 MOV @R0,A CALL BR_PAT DEBAG1 MOV R2,#100 TESTP1 IN A,P1 JB7 SK154 JMP DEBAG1 SK154 DJNZ R2,TESTP1 MOV R0,#31 MOV R1,#44 MOV A,@R1 MOV @R0,A MOV R0,#35 DEC R1 MOV A,@R1 MOV @R0,A MOV R0,#41 DEC R1 MOV A,@R1 MOV @R0,A CALL BR_PAT CALL CLBAFER JF0 FUN2 JMP IZLAZ1 FUN2 CPL F1 JMP IZLAZ1 FUN_STOP CLR F0 CPL F0 JMP FUN1 ;Pritisnut je taster "S" STOP CLR F1 CPL F1 MOV R5,#0 CALL CLBAFER MOV R0,#40 MOV @R0,#0 JMP IZLAZ1 ;Pretvaranje dekadnog broja u binarni BINARY MOV R0,#39 MOV A,@R0 ADD A,#253 ;? <299 JC GOR1 MOV A,@R0 MOV R3,A ;mnozenje sa 100 MOV R2,#9 MNO101 ADD A,R3 DJNZ R2,MNO101 MOV R3,A MOV R2,#9 MNO102 ADD A,R3 DJNZ R2,MNO102 MOV R4,A DEC R0 ;mnozenje sa 10 MOV A,@R0 MOV R3,A MOV R2,#9 MNO10 ADD A,R3 DJNZ R2,MNO10 DEC R0 ADD A,@R0 ;desetice + jedinice ADD A,R4 ; + stotine JC GOR1 ;? >255 RET GOR1 MOV A,#255 RET ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;Tabla 3 : nalaze se podaci o pocetku pattera .ORG $300 .DB 3,4,12,4,21,4,36,4,39,4,42,4,45,4,48,4 .DB 51,4,54,4,60,4,66,4,73,4,78,4,83,4,90,4 .DB 100,4,110,4,123,4,140,4,147,4,154,4,163,4,168,4 .DB 173,4,180,4,192,4,204,4,215,4,3,5,15,5,27,5 .DB 36,5,57,5,63,5,69,5,74,5,83,5,100,5,117,5 .DB 134,5,151,5,163,5,175,5,186,5,205,5,218,5,231,5 .DB 3,6,24,6,38,6,52,6,59,6,82,6,89,6,104,6 .DB 121,6,140,6,164,6,181,6,198,6,227,6,3,7,24,7 .DB 59,7,74,7,103,7,132,7,170,7,208,7,241,7 ;Tabla 4 : nalaze se podaci o patteru ;1. bajt kaze o duzini pattera C400 .ORG $400 MOV A,R5 MOVP A,@A RET .DB 8,1,2,4,8,16,32,64,128 .DB 8,128,64,32,16,8,4,2,1 .DB 14,1,2,4,8,16,32,64,128,64,32,16,8,4,2 .DB 2,255,0 .DB 2,15,240 .DB 2,195,60 .DB 2,51,204 .DB 2,85,170 .DB 2,165,90 .DB 5,129,66,36,24,0 .DB 5,24,36,66,129,0 .DB 6,129,66,36,24,36,66 .DB 4,17,34,68,136 .DB 4,136,68,34,17 .DB 6,17,34,68,136,68,34 .DB 9,1,3,6,12,24,48,96,192,128 .DB 9,128,192,96,48,24,12,6,3,1 .DB 12,3,6,12,24,48,96,192,96,48,24,12,6 .DB 16,1,3,6,12,24,48,96,192,128,192,96,48,24,12,6,3 .DB 6,129,195,102,60,24,0 .DB 6,24,60,102,195,129,0 .DB 8,129,195,102,60,24,60,102,195 .DB 4,3,12,48,192 .DB 4,192,48,12,3 .DB 6,3,12,48,192,48,12 .DB 11,1,3,7,14,28,56,112,224,192,128,0 .DB 11,128,192,224,112,56,28,14,7,3,1,0 .DB 10,7,14,28,56,112,224,112,56,28,14 .DB 18,1,3,7,14,28,56,112,224,192,128,192,224,112,56,28,14,7,3 C500 .ORG $500 MOV A,R5 MOVP A,@A RET .DB 11,1,3,7,15,30,60,120,240,224,192,128 .DB 11,128,192,224,240,120,60,30,15,7,3,1 .DB 8,15,30,60,120,240,120,60,30 .DB 20,1,3,7,15,30,60,120,240,224,192,128,192,224,240,120,60,30,15,7,3 .DB 5,3,15,60,240,192 .DB 5,192,240,60,15,3 .DB 4,15,60,240,60 .DB 8,3,15,60,240,192,240,30,15 .DB 16,1,3,7,15,31,63,127,255,254,252,248,240,224,192,128,0 .DB 16,128,192,224,240,248,252,254,255,127,63,31,15,7,3,1,0 .DB 16,1,3,7,15,31,63,127,255,127,63,31,15,7,3,1,0 .DB 16,128,192,224,240,248,252,254,255,254,252,248,240,224,192,128,0 .DB 11,1,2,5,10,20,40,80,160,64,128,0 .DB 11,128,64,160,80,40,20,10,5,2,1,0 .DB 10,5,10,20,40,80,160,80,40,20,10 .DB 18,1,2,5,10,20,40,80,160,64,128,64,160,80,40,20,10,5,2 .DB 12,1,2,4,9,18,36,72,144,32,64,128,0 .DB 12,128,64,32,144,72,36,18,9,4,2,1,0 .DB 8,9,18,36,72,144,72,36,18 C600 .ORG $600 MOV A,R5 MOVP A,@A RET .DB 20,1,2,4,9,18,36,72,144,32,64,128,64,32,144,72,36,18,9,4,2 .DB 13,1,2,4,8,17,34,68,136,16,32,64,128,0 .DB 13,128,64,32,16,136,68,34,17,8,4,2,1,0 .DB 6,17,34,68,136,68,34 .DB 22,1,2,4,8,17,34,68,136,16,32,64,128,64,32,16,136,68,34,17,8,4,2 .DB 6,165,90,60,90,165,195 .DB 14,3,5,10,20,40,80,160,192,160,80,40,20,10,5 .DB 16,3,5,9,18,36,72,144,160,192,160,144,72,36,18,9,5 .DB 18,3,5,9,17,34,68,136,144,160,192,160,144,136,68,34,17,9,5 .DB 23,3,5,9,17,34,68,136,144,160,192,128,128,192,160,144,136,68,34,17,9,5,3,1 .DB 16,1,0,2,0,4,0,8,0,16,0,32,0,64,0,128,0 .DB 16,128,0,64,0,32,0,16,0,8,0,4,0,2,0,1,0 .DB 28,1,0,2,0,4,0,8,0,16,0,32,0,64,0,128,0,64,0,32,0,16,0,8,0,4,0,2,0 .DB 20,1,2,4,2,4,8,4,8,16,8,16,32,16,32,64,32,64,128,64,128 C700 .ORG $700 MOV A,R5 MOVP A,@A RET .DB 20,128,64,32,64,32,16,32,16,8,16,8,4,8,4,2,4,2,1,2,1 .DB 34,1,2,4,2,4,8,4,8,16,8,16,32,16,32,64,32,64,128,64,32,64,32,16,32,16,8,16,8,4,8 ;-> .DB 4,2,4,2 .DB 14,1,2,4,8,4,8,16,32,16,32,64,128,64,128 .DB 28,1,2,4,8,4,2,4,8,16,8,4,8,16,32,16,8,16,32,64,32,16,32,64,128,64,32,64,128 .DB 28,128,64,32,16,32,64,32,16,8,16,32,16,8,4,8,16,8,4,2,4,8,4,2,1,2,4,2,1 .DB 37,1,2,4,8,16,32,64,128,129,130,132,136,144,160,192,193,194,196,200,208 ;-> .DB 224,225,226,228,232,240,241,242,244,248,249,250,252,253,254,255,0 .DB 37,255,254,253,252,250,249,248,244,242,241,240,232,228,226,225,224,208 ;-> .DB 200,196,194,193,192,160,144,136,132,130,129,128,64,32,16,8,4,2,1,0 .DB 8,0,1,2,3,4,5,6,7 .DB 2,56,200 .END