📄 1602b_lcd_test.s
字号:
.module _1602B_LCD_TEST.c
.area lit(rom, con, rel)
_table::
.byte 48,49,50,51,52,53,54,55,56,57,0
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
.dbsym e table _table A[11:11]kc
_love::
.byte 'I,32,'L,'o,'v,'e,32,'U,44,'M,'e,'i,'M,'e,'i,33
.byte 0
.dbsym e love _love A[17:17]kc
.area data(ram, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
_h::
.blkb 1
.area idata
.byte 10
.area data(ram, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
.dbsym e h _h c
_m::
.blkb 1
.area idata
.byte 40
.area data(ram, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
.dbsym e m _m c
_s::
.blkb 1
.area idata
.byte 32
.area data(ram, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
.dbsym e s _s c
_ch1::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
.dbsym e ch1 _ch1 c
.area text(rom, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 15
; #include <iom8v.h>
; #include <macros.h>
; #include <math.h>
; #include "1602LCD.h"
; const unsigned char table[]="0123456789";
; const unsigned char love[]="I Love U,MeiMei!";
; unsigned char h=0x0A,m=0x28,s=0x20,temp1;
; unsigned char ch,ch1=0;
;
; //TIMER1 initialize - prescale:1024
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 1Hz
; // actual value: 1.000Hz (0.0%)
; void timer1_init(void)
; {
.dbline 16
; TCCR1B = 0x00; //stop
clr R2
out 0x2e,R2
.dbline 17
; TCNT1H = 0xF0; //setup
ldi R24,240
out 0x2d,R24
.dbline 18
; TCNT1L = 0xBE;
ldi R24,190
out 0x2c,R24
.dbline 19
; OCR1AH = 0x0F;
ldi R24,15
out 0x2b,R24
.dbline 20
; OCR1AL = 0x42;
ldi R24,66
out 0x2a,R24
.dbline 21
; OCR1BH = 0x0F;
ldi R24,15
out 0x29,R24
.dbline 22
; OCR1BL = 0x42;
ldi R24,66
out 0x28,R24
.dbline 23
; ICR1H = 0x0F;
ldi R24,15
out 0x27,R24
.dbline 24
; ICR1L = 0x42;
ldi R24,66
out 0x26,R24
.dbline 25
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 26
; TCCR1B = 0x04; //start Timer
ldi R24,4
out 0x2e,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 16
rjmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
rcall push_lset
sbiw R28,2
.dbline -1
.dbline 31
; }
;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 33
; //TIMER1 has overflowed
; TCNT1H = 0xF0; //reload counter high value
ldi R24,240
out 0x2d,R24
.dbline 34
; TCNT1L = 0xBE; //reload counter low value
ldi R24,190
out 0x2c,R24
.dbline 35
; s++;
lds R24,_s
subi R24,255 ; addi 1
sts _s,R24
.dbline 36
; if(s>0x3B)
ldi R24,59
lds R2,_s
cp R24,R2
brsh L3
.dbline 37
; {s=0x0;
.dbline 37
clr R2
sts _s,R2
.dbline 38
; m++;}
lds R24,_m
subi R24,255 ; addi 1
sts _m,R24
.dbline 38
L3:
.dbline 39
; if(m>0x3B)
ldi R24,59
lds R2,_m
cp R24,R2
brsh L5
.dbline 40
; {m=0x0;
.dbline 40
clr R2
sts _m,R2
.dbline 41
; h++;}
lds R24,_h
subi R24,255 ; addi 1
sts _h,R24
.dbline 41
L5:
.dbline 42
; if(h>0x0C)
ldi R24,12
lds R2,_h
cp R24,R2
brsh L7
.dbline 43
; {h=0x0;}
.dbline 43
clr R2
sts _h,R2
.dbline 43
L7:
.dbline 45
;
; write_s(s);
lds R16,_s
clr R17
rcall _write_s
.dbline 46
; write_m(m);
lds R16,_m
clr R17
rcall _write_m
.dbline 47
; write_h(h);
lds R16,_h
clr R17
rcall _write_h
.dbline 48
; LCD_set_xy(ch,1);
ldi R18,1
lds R16,_ch
rcall _LCD_set_xy
.dbline 49
; LCD_write_char(0,love[ch1]);
ldi R24,<_love
ldi R25,>_love
lds R30,_ch1
clr R31
add R30,R24
adc R31,R25
lpm R18,Z
clr R19
clr R16
clr R17
rcall _LCD_write_char
.dbline 50
; ch++;
lds R24,_ch
subi R24,255 ; addi 1
sts _ch,R24
.dbline 51
; ch1++;
lds R24,_ch1
subi R24,255 ; addi 1
sts _ch1,R24
.dbline 52
; if(ch>15)
ldi R24,15
lds R2,_ch
cp R24,R2
brsh L9
.dbline 53
; {ch=ch-16;
.dbline 53
mov R24,R2
subi R24,16
sts _ch,R24
.dbline 54
; }
L9:
.dbline 55
ldi R24,16
lds R2,_ch1
cp R24,R2
brsh L11
.dbline 56
.dbline 56
clr R2
sts _ch1,R2
.dbline 57
sts _ch,R2
.dbline 58
ldi R24,<L13
ldi R25,>L13
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
rcall _LCD_write_string
.dbline 58
L11:
.dbline -2
L2:
adiw R28,2
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e write_h _write_h fV
; temp -> R20
; h -> R22
.even
_write_h::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 61
; if(ch1>16)
; {ch1=0;
; ch=0;
; LCD_write_string(0,1," ");}
; }
; void write_h(unsigned char h)
; { unsigned char temp=0;
.dbline 61
clr R20
.dbline 62
; LCD_set_xy(0,0);
clr R18
clr R16
rcall _LCD_set_xy
.dbline 63
; temp=h/10;
ldi R17,10
mov R16,R22
rcall div8u
mov R20,R16
.dbline 64
; LCD_write_char(0,table[temp]);
ldi R24,<_table
ldi R25,>_table
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R18,Z
clr R19
clr R16
clr R17
rcall _LCD_write_char
.dbline 65
; temp=h%10;
ldi R17,10
mov R16,R22
rcall mod8u
mov R20,R16
.dbline 66
; LCD_write_char(0,table[temp]);
ldi R24,<_table
ldi R25,>_table
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R18,Z
clr R19
clr R16
clr R17
rcall _LCD_write_char
.dbline 67
; LCD_write_char(0,':');
ldi R18,58
ldi R19,0
clr R16
clr R17
rcall _LCD_write_char
.dbline -2
L14:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r h 22 c
.dbend
.dbfunc e write_m _write_m fV
; temp -> R20
; m -> R22
.even
_write_m::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 71
; }
;
; void write_m(unsigned char m)
; { unsigned char temp=0;
.dbline 71
clr R20
.dbline 72
; LCD_set_xy(3,0);
clr R18
ldi R16,3
rcall _LCD_set_xy
.dbline 73
; temp=m/10;
ldi R17,10
mov R16,R22
rcall div8u
mov R20,R16
.dbline 74
; LCD_write_char(0,table[temp]);
ldi R24,<_table
ldi R25,>_table
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R18,Z
clr R19
clr R16
clr R17
rcall _LCD_write_char
.dbline 75
; temp=m%10;
ldi R17,10
mov R16,R22
rcall mod8u
mov R20,R16
.dbline 76
; LCD_write_char(0,table[temp]);
ldi R24,<_table
ldi R25,>_table
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R18,Z
clr R19
clr R16
clr R17
rcall _LCD_write_char
.dbline 77
; LCD_write_char(0,':');
ldi R18,58
ldi R19,0
clr R16
clr R17
rcall _LCD_write_char
.dbline -2
L15:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r m 22 c
.dbend
.dbfunc e write_s _write_s fV
; temp -> R20
; s -> R22
.even
_write_s::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 81
; }
;
; void write_s(unsigned char s)
; { unsigned char temp=0;
.dbline 81
clr R20
.dbline 82
; LCD_set_xy(6,0);
clr R18
ldi R16,6
rcall _LCD_set_xy
.dbline 83
; temp=s/10;
ldi R17,10
mov R16,R22
rcall div8u
mov R20,R16
.dbline 84
; LCD_write_char(0,table[temp]);
ldi R24,<_table
ldi R25,>_table
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R18,Z
clr R19
clr R16
clr R17
rcall _LCD_write_char
.dbline 85
; temp=s%10;
ldi R17,10
mov R16,R22
rcall mod8u
mov R20,R16
.dbline 86
; LCD_write_char(0,table[temp]);
ldi R24,<_table
ldi R25,>_table
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R18,Z
clr R19
clr R16
clr R17
rcall _LCD_write_char
.dbline -2
L16:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r s 22 c
.dbend
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 90
; }
;
; void main(void)
; { unsigned char i=0b000001;
.dbline 90
ldi R20,1
.dbline 92
;
; OSCCAL=0XBA;
ldi R24,186
out 0x31,R24
.dbline 94
;
; DDRD |= LCD_DATA | LCD_RW;
in R24,0x11
ori R24,248
out 0x11,R24
.dbline 95
; DDRC |= LCD_RS | LCD_EN;
in R24,0x14
ori R24,48
out 0x14,R24
.dbline 97
;
; LCD_init();
rcall _LCD_init
.dbline 98
; LCD_write_char(0x01,0);
clr R18
clr R19
ldi R16,1
ldi R17,0
rcall _LCD_write_char
.dbline 100
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 101
; timer1_init();
rcall _timer1_init
.dbline 103
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 104
; GICR = 0x00;
out 0x3b,R2
.dbline 105
; TIMSK = 0x04; //timer interrupt sources
ldi R24,4
out 0x39,R24
.dbline 106
; SEI(); //re-enable interrupts
sei
.dbline 108
; //all peripherals are now initialized
; LCD_set_xy(3,0);
clr R18
ldi R16,3
rcall _LCD_set_xy
.dbline 110
;
; LCD_set_xy(6,0);
clr R18
ldi R16,6
rcall _LCD_set_xy
.dbline 111
; LCD_write_char(0,':');
ldi R18,58
ldi R19,0
clr R16
clr R17
rcall _LCD_write_char
L18:
.dbline 114
.dbline 114
.dbline 114
L19:
.dbline 113
rjmp L18
X0:
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
_ch::
.blkb 1
.dbsym e ch _ch c
_temp1::
.blkb 1
.dbsym e temp1 _temp1 c
.area data(ram, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
L13:
.blkb 17
.area idata
.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
.byte 0
.area data(ram, con, rel)
.dbfile I:\AVR\1602\MEGA8-1602\CLOCKA~1\test6\1602B_LCD_TEST.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -