-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmcpr2.asm
More file actions
132 lines (119 loc) · 2.23 KB
/
mcpr2.asm
File metadata and controls
132 lines (119 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
.include "./m328Pdef.inc"
start: ldi r16, 0b11100011
out DDRD, r16
ldi r16, 0b11111111
out DDRB, r16
ldi r16, 0b11111111
out DDRC, r16
ldi r18, 0b00000100
ldi r19, 0b00001000
ldi r20, 0b00010000
ldi r26, 0x00
mov r4, r26
input: in r17, PIND
call delay_ms
and r17, r18
breq input
call glow
ldi r22, 0x00
ldi r23, 0x00
ldi r24, 0x00
input1: call delay
in r21, PIND
call delay_ms
and r21, r18
brne input2
num1: in r17, PIND
call delay_ms
and r17, r19
breq num1
call glow
inc r22
rjmp input1
input2: call glow
input2a:call delay
in r21, PIND
call delay_ms
and r21, r18
brne operator
num2: in r17, PIND
call delay_ms
and r17, r19
breq num2
call glow
inc r23
rjmp input2a
operator: call glow
operatora: call delay
in r21, PIND
call delay_ms
and r21, r18
brne calculate
oper: in r17, PIND
call delay_ms
and r17, r20
breq oper
call glow
inc r24
rjmp operatora
calculate: call glow
subi r24, 0x01
breq addition
rjmp multiply
addition: add r22, r23
rjmp check
multiply: mul r22, r23
mov r22, r0
rjmp check
check: cpi r22, 0x0A
brlt display
subi r22, 0x0A
inc r26
rjmp check
delay: ldi r27,0xFF
ldi r28,0x3F
ldi r29,0x30
in: subi r27,0x01
sbci r28,0x00
sbci r29,0x00
brne in
ret
delay_ms:
ldi r27, 255
ldi r28, 211
ldi r29, 5
inner1:
subi r27,1
sbci r28,0
sbci r29,0
brne inner1
ret
glow:
out PORTD, r16
call delay_ms
out PORTD, r26
ret
display:
add r22, r4
breq glow1
again:
ldi r16, 0b00100000
out PORTD, r16
call delay
out PORTD, r4
call delay
dec r22
brne again
glow1:
add r26, r4
breq exit_loop
again1:
ldi r16, 0b01000000
out PORTD, r16
call delay
out PORTD, r4
call delay
dec r26
brne again1
exit_loop:
rjmp start