📄 1.s
字号:
.module _1.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文件夹\1.c
.dbfunc e delay_1us _delay_1us fV
.even
_delay_1us::
.dbline -1
.dbline 10
; #include <iom16v.h>
; #define clk 4 //pd4
; #define dat 3 //pd5
; #define load 5 //pd6
; #define load1 6 //pd7
; #define XTAL 4 //晶振频率,单位MHz
; #define uchar unsigned char
; /*******************************延时函数***********************************/
; void delay_1us(void) //1us延时函数
; {
.dbline 11
; asm("nop");
nop
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nus _delay_nus fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nus::
rcall push_gset2
mov R22,R16
mov R23,R17
.dbline -1
.dbline 15
; }
;
; void delay_nus(unsigned int n) //N us延时函数
; {
.dbline 16
; unsigned int i=0;
clr R20
clr R21
.dbline 17
; for (i=0;i<n;i++)
rjmp L6
L3:
.dbline 18
rcall _delay_1us
L4:
.dbline 17
subi R20,255 ; offset = 1
sbci R21,255
L6:
.dbline 17
cp R20,R22
cpc R21,R23
brlo L3
.dbline -2
L2:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 22
; delay_1us();
; }
;
; void delay_1ms(void) //1ms延时函数
; {
.dbline 24
clr R16
clr R17
rjmp L11
L8:
.dbline 24
L9:
.dbline 24
subi R16,255 ; offset = 1
sbci R17,255
L11:
.dbline 24
; unsigned int i;
; for (i=0;i<(unsigned int)(XTAL*143-2);i++);
ldi R24,570
ldi R25,2
cp R16,R24
cpc R17,R25
brlo L8
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nms::
rcall push_gset2
mov R22,R16
mov R23,R17
.dbline -1
.dbline 28
; }
;
; void delay_nms(unsigned int n) //N ms延时函数
; {
.dbline 29
; unsigned int i=0;
clr R20
clr R21
.dbline 30
; for (i=0;i<n;i++)
rjmp L16
L13:
.dbline 31
.dbline 32
rcall _delay_1ms
.dbline 33
L14:
.dbline 30
subi R20,255 ; offset = 1
sbci R21,255
L16:
.dbline 30
cp R20,R22
cpc R21,R23
brlo L13
.dbline -2
L12:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e write _write fV
; i -> R10,R11
; ch -> y+0
; x -> y+10
.even
_write::
rcall push_arg4
rcall push_gset3
sbiw R28,4
.dbline -1
.dbline 38
; {
; delay_1ms();
; }
; }
; /*******************************451写指令***********************************/
;
; void write(long int x)
; {
.dbline 41
; long int ch;
; int i;
; ch = x;
ldd R2,y+10
ldd R3,y+11
ldd R4,y+12
ldd R5,y+13
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 42
; PORTD&= ~(1<<clk); // CLK
cbi 0x12,4
.dbline 43
; PORTD&= ~(1<<load);
cbi 0x12,5
.dbline 44
; for(i=0; i<12; i++)
clr R10
clr R11
L18:
.dbline 45
; {
.dbline 46
; if(ch&0x001)
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
and R2,R20
and R3,R21
and R4,R22
and R5,R23
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
breq L22
.dbline 47
; {
.dbline 48
; PORTD|= 0x08; //数据为1 00100000
sbi 0x12,3
.dbline 49
; ch >>= 1;
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
asr R5
ror R4
ror R3
ror R2
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 50
; PORTD&= ~(1<<clk);
cbi 0x12,4
.dbline 51
; PORTD|= (1<<clk);
sbi 0x12,4
.dbline 53
;
; }
rjmp L23
L22:
.dbline 55
; else
; {
.dbline 56
; PORTD&= ~(0x08); //数据为0
cbi 0x12,3
.dbline 57
; ch >>= 1;
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
asr R5
ror R4
ror R3
ror R2
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 58
; PORTD&= ~(1<<clk);
cbi 0x12,4
.dbline 59
; PORTD|= (1<<clk);
sbi 0x12,4
.dbline 61
;
; }
L23:
.dbline 63
L19:
.dbline 44
mov R24,R10
mov R25,R11
adiw R24,1
mov R10,R24
mov R11,R25
.dbline 44
cpi R24,12
ldi R30,0
cpc R25,R30
brlt L18
.dbline 64
;
; }
; PORTD|= 1<<load;
sbi 0x12,5
.dbline -2
L17:
adiw R28,4
rcall pop_gset3
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r i 10 I
.dbsym l ch 0 L
.dbsym l x 10 L
.dbend
.dbfunc e write1 _write1 fV
; i -> R10,R11
; ch -> y+0
; x -> y+10
.even
_write1::
rcall push_arg4
rcall push_gset3
sbiw R28,4
.dbline -1
.dbline 69
;
; }
;
; void write1(long int x)
; {
.dbline 72
; long int ch;
; int i;
; ch = x;
ldd R2,y+10
ldd R3,y+11
ldd R4,y+12
ldd R5,y+13
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 73
; PORTD&= ~(1<<clk); // CLK
cbi 0x12,4
.dbline 74
; PORTD&= ~(1<<load1);
cbi 0x12,6
.dbline 75
; for(i=0; i<12; i++)
clr R10
clr R11
L25:
.dbline 76
; {
.dbline 77
; if(ch&0x001)
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
and R2,R20
and R3,R21
and R4,R22
and R5,R23
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
breq L29
.dbline 78
; {
.dbline 79
; PORTD|= 0x08; //数据为1 00100000
sbi 0x12,3
.dbline 80
; ch >>= 1;
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
asr R5
ror R4
ror R3
ror R2
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 81
; PORTD&= ~(1<<clk);
cbi 0x12,4
.dbline 82
; PORTD|= (1<<clk);
sbi 0x12,4
.dbline 84
;
; }
rjmp L30
L29:
.dbline 86
; else
; {
.dbline 87
; PORTD&= ~(0x08); //数据为0
cbi 0x12,3
.dbline 88
; ch >>= 1;
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
asr R5
ror R4
ror R3
ror R2
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 89
; PORTD&= ~(1<<clk);
cbi 0x12,4
.dbline 90
; PORTD|= (1<<clk);
sbi 0x12,4
.dbline 92
;
; }
L30:
.dbline 94
L26:
.dbline 75
mov R24,R10
mov R25,R11
adiw R24,1
mov R10,R24
mov R11,R25
.dbline 75
cpi R24,12
ldi R30,0
cpc R25,R30
brlt L25
.dbline 95
;
; }
; PORTD|= 1<<load1;
sbi 0x12,6
.dbline -2
L24:
adiw R28,4
rcall pop_gset3
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r i 10 I
.dbsym l ch 0 L
.dbsym l x 10 L
.dbend
.dbfunc e main _main fI
; m -> R10,R11
; n -> R10,R11
; i -> R10,R11
.even
_main::
.dbline -1
.dbline 101
;
; }
;
; /*******************************主函数***********************************/
; int main( void )
; {
.dbline 102
; int i=0,n=0,m=0;
clr R10
clr R11
.dbline 102
.dbline 102
.dbline 103
; DDRD=0xff; //设置为输出
ldi R24,255
out 0x11,R24
.dbline 104
; PORTD |=1<<dat;
sbi 0x12,3
.dbline 105
; PORTD &=~(1<<dat);
cbi 0x12,3
.dbline 106
; delay_nms(20);
ldi R16,20
ldi R17,0
rcall _delay_nms
.dbline 107
; PORTD |=1<<dat;
sbi 0x12,3
.dbline 108
; write(0x201);
ldi R16,1
ldi R17,2
ldi R18,0
ldi R19,0
rcall _write
.dbline 109
; write(0x401);
ldi R16,1
ldi R17,4
ldi R18,0
ldi R19,0
rcall _write
.dbline 110
; write(0x500);
ldi R16,0
ldi R17,5
ldi R18,0
ldi R19,0
rcall _write
.dbline 111
; write1(0x201);
ldi R16,1
ldi R17,2
ldi R18,0
ldi R19,0
rcall _write1
.dbline 112
; write1(0x401);
ldi R16,1
ldi R17,4
ldi R18,0
ldi R19,0
rcall _write1
.dbline 113
; write1(0x500);
ldi R16,0
ldi R17,5
ldi R18,0
ldi R19,0
rcall _write1
rjmp L33
L32:
.dbline 115
.dbline 116
ldi R16,255
ldi R17,8
ldi R18,0
ldi R19,0
rcall _write
.dbline 117
ldi R16,255
ldi R17,8
ldi R18,0
ldi R19,0
rcall _write1
.dbline 118
ldi R16,255
ldi R17,9
ldi R18,0
ldi R19,0
rcall _write1
.dbline 119
ldi R16,255
ldi R17,10
ldi R18,0
ldi R19,0
rcall _write1
.dbline 120
ldi R16,255
ldi R17,11
ldi R18,0
ldi R19,0
rcall _write1
.dbline 121
ldi R16,1000
ldi R17,3
rcall _delay_nms
.dbline 122
L33:
.dbline 114
rjmp L32
X0:
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbsym r m 10 I
.dbsym r n 10 I
.dbsym r i 10 I
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -