📄 test.s
字号:
.module Test.c
.area text(rom, con, rel)
.dbfile F:\单片机编程\ICCAVR\7289prog\Test.c
.dbfunc e SETB _SETB fV
; k -> R20
.even
_SETB::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 8
; #include <iom16v.h>
; #define CS 0
; #define CLK 1
; #define DIO 2
; #define KEY 3
;
; void SETB(unsigned char k)
; {//这里的PORTB根据自己的程序修改
.dbline 9
; PORTB=PORTB|(1<<k);
ldi R16,1
mov R17,R20
xcall lsl8
in R2,0x18
or R2,R16
out 0x18,R2
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r k 20 c
.dbend
.dbfunc e CLRS _CLRS fV
; l -> R20
.even
_CLRS::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 13
; }
;
; void CLRS(unsigned char l)
; {//这里的PORTB根据自己的程序修改
.dbline 14
; PORTB=PORTB&~(1<<l);
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R16
com R2
in R3,0x18
and R3,R2
out 0x18,R3
.dbline -2
L2:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r l 20 c
.dbend
.dbfunc e Display _Display fV
; DataPos -> y+1
; datanum -> R14
; cToDIO -> R20
; iToDIO -> R10,R11
; num -> y+0
; transdata -> R22,R23
; wait -> R12
; position -> y+14
; Data -> y+12
.even
_Display::
xcall push_arg4
xcall push_gset5
sbiw R28,2
.dbline -1
.dbline 22
; }
;
; //初始化显示时Data=0xA4,position=0xFF
; //Data为显示数据,position为数据显示位置
; //Data为10进制或16进制数,只能一位一位发送
; //position为1-8的数字
; void Display(unsigned char Data,unsigned char position)
; {
.dbline 23
; unsigned char DataPos=~0;
ldi R24,255
std y+1,R24
.dbline 24
; unsigned char num=~0;
std y+0,R24
.dbline 25
; unsigned char wait=~0;
mov R12,R24
.dbline 26
; unsigned char datanum=~0;
.dbline 27
; unsigned int transdata=~0;
ldi R22,-1
ldi R23,-1
.dbline 28
; unsigned int iToDIO=~0;
ldi R24,-1
ldi R25,-1
movw R10,R24
.dbline 29
; unsigned char cToDIO=~0;
ldi R20,255
.dbline 30
; DDRB=0xFF;
out 0x17,R10
.dbline 31
; SETB(KEY);
ldi R16,3
xcall _SETB
.dbline 32
; SETB(CS);
clr R16
xcall _SETB
.dbline 33
; SETB(DIO);
ldi R16,2
xcall _SETB
.dbline 34
; datanum=2;
ldi R24,2
mov R14,R24
.dbline 35
; CLRS(CS);
clr R16
xcall _CLRS
.dbline 36
; if(Data!=0xA4)
ldd R24,y+12
cpi R24,164
brne X1
xjmp L4
X1:
.dbline 37
; {
.dbline 38
; DataPos=0xC8+position-1;
ldd R24,y+14
subi R24,56 ; addi 200
subi R24,1
std y+1,R24
.dbline 39
; transdata=DataPos;
mov R22,R24
clr R23
.dbline 40
; transdata=transdata<<8;
mov R23,R22
clr R22
.dbline 41
; transdata=transdata+Data;
ldd R2,y+12
clr R3
add R22,R2
adc R23,R3
xjmp L7
L6:
.dbline 43
; while(datanum--)
; {
.dbline 44
; wait=25;
ldi R24,25
mov R12,R24
L9:
.dbline 46
.dbline 46
.dbline 46
L10:
.dbline 45
; while(wait--)
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L9
.dbline 47
; {;}
; for(num=0;num<8;num++)
clr R0
std y+0,R0
xjmp L15
L12:
.dbline 48
; {
.dbline 49
; iToDIO=transdata&0x8000;
movw R24,R22
andi R24,0
andi R25,128
movw R10,R24
.dbline 50
; transdata=transdata<<1;
lsl R22
rol R23
.dbline 51
; if(iToDIO==0x0000)
cpi R24,0
cpc R24,R25
brne L16
X0:
.dbline 52
; {
.dbline 53
; CLRS(DIO);
ldi R16,2
xcall _CLRS
.dbline 54
; }
xjmp L17
L16:
.dbline 56
; else
; {
.dbline 57
; SETB(DIO);
ldi R16,2
xcall _SETB
.dbline 58
; }
L17:
.dbline 59
; SETB(CLK);
ldi R16,1
xcall _SETB
.dbline 60
; wait=4;
ldi R24,4
mov R12,R24
L18:
.dbline 62
.dbline 62
.dbline 62
L19:
.dbline 61
; while(wait--)
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L18
.dbline 63
; {;}
; CLRS(CLK);
ldi R16,1
xcall _CLRS
.dbline 64
; wait=4;
ldi R24,4
mov R12,R24
L21:
.dbline 66
.dbline 66
.dbline 66
L22:
.dbline 65
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L21
.dbline 67
L13:
.dbline 47
ldd R0,y+0
inc R0
std y+0,R0
L15:
.dbline 47
ldd R24,y+0
cpi R24,8
brlo L12
.dbline 68
L7:
.dbline 42
mov R2,R14
clr R3
mov R24,R2
subi R24,1
mov R14,R24
tst R2
breq X2
xjmp L6
X2:
.dbline 69
; while(wait--)
; {;}
; }
; }
; }
xjmp L5
L4:
.dbline 71
; else
; {
.dbline 72
; wait=25;
ldi R24,25
mov R12,R24
L24:
.dbline 73
L25:
.dbline 73
; while(wait--);
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L24
.dbline 74
; for(num=0;num<8;num++)
clr R0
std y+0,R0
xjmp L30
L27:
.dbline 75
; {
.dbline 76
; cToDIO=Data&0x80;
ldd R20,y+12
andi R20,128
.dbline 77
; Data=Data<<1;
ldd R2,y+12
lsl R2
std y+12,R2
.dbline 78
; if(cToDIO==0x00)
tst R20
brne L31
.dbline 79
; {
.dbline 80
; CLRS(DIO);
ldi R16,2
xcall _CLRS
.dbline 81
; }
xjmp L32
L31:
.dbline 83
; else
; {
.dbline 84
; SETB(DIO);
ldi R16,2
xcall _SETB
.dbline 85
; }
L32:
.dbline 86
; SETB(CLK);
ldi R16,1
xcall _SETB
.dbline 87
; wait=4;
ldi R24,4
mov R12,R24
L33:
.dbline 88
L34:
.dbline 88
; while(wait--);
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L33
.dbline 89
; CLRS(CLK);
ldi R16,1
xcall _CLRS
.dbline 90
; wait=4;
ldi R24,4
mov R12,R24
L36:
.dbline 91
L37:
.dbline 91
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L36
.dbline 92
L28:
.dbline 74
ldd R0,y+0
inc R0
std y+0,R0
L30:
.dbline 74
ldd R24,y+0
cpi R24,8
brlo L27
.dbline 93
; while(wait--);
; }
; }
L5:
.dbline 94
; SETB(CS);
clr R16
xcall _SETB
.dbline -2
L3:
adiw R28,2
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l DataPos 1 c
.dbsym r datanum 14 c
.dbsym r cToDIO 20 c
.dbsym r iToDIO 10 i
.dbsym l num 0 c
.dbsym r transdata 22 i
.dbsym r wait 12 c
.dbsym l position 14 c
.dbsym l Data 12 c
.dbend
.dbfunc e main _main fV
; count -> R20,R21
.even
_main::
.dbline -1
.dbline 98
; }
;
; void main(void)
; {
.dbline 100
; unsigned int count;
; count=60000;
ldi R20,60000
ldi R21,234
L40:
.dbline 101
L41:
.dbline 101
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L40
tst R3
brne L40
X3:
xjmp L44
L43:
.dbline 104
;
; while(1)
; {
.dbline 105
; Display(0xA4,0xFF);
ldi R18,255
ldi R16,164
xcall _Display
.dbline 106
; count=30000;
ldi R20,30000
ldi R21,117
L46:
.dbline 107
L47:
.dbline 107
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L46
tst R3
brne L46
X4:
.dbline 108
; Display(8,1);
ldi R18,1
ldi R16,8
xcall _Display
.dbline 109
; count=30000;
ldi R20,30000
ldi R21,117
L49:
.dbline 110
L50:
.dbline 110
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L49
tst R3
brne L49
X5:
.dbline 111
; Display(7,2);
ldi R18,2
ldi R16,7
xcall _Display
.dbline 112
; count=30000;
ldi R20,30000
ldi R21,117
L52:
.dbline 113
L53:
.dbline 113
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L52
tst R3
brne L52
X6:
.dbline 114
; Display(6,3);
ldi R18,3
ldi R16,6
xcall _Display
.dbline 115
; count=30000;
ldi R20,30000
ldi R21,117
L55:
.dbline 116
L56:
.dbline 116
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L55
tst R3
brne L55
X7:
.dbline 117
; Display(5,4);
ldi R18,4
ldi R16,5
xcall _Display
.dbline 118
; count=30000;
ldi R20,30000
ldi R21,117
L58:
.dbline 119
L59:
.dbline 119
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L58
tst R3
brne L58
X8:
.dbline 120
; Display(4,5);
ldi R18,5
ldi R16,4
xcall _Display
.dbline 121
; count=30000;
ldi R20,30000
ldi R21,117
L61:
.dbline 122
L62:
.dbline 122
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L61
tst R3
brne L61
X9:
.dbline 123
; Display(3,6);
ldi R18,6
ldi R16,3
xcall _Display
.dbline 124
; count=30000;
ldi R20,30000
ldi R21,117
L64:
.dbline 125
L65:
.dbline 125
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L64
tst R3
brne L64
X10:
.dbline 126
; Display(2,7);
ldi R18,7
ldi R16,2
xcall _Display
.dbline 127
; count=30000;
ldi R20,30000
ldi R21,117
L67:
.dbline 128
L68:
.dbline 128
; while(count--);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L67
tst R3
brne L67
X11:
.dbline 129
; Display(1,8);
ldi R18,8
ldi R16,1
xcall _Display
.dbline 130
; count=30000;
ldi R20,30000
ldi R21,117
L70:
.dbline 131
L71:
.dbline 131
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L70
tst R3
brne L70
X12:
.dbline 132
L44:
.dbline 103
xjmp L43
X13:
.dbline -2
L39:
.dbline 0 ; func end
ret
.dbsym r count 20 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -