$mod51 simple equ 0 ;1 definuje jednoduchsi iba s dvoma branami _0 equ 024h ;0 _1 equ 0e7h ;1 _2 equ 08ch ;2 _3 equ 085h ;3 _4 equ 047h ;4 _5 equ 015h ;5 _6 equ 014h ;6 _7 equ 0a7h ;7 _8 equ 004h ;8 _9 equ 005h ;9 _c equ 03ch _cc equ 0dch _e equ 01ch _f equ 01eh _k equ 05eh _l equ 07ch _m equ 026h _n equ 0d6h _o equ 0d4h _p equ 00eh _r equ 0deh _t equ 05ch _u equ 0f4h _i equ 0f7h _blank equ 0ffh TLAC0 equ P3.4 ;pin pre tla‡ˇtko MODE TLAC1 equ P3.5 ;pin pre tla‡ˇtko SET MODE equ ACC.0 ;tla‡ˇtko MODE SETS equ ACC.1 ;tla‡ˇtko SET speed data 30h tickCounter data 31h flashType data 32h state data 33h ; bitov‚ prˇznaky za‡ˇnajŁce na 20h ; 20h _reset: ljmp start org 3h ;interrupt INT0 external _int0: reti org 0bh ;interrupt T0 overflow _timer0: reti org 13h ;interrupt INT1 external reti org 1bh ;interrupt T1 overflow _timer1: ljmp __timer1 org 23h ;interrupt serial line reti start: mov r1,#20h mov r2,#60h clr a nuluj: mov @r1,a inc r1 djnz r2,nuluj mov TMOD,#10h setb TR1 ;spustenie ‡asova‡a setb EA ;povolenie preru¨ovacieho syst‚mu setb ET1 ;povolenie preru¨enia od TIMER1 mov sp,#08 ;inicializacia zasobnika mov speed,#7 ;priblizne jeden Hz mainLoop: call inkey jb MODE,incType jnb SETS,mainLoop dec speed mov a,speed cjne a,#2,mainloop mov speed,#20 jmp mainLoop incType: inc flashType mov state,#0 mov a,flashType xrl a,#7 jnz mainLoop mov flashType,a jmp mainLoop ;‡ˇtanie tla‡ˇtok A.0 = 1 ak bolo stla‡en‚ MODE ; A.1 = 1 ak SET inkey: clr a jb TLAC0,nostate call delay w1: jnb TLAC0,w1 call delay setb MODE ret nostate: jnb TLAC1,setSpeed ret setSpeed: call delay w2: jnb TLAC1,w2 call delay setb SETS ret delay: mov r7,#70h ;oneskorovacia slu‡ka delay4: clr a delay1: dec a jnz delay1 djnz r7,delay1 ret delay2: mov r7,#0 delay3: djnz r7,delay3 ret longdelay: mov r6,#10 w108: acall delay djnz r6,w108 ret __timer1: push acc push psw mov a,r0 push acc mov a,tickCounter jz next06 dec tickCounter jmp endTimer1 next06: mov tickCounter,speed mov a,flashType cjne a,#0,noProgram00 ; blikanie vsetkych LED sucasne mov a,state mov r0,#0 jb acc.0,next01 mov r0,#0ffh next01: mov p1,r0 mov p2,r0 mov p0,r0 jmp nextState noProgram00: cjne a,#1,noProgram01 ; blikanie vsetkych LED striedavo mov a,state mov r0,#055h mov r1,#0aah mov r2,#055h jb acc.0,next02 mov r0,#0aah mov r1,#055h mov r2,#0aah next02: mov p1,r0 mov p2,r1 mov p0,r2 jmp nextState noProgram01: cjne a,#2,noProgram02 ; postupne rosvecovanie vsetkych bran mov a,state if (simple=0) cjne a,#3,no_restart01 mov a,#0 mov state,a no_restart01: mov r0,#0ffh mov r1,#0ffh mov r2,#0ffh cjne a,#0,next03 mov r0,#0h next03: cjne a,#1,next04 mov r1,#0 next04: cjne a,#2,next05 mov r2,#0 next05: mov p1,r0 mov p2,r1 mov p0,r2 jmp nextState else cjne a,#2,no_restart01 mov a,#0 mov state,a no_restart01: mov r1,#0ffh mov r2,#0ffh cjne a,#0,next03 mov r1,#0h next03: cjne a,#1,next04 mov r2,#0 next04: mov p2,r1 mov p0,r2 jmp nextState endif noProgram02: cjne a,#3,noProgram03 ; behajuci bod mov a,state if (simple=0) cjne a,#24,no_restart02 mov a,#0 mov state,a no_restart02: mov r0,#0feh mov r1,#0ffh mov r2,#0ffh mov r3,a mov a,r3 jz writePort01 loop01: mov a,r0 setb c rlc a mov r0,a mov a,r1 rlc a mov r1,a mov a,r2 rrc a mov r2,a djnz r3,loop01 writePort01: mov p1,r0 mov p2,r1 mov p0,r2 mov a,tickCounter rr a rr a anl a,#3fh mov tickCounter,a jmp nextState else cjne a,#16,no_restart02 mov a,#0 mov state,a no_restart02: mov r1,#0feh mov r2,#0ffh mov r3,a mov a,r3 jz writePort01 loop01: setb c mov a,r1 rlc a mov r1,a mov a,r2 rrc a mov r2,a djnz r3,loop01 writePort01: mov p2,r1 mov p0,r2 mov a,tickCounter rr a rr a anl a,#3fh mov tickCounter,a jmp nextState endif noProgram03: cjne a,#4,noProgram04 ; behajuci bod opacny smer if (simple=0) mov a,state cjne a,#24,no_restart03 mov a,#0 mov state,a no_restart03: mov r0,#0ffh mov r1,#0ffh mov r2,#0feh mov r3,a mov a,r3 jz writePort02 loop02: mov a,r2 setb c rlc a mov r2,a mov a,r1 rrc a mov r1,a mov a,r0 rrc a mov r0,a djnz r3,loop02 writePort02: mov p1,r0 mov p2,r1 mov p0,r2 mov a,tickCounter rr a rr a rr a anl a,#1fh mov tickCounter,a jmp nextState else mov a,state cjne a,#16,no_restart03 mov a,#0 mov state,a no_restart03: mov r1,#0ffh mov r2,#0feh mov r3,a mov a,r3 jz writePort02 loop02: mov a,r2 setb c rlc a mov r2,a mov a,r1 rrc a mov r1,a djnz r3,loop02 writePort02: mov p2,r1 mov p0,r2 mov a,tickCounter rr a rr a rr a anl a,#1fh mov tickCounter,a jmp nextState endif noProgram04: cjne a,#5,noProgram05 ; behajuce 3 body mov a,state cjne a,#8,no_restart04 mov a,#0 mov state,a no_restart04: mov r0,#0feh mov r1,#0feh mov r2,#07fh mov r3,a mov a,r3 jz writePort03 loop03: mov a,r0 setb c rlc a mov r0,a mov a,r1 setb c rlc a mov r1,a mov a,r2 setb c rrc a mov r2,a djnz r3,loop03 writePort03: mov p1,r0 mov p2,r1 mov p0,r2 mov a,tickCounter rr a rr a anl a,#3fh mov tickCounter,a jmp nextState noProgram05: cjne a,#6,noProgram06 ; behajuce 3 body mov a,state cjne a,#8,no_restart05 mov a,#0 mov state,a no_restart05: mov r0,#07fh mov r1,#07fh mov r2,#0feh mov r3,a mov a,r3 jz writePort04 loop04: mov a,r2 setb c rlc a mov r2,a mov a,r1 setb c rrc a mov r1,a mov a,r0 setb c rrc a mov r0,a djnz r3,loop04 writePort04: mov p1,r0 mov p2,r1 mov p0,r2 mov a,tickCounter rr a rr a rr a anl a,#1fh mov tickCounter,a jmp nextState noProgram06: nextState: inc state endTimer1: clr TF1 enddis: pop acc mov r0,a pop psw pop acc reti end