📄 1602.lis
字号:
.module _1602.c
.area data(ram, con, rel)
0000 _DATA1::
0000 .blkb 17
.area idata
0000 20202057656C636F6D6520746F202020 .byte 32,32,32,'W,'e,'l,'c,'o,'m,'e,32,'t,'o,32,32,32
0010 00 .byte 0
.area data(ram, con, rel)
0011 .dbfile E:\单片机\单片机程序\AVR程序\1602\1602.c
0011 .dbsym e DATA1 _DATA1 A[17:17]c
0011 _DATA2::
0011 .blkb 28
.area idata
0011 202020202020202020202043554D5421 .byte 32,32,32,32,32,32,32,32,32,32,32,'C,'U,'M,'T,33
0021 202020202020202020202000 .byte 32,32,32,32,32,32,32,32,32,32,32,0
.area data(ram, con, rel)
002D .dbfile E:\单片机\单片机程序\AVR程序\1602\1602.c
002D .dbsym e DATA2 _DATA2 A[28:28]c
.area text(rom, con, rel)
0000 .dbfile E:\单片机\单片机程序\AVR程序\1602\1602.c
0000 .dbfunc e delay _delay fV
0000 ; t -> R16,R17
.even
0000 _delay::
0000 .dbline -1
0000 .dbline 18
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include <stdio.h> //标准输入输出头文件
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ;
0000 ; //uchar DATA[16] = {'W','e','l','c','o','m','e',' ','t','o',' ','C','U','M','T','!'};
0000 ; uchar DATA1[] = {" Welcome to "};
0000 ; uchar DATA2[] = {" CUMT! "};
0000 ; /********** LCD1602接线引脚定义 ***********/
0000 ; //E -- PD4
0000 ; //RW -- PD5
0000 ; //RS -- PD6
0000 ; //DB0~7 -- PC0~7
0000 ;
0000 ; /****************** 延时函数 *****************/
0000 ; void delay(uint t)
0000 ; {
0000 L2:
0000 .dbline 19
0000 L3:
0000 .dbline 19
0000 ; while(t--);
0000 1801 movw R2,R16
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 2220 tst R2
0008 D9F7 brne L2
000A 3320 tst R3
000C C9F7 brne L2
000E X0:
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r t 16 i
0010 .dbend
0010 .dbfunc e delay_ms _delay_ms fV
0010 ; i -> R20,R21
0010 ; j -> R22,R23
0010 ; t -> R16,R17
.even
0010 _delay_ms::
0010 0E940000 xcall push_gset2
0014 .dbline -1
0014 .dbline 23
0014 ; }
0014 ;
0014 ; void delay_ms(uint t)
0014 ; {
0014 .dbline 25
0014 ; uint i,j;
0014 ; for(i=t;i>0;i--)
0014 A801 movw R20,R16
0016 0BC0 xjmp L9
0018 L6:
0018 .dbline 26
0018 6627 clr R22
001A 7727 clr R23
001C 02C0 xjmp L13
001E L10:
001E .dbline 26
001E L11:
001E .dbline 26
001E 6F5F subi R22,255 ; offset = 1
0020 7F4F sbci R23,255
0022 L13:
0022 .dbline 26
0022 6437 cpi R22,116
0024 E4E0 ldi R30,4
0026 7E07 cpc R23,R30
0028 D0F3 brlo L10
002A L7:
002A .dbline 25
002A 4150 subi R20,1
002C 5040 sbci R21,0
002E L9:
002E .dbline 25
002E 4030 cpi R20,0
0030 4507 cpc R20,R21
0032 91F7 brne L6
0034 X1:
0034 .dbline -2
0034 L5:
0034 0E940000 xcall pop_gset2
0038 .dbline 0 ; func end
0038 0895 ret
003A .dbsym r i 20 i
003A .dbsym r j 22 i
003A .dbsym r t 16 i
003A .dbend
003A .dbfunc e port_init _port_init fV
.even
003A _port_init::
003A .dbline -1
003A .dbline 31
003A ; for(j=0;j<1140;j++);
003A ; }
003A ;
003A ; /****************** 端口初始化 *****************/
003A ; void port_init(void)
003A ; {
003A .dbline 32
003A ; PORTA = 0x00;
003A 2224 clr R2
003C 2BBA out 0x1b,R2
003E .dbline 33
003E ; DDRA = 0xFF;
003E 8FEF ldi R24,255
0040 8ABB out 0x1a,R24
0042 .dbline 34
0042 ; PORTB = 0x00;
0042 28BA out 0x18,R2
0044 .dbline 35
0044 ; DDRB = 0x00;
0044 27BA out 0x17,R2
0046 .dbline 36
0046 ; PORTC = 0x00;
0046 25BA out 0x15,R2
0048 .dbline 37
0048 ; DDRC = 0xFF;
0048 84BB out 0x14,R24
004A .dbline 38
004A ; PORTD = 0x00;
004A 22BA out 0x12,R2
004C .dbline 39
004C ; DDRD = 0xFF;
004C 81BB out 0x11,R24
004E .dbline -2
004E L14:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbend
0050 .dbfunc e init_devices _init_devices fV
.even
0050 _init_devices::
0050 .dbline -1
0050 .dbline 44
0050 ; }
0050 ;
0050 ; /****************** mega16 初始化 *****************/
0050 ; void init_devices(void)
0050 ; {
0050 .dbline 45
0050 ; CLI();
0050 F894 cli
0052 .dbline 46
0052 ; port_init();
0052 F3DF xcall _port_init
0054 .dbline 47
0054 ; MCUCR = 0x00;
0054 2224 clr R2
0056 25BE out 0x35,R2
0058 .dbline 48
0058 ; GICR = 0x00;
0058 2BBE out 0x3b,R2
005A .dbline 49
005A ; TIMSK = 0x00;
005A 29BE out 0x39,R2
005C .dbline 50
005C ; SEI();
005C 7894 sei
005E .dbline -2
005E L15:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbend
0060 .dbfunc e lcd_busy _lcd_busy fV
.even
0060 _lcd_busy::
0060 .dbline -1
0060 .dbline 55
0060 ; }
0060 ;
0060 ; /****************** 检查忙信号 *****************/
0060 ; void lcd_busy()
0060 ; {
0060 .dbline 56
0060 ; DDRC = 0X00; //PC 口改为输入
0060 2224 clr R2
0062 24BA out 0x14,R2
0064 .dbline 57
0064 ; PORTD = 0X20;
0064 80E2 ldi R24,32
0066 82BB out 0x12,R24
0068 .dbline 58
0068 ; delay(10);
0068 0AE0 ldi R16,10
006A 10E0 ldi R17,0
006C C9DF xcall _delay
006E .dbline 59
006E ; PORTD = 0X30;
006E 80E3 ldi R24,48
0070 82BB out 0x12,R24
0072 L17:
0072 .dbline 60
0072 L18:
0072 .dbline 60
0072 ; while(PINC & 0X80); //lcd 忙,则在此循环
0072 9F99 sbic 0x13,7
0074 FECF rjmp L17
0076 .dbline 61
0076 ; PORTD = 0X20;
0076 80E2 ldi R24,32
0078 82BB out 0x12,R24
007A .dbline 62
007A ; DDRC = 0XFF; //PC 口改为输出
007A 8FEF ldi R24,255
007C 84BB out 0x14,R24
007E .dbline -2
007E L16:
007E .dbline 0 ; func end
007E 0895 ret
0080 .dbend
0080 .dbfunc e lcd_cmd _lcd_cmd fV
0080 ; cmd -> R20
.even
0080 _lcd_cmd::
0080 0E940000 xcall push_gset1
0084 402F mov R20,R16
0086 .dbline -1
0086 .dbline 67
0086 ; }
0086 ;
0086 ; /****************** 写命令函数 *****************/
0086 ; void lcd_cmd(uchar cmd)
0086 ; {
0086 .dbline 68
0086 ; lcd_busy();
0086 ECDF xcall _lcd_busy
0088 .dbline 69
0088 ; PORTD = 0X00;
0088 2224 clr R2
008A 22BA out 0x12,R2
008C .dbline 70
008C ; delay(1);
008C 01E0 ldi R16,1
008E 10E0 ldi R17,0
0090 B7DF xcall _delay
0092 .dbline 71
0092 ; PORTC = cmd; //PC 口输出命令
0092 45BB out 0x15,R20
0094 .dbline 72
0094 ; delay(1);
0094 01E0 ldi R16,1
0096 10E0 ldi R17,0
0098 B3DF xcall _delay
009A .dbline 73
009A ; PORTD = 0X10;
009A 80E1 ldi R24,16
009C 82BB out 0x12,R24
009E .dbline 74
009E ; delay(1); //延时
009E 01E0 ldi R16,1
00A0 10E0 ldi R17,0
00A2 AEDF xcall _delay
00A4 .dbline 75
00A4 ; PORTD = 0X00;
00A4 2224 clr R2
00A6 22BA out 0x12,R2
00A8 .dbline -2
00A8 L20:
00A8 0E940000 xcall pop_gset1
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbsym r cmd 20 c
00AE .dbend
00AE .dbfunc e lcd_data _lcd_data fV
00AE ; data -> R20
.even
00AE _lcd_data::
00AE 0E940000 xcall push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -