📄 ad.lst
字号:
123 9701 SBIW R24,1
124 016C MOVW R12,R24
(0118) }while(number>=1);
125 01C5 MOVW R24,R10
126 3081 CPI R24,1
127 E0E0 LDI R30,0
128 079E CPC R25,R30
129 F714 BGE 0x010C
(0119) }
12A 940C 0213 JMP pop_xgset003C
_SEG_R:
i --> R12
number --> R10
12C 940E 0225 CALL push_xgset003C
12E 0158 MOVW R10,R16
(0120) }
(0121) //=====================================
(0122)
(0123) //=============SEG右四显示数字==============
(0124) void SEG_R(int number)
(0125) {
(0126) int i=8;
12F E088 LDI R24,0x8
130 E090 LDI R25,0
131 016C MOVW R12,R24
(0127)
(0128) SEND(0x05,0x0f); //先清除右四位,右四位黑屏
132 E02F LDI R18,0xF
133 E005 LDI R16,5
134 DF18 RCALL _SEND
(0129) SEND(0x06,0x0f);
135 E02F LDI R18,0xF
136 E006 LDI R16,6
137 DF15 RCALL _SEND
(0130) SEND(0x07,0x0f);
138 E02F LDI R18,0xF
139 E007 LDI R16,7
13A DF12 RCALL _SEND
(0131) SEND(0x08,0x0f);
13B E02F LDI R18,0xF
13C E008 LDI R16,0x8
13D DF0F RCALL _SEND
(0132)
(0133) if(number>9999)//要显示的数值超过4位,则显示4个H
13E E08F LDI R24,0xF
13F E297 LDI R25,0x27
140 158A CP R24,R10
141 059B CPC R25,R11
142 F46C BGE 0x0150
(0134) {
(0135) SEND(0x05,0x0c);
143 E02C LDI R18,0xC
144 E005 LDI R16,5
145 DF07 RCALL _SEND
(0136) SEND(0x06,0x0c);
146 E02C LDI R18,0xC
147 E006 LDI R16,6
148 DF04 RCALL _SEND
(0137) SEND(0x07,0x0c);
149 E02C LDI R18,0xC
14A E007 LDI R16,7
14B DF01 RCALL _SEND
(0138) SEND(0x08,0x0c);
14C E02C LDI R18,0xC
14D E008 LDI R16,0x8
14E DEFE RCALL _SEND
(0139) }
14F C01E RJMP 0x016E
(0140) else//小于四位可以显示
(0141) {
(0142) do
(0143) {
(0144) SEND(i,number%10);
150 E02A LDI R18,0xA
151 E030 LDI R19,0
152 0185 MOVW R16,R10
153 940E 01C9 CALL mod16s
155 2F20 MOV R18,R16
156 2D0C MOV R16,R12
157 DEF5 RCALL _SEND
(0145) number=(number-number%10)/10;
158 E02A LDI R18,0xA
159 E030 LDI R19,0
15A 0185 MOVW R16,R10
15B 940E 01C9 CALL mod16s
15D 0118 MOVW R2,R16
15E 0185 MOVW R16,R10
15F 1902 SUB R16,R2
160 0913 SBC R17,R3
161 E02A LDI R18,0xA
162 E030 LDI R19,0
163 940E 01CD CALL div16s
165 0158 MOVW R10,R16
(0146) i--;
166 01C6 MOVW R24,R12
167 9701 SBIW R24,1
168 016C MOVW R12,R24
(0147) }while(number>=1);
169 01C5 MOVW R24,R10
16A 3081 CPI R24,1
16B E0E0 LDI R30,0
16C 079E CPC R25,R30
16D F714 BGE 0x0150
(0148) }
16E 940C 0213 JMP pop_xgset003C
FILE: D:\MYDOCU~1\MYMCUW~1\AVR\AD\delay.h
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 编译器:ICC-AVR v6.31A 日期: 2005-11-24 20:29:57
(0004) 目标芯片 : M16
(0005) 时钟: 8.0000Mhz
(0006) 作者:archeng504
(0007) -----------------------------------------------------------------------*/
(0008)
(0009) void delay_1us(void) //1us延时函数
(0010) {
(0011) asm("nop");
_delay_1us:
170 0000 NOP
171 9508 RET
_delay_nus:
i --> R10
n --> R12
172 940E 0225 CALL push_xgset003C
174 0168 MOVW R12,R16
(0012) }
(0013)
(0014) void delay_nus(unsigned int n) //N us延时函数
(0015) {
(0016) unsigned int i=0;
175 24AA CLR R10
176 24BB CLR R11
(0017) for (i=0;i<n;i++)
177 C004 RJMP 0x017C
(0018) delay_1us();
178 DFF7 RCALL _delay_1us
179 01C5 MOVW R24,R10
17A 9601 ADIW R24,1
17B 015C MOVW R10,R24
17C 14AC CP R10,R12
17D 04BD CPC R11,R13
17E F3C8 BCS 0x0178
17F 940C 0213 JMP pop_xgset003C
(0019) }
(0020)
(0021) void delay_1ms(void) //1ms延时函数
(0022) {
(0023) unsigned int i;
(0024) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
181 2700 CLR R16
182 2711 CLR R17
183 C002 RJMP 0x0186
184 5F0F SUBI R16,0xFF
185 4F1F SBCI R17,0xFF
186 3704 CPI R16,0x74
187 E0E4 LDI R30,4
188 071E CPC R17,R30
189 F3D0 BCS 0x0184
18A 9508 RET
_delay_nms:
i --> R10
n --> R12
18B 940E 0225 CALL push_xgset003C
18D 0168 MOVW R12,R16
(0025) }
(0026)
(0027) void delay_nms(unsigned int n) //N ms延时函数
(0028) {
(0029) unsigned int i=0;
18E 24AA CLR R10
18F 24BB CLR R11
(0030) for (i=0;i<n;i++)
190 C004 RJMP 0x0195
(0031) delay_1ms();
191 DFEF RCALL _delay_1ms
192 01C5 MOVW R24,R10
193 9601 ADIW R24,1
194 015C MOVW R10,R24
195 14AC CP R10,R12
196 04BD CPC R11,R13
197 F3C8 BCS 0x0191
198 940C 0213 JMP pop_xgset003C
FILE: D:\MYDOCU~1\MYMCUW~1\AVR\AD\ad.c
(0001) #include <iom16v.h>
(0002) #include "display.c"
(0003) #include "delay.h"
(0004)
(0005) void port_init()
(0006) {
(0007) PORTA = 0x00;
_port_init:
19A 2422 CLR R2
19B BA2B OUT 0x1B,R2
(0008) DDRA = 0x00;
19C BA2A OUT 0x1A,R2
(0009) PORTB = 0x00;
19D BA28 OUT 0x18,R2
(0010) DDRB = 0xF0;
19E EF80 LDI R24,0xF0
19F BB87 OUT 0x17,R24
(0011) PORTC = 0x00; //m103 output only
1A0 BA25 OUT 0x15,R2
(0012) DDRC = 0x00;
1A1 BA24 OUT 0x14,R2
(0013) PORTD = 0x00;
1A2 BA22 OUT 0x12,R2
(0014) DDRD = 0x00;
1A3 BA21 OUT 0x11,R2
1A4 9508 RET
(0015) }
(0016)
(0017) void main()
(0018) {
(0019) unsigned int Ddata;
(0020) port_init();
_main:
Ddata --> R10
1A5 DFF4 RCALL _port_init
(0021) SEG_INIT();
1A6 DF2C RCALL _SEG_INIT
(0022) ADMUX=0;
1A7 2422 CLR R2
1A8 B827 OUT 0x07,R2
1A9 C018 RJMP 0x01C2
(0023) while(1)
(0024) {
(0025) ADCSRA=0XC0;
1AA EC80 LDI R24,0xC0
1AB B986 OUT 0x06,R24
(0026) delay_nms(100);
1AC E604 LDI R16,0x64
1AD E010 LDI R17,0
1AE DFDC RCALL _delay_nms
(0027) while(!(ADCSR&(1<<(ADIF))));
1AF 9B34 SBIS 0x06,4
1B0 CFFE RJMP 0x01AF
(0028) Ddata=ADCL;
1B1 B0A4 IN R10,0x04
1B2 24BB CLR R11
(0029) Ddata+=ADCH*256;
1B3 B125 IN R18,0x05
1B4 2733 CLR R19
1B5 E000 LDI R16,0
1B6 E011 LDI R17,1
1B7 940E 0203 CALL empy16s
1B9 0EA0 ADD R10,R16
1BA 1EB1 ADC R11,R17
(0030) // Ddata=(float)(Ddata)/1023*5000;
(0031) SEG_R(Ddata);
1BB 0185 MOVW R16,R10
1BC DF6F RCALL _SEG_R
(0032) SEG_L(Ddata);
1BD 0185 MOVW R16,R10
1BE DF29 RCALL _SEG_L
(0033) delay_nms(1000);
FILE: <library>
1BF EE08 LDI R16,0xE8
1C0 E013 LDI R17,3
1C1 DFC9 RCALL _delay_nms
1C2 CFE7 RJMP 0x01AA
1C3 9508 RET
push_arg4:
1C4 933A ST R19,-Y
1C5 932A ST R18,-Y
push_arg2:
1C6 931A ST R17,-Y
1C7 930A ST R16,-Y
1C8 9508 RET
mod16s:
1C9 9468 BSET 6
1CA 92DA ST R13,-Y
1CB 2ED1 MOV R13,R17
1CC C004 RJMP 0x01D1
div16s:
1CD 94E8 BCLR 6
1CE 92DA ST R13,-Y
1CF 2ED1 MOV R13,R17
1D0 26D3 EOR R13,R19
1D1 FF17 SBRS R17,7
1D2 C004 RJMP 0x01D7
1D3 9510 COM R17
1D4 9500 COM R16
1D5 5F0F SUBI R16,0xFF
1D6 4F1F SBCI R17,0xFF
1D7 FF37 SBRS R19,7
1D8 C004 RJMP 0x01DD
1D9 9530 COM R19
1DA 9520 COM R18
1DB 5F2F SUBI R18,0xFF
1DC 4F3F SBCI R19,0xFF
1DD 940E 01EA CALL xdiv16u
1DF FED7 SBRS R13,7
1E0 C004 RJMP 0x01E5
1E1 9510 COM R17
1E2 9500 COM R16
1E3 5F0F SUBI R16,0xFF
1E4 4F1F SBCI R17,0xFF
1E5 90D9 LD R13,Y+
1E6 9508 RET
mod16u:
1E7 9468 BSET 6
1E8 C001 RJMP xdiv16u
div16u:
1E9 94E8 BCLR 6
xdiv16u:
1EA 92EA ST R14,-Y
1EB 92FA ST R15,-Y
1EC 938A ST R24,-Y
1ED 24EE CLR R14
1EE 24FF CLR R15
1EF E180 LDI R24,0x10
1F0 0F00 LSL R16
1F1 1F11 ROL R17
1F2 1CEE ROL R14
1F3 1CFF ROL R15
1F4 16E2 CP R14,R18
1F5 06F3 CPC R15,R19
1F6 F018 BCS 0x01FA
1F7 1AE2 SUB R14,R18
1F8 0AF3 SBC R15,R19
1F9 9503 INC R16
1FA 958A DEC R24
1FB F7A1 BNE 0x01F0
1FC F416 BRTC 0x01FF
1FD 2D0E MOV R16,R14
1FE 2D1F MOV R17,R15
1FF 9189 LD R24,Y+
200 90F9 LD R15,Y+
201 90E9 LD R14,Y+
202 9508 RET
empy16s:
203 920A ST R0,-Y
204 921A ST R1,-Y
205 938A ST R24,-Y
206 939A ST R25,-Y
207 9F02 MUL R16,R18
208 01C0 MOVW R24,R0
209 9F12 MUL R17,R18
20A 0D90 ADD R25,R0
20B 9F03 MUL R16,R19
20C 0D90 ADD R25,R0
20D 018C MOVW R16,R24
20E 9199 LD R25,Y+
20F 9189 LD R24,Y+
210 9019 LD R1,Y+
211 9009 LD R0,Y+
212 9508 RET
pop_xgset003C:
213 90A9 LD R10,Y+
214 90B9 LD R11,Y+
215 90C9 LD R12,Y+
216 90D9 LD R13,Y+
217 9508 RET
pop_xgset00FC:
218 90A9 LD R10,Y+
219 90B9 LD R11,Y+
21A 90C9 LD R12,Y+
21B 90D9 LD R13,Y+
21C 90E9 LD R14,Y+
21D 90F9 LD R15,Y+
21E 9508 RET
push_xgsetF0FC:
21F 937A ST R23,-Y
220 936A ST R22,-Y
push_xgset30FC:
221 935A ST R21,-Y
222 934A ST R20,-Y
push_xgset00FC:
223 92FA ST R15,-Y
224 92EA ST R14,-Y
push_xgset003C:
225 92DA ST R13,-Y
226 92CA ST R12,-Y
227 92BA ST R11,-Y
228 92AA ST R10,-Y
229 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -