📄 shuma.s
字号:
.module shuma.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
_table::
.word 63
.word 6
.word 91
.word 79
.word 102
.word 109
.word 125
.word 7
.word 127
.word 111
.word 119
.word 124
.word 57
.word 94
.word 121
.word 113
.dbfile C:\icc\examples.avr\learn\shumaguan\shuma.c
.dbsym e table _table A[32:16]I
.area text(rom, con, rel)
.dbfile C:\icc\examples.avr\learn\shumaguan\shuma.c
.dbfunc e delay _delay fV
; i -> R20,R21
; j -> R22,R23
; MS -> R16,R17
.even
_delay::
xcall push_gset2
.dbline -1
.dbline 10
; #include <iom16v.h>
; #include <macros.h>
;
; #define uchar unsigned char
; #define uint unsigned int
; #pragma data:code
; const table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; void delay(uint MS)
; {
.dbline 12
; uint i,j;
; for( i=0;i<MS;i++)
clr R20
clr R21
xjmp L5
L2:
.dbline 13
clr R22
clr R23
xjmp L9
L6:
.dbline 13
L7:
.dbline 13
subi R22,255 ; offset = 1
sbci R23,255
L9:
.dbline 13
cpi R22,117
ldi R30,4
cpc R23,R30
brlo L6
L3:
.dbline 12
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 12
cp R20,R16
cpc R21,R17
brlo L2
.dbline -2
.dbline 14
; for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
; }
L1:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r j 22 i
.dbsym r MS 16 i
.dbend
.dbfunc e show _show fV
; num -> R20
; data -> R22
.even
_show::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 17
;
; void show(uchar data,uchar num)
; {
.dbline 18
; PORTB=table[data];
ldi R24,2
mul R24,R22
movw R30,R0
ldi R24,<_table
ldi R25,>_table
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
out 0x18,R30
.dbline 19
; PORTA|=BIT(3);//00001000
sbi 0x1b,3
.dbline 20
; PORTA&=~BIT(3);
cbi 0x1b,3
.dbline 22
;
; PORTB=0XFF;
ldi R24,255
out 0x18,R24
.dbline 23
; PORTB&=~BIT(num);//0XFE;
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R16
com R2
in R3,0x18
and R3,R2
out 0x18,R3
.dbline 24
; PORTA|=BIT(4);
sbi 0x1b,4
.dbline 25
; PORTA&=~BIT(4);
cbi 0x1b,4
.dbline 26
; delay(1);
ldi R16,1
ldi R17,0
xcall _delay
.dbline -2
.dbline 27
; }
L10:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r num 20 c
.dbsym r data 22 c
.dbend
.dbfunc e main _main fV
; j -> R20,R21
; i -> R22,R23
.even
_main::
.dbline -1
.dbline 29
; void main()
; {
.dbline 31
; uint i,j;
; DDRA=0XFF;
ldi R24,255
out 0x1a,R24
.dbline 32
; DDRB=0XFF;
out 0x17,R24
.dbline 33
; PORTA|=BIT(6);
sbi 0x1b,6
xjmp L13
L12:
.dbline 43
;
; /* PORTB=0X3F;
; PORTA|=BIT(3);//00001000
; PORTA&=~BIT(3);
;
; PORTB=0XFE;
; PORTA|=BIT(4);
; PORTA&=~BIT(4);*/
; while(1)
; {
.dbline 44
; for(j=0;j<600;j++)
clr R20
clr R21
xjmp L18
L15:
.dbline 45
; {
.dbline 46
; for(i=0;i<6;i++)
clr R22
clr R23
xjmp L22
L19:
.dbline 47
.dbline 48
mov R18,R22
ldi R24,100
ldi R25,0
push R18
push R19
movw R18,R24
movw R16,R20
xcall div16u
movw R2,R16
pop R19
pop R18
movw R16,R22
add R16,R2
adc R17,R3
ldi R24,6
ldi R25,0
push R18
push R19
movw R18,R24
xcall mod16u
pop R19
pop R18
xcall _show
.dbline 49
L20:
.dbline 46
subi R22,255 ; offset = 1
sbci R23,255
L22:
.dbline 46
cpi R22,6
ldi R30,0
cpc R23,R30
brlo L19
.dbline 50
L16:
.dbline 44
subi R20,255 ; offset = 1
sbci R21,255
L18:
.dbline 44
cpi R20,88
ldi R30,2
cpc R21,R30
brlo L15
.dbline 51
L13:
.dbline 42
xjmp L12
X0:
.dbline -2
.dbline 53
; {
; show((i+j/100)%6,i);
; }
; }
; }
;
; }
L11:
.dbline 0 ; func end
ret
.dbsym r j 20 i
.dbsym r i 22 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -