📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_exampl::
.blkb 5
.area idata
.byte 177,177,190,169,0
.area data(ram, con, rel)
.dbfile E:\programs\ICCAVR_program\LCD_lcm_12832k\main.c
.dbsym e exampl _exampl A[5:5]c
_exampl2::
.blkb 9
.area idata
.byte 'a,'b,'c,'d,'e,'f,'g,33,0
.area data(ram, con, rel)
.dbfile E:\programs\ICCAVR_program\LCD_lcm_12832k\main.c
.dbsym e exampl2 _exampl2 A[9:9]c
.area text(rom, con, rel)
.dbfile E:\programs\ICCAVR_program\LCD_lcm_12832k\main.c
.dbfunc e ledon _ledon fV
.even
_ledon::
.dbline -1
.dbline 22
; /**********************************************************************
; //ICC-AVR application builder : 2006-6-27 15:04:57
; // Target : M8
; // Crystal: 3.6864Mhz
; //
;
; ***********************************************************************/
;
; #include <iom8v.h>
; #include <macros.h>
;
; #define uchar unsigned char
; #define uint unsigned int
;
; #define setbit(x,y) (x|=(1<<y)) //set bit y in byte x
; #define clrbit(x,y) (x&=(~(1<<y))) //clear bit y in byte x
;
; uchar exampl[]="北京";
; uchar exampl2[]="abcdefg!";
;
; void ledon(void)
; {
.dbline 23
; DDRB = (1<<PB2);
ldi R24,4
out 0x17,R24
.dbline 24
; PORTB = (0<<PB2);
clr R2
out 0x18,R2
.dbline -2
.dbline 25
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ledoff _ledoff fV
.even
_ledoff::
.dbline -1
.dbline 28
;
; void ledoff(void)
; {
.dbline 29
; DDRB = (1<<PB2);
ldi R24,4
out 0x17,R24
.dbline 30
; PORTB = (1<<PB2);
out 0x18,R24
.dbline -2
.dbline 31
; }
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay _delay fV
; i -> R20,R21
; n -> R16,R17
.even
_delay::
rcall push_gset1
.dbline -1
.dbline 36
;
; //延时
; // Delay n*(5ms)
; void delay(uint n)
; {
rjmp L5
L4:
.dbline 38
; while(n--)
; {
.dbline 39
; uint i = 5236; //Delay 5ms
ldi R20,5236
ldi R21,20
L7:
.dbline 40
L8:
.dbline 40
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L7
tst R3
brne L7
X0:
.dbline 41
L5:
.dbline 37
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L4
tst R3
brne L4
X1:
.dbline 41
; while(i--);
; };
.dbline -2
.dbline 42
; }
L3:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 16 i
.dbend
.dbfunc e delayms _delayms fV
; j -> R20
; i -> R16,R17
.even
_delayms::
rcall push_gset1
.dbline -1
.dbline 46
;
;
; void delayms(uint i)
; {
rjmp L12
L11:
.dbline 48
; while(i--)
; {
.dbline 49
; uchar j = 125;//125;//250;
ldi R20,125
L14:
.dbline 50
L15:
.dbline 50
mov R2,R20
clr R3
subi R20,1
tst R2
brne L14
.dbline 51
L12:
.dbline 47
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L11
tst R3
brne L11
X2:
.dbline -2
.dbline 52
; while(j--);
; }
; }
L10:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 16 i
.dbend
.dbfunc e delayus _delayus fV
; i -> R16
.even
_delayus::
.dbline -1
.dbline 55
;
; void delayus(uchar i)
; {
L18:
.dbline 56
L19:
.dbline 56
; while(i--);
mov R2,R16
clr R3
subi R16,1
tst R2
brne L18
.dbline -2
.dbline 57
; }
L17:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e wait _wait fV
.even
_wait::
.dbline -1
.dbline 61
;
;
; void wait(void)
; {
.dbline 62
; DDRB = ((1<<PB0)|(1<<PB1));
ldi R24,3
out 0x17,R24
.dbline 63
; DDRC = 1<<PC1;
ldi R24,2
out 0x14,R24
.dbline 64
; DDRD = 0;
clr R2
out 0x11,R2
.dbline 66
; //PORTD = 0xff;
; PORTB = ((1<<PB0)|(0<<PB1)); //RW = 1 WRITE RS =0 INSTRUCTION
ldi R24,1
out 0x18,R24
.dbline 67
; PORTC = (1<<PC1); //E = 1
ldi R24,2
out 0x15,R24
.dbline 68
; DDRD = 0;
out 0x11,R2
L22:
.dbline 69
L23:
.dbline 69
; while(PIND&0x80);
sbic 0x10,7
rjmp L22
.dbline 70
; PORTB = ((0<<PB0)|(0<<PB1)); //RW = 0 WRITE RS =0 INSTRUCTION
clr R2
out 0x18,R2
.dbline -2
.dbline 71
; }
L21:
.dbline 0 ; func end
ret
.dbend
.dbfunc e send_i _send_i fV
; i -> R20
.even
_send_i::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 74
;
; void send_i(uchar i)
; {
.dbline 75
; DDRB = ((1<<PB0)|(1<<PB1));
ldi R24,3
out 0x17,R24
.dbline 76
; DDRC = 1<<PC1;
ldi R24,2
out 0x14,R24
.dbline 78
;
; wait();
rcall _wait
.dbline 79
; PORTB = ((0<<PB0)|(0<<PB1)); //RW = 0 WRITE RS =0 INSTRUCTION
clr R2
out 0x18,R2
.dbline 80
; DDRD = 0xff;
ldi R24,255
out 0x11,R24
.dbline 81
; PORTD = i;
out 0x12,R20
.dbline 85
; //setbit(PORTC,PC1);
; //NOP();
; //clrbit(PORTC,PC1);
; PORTC = (1<<PC1); //E = 1
ldi R24,2
out 0x15,R24
.dbline 86
; NOP();
nop
.dbline 87
; PORTC = (0<<PC1); //E = 0
out 0x15,R2
.dbline -2
.dbline 88
; }
L25:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e send_d _send_d fV
; d -> R20
.even
_send_d::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 91
;
; void send_d(uchar d)
; {
.dbline 92
; DDRB = ((1<<PB0)|(1<<PB1));
ldi R24,3
out 0x17,R24
.dbline 93
; DDRC = 1<<PC1;
ldi R24,2
out 0x14,R24
.dbline 95
;
; wait();
rcall _wait
.dbline 96
; PORTB = ((0<<PB0)|(1<<PB1)); //RW = 0 WRITE RS =1 DATA
ldi R24,2
out 0x18,R24
.dbline 97
; DDRD = 0xff;
ldi R24,255
out 0x11,R24
.dbline 98
; PORTD = d;
out 0x12,R20
.dbline 99
; PORTC = (1<<PC1); //E = 1
ldi R24,2
out 0x15,R24
.dbline 100
; NOP();
nop
.dbline 101
; PORTC = (0<<PC1); //E = 0
clr R2
out 0x15,R2
.dbline -2
.dbline 105
; //setbit(PORTC,PC1);
; //NOP();
; //clrbit(PORTC,PC1);
; }
L26:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r d 20 c
.dbend
.dbfunc e lw _lw fV
; d -> y+4
; y -> R22
; x -> R20
.even
_lw::
rcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 108
;
; void lw(uchar x,uchar y,uchar d)
; {
.dbline 109
; send_i(0xB8|y);
mov R16,R22
ori R16,184
rcall _send_i
.dbline 110
; send_i(0x40|x);
mov R16,R20
ori R16,64
rcall _send_i
.dbline 111
; send_d(d);
ldd R16,y+4
rcall _send_d
.dbline -2
.dbline 113
; //PORTD = 0xff;
; }
L27:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l d 4 c
.dbsym r y 22 c
.dbsym r x 20 c
.dbend
.dbfunc e lcd_init _lcd_init fV
; y -> <dead>
; x -> <dead>
.even
_lcd_init::
.dbline -1
.dbline 116
;
; void lcd_init(void)
; {
.dbline 118
; uchar x,y;
; delay(100); //>40ms 800
ldi R16,100
ldi R17,0
rcall _delay
.dbline 120
;
; send_i(0x30); //select basic instruction
ldi R16,48
rcall _send_i
.dbline 121
; delay(10); //>100us
ldi R16,10
ldi R17,0
rcall _delay
.dbline 122
; send_i(0x30); //set basic mode
ldi R16,48
rcall _send_i
.dbline 123
; delay(10); //>37us
ldi R16,10
ldi R17,0
rcall _delay
.dbline 124
; send_i(0x0c); //turn on lcd 0c
ldi R16,12
rcall _send_i
.dbline 125
; delay(10); //>100us
ldi R16,10
ldi R17,0
rcall _delay
.dbline 126
; send_i(0x01); //clr screen text
ldi R16,1
rcall _send_i
.dbline 127
; delay(20); //>10ms
ldi R16,20
ldi R17,0
rcall _delay
.dbline 128
; send_i(0x06); //enter dot setup 06
ldi R16,6
.dbline -2
.dbline 129
; }
L28:
.dbline 0 ; func end
rjmp _send_i
.dbsym l y 1 c
.dbsym l x 1 c
.dbend
.dbfunc e putstring _putstring fV
; j -> R20
; str -> R20,R21
; addr -> R22
.even
_putstring::
rcall push_gset2
movw R20,R18
mov R22,R16
.dbline -1
.dbline 132
;
; void putstring(uchar addr,uchar *str)
; {
.dbline 134
; uchar j;
; send_i(addr|0x80);
mov R16,R22
ori R16,128
rcall _send_i
.dbline 135
; for(j=0;j<3;j++)
clr R20
rjmp L33
L30:
.dbline 136
.dbline 137
ldi R24,<_exampl
ldi R25,>_exampl
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _send_d
.dbline 138
L31:
.dbline 135
inc R20
L33:
.dbline 135
cpi R20,3
brlo L30
.dbline -2
.dbline 139
; {
; send_d(exampl[j]);
; }
; }
L29:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r str 20 pc
.dbsym r addr 22 c
.dbend
.dbfunc e locateXY _locateXY fV
; temp -> R20
; posy -> R22
; posx -> R20
.even
_locateXY::
rcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 145
;
; /*=======================================================
; 显示光标定位
; =======================================================*/
;
; void locateXY( uchar posx,uchar posy) {
.dbline 149
;
; uchar temp;
;
; temp = posx & 0xf;
andi R20,15
.dbline 150
; posy &= 0x1;
andi R22,1
.dbline 151
; if ( posy )temp |= 0x40;
breq L35
.dbline 151
ori R20,64
L35:
.dbline 152
; temp |= 0x80;
ori R20,128
.dbline 153
; send_i(temp);
mov R16,R20
rcall _send_i
.dbline -2
.dbline 154
; }
L34:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r posy 22 c
.dbsym r posx 20 c
.dbend
.dbfunc e disponechar _disponechar fV
; wdata -> y+4
; y -> R22
; x -> R20
.even
_disponechar::
rcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 159
;
; /*=======================================================
; 按指定位置显示数出一个字符
; =======================================================*/
; void disponechar(uchar x,uchar y,uchar wdata) {
.dbline 161
;
; locateXY( x, y ); // 定位显示地址
mov R18,R22
mov R16,R20
rcall _locateXY
.dbline 162
; send_d( wdata ); // 写字符
ldd R16,y+4
rcall _send_d
.dbline -2
.dbline 163
; }
L37:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l wdata 4 c
.dbsym r y 22 c
.dbsym r x 20 c
.dbend
.dbfunc e eputstr _eputstr fV
; l -> R20
; i -> R22
; ptr -> R10,R11
; y -> R12
; x -> R14
.even
_eputstr::
rcall push_gset5
mov R12,R18
mov R14,R16
sbiw R28,1
ldd R10,y+11
ldd R11,y+12
.dbline -1
.dbline 168
;
; /*=======================================================
; 显示字符串
; =======================================================*/
; void eputstr(uchar x,uchar y, uchar *ptr) {
.dbline 169
; uchar i,l=0;
clr R20
rjmp L40
L39:
.dbline 170
.dbline 170
inc R20
.dbline 170
L40:
.dbline 170
; while (ptr[l] >31){l++;};
mov R30,R20
clr R31
add R30,R10
adc R31,R11
ldd R2,z+0
ldi R24,31
cp R24,R2
brlo L39
.dbline 170
.dbline 171
clr R22
rjmp L45
L42:
.dbline 171
; for (i=0;i<l;i++) {
.dbline 172
; disponechar(x++,y,ptr[i]);
mov R30,R22
clr R31
add R30,R10
adc R31,R11
ldd R2,z+0
std y+0,R2
mov R18,R12
mov R2,R14
mov R24,R2
subi R24,255 ; addi 1
mov R14,R24
mov R16,R2
rcall _disponechar
.dbline 173
; if ( x == 16 ){
mov R24,R14
cpi R24,16
brne L46
.dbline 173
.dbline 174
; x = 0; y ^= 1;
clr R14
.dbline 174
ldi R24,1
eor R12,R24
.dbline 175
; }
L46:
.dbline 176
L43:
.dbline 171
inc R22
L45:
.dbline 171
cp R22,R20
brlo L42
.dbline -2
.dbline 177
; }
; }
L38:
adiw R28,1
rcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r l 20 c
.dbsym r i 22 c
.dbsym r ptr 10 pc
.dbsym r y 12 c
.dbsym r x 14 c
.dbend
.dbfunc e main _main fV
.even
_main::
sbiw R28,2
.dbline -1
.dbline 180
;
; void main(void)
; {
.dbline 181
; ledon();
rcall _ledon
.dbline 182
; lcd_init();
rcall _lcd_init
.dbline 183
; delay(50);
ldi R16,50
ldi R17,0
rcall _delay
.dbline 184
; eputstr(0,0,exampl); // 上面一行显示一个预定字符串
ldi R24,<_exampl
ldi R25,>_exampl
std y+1,R25
std y+0,R24
clr R18
clr R16
rcall _eputstr
.dbline 185
; eputstr(0,0,exampl2);
ldi R24,<_exampl2
ldi R25,>_exampl2
std y+1,R25
std y+0,R24
clr R18
clr R16
rcall _eputstr
.dbline 187
; //putstring(0x80,exampl);
; delayus(500000);
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
mov R16,R20
rcall _delayus
.dbline 188
; delayus(500000);
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
mov R16,R20
rcall _delayus
.dbline 189
; delayus(500000);
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
mov R16,R20
rcall _delayus
.dbline 190
; delayus(500000);
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
mov R16,R20
rcall _delayus
.dbline 191
; delayus(500000);
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
mov R16,R20
rcall _delayus
.dbline 192
; delayus(500000);
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
mov R16,R20
rcall _delayus
.dbline 193
; delayus(500000);
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
mov R16,R20
rcall _delayus
.dbline 194
; delayus(500000);
ldi R20,32
ldi R21,161
ldi R22,7
ldi R23,0
mov R16,R20
rcall _delayus
.dbline 196
;
; ledoff();
rcall _ledoff
.dbline 197
; DDRD = 0xff;
ldi R24,255
out 0x11,R24
.dbline 198
; PORTD = 0;
clr R2
out 0x12,R2
.dbline 199
; wait();
rcall _wait
L49:
.dbline 200
L50:
.dbline 200
rjmp L49
X3:
.dbline -2
.dbline 201
; while(1);
; }
L48:
adiw R28,2
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -