![]() |
// counter and random program
int state, reg;
void delay(int a);
void move();
void random();
int main() {
int a, b, c, d, e;
a = 0; state = 0; reg = 45;
while (1) {
writePort0(~a++);
move();
random();
delay(1);
}
writePort2(85);
return 0;
}
void delay(int a) {
int b, c, d, e;
for (b = 0; b < a; b++) {
for (c = 0; c < 16;
c++) {
for (d = 0; d < 16; d++) {
for (e = 0; e < 100; e++) {}
}
}
}
return;
}
void move() {
int display;
if (state <= 7) display = 1 << state;
if (state > 7) display = 1 << (14-state);
writePort1(~display);
state += 1;
state %= 14;
return;
}
void random() {
reg = reg ^ (reg << 2);
writePort2(reg);
return;
}
;** memory location of Frame Pointer is 07H **
;
; static area and stack should lies between 08H
; and 7FH, otherwise data will be over written
ORG 0
MOV SP,#0aH
MOV 07H,#0aH
ACALL main
label000:
NOP
SJMP label000
main:
MOV A,#05H ; -- beginning of function
ADD A,SP ; -- allocate space for
temporary var
MOV SP,A
MOV A,#03H
ADD A,07H
PUSH A
MOV A,#00H
POP 00H
MOV @R0,A
MOV A,#08H
PUSH A
MOV A,#00H
POP 00H
MOV @R0,A
MOV A,#09H
PUSH A
MOV A,#2dH
POP 00H
MOV @R0,A
label0:
MOV A,#01H
CJNE A,#00H,label2
LJMP label1
label2:
MOV A,#03H
ADD A,07H
MOV R0,A
MOV A,@R0
INC @R0
CPL A
PUSH A
POP A
MOV P0,A ; -- writePort0
PUSH 07H
MOV 07H,SP
LCALL move
MOV SP,07H
POP 07H
PUSH 07H
MOV 07H,SP
LCALL random
MOV SP,07H
POP 07H
PUSH 07H
MOV 07H,SP
MOV A,#01H
PUSH A
LCALL delay
MOV SP,07H
POP 07H
LJMP label0
label1:
CLR C
MOV A,#55H
PUSH A
POP A
MOV P2,A ; -- writePort2
MOV A,#00H
MOV B,A
MOV A,#02H
ADD A,07H
MOV SP,A
MOV A,B
RET
delay:
MOV A,#04H ; -- beginning of function
ADD A,SP ; -- allocate space for
temporary var
MOV SP,A
MOV A,#04H
ADD A,07H
PUSH A
MOV A,#00H
POP 00H
MOV @R0,A
label3:
MOV A,#04H
ADD A,07H
MOV R0,A
MOV A,@00H
PUSH A
MOV A,#01H
ADD A,07H
MOV R0,A
MOV A,@00H
MOV R0,A
POP A
CJNE A,00H,label6
MOV A,#00H
LJMP label7
label6:
JC label8
MOV A,#00H
LJMP label7
label8:
MOV A,#01H
label7:
CLR C
CJNE A,#00H,label5
LJMP label4
label5:
MOV A,#05H
ADD A,07H
PUSH A
MOV A,#00H
POP 00H
MOV @R0,A
label9:
MOV A,#05H
ADD A,07H
MOV R0,A
MOV A,@00H
PUSH A
MOV A,#10H
MOV R0,A
POP A
CJNE A,00H,label12
MOV A,#00H
LJMP label13
label12:
JC label14
MOV A,#00H
LJMP label13
label14:
MOV A,#01H
label13:
CLR C
CJNE A,#00H,label11
LJMP label10
label11:
MOV A,#06H
ADD A,07H
PUSH A
MOV A,#00H
POP 00H
MOV @R0,A
label15:
MOV A,#06H
ADD A,07H
MOV R0,A
MOV A,@00H
PUSH A
MOV A,#10H
MOV R0,A
POP A
CJNE A,00H,label18
MOV A,#00H
LJMP label19
label18:
JC label20
MOV A,#00H
LJMP label19
label20:
MOV A,#01H
label19:
CLR C
CJNE A,#00H,label17
LJMP label16
label17:
MOV A,#07H
ADD A,07H
PUSH A
MOV A,#00H
POP 00H
MOV @R0,A
label21:
MOV A,#07H
ADD A,07H
MOV R0,A
MOV A,@00H
PUSH A
MOV A,#64H
MOV R0,A
POP A
CJNE A,00H,label24
MOV A,#00H
LJMP label25
label24:
JC label26
MOV A,#00H
LJMP label25
label26:
MOV A,#01H
label25:
CLR C
CJNE A,#00H,label23
LJMP label22
label23:
MOV A,#07H
ADD A,07H
MOV R0,A
MOV A,@R0
INC @R0
LJMP label21
label22:
CLR C
MOV A,#06H
ADD A,07H
MOV R0,A
MOV A,@R0
INC @R0
LJMP label15
label16:
CLR C
MOV A,#05H
ADD A,07H
MOV R0,A
MOV A,@R0
INC @R0
LJMP label9
label10:
CLR C
MOV A,#04H
ADD A,07H
MOV R0,A
MOV A,@R0
INC @R0
LJMP label3
label4:
CLR C
MOV A,#03H
ADD A,07H
MOV SP,A
MOV A,#00H
RET
move:
MOV A,#01H ; -- beginning of function
ADD A,SP ; -- allocate space for
temporary var
MOV SP,A
MOV R0,#08H
MOV A,@00H
PUSH A
MOV A,#07H
POP 00H
CJNE A,00H,label29
MOV A,#01H
LJMP label30
label29:
JC label31
MOV A,#01H
LJMP label30
label31:
MOV A,#00H
label30:
CLR C
CJNE A,#00H,label27
LJMP label28
label27:
MOV A,#03H
ADD A,07H
PUSH A
MOV A,#01H
PUSH A
MOV R0,#08H
MOV A,@00H
JZ label32
MOV R0,A
POP A
MOV R1,#FEH
label33:
RLC A
ANL A,R1
DJNZ R0,label33
LJMP label34
label32:
POP A
label34:
CLR C
POP 00H
MOV @R0,A
label28:
CLR C
MOV R0,#08H
MOV A,@00H
PUSH A
MOV A,#07H
POP 00H
CJNE A,00H,label37
MOV A,#00H
LJMP label38
label37:
JC label39
MOV A,#00H
LJMP label38
label39:
MOV A,#01H
label38:
CLR C
CJNE A,#00H,label35
LJMP label36
label35:
MOV A,#03H
ADD A,07H
PUSH A
MOV A,#01H
PUSH A
MOV A,#0eH
PUSH A
MOV R0,#08H
MOV A,@00H
MOV B,A
POP A
SUBB A,B
JZ label40
MOV R0,A
POP A
MOV R1,#FEH
label41:
RLC A
ANL A,R1
DJNZ R0,label41
LJMP label42
label40:
POP A
label42:
CLR C
POP 00H
MOV @R0,A
label36:
CLR C
MOV A,#03H
ADD A,07H
MOV R0,A
MOV A,@00H
CPL A
PUSH A
POP A
MOV P1,A ; -- writePort1
MOV A,#08H
PUSH A
MOV R0,#08H
MOV A,@00H
PUSH A
MOV A,#01H
POP B
ADD A,B
POP 00H
MOV @R0,A
MOV A,#08H
PUSH A
MOV R0,#08H
MOV A,@00H
PUSH A
MOV A,#0eH
MOV B,A
POP A
DIV AB
MOV A,B
POP 00H
MOV @R0,A
MOV A,#02H
ADD A,07H
MOV SP,A
MOV A,#00H
RET
random:
MOV A,#09H
PUSH A
MOV R0,#09H
MOV A,@00H
PUSH A
MOV R0,#09H
MOV A,@00H
PUSH A
MOV A,#02H
JZ label43
MOV R0,A
POP A
MOV R1,#FEH
label44:
RLC A
ANL A,R1
DJNZ R0,label44
LJMP label45
label43:
POP A
label45:
CLR C
POP 00H
XRL A,00H
POP 00H
MOV @R0,A
MOV R0,#09H
MOV A,@00H
PUSH A
POP A
MOV P2,A ; -- writePort2
MOV A,#02H
ADD A,07H
MOV SP,A
MOV A,#00H
RET
END
; +------------------------------------+
; | this is the end of assembly file |
; +------------------------------------+