📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile E:\avr\try\try3_162\main.c
.dbfunc e delay_us _delay_us fV
; x -> R20,R21
; z -> R16,R17
.even
_delay_us::
xcall push_gset1
.dbline -1
.dbline 14
; #include "iom162v.h"
;
; #define uint8 unsigned char
; #define uint16 unsigned int
;
; #define uint8 unsigned char
; #define uint16 unsigned int
;
; #define RS 0x01
; #define RW 0x02
; #define E 0x04
;
; void delay_us(uint16 z)
; {
.dbline 16
; uint16 x;
; for(;z>0;z--)
xjmp L5
L2:
.dbline 17
; {
.dbline 18
ldi R20,10
ldi R21,0
xjmp L9
L6:
.dbline 18
L7:
.dbline 18
subi R20,1
sbci R21,0
L9:
.dbline 18
cpi R20,0
cpc R20,R21
brne L6
X0:
.dbline 19
L3:
.dbline 16
subi R16,1
sbci R17,0
L5:
.dbline 16
cpi R16,0
cpc R16,R17
brne L2
X1:
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r x 20 i
.dbsym r z 16 i
.dbend
.dbfunc e lcd_busy _lcd_busy fV
.even
_lcd_busy::
.dbline -1
.dbline 25
; for(x=10;x>0;x--);
; }
;
; }
;
;
; void lcd_busy(void)
; {
.dbline 26
; DDRA=0x00;
clr R2
out 0x1a,R2
.dbline 27
; PORTA=0xff;
ldi R24,255
out 0x1b,R24
xjmp L12
L11:
.dbline 29
; while(1)
; {
.dbline 30
; PORTC&=~E;
cbi 0x15,2
.dbline 31
; PORTC&=~RS;
cbi 0x15,0
.dbline 32
; PORTC|=RW;
sbi 0x15,1
.dbline 34
; // delay_us(10);
; PORTC|=E;
sbi 0x15,2
.dbline 35
; if(!(PINA&0x80))break;
sbic 0x19,7
rjmp L14
.dbline 35
xjmp L13
L14:
.dbline 36
L12:
.dbline 28
xjmp L11
L13:
.dbline 37
; }
; DDRA=0xff;
ldi R24,255
out 0x1a,R24
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e lcd_wr_cmd _lcd_wr_cmd fV
; cmd -> R20
.even
_lcd_wr_cmd::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 41
; }
;
; void lcd_wr_cmd(uint8 cmd)
; {
.dbline 42
; lcd_busy();
xcall _lcd_busy
.dbline 43
; PORTC&=~RS;
cbi 0x15,0
.dbline 44
; PORTC&=~RW;
cbi 0x15,1
.dbline 45
; PORTA=cmd;
out 0x1b,R20
.dbline 46
; delay_us(50);
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 47
; PORTC|=E;
sbi 0x15,2
.dbline 48
; delay_us(50);
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 49
; PORTC&=~E;
cbi 0x15,2
.dbline -2
L16:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r cmd 20 c
.dbend
.dbfunc e lcd_wr_date _lcd_wr_date fV
; date -> R20
.even
_lcd_wr_date::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 53
; }
;
; void lcd_wr_date(uint8 date)
; {
.dbline 54
; lcd_busy();
xcall _lcd_busy
.dbline 55
; PORTC|=RS;
sbi 0x15,0
.dbline 56
; PORTC&=~RW;
cbi 0x15,1
.dbline 57
; PORTA=date;
out 0x1b,R20
.dbline 58
; delay_us(50);
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 59
; PORTC|=E;
sbi 0x15,2
.dbline 60
; delay_us(50);
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 61
; PORTC&=~E;
cbi 0x15,2
.dbline -2
L17:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r date 20 c
.dbend
.dbfunc e lcd_init _lcd_init fV
.even
_lcd_init::
.dbline -1
.dbline 65
; }
;
; void lcd_init(void)
; {
.dbline 66
; DDRA=0xff;
ldi R24,255
out 0x1a,R24
.dbline 67
; DDRC|=0x07;
in R24,0x14
ori R24,7
out 0x14,R24
.dbline 68
; lcd_wr_cmd(0x38);
ldi R16,56
xcall _lcd_wr_cmd
.dbline 69
; delay_us(300);
ldi R16,300
ldi R17,1
xcall _delay_us
.dbline 70
; lcd_wr_cmd(0x38);
ldi R16,56
xcall _lcd_wr_cmd
.dbline 71
; lcd_wr_cmd(0x06);
ldi R16,6
xcall _lcd_wr_cmd
.dbline 72
; lcd_wr_cmd(0x0c);
ldi R16,12
xcall _lcd_wr_cmd
.dbline 73
; lcd_wr_cmd(0x01);
ldi R16,1
xcall _lcd_wr_cmd
.dbline 74
; delay_us(500);
ldi R16,500
ldi R17,1
xcall _delay_us
.dbline 75
; DDRA=0xff;
ldi R24,255
out 0x1a,R24
.dbline 76
; DDRC|=0x07;
in R24,0x14
ori R24,7
out 0x14,R24
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbend
.dbfunc e lcd_wr_byte _lcd_wr_byte fV
; date -> R20
; addr -> R22
.even
_lcd_wr_byte::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 80
; }
;
; void lcd_wr_byte(uint8 addr,uint8 date)
; {
.dbline 81
; lcd_wr_cmd(0x80+addr);
mov R16,R22
subi R16,128 ; addi 128
xcall _lcd_wr_cmd
.dbline 82
; lcd_wr_date(date);
mov R16,R20
xcall _lcd_wr_date
.dbline 83
; delay_us(100);
ldi R16,100
ldi R17,0
xcall _delay_us
.dbline -2
L19:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r date 20 c
.dbsym r addr 22 c
.dbend
.dbfunc e lcd_wr_str _lcd_wr_str fV
; i -> R20
; len -> R22
; str -> R10,R11
; addr -> R12
.even
_lcd_wr_str::
xcall push_gset4
movw R10,R18
mov R12,R16
ldd R22,y+8
.dbline -1
.dbline 87
; }
;
; void lcd_wr_str(uint8 addr,uint8 str[],uint8 len)
; {
.dbline 88
; uint8 i=0;
clr R20
.dbline 89
; lcd_wr_cmd(0x80+addr);
mov R16,R12
subi R16,128 ; addi 128
xcall _lcd_wr_cmd
.dbline 90
; for(i=0;i<len;i=i+1)
xjmp L24
L21:
.dbline 91
.dbline 92
mov R30,R20
clr R31
add R30,R10
adc R31,R11
ldd R16,z+0
xcall _lcd_wr_date
.dbline 95
L22:
.dbline 90
inc R20
L24:
.dbline 90
cp R20,R22
brlo L21
.dbline -2
L20:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r len 22 c
.dbsym r str 10 pc
.dbsym r addr 12 c
.dbend
.area lit(rom, con, rel)
L26:
.byte 'h,'e,'l,'l,'o,32,'w,'o,'r,'d,33,0
.area text(rom, con, rel)
.dbfile E:\avr\try\try3_162\main.c
.dbfunc e main _main fV
; ss -> y+1
.even
_main::
sbiw R28,13
.dbline -1
.dbline 100
; {
; lcd_wr_date(str[i]);
; //i=i+1;
; // str=str+1;
; }
;
; }
;
; void main(void)
; {
.dbline 101
; uint8 ss[]="hello word!";
ldi R24,<L26
ldi R25,>L26
movw R30,R28
adiw R30,1
ldi R16,12
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 102
; lcd_init();
xcall _lcd_init
.dbline 103
; lcd_wr_str(0x01,ss,12);
ldi R24,12
std y+0,R24
movw R18,R28
subi R18,255 ; offset = 1
sbci R19,255
ldi R16,1
xcall _lcd_wr_str
.dbline 104
; lcd_wr_byte(0x03,'a');
ldi R18,97
ldi R16,3
xcall _lcd_wr_byte
L27:
.dbline 105
L28:
.dbline 105
xjmp L27
X2:
.dbline -2
L25:
adiw R28,13
.dbline 0 ; func end
ret
.dbsym l ss 1 A[12:12]c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -