?? lesson9.s
字號(hào):
.module LESSON9.C
.area text(rom, con, rel)
.dbfile I:\AVR視頻教程\視頻教程\lesson9\LESSON9/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
;
; #define START 0X08
; #define MT_SLA_ACK 0X18
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
; #define MT_DATA_ACK 0X28
;
; #define Start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)) //產(chǎn)生START信號(hào)
.dbline 13
; #define Stop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)) //產(chǎn)生STOP信號(hào)
; #define Wait() while(!(TWCR&(1<<TWINT))) //等待當(dāng)前操作完成
in R24,0x11
ori R24,15
out 0x11,R24
.dbline 14
; #define TestACK() (TWSR&0xF8) //取出狀態(tài)碼
in R24,0x12
ori R24,15
out 0x12,R24
.dbline 16
; #define SetACK() (TWCR|=(1<<TWEA)) //產(chǎn)生ACK
; #define Writebyte(twi_d) {TWDR=(twi_d);TWCR=(1<<TWINT)|(1<<TWEN);} //發(fā)送一個(gè)字節(jié)(twi_d為寫(xiě)入的數(shù)據(jù))
in R24,0x11
andi R24,240
out 0x11,R24
.dbline 18
;
; void twi_init()
in R16,0x10
.dbline 19
; {
andi R16,15
.dbline 20
; TWBR=0X20;
cpi R16,15
brne L11
.dbline 21
; TWSR=0;
.dbline 22
; TWCR=0X44;
clr R16
rjmp L10
L11:
.dbline 25
; }
; uchar AD5161_writeB(uchar devadd,uchar cmd,uchar rdata)
; {
.dbline 26
; Start();
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
; Wait();
; if(TestACK()!=START)
; {
; return 0;
; }
; Writebyte(devadd);
.dbline 34
; Wait();
; if(TestACK()!=MT_SLA_ACK)
ldi R16,10
ldi R17,0
rcall _delay
.dbline 35
; {
rcall _key_press
tst R16
breq L14
.dbline 36
; return 0;
.dbline 37
; }
in R20,0x10
.dbline 38
; Writebyte(cmd);
andi R20,15
.dbline 39
; Wait();
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
; if(TestACK()!=MT_DATA_ACK)
L19:
.dbline 42
; {
; return 0;
clr R20
.dbline 43
; }
rjmp L24
L20:
.dbline 45
; Writebyte(rdata);
; Wait();
ldi R20,1
.dbline 46
; if(TestACK()!=MT_DATA_ACK)
rjmp L24
L21:
.dbline 48
; {
; return 0;
ldi R20,2
.dbline 49
; }
rjmp L24
L22:
.dbline 51
; Stop();
; delay(10);
ldi R20,3
.dbline 52
; return 1;
rjmp L24
L16:
.dbline 54
; }
;
clr R20
.dbline 55
; void main()
L23:
.dbline 56
L24:
.dbline 56
; {
rcall _key_press
tst R16
brne L23
.dbline 57
; uchar i,data=0;
rjmp L15
L14:
.dbline 59
; twi_init();
; AD5161_writeB(0X58,0,data);
.dbline 60
; while(1)
clr R20
.dbline 61
; {
L15:
.dbline 62
; if(key_press())
mov R16,R20
.dbline -2
L13:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r key 20 c
.dbend
.dbfile I:\AVR視頻教程\視頻教程\lesson9\LESSON9\LESSON9.C
.dbfunc e twi_init _twi_init fV
.even
_twi_init::
.dbline -1
.dbline 19
.dbline 20
ldi R24,32
out 0x0,R24
.dbline 21
clr R2
out 0x1,R2
.dbline 22
ldi R24,68
out 0x36,R24
.dbline -2
.dbline 23
L26:
.dbline 0 ; func end
ret
.dbend
.dbfunc e AD5161_writeB _AD5161_writeB fc
; rdata -> y+4
; cmd -> R20
; devadd -> R22
.even
_AD5161_writeB::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 25
.dbline 26
ldi R24,164
out 0x36,R24
L28:
.dbline 27
L29:
.dbline 27
in R2,0x36
sbrs R2,7
rjmp L28
.dbline 28
in R24,0x1
andi R24,248
cpi R24,8
breq L31
.dbline 29
.dbline 30
clr R16
rjmp L27
L31:
.dbline 32
.dbline 32
out 0x3,R22
.dbline 32
ldi R24,132
out 0x36,R24
.dbline 32
.dbline 32
L33:
.dbline 33
L34:
.dbline 33
in R2,0x36
sbrs R2,7
rjmp L33
.dbline 34
in R24,0x1
andi R24,248
cpi R24,24
breq L36
.dbline 35
.dbline 36
clr R16
rjmp L27
L36:
.dbline 38
.dbline 38
out 0x3,R20
.dbline 38
ldi R24,132
out 0x36,R24
.dbline 38
.dbline 38
L38:
.dbline 39
L39:
.dbline 39
in R2,0x36
sbrs R2,7
rjmp L38
.dbline 40
in R24,0x1
andi R24,248
cpi R24,40
breq L41
.dbline 41
.dbline 42
clr R16
rjmp L27
L41:
.dbline 44
.dbline 44
ldd R0,y+4
out 0x3,R0
.dbline 44
ldi R24,132
out 0x36,R24
.dbline 44
.dbline 44
L43:
.dbline 45
L44:
.dbline 45
in R2,0x36
sbrs R2,7
rjmp L43
.dbline 46
in R24,0x1
andi R24,248
cpi R24,40
breq L46
.dbline 47
.dbline 48
clr R16
rjmp L27
L46:
.dbline 50
ldi R24,148
out 0x36,R24
.dbline 51
ldi R16,10
ldi R17,0
rcall _delay
.dbline 52
ldi R16,1
.dbline -2
L27:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l rdata 4 c
.dbsym r cmd 20 c
.dbsym r devadd 22 c
.dbend
.dbfunc e main _main fV
; data -> R20
; i -> R10
.even
_main::
sbiw R28,1
.dbline -1
.dbline 56
.dbline 57
clr R20
.dbline 58
rcall _twi_init
.dbline 59
std y+0,R20
clr R18
ldi R16,88
rcall _AD5161_writeB
rjmp L50
L49:
.dbline 61
.dbline 62
rcall _key_press
tst R16
breq L52
.dbline 63
; {
.dbline 64
; i=key_scan();
rcall _key_scan
mov R10,R16
.dbline 66
;
; switch(i)
mov R22,R10
clr R23
cpi R22,0
cpc R22,R23
breq L57
X1:
cpi R22,1
ldi R30,0
cpc R23,R30
breq L58
cpi R22,2
ldi R30,0
cpc R23,R30
breq L59
cpi R22,3
ldi R30,0
cpc R23,R30
breq L60
rjmp L54
X2:
.dbline 67
; {
L57:
.dbline 69
; case 0:
; data=data-16;
subi R20,16
.dbline 70
; break;
rjmp L55
L58:
.dbline 72
; case 1:
; data=data+16;
subi R20,240 ; addi 16
.dbline 73
; break;
rjmp L55
L59:
.dbline 75
; case 2:
; data=0;
clr R20
.dbline 76
; break;
rjmp L55
L60:
.dbline 78
; case 3:
; data=255;
ldi R20,255
.dbline 79
; break;
L54:
L55:
.dbline 81
; }
; AD5161_writeB(0x58,0,data);
std y+0,R20
clr R18
ldi R16,88
rcall _AD5161_writeB
.dbline 82
; }
L52:
.dbline 83
L50:
.dbline 60
rjmp L49
X3:
.dbline -2
.dbline 84
; }
; }
L48:
adiw R28,1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbsym r i 10 c
.dbend
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -