📄 lesson8.lis
字号:
.module lesson8.c
.area text(rom, con, rel)
0000 .dbfile I:\AVR视频教程\视频教程\lesson8\lesson8/Skey.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 00D0 rcall push_gset2
0002 .dbline -1
0002 .dbline 2
0002 ; #include <iom16v.h>
0002 ; #include <macros.h>
0002 .dbline 4
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 4427 clr R20
0004 5527 clr R21
0006 0BC0 rjmp L5
0008 L2:
0008 .dbline 5
0008 ; #include "Skey.c"
0008 .dbline 6
0008 6627 clr R22
000A 7727 clr R23
000C 02C0 rjmp L9
000E L6:
000E .dbline 6
000E L7:
000E .dbline 6
000E 6F5F subi R22,255 ; offset = 1
0010 7F4F sbci R23,255
0012 L9:
0012 .dbline 6
0012 6537 cpi R22,117
0014 E4E0 ldi R30,4
0016 7E07 cpc R23,R30
0018 D0F3 brlo L6
001A .dbline 7
001A L3:
001A .dbline 4
001A 4F5F subi R20,255 ; offset = 1
001C 5F4F sbci R21,255
001E L5:
001E .dbline 4
001E 4017 cp R20,R16
0020 5107 cpc R21,R17
0022 90F3 brlo L2
0024 .dbline -2
0024 .dbline 8
0024 ; void spi_init()
0024 ; {
0024 ; DDRB|=0XA0;
0024 L1:
0024 00D0 rcall pop_gset2
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r i 20 i
0028 .dbsym r j 22 i
0028 .dbsym r ms 16 i
0028 .dbend
0028 .dbfunc e key_press _key_press fc
0028 ; j -> R16
.even
0028 _key_press::
0028 .dbline -1
0028 .dbline 11
0028 ; DDRA|=BIT(PA1);
0028 ; SPCR=0X57;
0028 ; }
0028 .dbline 13
0028 ; void ad5300(uchar daword)
0028 ; {
0028 81B3 in R24,0x11
002A 8F60 ori R24,15
002C 81BB out 0x11,R24
002E .dbline 14
002E ; uchar temp1=0,temp2=0,status;
002E 82B3 in R24,0x12
0030 8F60 ori R24,15
0032 82BB out 0x12,R24
0034 .dbline 16
0034 ; temp1|=daword<<4;//1101 1001
0034 ; temp2|=daword>>4;
0034 81B3 in R24,0x11
0036 807F andi R24,240
0038 81BB out 0x11,R24
003A .dbline 18
003A ;
003A ; PORTA&=~BIT(PA1);
003A 00B3 in R16,0x10
003C .dbline 19
003C ; SPSR=0;
003C 0F70 andi R16,15
003E .dbline 20
003E ; SPDR=temp2;
003E 0F30 cpi R16,15
0040 11F4 brne L11
0042 .dbline 21
0042 ; do
0042 .dbline 22
0042 ; {
0042 0027 clr R16
0044 01C0 rjmp L10
0046 L11:
0046 .dbline 25
0046 ; status=SPSR;
0046 ; }while(!(status&=0X80));
0046 ;
0046 .dbline 26
0046 ; delay(10);
0046 01E0 ldi R16,1
0048 .dbline -2
0048 L10:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbsym r j 16 c
004A .dbend
004A .dbfunc e key_scan _key_scan fc
004A ; key -> R20
.even
004A _key_scan::
004A 00D0 rcall push_gset2
004C .dbline -1
004C .dbline 32
004C ; SPSR=0;
004C ; SPDR=temp1;
004C ; do
004C ; {
004C ; status=SPSR;
004C ; }while(!(status&=0X80));
004C .dbline 34
004C ; SPSR=0;
004C ; delay(10);
004C 0AE0 ldi R16,10
004E 10E0 ldi R17,0
0050 D7DF rcall _delay
0052 .dbline 35
0052 ; PORTA|=BIT(PA1);
0052 EADF rcall _key_press
0054 0023 tst R16
0056 11F1 breq L14
0058 .dbline 36
0058 ; }
0058 .dbline 37
0058 ; void main()
0058 40B3 in R20,0x10
005A .dbline 38
005A ; {
005A 4F70 andi R20,15
005C .dbline 39
005C ; uchar i,data=128;
005C 642F mov R22,R20
005E 7727 clr R23
0060 6730 cpi R22,7
0062 E0E0 ldi R30,0
0064 7E07 cpc R23,R30
0066 99F0 breq L22
0068 6B30 cpi R22,11
006A E0E0 ldi R30,0
006C 7E07 cpc R23,R30
006E 69F0 breq L21
0070 6D30 cpi R22,13
0072 E0E0 ldi R30,0
0074 7E07 cpc R23,R30
0076 39F0 breq L20
0078 6E30 cpi R22,14
007A E0E0 ldi R30,0
007C 7E07 cpc R23,R30
007E 09F0 breq L19
0080 08C0 rjmp L16
0082 X0:
0082 .dbline 40
0082 ; DDRB=0XFF;
0082 L19:
0082 .dbline 42
0082 ; spi_init();
0082 ; ad5300(0);
0082 4427 clr R20
0084 .dbline 43
0084 ; ad5300(data);
0084 07C0 rjmp L24
0086 L20:
0086 .dbline 45
0086 ;
0086 ; while(1)
0086 41E0 ldi R20,1
0088 .dbline 46
0088 ; {
0088 05C0 rjmp L24
008A L21:
008A .dbline 48
008A ; if(key_press())
008A ; {
008A 42E0 ldi R20,2
008C .dbline 49
008C ; i=key_scan();
008C 03C0 rjmp L24
008E L22:
008E .dbline 51
008E ; switch(i)
008E ; {
008E 43E0 ldi R20,3
0090 .dbline 52
0090 ; case 0:
0090 01C0 rjmp L24
0092 L16:
0092 .dbline 54
0092 ; data=data+16;
0092 ; break;
0092 4427 clr R20
0094 .dbline 55
0094 ; case 1:
0094 L23:
0094 .dbline 56
0094 L24:
0094 .dbline 56
0094 ; data=data-16;
0094 C9DF rcall _key_press
0096 0023 tst R16
0098 E9F7 brne L23
009A .dbline 57
009A ; break;
009A 01C0 rjmp L15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -