📄 test.lis
字号:
.module test.c
.area text(rom, con, rel)
0000 .dbfile D:\iccavr\mega16\11\10bit_adc\test.c
0000 .dbfile D:\iccavr\mega16\11\10bit_adc\delay.h
0000 .dbfunc e delay_us _delay_us fV
.even
0000 _delay_us::
0000 .dbline -1
0000 .dbline 6
0000 ; /**********延时函数*****************/
0000 ; /*-----------------------------------------------
0000 ; delay_us :1us延时函数
0000 ; ------------------------------------------------*/
0000 ; void delay_us(void)
0000 ; {
0000 .dbline 7
0000 ; asm("nop");
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_nus _delay_nus fV
0004 ; t -> R20,R21
.even
0004 _delay_nus::
0004 4A93 st -y,R20
0006 5A93 st -y,R21
0008 A801 movw R20,R16
000A .dbline -1
000A .dbline 14
000A ; }
000A ; /*-----------------------------------------------
000A ; delay_nus :长延时函数
000A ; 输入参数: t :延时时间 us
000A ; ------------------------------------------------*/
000A ; void delay_nus(unsigned int t)
000A ; {
000A 01C0 xjmp L4
000C L3:
000C .dbline 16
000C ; while(t--)
000C ; delay_us();
000C F9DF xcall _delay_us
000E L4:
000E .dbline 15
000E 1A01 movw R2,R20
0010 4150 subi R20,1
0012 5040 sbci R21,0
0014 2220 tst R2
0016 D1F7 brne L3
0018 3320 tst R3
001A C1F7 brne L3
001C X0:
001C .dbline -2
001C L2:
001C .dbline 0 ; func end
001C 5991 ld R21,y+
001E 4991 ld R20,y+
0020 0895 ret
0022 .dbsym r t 20 i
0022 .dbend
0022 .dbfunc e delay_ms _delay_ms fV
0022 ; i -> R16,R17
.even
0022 _delay_ms::
0022 .dbline -1
0022 .dbline 22
0022 ; }
0022 ; /*----------------------------------------------
0022 ; delay_ms :1ms延时函数
0022 ; -----------------------------------------------*/
0022 ; void delay_ms(void)
0022 ; {
0022 .dbline 24
0022 ; unsigned int i;
0022 ; for(i=0;i<1140;i++);
0022 0027 clr R16
0024 1127 clr R17
0026 02C0 xjmp L10
0028 L7:
0028 .dbline 24
0028 L8:
0028 .dbline 24
0028 0F5F subi R16,255 ; offset = 1
002A 1F4F sbci R17,255
002C L10:
002C .dbline 24
002C 0437 cpi R16,116
002E E4E0 ldi R30,4
0030 1E07 cpc R17,R30
0032 D0F3 brlo L7
0034 X1:
0034 .dbline -2
0034 L6:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 16 i
0036 .dbend
0036 .dbfunc e delay_nms _delay_nms fV
0036 ; t -> R20,R21
.even
0036 _delay_nms::
0036 4A93 st -y,R20
0038 5A93 st -y,R21
003A A801 movw R20,R16
003C .dbline -1
003C .dbline 31
003C ; }
003C ; /*----------------------------------------------
003C ; delay_nms :长延时函数
003C ; 输入参数: t :延时时间 ms
003C ; -----------------------------------------------*/
003C ; void delay_nms(unsigned int t)
003C ; {
003C 01C0 xjmp L13
003E L12:
003E .dbline 33
003E ; while(t--)
003E ; delay_ms();
003E F1DF xcall _delay_ms
0040 L13:
0040 .dbline 32
0040 1A01 movw R2,R20
0042 4150 subi R20,1
0044 5040 sbci R21,0
0046 2220 tst R2
0048 D1F7 brne L12
004A 3320 tst R3
004C C1F7 brne L12
004E X2:
004E .dbline -2
004E L11:
004E .dbline 0 ; func end
004E 5991 ld R21,y+
0050 4991 ld R20,y+
0052 0895 ret
0054 .dbsym r t 20 i
0054 .dbend
0054 .dbfile D:\iccavr\mega16\11\10bit_adc\lcd1602.h
0054 .dbfunc e LCD_init _LCD_init fV
.even
0054 _LCD_init::
0054 .dbline -1
0054 .dbline 34
0054 ; /*-------------------------------------------
0054 ; RS----------PC2
0054 ; RW----------GND
0054 ; EN----------PC3
0054 ; D4-D7-------PC4-PC7
0054 ; ---------------------------------------------*/
0054 ; //定义MCU与LCD的接口
0054 ; #define LCD_EN_PORT PORTC
0054 ; #define LCD_EN_DDR DDRC
0054 ; #define LCD_RS_PORT PORTC
0054 ; #define LCD_RS_DDR DDRC
0054 ; #define LCD_DATA_PORT PORTC
0054 ; #define LCD_DATA_DDR DDRC
0054 ; #define LCD_DATA_PIN PINC
0054 ; #define LCD_EN 0x08 //portc3 out
0054 ; #define LCD_RS 0x04 //portc2 out
0054 ; #define LCD_DATA 0xf0 //portc4/5/6/7 out
0054 ;
0054 ; /*----------------------------------------------------------
0054 ; Public function prototypes
0054 ; ----------------------------------------------------------*/
0054 ; void LCD_init(void);
0054 ; void LCD_en_write(void);
0054 ; void clear(void);
0054 ; void LCD_write_char(unsigned command,unsigned data);
0054 ; void LCD_set_xy(unsigned char x, unsigned char y);
0054 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
0054 ; void LCD_write_data(unsigned char X,unsigned char Y,int dat);
0054 ;
0054 ; /*------------------------------------------------------------
0054 ; 函数: lcd1602口线初始化和液晶初始化
0054 ; -------------------------------------------------------------*/
0054 ; void LCD_init(void) //液晶初始化
0054 ; {
0054 .dbline 35
0054 ; LCD_DATA_DDR|=LCD_DATA;
0054 84B3 in R24,0x14
0056 806F ori R24,240
0058 84BB out 0x14,R24
005A .dbline 36
005A ; LCD_EN_DDR|=LCD_EN;
005A A39A sbi 0x14,3
005C .dbline 37
005C ; LCD_RS_DDR|=LCD_RS;
005C A29A sbi 0x14,2
005E .dbline 38
005E ; delay_nms(15);
005E 0FE0 ldi R16,15
0060 10E0 ldi R17,0
0062 E9DF xcall _delay_nms
0064 .dbline 39
0064 ; LCD_write_char(0x28,0); //4位显示
0064 2227 clr R18
0066 3327 clr R19
0068 08E2 ldi R16,40
006A 10E0 ldi R17,0
006C 2AD0 xcall _LCD_write_char
006E .dbline 40
006E ; delay_nms(15);
006E 0FE0 ldi R16,15
0070 10E0 ldi R17,0
0072 E1DF xcall _delay_nms
0074 .dbline 41
0074 ; LCD_write_char(0x0c,0); //显示开
0074 2227 clr R18
0076 3327 clr R19
0078 0CE0 ldi R16,12
007A 10E0 ldi R17,0
007C 22D0 xcall _LCD_write_char
007E .dbline 42
007E ; delay_nms(15);
007E 0FE0 ldi R16,15
0080 10E0 ldi R17,0
0082 D9DF xcall _delay_nms
0084 .dbline 43
0084 ; LCD_write_char(0x01,0); //清屏
0084 2227 clr R18
0086 3327 clr R19
0088 01E0 ldi R16,1
008A 10E0 ldi R17,0
008C 1AD0 xcall _LCD_write_char
008E .dbline 44
008E ; clear();
008E 6AD0 xcall _clear
0090 .dbline -2
0090 L15:
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbend
0092 .dbfunc e LCD_set_xy _LCD_set_xy fV
0092 ; address -> R20
0092 ; y -> R10
0092 ; x -> R22
.even
0092 _LCD_set_xy::
0092 0E940000 xcall push_xgsetF00C
0096 A22E mov R10,R18
0098 602F mov R22,R16
009A .dbline -1
009A .dbline 53
009A ; }
009A ;
009A ; /*------------------------------------------------------------
009A ; 函数: 设置显示地址
009A ; para: x---the display address of a line limit: 0---15
009A ; y---the display line limit 0 or 1
009A ; --------------------------------------------------------------*/
009A ; void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
009A ; {
009A .dbline 55
009A ; unsigned char address;
009A ; if(y ==0)
009A AA20 tst R10
009C 19F4 brne L17
009E X3:
009E .dbline 56
009E ; address=0x80+x; //the first line
009E 462F mov R20,R22
00A0 4058 subi R20,128 ; addi 128
00A2 02C0 xjmp L18
00A4 L17:
00A4 .dbline 58
00A4 ; else
00A4 ; address=0xc0+x; //the second line
00A4 462F mov R20,R22
00A6 4054 subi R20,64 ; addi 192
00A8 L18:
00A8 .dbline 59
00A8 ; LCD_write_char(address,0);
00A8 2227 clr R18
00AA 3327 clr R19
00AC 042F mov R16,R20
00AE 1127 clr R17
00B0 08D0 xcall _LCD_write_char
00B2 .dbline -2
00B2 L16:
00B2 .dbline 0 ; func end
00B2 0C940000 xjmp pop_xgsetF00C
00B6 .dbsym r address 20 c
00B6 .dbsym r y 10 c
00B6 .dbsym r x 22 c
00B6 .dbend
00B6 .dbfunc e LCD_en_write _LCD_en_write fV
.even
00B6 _LCD_en_write::
00B6 .dbline -1
00B6 .dbline 65
00B6 ; }
00B6 ; /*-------------------------------------------------------------
00B6 ; 函数: lcd1602使能
00B6 ; *--------------------------------------------------------------*/
00B6 ; void LCD_en_write(void) //液晶使能
00B6 ; {
00B6 .dbline 66
00B6 ; LCD_EN_PORT|=LCD_EN;
00B6 AB9A sbi 0x15,3
00B8 .dbline 67
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -