📄 li_jyq.lst
字号:
__start:
__text_start:
18E EFCF LDI R28,0xFF
18F E1D0 LDI R29,0x10
190 BFCD OUT 0x3D,R28
191 BFDE OUT 0x3E,R29
192 54C0 SUBI R28,0x40
193 40D0 SBCI R29,0
194 EA0A LDI R16,0xAA
195 8308 STD Y+0,R16
196 2400 CLR R0
197 E4EE LDI R30,0x4E
198 E0F3 LDI R31,3
199 E013 LDI R17,3
19A 3FE2 CPI R30,0xF2
19B 07F1 CPC R31,R17
19C F011 BEQ 0x019F
19D 9201 ST R0,Z+
19E CFFB RJMP 0x019A
19F 8300 STD Z+0,R16
1A0 ECEE LDI R30,0xCE
1A1 E0F0 LDI R31,0
1A2 E0A0 LDI R26,0
1A3 E0B1 LDI R27,1
1A4 E013 LDI R17,3
1A5 31EC CPI R30,0x1C
1A6 07F1 CPC R31,R17
1A7 F021 BEQ 0x01AC
1A8 95C8 LPM
1A9 9631 ADIW R30,1
1AA 920D ST R0,X+
1AB CFF9 RJMP 0x01A5
1AC 940E 15DE CALL _main
_exit:
1AE CFFF RJMP _exit
FILE: D:\LZY归档\最新进样器文件\最新带锁进样器程序\调试程序1.c
(0001) //****************************************************************************
(0002) //功能描述:引导程序
(0003) //文件名称:AutoBootLoad.c
(0004) //更新时间:2007年03月02日
(0005) //微控制器:ATmega128
(0006) //外部时钟:12MHz
(0007) //编译版本:ICCAVR Version 6.25A Built May 15 2002 8:20:03
(0008) //特别说明:本程序使用于自动进样器改进版控制电路中,完成引导在线自动更新程序用;
(0009) //****************************************************************************
(0010)
(0011) #include <iom128v.h>
(0012) #include <STDIO.H>
(0013) #include <macros.h>
(0014) #include <eeprom.h>
(0015) #include "ZDJY.h"
(0016)
(0017) //void MainSend(void)
(0018)
(0019) void port_init(void) //端口初始化
(0020) {
(0021) PORTA = 0xFF;
_port_init:
1AF EF8F LDI R24,0xFF
1B0 BB8B OUT 0x1B,R24
(0022) DDRA = 0xFF;
1B1 BB8A OUT 0x1A,R24
(0023) PORTB = 0xFF;
1B2 BB88 OUT 0x18,R24
(0024) DDRB = 0xFF;
1B3 BB87 OUT 0x17,R24
(0025) PORTC = 0xFF;
1B4 BB85 OUT 0x15,R24
(0026) DDRC = 0xFF;
1B5 BB84 OUT 0x14,R24
(0027) PORTD = 0xFF;
1B6 BB82 OUT 0x12,R24
(0028) DDRD = 0x00;
1B7 2422 CLR R2
1B8 BA21 OUT 0x11,R2
(0029) PORTE = 0xFF;
1B9 B983 OUT 0x03,R24
(0030) DDRE = 0xFF;
1BA B982 OUT 0x02,R24
(0031) PORTF = 0xFB;
1BB EF8B LDI R24,0xFB
1BC 9380 0062 STS 0x0062,R24
(0032) DDRF = 0xFF;
1BE EF8F LDI R24,0xFF
1BF 9380 0061 STS 0x0061,R24
(0033) PORTG = 0x1F;
1C1 E18F LDI R24,0x1F
1C2 9380 0065 STS 0x0065,R24
(0034) DDRG = 0x1F;
1C4 9380 0064 STS 0x0064,R24
1C6 9508 RET
(0035) }
(0036)
(0037)
(0038) void init_devices(void) //寄存器处始化
(0039) {
(0040) //stop errant interrupts until set up
(0041) CLI(); //disable all interrupts
_init_devices:
1C7 94F8 BCLR 7
(0042) XDIV = 0x00; //xtal divider
1C8 2422 CLR R2
1C9 BE2C OUT 0x3C,R2
(0043) XMCRA = 0x00; //external memory
1CA 9220 006D STS 0x006D,R2
(0044) port_init();
1CC DFE2 RCALL _port_init
(0045)
(0046) MCUCR = 0x00;
1CD 2422 CLR R2
1CE BE25 OUT 0x35,R2
(0047) EICRA = 0x00; //extended ext ints
1CF 9220 006A STS 0x006A,R2
(0048) EICRB = 0x00; //extended ext ints
1D1 BE2A OUT 0x3A,R2
(0049) EIMSK = 0x00;
1D2 BE29 OUT 0x39,R2
(0050) TIMSK = 0x00; //timer interrupt sources
1D3 BE27 OUT 0x37,R2
(0051) ETIMSK = 0x00; //extended timer interrupt sources
1D4 9220 007D STS 0x007D,R2
(0052) // PORTC = 0x00;
(0053) MCUCR|= 0x80;
1D6 B785 IN R24,0x35
1D7 6880 ORI R24,0x80
1D8 BF85 OUT 0x35,R24
(0054) //SFIOR = 0X00;
(0055) XMCRA = 0x00;
1D9 9220 006D STS 0x006D,R2
(0056) SEI(); //re-enable interrupts
1DB 9478 BSET 7
1DC 9508 RET
_InitMotor:
STRB_HIG --> R20
STRB_LOW --> R14
DATA_HIG --> R10
CLOK_HIG --> R22
CLOK_LOW --> Y,+1
DATA_LOW --> Y,+0
Port --> R16
1DD 940E 1741 CALL push_xgsetF0FC
1DF 9722 SBIW R28,2
(0057) //all peripherals are now initialised
(0058) }
(0059)
(0060)
(0061) unsigned char InitMotor(unsigned char Port) //步进电机初始化
(0062) {
(0063) unsigned char STRB_LOW,CLOK_LOW,DATA_LOW;
(0064) unsigned char STRB_HIG,CLOK_HIG,DATA_HIG;
(0065)
(0066) if((Port>=0x01)&&(Port<=0x04))
1E0 3001 CPI R16,1
1E1 F408 BCC 0x01E3
1E2 C16A RJMP 0x034D
1E3 E084 LDI R24,4
1E4 1780 CP R24,R16
1E5 F408 BCC 0x01E7
1E6 C166 RJMP 0x034D
(0067) {
(0068) switch(Port)
1E7 2EC0 MOV R12,R16
1E8 24DD CLR R13
1E9 01C6 MOVW R24,R12
1EA 3081 CPI R24,1
1EB E0E0 LDI R30,0
1EC 079E CPC R25,R30
1ED F069 BEQ 0x01FB
1EE 3082 CPI R24,2
1EF E0E0 LDI R30,0
1F0 079E CPC R25,R30
1F1 F091 BEQ 0x0204
1F2 3083 CPI R24,3
1F3 E0E0 LDI R30,0
1F4 079E CPC R25,R30
1F5 F0B9 BEQ 0x020D
1F6 3084 CPI R24,4
1F7 E0E0 LDI R30,0
1F8 079E CPC R25,R30
1F9 F0E1 BEQ 0x0216
1FA C023 RJMP 0x021E
(0069) {
(0070) case 0x01:
(0071) STRB_LOW = 0x00;
1FB 24EE CLR R14
(0072) STRB_HIG = 0x10;
1FC E140 LDI R20,0x10
(0073) CLOK_LOW = 0x00;
1FD 2400 CLR R0
1FE 8209 STD Y+1,R0
(0074) CLOK_HIG = 0x01;
1FF E061 LDI R22,1
(0075) DATA_LOW = 0x00;
200 8208 STD Y+0,R0
(0076) DATA_HIG = 0x10;
201 E180 LDI R24,0x10
202 2EA8 MOV R10,R24
(0077) break;
203 C01A RJMP 0x021E
(0078) case 0x02:
(0079) STRB_LOW = 0x00;
204 24EE CLR R14
(0080) STRB_HIG = 0x20;
205 E240 LDI R20,0x20
(0081) CLOK_LOW = 0x00;
206 2400 CLR R0
207 8209 STD Y+1,R0
(0082) CLOK_HIG = 0x02;
208 E062 LDI R22,2
(0083) DATA_LOW = 0x00;
209 8208 STD Y+0,R0
(0084) DATA_HIG = 0x20;
20A E280 LDI R24,0x20
20B 2EA8 MOV R10,R24
(0085) break;
20C C011 RJMP 0x021E
(0086) case 0x03:
(0087) STRB_LOW = 0x00;
20D 24EE CLR R14
(0088) STRB_HIG = 0x40;
20E E440 LDI R20,0x40
(0089) CLOK_LOW = 0x00;
20F 2400 CLR R0
210 8209 STD Y+1,R0
(0090) CLOK_HIG = 0x04;
211 E064 LDI R22,4
(0091) DATA_LOW = 0x00;
212 8208 STD Y+0,R0
(0092) DATA_HIG = 0x40;
213 E480 LDI R24,0x40
214 2EA8 MOV R10,R24
(0093) break;
215 C008 RJMP 0x021E
(0094) case 0x04:
(0095) STRB_LOW = 0x00;
216 24EE CLR R14
(0096) STRB_HIG = 0x80;
217 E840 LDI R20,0x80
(0097) CLOK_LOW = 0x00;
218 2400 CLR R0
219 8209 STD Y+1,R0
(0098) CLOK_HIG = 0x08;
21A E068 LDI R22,0x8
(0099) DATA_LOW = 0x00;
21B 8208 STD Y+0,R0
(0100) DATA_HIG = 0x80;
21C E880 LDI R24,0x80
21D 2EA8 MOV R10,R24
(0101) break;
(0102) }
(0103)
(0104) PORTB=CLOK_LOW;
21E 8009 LDD R0,Y+1
21F BA08 OUT 0x18,R0
(0105) PORTB=CLOK_LOW;
220 BA08 OUT 0x18,R0
(0106) PORTE=STRB_LOW;
221 B8E3 OUT 0x03,R14
(0107) PORTE=STRB_LOW;
222 B8E3 OUT 0x03,R14
(0108)
(0109) PORTB=DATA_HIG; //D18 0:处于低功耗状态,输出被禁止,1:正常工作状态
223 BAA8 OUT 0x18,R10
(0110) PORTB=DATA_HIG;
224 BAA8 OUT 0x18,R10
(0111) PORTB=DATA_HIG|CLOK_LOW;
225 2C2A MOV R2,R10
226 2820 OR R2,R0
227 BA28 OUT 0x18,R2
(0112) PORTB=DATA_HIG|CLOK_LOW;
228 2C2A MOV R2,R10
229 2820 OR R2,R0
22A BA28 OUT 0x18,R2
(0113) PORTB=DATA_HIG|CLOK_HIG;
22B 2C2A MOV R2,R10
22C 2A26 OR R2,R22
22D BA28 OUT 0x18,R2
(0114) PORTB=DATA_HIG|CLOK_HIG;
22E 2C2A MOV R2,R10
22F 2A26 OR R2,R22
230 BA28 OUT 0x18,R2
(0115)
(0116) PORTB=DATA_LOW; //D17 11:测试状态,00:正常工作
231 8008 LDD R0,Y+0
232 BA08 OUT 0x18,R0
(0117) PORTB=DATA_LOW;
233 BA08 OUT 0x18,R0
(0118) PORTB=DATA_LOW|CLOK_LOW;
234 2C20 MOV R2,R0
235 8009 LDD R0,Y+1
236 2820 OR R2,R0
237 BA28 OUT 0x18,R2
(0119) PORTB=DATA_LOW|CLOK_LOW;
238 8028 LDD R2,Y+0
239 2820 OR R2,R0
23A BA28 OUT 0x18,R2
(0120) PORTB=DATA_LOW|CLOK_HIG;
23B 8028 LDD R2,Y+0
23C 2A26 OR R2,R22
23D BA28 OUT 0x18,R2
(0121) PORTB=DATA_LOW|CLOK_HIG;
23E 8028 LDD R2,Y+0
23F 2A26 OR R2,R22
240 BA28 OUT 0x18,R2
(0122)
(0123) PORTB=DATA_LOW; //D16
241 8008 LDD R0,Y+0
242 BA08 OUT 0x18,R0
(0124) PORTB=DATA_LOW;
243 BA08 OUT 0x18,R0
(0125) PORTB=DATA_LOW|CLOK_LOW;
244 2C20 MOV R2,R0
245 8009 LDD R0,Y+1
246 2820 OR R2,R0
247 BA28 OUT 0x18,R2
(0126) PORTB=DATA_LOW|CLOK_LOW;
248 8028 LDD R2,Y+0
249 2820 OR R2,R0
24A BA28 OUT 0x18,R2
(0127) PORTB=DATA_LOW|CLOK_HIG;
24B 8028 LDD R2,Y+0
24C 2A26 OR R2,R22
24D BA28 OUT 0x18,R2
(0128) PORTB=DATA_LOW|CLOK_HIG;
24E 8028 LDD R2,Y+0
24F 2A26 OR R2,R22
250 BA28 OUT 0x18,R2
(0129)
(0130) PORTB=DATA_LOW; //D15 00:主动模式,01:被动模式,10:禁止模式,11:下桥臂模式
251 8008 LDD R0,Y+0
252 BA08 OUT 0x18,R0
(0131) PORTB=DATA_LOW;
253 BA08 OUT 0x18,R0
(0132) PORTB=DATA_LOW|CLOK_LOW;
254 2C20 MOV R2,R0
255 8009 LDD R0,Y+1
256 2820 OR R2,R0
257 BA28 OUT 0x18,R2
(0133) PORTB=DATA_LOW|CLOK_LOW;
258 8028 LDD R2,Y+0
259 2820 OR R2,R0
25A BA28 OUT 0x18,R2
(0134) PORTB=DATA_LOW|CLOK_HIG;
25B 8028 LDD R2,Y+0
25C 2A26 OR R2,R22
25D BA28 OUT 0x18,R2
(0135) PORTB=DATA_LOW|CLOK_HIG;
25E 8028 LDD R2,Y+0
25F 2A26 OR R2,R22
260 BA28 OUT 0x18,R2
(0136)
(0137) PORTB=DATA_LOW; //D14
261 8008 LDD R0,Y+0
262 BA08 OUT 0x18,R0
(0138) PORTB=DATA_LOW;
263 BA08 OUT 0x18,R0
(0139) PORTB=DATA_LOW|CLOK_LOW;
264 2C20 MOV R2,R0
265 8009 LDD R0,Y+1
266 2820 OR R2,R0
267 BA28 OUT 0x18,R2
(0140) PORTB=DATA_LOW|CLOK_LOW;
268 8028 LDD R2,Y+0
269 2820 OR R2,R0
26A BA28 OUT 0x18,R2
(0141) PORTB=DATA_LOW|CLOK_HIG;
26B 8028 LDD R2,Y+0
26C 2A26 OR R2,R22
26D BA28 OUT 0x18,R2
(0142) PORTB=DATA_LOW|CLOK_HIG;
26E 8028 LDD R2,Y+0
26F 2A26 OR R2,R22
270 BA28 OUT 0x18,R2
(0143)
(0144) PORTB=DATA_LOW; //D13 00:内部4MHZ晶振,01:外部时钟,10:外部时钟1/2,11:外部时钟1/4
271 8008 LDD R0,Y+0
272 BA08 OUT 0x18,R0
(0145) PORTB=DATA_LOW;
273 BA08 OUT 0x18,R0
(0146) PORTB=DATA_LOW|CLOK_LOW;
274 2C20 MOV R2,R0
275 8009 LDD R0,Y+1
276 2820 OR R2,R0
277 BA28 OUT 0x18,R2
(0147) PORTB=DATA_LOW|CLOK_LOW;
278 8028 LDD R2,Y+0
279 2820 OR R2,R0
27A BA28 OUT 0x18,R2
(0148) PORTB=DATA_LOW|CLOK_HIG;
27B 8028 LDD R2,Y+0
27C 2A26 OR R2,R22
27D BA28 OUT 0x18,R2
(0149) PORTB=DATA_LOW|CLOK_HIG;
27E 8028 LDD R2,Y+0
27F 2A26 OR R2,R22
280 BA28 OUT 0x18,R2
(0150)
(0151) PORTB=DATA_LOW; //D12
281 8008 LDD R0,Y+0
282 BA08 OUT 0x18,R0
(0152) PORTB=DATA_LOW;
283 BA08 OUT 0x18,R0
(0153) PORTB=DATA_LOW|CLOK_LOW;
284 2C20 MOV R2,R0
285 8009 LDD R0,Y+1
286 2820 OR R2,R0
287 BA28 OUT 0x18,R2
(0154) PORTB=DATA_LOW|CLOK_LOW;
288 8028 LDD R2,Y+0
289 2820 OR R2,R0
28A BA28 OUT 0x18,R2
(0155) PORTB=DATA_LOW|CLOK_HIG;
28B 8028 LDD R2,Y+0
28C 2A26 OR R2,R22
28D BA28 OUT 0x18,R2
(0156) PORTB=DATA_LOW|CLOK_HIG;
28E 8028 LDD R2,Y+0
28F 2A26 OR R2,R22
290 BA28 OUT 0x18,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -