📄 adc.lst
字号:
__start:
__text_start:
46 E5CF LDI R28,0x5F
47 E0D4 LDI R29,4
48 BFCD OUT 0x3D,R28
49 BFDE OUT 0x3E,R29
4A 51CE SUBI R28,0x1E
4B 40D0 SBCI R29,0
4C EA0A LDI R16,0xAA
4D 8308 STD Y+0,R16
4E 2400 CLR R0
4F E9E3 LDI R30,0x93
50 E0F0 LDI R31,0
51 E010 LDI R17,0
52 39E3 CPI R30,0x93
53 07F1 CPC R31,R17
54 F011 BEQ 0x0057
55 9201 ST R0,Z+
56 CFFB RJMP 0x0052
57 8300 STD Z+0,R16
58 E5E8 LDI R30,0x58
59 E0F0 LDI R31,0
5A E6A0 LDI R26,0x60
5B E0B0 LDI R27,0
5C E010 LDI R17,0
5D E000 LDI R16,0
5E BF0B OUT 0x3B,R16
5F 38EB CPI R30,0x8B
60 07F1 CPC R31,R17
61 F021 BEQ 0x0066
62 95C8 LPM
63 9631 ADIW R30,1
64 920D ST R0,X+
65 CFF9 RJMP 0x005F
66 940E 023C CALL _main
_exit:
68 CFFF RJMP _exit
FILE: D:\iccavr\mega16\11\10bit_adc\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_us(void)
(0006) {
(0007) asm("nop");
_delay_us:
69 0000 NOP
6A 9508 RET
_delay_nus:
t --> R20
6B 934A ST R20,-Y
6C 935A ST R21,-Y
6D 01A8 MOVW R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus :长延时函数
(0011) 输入参数: t :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_nus(unsigned int t)
(0014) {
6E C001 RJMP 0x0070
(0015) while(t--)
(0016) delay_us();
6F DFF9 RCALL _delay_us
70 011A MOVW R2,R20
71 5041 SUBI R20,1
72 4050 SBCI R21,0
73 2022 TST R2
74 F7D1 BNE 0x006F
75 2033 TST R3
76 F7C1 BNE 0x006F
77 9159 LD R21,Y+
78 9149 LD R20,Y+
79 9508 RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_ms(void)
(0022) {
(0023) unsigned int i;
(0024) for(i=0;i<1140;i++);
_delay_ms:
i --> R16
7A 2700 CLR R16
7B 2711 CLR R17
7C C002 RJMP 0x007F
7D 5F0F SUBI R16,0xFF
7E 4F1F SBCI R17,0xFF
7F 3704 CPI R16,0x74
80 E0E4 LDI R30,4
81 071E CPC R17,R30
82 F3D0 BCS 0x007D
83 9508 RET
_delay_nms:
t --> R20
84 934A ST R20,-Y
85 935A ST R21,-Y
86 01A8 MOVW R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms :长延时函数
(0028) 输入参数: t :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_nms(unsigned int t)
(0031) {
87 C001 RJMP 0x0089
(0032) while(t--)
(0033) delay_ms();
88 DFF1 RCALL _delay_ms
89 011A MOVW R2,R20
8A 5041 SUBI R20,1
8B 4050 SBCI R21,0
8C 2022 TST R2
8D F7D1 BNE 0x0088
8E 2033 TST R3
8F F7C1 BNE 0x0088
90 9159 LD R21,Y+
91 9149 LD R20,Y+
92 9508 RET
FILE: D:\iccavr\mega16\11\10bit_adc\lcd1602.h
(0001) /*-------------------------------------------
(0002) RS----------PC2
(0003) RW----------GND
(0004) EN----------PC3
(0005) D4-D7-------PC4-PC7
(0006) ---------------------------------------------*/
(0007) //定义MCU与LCD的接口
(0008) #define LCD_EN_PORT PORTC
(0009) #define LCD_EN_DDR DDRC
(0010) #define LCD_RS_PORT PORTC
(0011) #define LCD_RS_DDR DDRC
(0012) #define LCD_DATA_PORT PORTC
(0013) #define LCD_DATA_DDR DDRC
(0014) #define LCD_DATA_PIN PINC
(0015) #define LCD_EN 0x08 //portc3 out
(0016) #define LCD_RS 0x04 //portc2 out
(0017) #define LCD_DATA 0xf0 //portc4/5/6/7 out
(0018)
(0019) /*----------------------------------------------------------
(0020) Public function prototypes
(0021) ----------------------------------------------------------*/
(0022) void LCD_init(void);
(0023) void LCD_en_write(void);
(0024) void clear(void);
(0025) void LCD_write_char(unsigned command,unsigned data);
(0026) void LCD_set_xy(unsigned char x, unsigned char y);
(0027) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
(0028) void LCD_write_data(unsigned char X,unsigned char Y,int dat);
(0029)
(0030) /*------------------------------------------------------------
(0031) 函数: lcd1602口线初始化和液晶初始化
(0032) -------------------------------------------------------------*/
(0033) void LCD_init(void) //液晶初始化
(0034) {
(0035) LCD_DATA_DDR|=LCD_DATA;
_LCD_init:
93 B384 IN R24,0x14
94 6F80 ORI R24,0xF0
95 BB84 OUT 0x14,R24
(0036) LCD_EN_DDR|=LCD_EN;
96 9AA3 SBI 0x14,3
(0037) LCD_RS_DDR|=LCD_RS;
97 9AA2 SBI 0x14,2
(0038) delay_nms(15);
98 E00F LDI R16,0xF
99 E010 LDI R17,0
9A DFE9 RCALL _delay_nms
(0039) LCD_write_char(0x28,0); //4位显示
9B 2722 CLR R18
9C 2733 CLR R19
9D E208 LDI R16,0x28
9E E010 LDI R17,0
9F D02A RCALL _LCD_write_char
(0040) delay_nms(15);
A0 E00F LDI R16,0xF
A1 E010 LDI R17,0
A2 DFE1 RCALL _delay_nms
(0041) LCD_write_char(0x0c,0); //显示开
A3 2722 CLR R18
A4 2733 CLR R19
A5 E00C LDI R16,0xC
A6 E010 LDI R17,0
A7 D022 RCALL _LCD_write_char
(0042) delay_nms(15);
A8 E00F LDI R16,0xF
A9 E010 LDI R17,0
AA DFD9 RCALL _delay_nms
(0043) LCD_write_char(0x01,0); //清屏
AB 2722 CLR R18
AC 2733 CLR R19
AD E001 LDI R16,1
AE E010 LDI R17,0
AF D01A RCALL _LCD_write_char
(0044) clear();
B0 D06A RCALL _clear
B1 9508 RET
_LCD_set_xy:
address --> R20
y --> R10
x --> R22
B2 940E 02B8 CALL push_xgsetF00C
B4 2EA2 MOV R10,R18
B5 2F60 MOV R22,R16
(0045) }
(0046)
(0047) /*------------------------------------------------------------
(0048) 函数: 设置显示地址
(0049) para: x---the display address of a line limit: 0---15
(0050) y---the display line limit 0 or 1
(0051) --------------------------------------------------------------*/
(0052) void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
(0053) {
(0054) unsigned char address;
(0055) if(y ==0)
B6 20AA TST R10
B7 F419 BNE 0x00BB
(0056) address=0x80+x; //the first line
B8 2F46 MOV R20,R22
B9 5840 SUBI R20,0x80
BA C002 RJMP 0x00BD
(0057) else
(0058) address=0xc0+x; //the second line
BB 2F46 MOV R20,R22
BC 5440 SUBI R20,0x40
(0059) LCD_write_char(address,0);
BD 2722 CLR R18
BE 2733 CLR R19
BF 2F04 MOV R16,R20
C0 2711 CLR R17
C1 D008 RCALL _LCD_write_char
C2 940C 02BF JMP pop_xgsetF00C
(0060) }
(0061) /*-------------------------------------------------------------
(0062) 函数: lcd1602使能
(0063) *--------------------------------------------------------------*/
(0064) void LCD_en_write(void) //液晶使能
(0065) {
(0066) LCD_EN_PORT|=LCD_EN;
_LCD_en_write:
C4 9AAB SBI 0x15,3
(0067) delay_nus(5);
C5 E005 LDI R16,5
C6 E010 LDI R17,0
C7 DFA3 RCALL _delay_nus
(0068) LCD_EN_PORT&=~LCD_EN;
C8 98AB CBI 0x15,3
C9 9508 RET
_LCD_write_char:
data_temp --> R22
command_temp --> R20
data --> R12
command --> R10
CA 940E 02D4 CALL push_xgsetF03C
CC 0169 MOVW R12,R18
CD 0158 MOVW R10,R16
(0069) }
(0070) /*------------------------------------------------------------
(0071) 函数: 写命令或数据到lcd1602
(0072) 参数:command: 0---写数据, 1---写命令
(0073) data: 所要写的命令或数据
(0074) *-------------------------------------------------------------*/
(0075) void LCD_write_char(unsigned command,unsigned data)
(0076) {
(0077) unsigned command_temp,data_temp;
(0078) command_temp=command;
CE 01A5 MOVW R20,R10
(0079) data_temp=data;
CF 01B6 MOVW R22,R12
(0080) delay_nus(25);
D0 E109 LDI R16,0x19
D1 E010 LDI R17,0
D2 DF98 RCALL _delay_nus
(0081) if(command==0)
D3 3040 CPI R20,0
D4 0745 CPC R20,R21
D5 F511 BNE 0x00F8
(0082) {
(0083) LCD_RS_PORT|=LCD_RS; //RS=1
D6 9AAA SBI 0x15,2
(0084) LCD_DATA_PORT&=0X0f;
D7 B385 IN R24,0x15
D8 708F ANDI R24,0xF
D9 BB85 OUT 0x15,R24
(0085) LCD_DATA_PORT|=data_temp&0xf0; //写高四位
DA 01CB MOVW R24,R22
DB 7F80 ANDI R24,0xF0
DC 7090 ANDI R25,0
DD B225 IN R2,0x15
DE 2433 CLR R3
DF 2A28 OR R2,R24
E0 2A39 OR R3,R25
E1 BA25 OUT 0x15,R2
(0086) LCD_en_write();
E2 DFE1 RCALL _LCD_en_write
(0087) data_temp=data_temp<<4;
E3 0F66 LSL R22
E4 1F77 ROL R23
E5 0F66 LSL R22
E6 1F77 ROL R23
E7 0F66 LSL R22
E8 1F77 ROL R23
E9 0F66 LSL R22
EA 1F77 ROL R23
(0088) LCD_DATA_PORT&=0X0f;
EB B385 IN R24,0x15
EC 708F ANDI R24,0xF
ED BB85 OUT 0x15,R24
(0089) LCD_DATA_PORT|=data_temp&0xf0; //写低四位
EE 01CB MOVW R24,R22
EF 7F80 ANDI R24,0xF0
F0 7090 ANDI R25,0
F1 B225 IN R2,0x15
F2 2433 CLR R3
F3 2A28 OR R2,R24
F4 2A39 OR R3,R25
F5 BA25 OUT 0x15,R2
(0090) LCD_en_write();
F6 DFCD RCALL _LCD_en_write
(0091) }
F7 C021 RJMP 0x0119
(0092) else
(0093) {
(0094) LCD_RS_PORT&=~LCD_RS; //RS=0
F8 98AA CBI 0x15,2
(0095) LCD_DATA_PORT&=0X0f;
F9 B385 IN R24,0x15
FA 708F ANDI R24,0xF
FB BB85 OUT 0x15,R24
(0096) LCD_DATA_PORT|=command_temp&0xf0; //写高四位
FC 01CA MOVW R24,R20
FD 7F80 ANDI R24,0xF0
FE 7090 ANDI R25,0
FF B225 IN R2,0x15
100 2433 CLR R3
101 2A28 OR R2,R24
102 2A39 OR R3,R25
103 BA25 OUT 0x15,R2
(0097) LCD_en_write();
104 DFBF RCALL _LCD_en_write
(0098) command_temp=command_temp<<4;
105 0F44 LSL R20
106 1F55 ROL R21
107 0F44 LSL R20
108 1F55 ROL R21
109 0F44 LSL R20
10A 1F55 ROL R21
10B 0F44 LSL R20
10C 1F55 ROL R21
(0099) LCD_DATA_PORT&=0x0f;
10D B385 IN R24,0x15
10E 708F ANDI R24,0xF
10F BB85 OUT 0x15,R24
(0100) LCD_DATA_PORT|=command_temp&0xf0; //写低四位
110 01CA MOVW R24,R20
111 7F80 ANDI R24,0xF0
112 7090 ANDI R25,0
113 B225 IN R2,0x15
114 2433 CLR R3
115 2A28 OR R2,R24
116 2A39 OR R3,R25
117 BA25 OUT 0x15,R2
(0101) LCD_en_write();
118 DFAB RCALL _LCD_en_write
(0102) }
119 940C 02DD JMP pop_xgsetF03C
_clear:
i --> R20
11B 934A ST R20,-Y
(0103) }
(0104) /*-------------------------------------------------------------
(0105) 函数: 清屏lcd1602
(0106) ---------------------------------------------------------------*/
(0107) void clear(void)
(0108) {
(0109) unsigned char i;
(0110) LCD_set_xy(0,0);
11C 2722 CLR R18
11D 2700 CLR R16
11E DF93 RCALL _LCD_set_xy
(0111) for(i=0;i<16;i++)
11F 2744 CLR R20
120 C006 RJMP 0x0127
(0112) LCD_write_char(0,' ');
121 E220 LDI R18,0x20
122 E030 LDI R19,0
123 2700 CLR R16
124 2711 CLR R17
125 DFA4 RCALL _LCD_write_char
126 9543 INC R20
127 3140 CPI R20,0x10
128 F3C0 BCS 0x0121
(0113) LCD_set_xy(0,1);
129 E021 LDI R18,1
12A 2700 CLR R16
12B DF86 RCALL _LCD_set_xy
(0114) for(i=0;i<16;i++)
12C 2744 CLR R20
12D C006 RJMP 0x0134
(0115) LCD_write_char(0,' ');
12E E220 LDI R18,0x20
12F E030 LDI R19,0
130 2700 CLR R16
131 2711 CLR R17
132 DF97 RCALL _LCD_write_char
133 9543 INC R20
134 3140 CPI R20,0x10
135 F3C0 BCS 0x012E
136 9149 LD R20,Y+
137 9508 RET
_LCD_write_string:
s --> R20
Y --> R12
X --> R10
138 940E 02C6 CALL push_xgset303C
13A 2EC2 MOV R12,R18
13B 2EA0 MOV R10,R16
13C 814E LDD R20,Y+6
13D 815F LDD R21,Y+7
(0116) }
(0117) /*-------------------------------------------------------------
(0118) 函数: 写字符串
(0119) 参数:列---X=0~15,行---Y=0~1 写地址
(0120) s为所要写的字符串
(0121) ---------------------------------------------------------------*/
(0122) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0123) {
(0124) LCD_set_xy(X,Y);
13E 2D2C MOV R18,R12
13F 2D0A MOV R16,R10
140 DF71 RCALL _LCD_set_xy
141 C008 RJMP 0x014A
(0125) while(*s)
(0126) {
(0127) LCD_write_char(0,*s);
142 01FA MOVW R30,R20
143 8120 LDD R18,Z+0
144 2733 CLR R19
145 2700 CLR R16
146 2711 CLR R17
147 DF82 RCALL _LCD_write_char
(0128) s++;
148 5F4F SUBI R20,0xFF
149 4F5F SBCI R21,0xFF
14A 01FA MOVW R30,R20
14B 8020 LDD R2,Z+0
14C 2022 TST R2
14D F7A1 BNE 0x0142
14E 940C 02CD JMP pop_xgset303C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -