📄 lesson8.s
字号:
.module lesson8.c
.area text(rom, con, rel)
.dbfile I:\AVR视频教程\视频教程\lesson8\lesson8/Skey.c
.dbfunc e delay _delay fV
; i -> R20,R21
; j -> R22,R23
; ms -> R16,R17
.even
_delay::
rcall push_gset2
.dbline -1
.dbline 2
; #include <iom16v.h>
; #include <macros.h>
.dbline 4
; #define uchar unsigned char
; #define uint unsigned int
clr R20
clr R21
rjmp L5
L2:
.dbline 5
; #include "Skey.c"
.dbline 6
clr R22
clr R23
rjmp L9
L6:
.dbline 6
L7:
.dbline 6
subi R22,255 ; offset = 1
sbci R23,255
L9:
.dbline 6
cpi R22,117
ldi R30,4
cpc R23,R30
brlo L6
.dbline 7
L3:
.dbline 4
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 4
cp R20,R16
cpc R21,R17
brlo L2
.dbline -2
.dbline 8
; void spi_init()
; {
; DDRB|=0XA0;
L1:
rcall 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 key_press _key_press fc
; j -> R16
.even
_key_press::
.dbline -1
.dbline 11
; DDRA|=BIT(PA1);
; SPCR=0X57;
; }
.dbline 13
; void ad5300(uchar daword)
; {
in R24,0x11
ori R24,15
out 0x11,R24
.dbline 14
; uchar temp1=0,temp2=0,status;
in R24,0x12
ori R24,15
out 0x12,R24
.dbline 16
; temp1|=daword<<4;//1101 1001
; temp2|=daword>>4;
in R24,0x11
andi R24,240
out 0x11,R24
.dbline 18
;
; PORTA&=~BIT(PA1);
in R16,0x10
.dbline 19
; SPSR=0;
andi R16,15
.dbline 20
; SPDR=temp2;
cpi R16,15
brne L11
.dbline 21
; do
.dbline 22
; {
clr R16
rjmp L10
L11:
.dbline 25
; status=SPSR;
; }while(!(status&=0X80));
;
.dbline 26
; delay(10);
ldi R16,1
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r j 16 c
.dbend
.dbfunc e key_scan _key_scan fc
; key -> R20
.even
_key_scan::
rcall push_gset2
.dbline -1
.dbline 32
; SPSR=0;
; SPDR=temp1;
; do
; {
; status=SPSR;
; }while(!(status&=0X80));
.dbline 34
; SPSR=0;
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 35
; PORTA|=BIT(PA1);
rcall _key_press
tst R16
breq L14
.dbline 36
; }
.dbline 37
; void main()
in R20,0x10
.dbline 38
; {
andi R20,15
.dbline 39
; uchar i,data=128;
mov R22,R20
clr R23
cpi R22,7
ldi R30,0
cpc R23,R30
breq L22
cpi R22,11
ldi R30,0
cpc R23,R30
breq L21
cpi R22,13
ldi R30,0
cpc R23,R30
breq L20
cpi R22,14
ldi R30,0
cpc R23,R30
breq L19
rjmp L16
X0:
.dbline 40
; DDRB=0XFF;
L19:
.dbline 42
; spi_init();
; ad5300(0);
clr R20
.dbline 43
; ad5300(data);
rjmp L24
L20:
.dbline 45
;
; while(1)
ldi R20,1
.dbline 46
; {
rjmp L24
L21:
.dbline 48
; if(key_press())
; {
ldi R20,2
.dbline 49
; i=key_scan();
rjmp L24
L22:
.dbline 51
; switch(i)
; {
ldi R20,3
.dbline 52
; case 0:
rjmp L24
L16:
.dbline 54
; data=data+16;
; break;
clr R20
.dbline 55
; case 1:
L23:
.dbline 56
L24:
.dbline 56
; data=data-16;
rcall _key_press
tst R16
brne L23
.dbline 57
; break;
rjmp L15
L14:
.dbline 59
; case 2:
; data=0;
.dbline 60
; break;
clr R20
.dbline 61
; case 3:
L15:
.dbline 62
; data=255;
mov R16,R20
.dbline -2
L13:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r key 20 c
.dbend
.dbfile I:\AVR视频教程\视频教程\lesson8\lesson8\lesson8.c
.dbfunc e spi_init _spi_init fV
.even
_spi_init::
.dbline -1
.dbline 7
.dbline 8
in R24,0x17
ori R24,160
out 0x17,R24
.dbline 9
sbi 0x1a,1
.dbline 10
ldi R24,87
out 0xd,R24
.dbline -2
.dbline 11
L26:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ad5300 _ad5300 fV
; temp2 -> R22
; temp1 -> R20
; status -> R22
; daword -> R10
.even
_ad5300::
rcall push_gset3
mov R10,R16
.dbline -1
.dbline 13
.dbline 14
clr R20
.dbline 14
clr R22
.dbline 15
mov R24,R10
andi R24,#0x0F
swap R24
or R20,R24
.dbline 16
mov R24,R10
swap R24
andi R24,#0x0F
or R22,R24
.dbline 18
cbi 0x1b,1
.dbline 19
clr R2
out 0xe,R2
.dbline 20
out 0xf,R22
L28:
.dbline 22
.dbline 23
in R22,0xe
.dbline 24
L29:
.dbline 24
mov R24,R22
andi R24,128
mov R22,R24
tst R24
breq L28
.dbline 26
ldi R16,10
ldi R17,0
rcall _delay
.dbline 27
clr R2
out 0xe,R2
.dbline 28
out 0xf,R20
L31:
.dbline 30
.dbline 31
in R22,0xe
.dbline 32
L32:
.dbline 32
mov R24,R22
andi R24,128
mov R22,R24
tst R24
breq L31
.dbline 33
clr R2
out 0xe,R2
.dbline 34
ldi R16,10
ldi R17,0
rcall _delay
.dbline 35
sbi 0x1b,1
.dbline -2
.dbline 36
L27:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp2 22 c
.dbsym r temp1 20 c
.dbsym r status 22 c
.dbsym r daword 10 c
.dbend
.dbfunc e main _main fV
; data -> R20
; i -> R10
.even
_main::
.dbline -1
.dbline 38
.dbline 39
ldi R20,128
.dbline 40
ldi R24,255
out 0x17,R24
.dbline 41
rcall _spi_init
.dbline 42
clr R16
rcall _ad5300
.dbline 43
mov R16,R20
rcall _ad5300
rjmp L36
L35:
.dbline 46
.dbline 47
rcall _key_press
tst R16
breq L38
.dbline 48
.dbline 49
rcall _key_scan
mov R10,R16
.dbline 50
mov R22,R10
clr R23
cpi R22,0
cpc R22,R23
breq L43
X1:
cpi R22,1
ldi R30,0
cpc R23,R30
breq L44
cpi R22,2
ldi R30,0
cpc R23,R30
breq L45
cpi R22,3
ldi R30,0
cpc R23,R30
breq L46
rjmp L40
X2:
.dbline 51
L43:
.dbline 53
subi R20,240 ; addi 16
.dbline 54
rjmp L41
L44:
.dbline 56
subi R20,16
.dbline 57
rjmp L41
L45:
.dbline 59
clr R20
.dbline 60
rjmp L41
L46:
.dbline 62
ldi R20,255
.dbline 63
; break;
L40:
L41:
.dbline 65
; }
; ad5300(data);
mov R16,R20
rcall _ad5300
.dbline 66
; }
L38:
.dbline 67
L36:
.dbline 45
rjmp L35
X3:
.dbline -2
.dbline 68
; }
; }
L34:
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbsym r i 10 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -