📄 1602b_lcd_test.lis
字号:
.module _1602B_LCD_TEST.c
.area data(ram, con, rel)
0000 _n::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
0001 .dbsym e n _n c
0001 _t::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
0002 .dbsym e t _t c
.area vector(rom, abs)
.org 16
0010 0C940000 jmp _timer2_ovf_isr
.area data(ram, con, rel)
0002 .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
.area text(rom, con, rel)
0000 .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
0000 .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
0000 _timer2_ovf_isr::
0000 2A92 st -y,R2
0002 3A92 st -y,R3
0004 8A93 st -y,R24
0006 9A93 st -y,R25
0008 2FB6 in R2,0x3f
000A 2A92 st -y,R2
000C .dbline -1
000C .dbline 18
000C ; #include <iom16v.h>
000C ; #include <macros.h>
000C ; #include "1602LCD.h"
000C ; volatile int zkb;
000C ; volatile int zq;
000C ; volatile int t1,t2;
000C ; uchar n=0,t=0;
000C ; void delay_1ms(void); //函数声明,本实验中会用到这两个函数
000C ; void delay_nms(unsigned int n);
000C ; /*DS1302函数声明*/
000C ; void write_data(uchar addr,uchar data);
000C ; uchar read_data(uchar addr);
000C ; void init_1302(void);
000C ; void init_time(uchar sec,uchar min,uchar hour,uchar day,uchar month,uchar d,uchar year);
000C ; //PWM信号产生中断函数
000C ; #pragma interrupt_handler timer2_ovf_isr:5
000C ; void timer2_ovf_isr(void)
000C ; {
000C .dbline 21
000C ; // Reinitialize Timer 2 value
000C ; //每次触发为20微秒
000C ; TCNT2 = 0xF1; //反转值,理论值为0xEC 但是实测值为0xEF 有点没搞懂 ??
000C 81EF ldi R24,241
000E 84BD out 0x24,R24
0010 .dbline 23
0010 ;
0010 ; if((--zq)==0)
0010 80910400 lds R24,_zq
0014 90910500 lds R25,_zq+1
0018 0197 sbiw R24,1
001A 90930500 sts _zq+1,R25
001E 80930400 sts _zq,R24
0022 8030 cpi R24,0
0024 8907 cpc R24,R25
0026 C9F4 brne L2
0028 X0:
0028 .dbline 24
0028 ; {
0028 .dbline 25
0028 ; PORTC^=0B00000001; //PORTB.0 反转
0028 81E0 ldi R24,1
002A 25B2 in R2,0x15
002C 2826 eor R2,R24
002E 25BA out 0x15,R2
0030 .dbline 26
0030 ; if((PORTC&0x01)==0x01)
0030 85B3 in R24,0x15
0032 8170 andi R24,1
0034 8130 cpi R24,1
0036 49F4 brne L4
0038 .dbline 27
0038 ; {
0038 .dbline 28
0038 ; zq=t1;
0038 20900200 lds R2,_t1
003C 30900300 lds R3,_t1+1
0040 30920500 sts _zq+1,R3
0044 20920400 sts _zq,R2
0048 .dbline 29
0048 ; }else
0048 08C0 xjmp L5
004A L4:
004A .dbline 30
004A ; {
004A .dbline 31
004A ; zq=t2;
004A 20900000 lds R2,_t2
004E 30900100 lds R3,_t2+1
0052 30920500 sts _zq+1,R3
0056 20920400 sts _zq,R2
005A .dbline 32
005A ; }
005A L5:
005A .dbline 33
005A L2:
005A .dbline -2
005A L1:
005A 2990 ld R2,y+
005C 2FBE out 0x3f,R2
005E 9991 ld R25,y+
0060 8991 ld R24,y+
0062 3990 ld R3,y+
0064 2990 ld R2,y+
0066 .dbline 0 ; func end
0066 1895 reti
0068 .dbend
0068 .dbfunc e timer2_init _timer2_init fV
.even
0068 _timer2_init::
0068 .dbline -1
0068 .dbline 36
0068 ; }
0068 ; }
0068 ; void timer2_init(void)//50kHz
0068 ; {
0068 .dbline 38
0068 ; //TCCR2 = 0x00; //stop
0068 ; ASSR=0x00;
0068 2224 clr R2
006A 22BC out 0x22,R2
006C .dbline 39
006C ; TCCR2=0x02;
006C 82E0 ldi R24,2
006E 85BD out 0x25,R24
0070 .dbline 40
0070 ; TCNT2=0xEF;
0070 8FEE ldi R24,239
0072 84BD out 0x24,R24
0074 .dbline 41
0074 ; OCR2=0x00;
0074 23BC out 0x23,R2
0076 .dbline -2
0076 L6:
0076 .dbline 0 ; func end
0076 0895 ret
0078 .dbend
0078 .dbfunc e showtime _showtime fV
0078 ; i -> <dead>
0078 ; th -> R22
0078 ; tl -> R20
0078 ; s -> R10
.even
0078 _showtime::
0078 0E940000 xcall push_gset3
007C 2297 sbiw R28,2
007E .dbline -1
007E .dbline 47
007E ; }
007E ; /************************************************
007E ; 1302显示子程序
007E ; ************************************************/
007E ; void showtime()
007E ; {
007E .dbline 50
007E ; uchar s,i,th,tl;
007E ; //1302
007E ; s=read_data(0x8b);
007E 0BE8 ldi R16,139
0080 0E940000 xcall _read_data
0084 A02E mov R10,R16
0086 .dbline 51
0086 ; tl=s&0x0f;
0086 4A2D mov R20,R10
0088 4F70 andi R20,15
008A .dbline 52
008A ; switch(tl)
008A 642F mov R22,R20
008C 7727 clr R23
008E 6130 cpi R22,1
0090 E0E0 ldi R30,0
0092 7E07 cpc R23,R30
0094 C9F0 breq L11
0096 6230 cpi R22,2
0098 E0E0 ldi R30,0
009A 7E07 cpc R23,R30
009C F1F0 breq L13
009E 6330 cpi R22,3
00A0 E0E0 ldi R30,0
00A2 7E07 cpc R23,R30
00A4 19F1 breq L15
00A6 6430 cpi R22,4
00A8 E0E0 ldi R30,0
00AA 7E07 cpc R23,R30
00AC 41F1 breq L17
00AE 6530 cpi R22,5
00B0 E0E0 ldi R30,0
00B2 7E07 cpc R23,R30
00B4 69F1 breq L19
00B6 6630 cpi R22,6
00B8 E0E0 ldi R30,0
00BA 7E07 cpc R23,R30
00BC 91F1 breq L21
00BE 6730 cpi R22,7
00C0 E0E0 ldi R30,0
00C2 7E07 cpc R23,R30
00C4 B9F1 breq L23
00C6 3EC0 xjmp L8
00C8 X1:
00C8 .dbline 53
00C8 ; {
00C8 L11:
00C8 .dbline 54
00C8 ; case 1:LCD_write_string(0,0,"monday");break;
00C8 80E0 ldi R24,<L12
00CA 90E0 ldi R25,>L12
00CC 9983 std y+1,R25
00CE 8883 std y+0,R24
00D0 2227 clr R18
00D2 0027 clr R16
00D4 0E940000 xcall _LCD_write_string
00D8 .dbline 54
00D8 35C0 xjmp L9
00DA L13:
00DA .dbline 55
00DA ; case 2:LCD_write_string(0,0,"tuesday");break;
00DA 80E0 ldi R24,<L14
00DC 90E0 ldi R25,>L14
00DE 9983 std y+1,R25
00E0 8883 std y+0,R24
00E2 2227 clr R18
00E4 0027 clr R16
00E6 0E940000 xcall _LCD_write_string
00EA .dbline 55
00EA 2CC0 xjmp L9
00EC L15:
00EC .dbline 56
00EC ; case 3:LCD_write_string(0,0,"wednesday");break;
00EC 80E0 ldi R24,<L16
00EE 90E0 ldi R25,>L16
00F0 9983 std y+1,R25
00F2 8883 std y+0,R24
00F4 2227 clr R18
00F6 0027 clr R16
00F8 0E940000 xcall _LCD_write_string
00FC .dbline 56
00FC 23C0 xjmp L9
00FE L17:
00FE .dbline 57
00FE ; case 4:LCD_write_string(0,0,"thursday");break;
00FE 80E0 ldi R24,<L18
0100 90E0 ldi R25,>L18
0102 9983 std y+1,R25
0104 8883 std y+0,R24
0106 2227 clr R18
0108 0027 clr R16
010A 0E940000 xcall _LCD_write_string
010E .dbline 57
010E 1AC0 xjmp L9
0110 L19:
0110 .dbline 58
0110 ; case 5:LCD_write_string(0,0,"friday");break;
0110 80E0 ldi R24,<L20
0112 90E0 ldi R25,>L20
0114 9983 std y+1,R25
0116 8883 std y+0,R24
0118 2227 clr R18
011A 0027 clr R16
011C 0E940000 xcall _LCD_write_string
0120 .dbline 58
0120 11C0 xjmp L9
0122 L21:
0122 .dbline 59
0122 ; case 6:LCD_write_string(0,0,"saturday");break;
0122 80E0 ldi R24,<L22
0124 90E0 ldi R25,>L22
0126 9983 std y+1,R25
0128 8883 std y+0,R24
012A 2227 clr R18
012C 0027 clr R16
012E 0E940000 xcall _LCD_write_string
0132 .dbline 59
0132 08C0 xjmp L9
0134 L23:
0134 .dbline 60
0134 ; case 7:LCD_write_string(0,0,"sunday");break;
0134 80E0 ldi R24,<L24
0136 90E0 ldi R25,>L24
0138 9983 std y+1,R25
013A 8883 std y+0,R24
013C 2227 clr R18
013E 0027 clr R16
0140 0E940000 xcall _LCD_write_string
0144 .dbline 60
0144 L8:
0144 L9:
0144 .dbline 62
0144 ; }
0144 ; LCD_set_xy(0,1);
0144 21E0 ldi R18,1
0146 0027 clr R16
0148 0E940000 xcall _LCD_set_xy
014C .dbline 64
014C ; //year
014C ; s=read_data(0x8d);
014C 0DE8 ldi R16,141
014E 0E940000 xcall _read_data
0152 A02E mov R10,R16
0154 .dbline 65
0154 ; tl=s&0x0f;
0154 4A2D mov R20,R10
0156 4F70 andi R20,15
0158 .dbline 66
0158 ; th=(s>>4);
0158 6A2D mov R22,R10
015A 6295 swap R22
015C 6F70 andi R22,#0x0F
015E .dbline 68
015E ; //LCD_write_char(0,th+48);
015E ; LCD_write_char(0,tl+48);
015E 242F mov R18,R20
0160 3327 clr R19
0162 205D subi R18,208 ; offset = 48
0164 3F4F sbci R19,255
0166 0027 clr R16
0168 1127 clr R17
016A 0E940000 xcall _LCD_write_char
016E .dbline 69
016E ; LCD_write_char(0,'/');
016E 2FE2 ldi R18,47
0170 30E0 ldi R19,0
0172 0027 clr R16
0174 1127 clr R17
0176 0E940000 xcall _LCD_write_char
017A .dbline 71
017A ; //month
017A ; s=read_data(0x89);
017A 09E8 ldi R16,137
017C 0E940000 xcall _read_data
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -