📄 bjqd.lst
字号:
(0188) if (da_counter==64)
0179 91800077 LDS R24,da_counter
017B 3480 CPI R24,0x40
017C F541 BNE 0x01A5
(0189) {
(0190) PORTC|=(1<<DA_SIN);
017D 9AAF SBI 0x15,7
(0191) PORTC&=~(1<<DA_COS);
017E 98AE CBI 0x15,6
(0192) }
(0193) }
(0194) }
(0195) }
017F C025 RJMP 0x01A5
(0196) else //反转
(0197) {
(0198) if (ac_bd_state==0) //ac相处理
0180 90200069 LDS R2,ac_bd_state
0182 2022 TST R2
0183 F489 BNE 0x0195
(0199) {
(0200) if (da_counter==0)
0184 90200077 LDS R2,da_counter
0186 2022 TST R2
0187 F431 BNE 0x018E
(0201) {
(0202) PORTC&=~(1<<DA_SIN);
0188 98AF CBI 0x15,7
(0203) PORTC|=(1<<DA_COS);
0189 9AAE SBI 0x15,6
(0204) ac_bd_state=1;
018A E081 LDI R24,1
018B 93800069 STS ac_bd_state,R24
(0205) }
018D C017 RJMP 0x01A5
(0206) else
(0207) {
(0208) if (da_counter==64)
018E 91800077 LDS R24,da_counter
0190 3480 CPI R24,0x40
0191 F499 BNE 0x01A5
(0209) {
(0210) PORTC&=~(1<<DA_SIN);
0192 98AF CBI 0x15,7
(0211) PORTC&=~(1<<DA_COS);
0193 98AE CBI 0x15,6
(0212) }
(0213) }
(0214) }
0194 C010 RJMP 0x01A5
(0215) else //bd相处理
(0216) {
(0217) if (da_counter==0)
0195 90200077 LDS R2,da_counter
0197 2022 TST R2
0198 F431 BNE 0x019F
(0218) {
(0219) PORTC|=(1<<DA_SIN);
0199 9AAF SBI 0x15,7
(0220) PORTC&=~(1<<DA_COS);
019A 98AE CBI 0x15,6
(0221) ac_bd_state=0;
019B 2422 CLR R2
019C 92200069 STS ac_bd_state,R2
(0222) }
019E C006 RJMP 0x01A5
(0223) else
(0224) {
(0225) if (da_counter==64)
019F 91800077 LDS R24,da_counter
01A1 3480 CPI R24,0x40
01A2 F411 BNE 0x01A5
(0226) {
(0227) PORTC|=(1<<DA_SIN);
01A3 9AAF SBI 0x15,7
(0228) PORTC|=(1<<DA_COS);
01A4 9AAE SBI 0x15,6
(0229) }
(0230) }
(0231) }
(0232) }
(0233) if (micros_nu0==32) //根据细分数对地址指针步进
01A5 91800075 LDS R24,micros_nu0
01A7 3280 CPI R24,0x20
01A8 F431 BNE 0x01AF
(0234) {da_counter++;}
01A9 91800077 LDS R24,da_counter
01AB 5F8F SUBI R24,0xFF
01AC 93800077 STS da_counter,R24
01AE C031 RJMP 0x01E0
(0235) else
(0236) {
(0237) if (micros_nu0==16)
01AF 91800075 LDS R24,micros_nu0
01B1 3180 CPI R24,0x10
01B2 F431 BNE 0x01B9
(0238) {da_counter=da_counter+2;}
01B3 91800077 LDS R24,da_counter
01B5 5F8E SUBI R24,0xFE
01B6 93800077 STS da_counter,R24
01B8 C027 RJMP 0x01E0
(0239) else
(0240) {
(0241) if (micros_nu0==8)
01B9 91800075 LDS R24,micros_nu0
01BB 3088 CPI R24,0x8
01BC F431 BNE 0x01C3
(0242) {da_counter=da_counter+4;}
01BD 91800077 LDS R24,da_counter
01BF 5F8C SUBI R24,0xFC
01C0 93800077 STS da_counter,R24
01C2 C01D RJMP 0x01E0
(0243) else
(0244) {
(0245) if (micros_nu0==4)
01C3 91800075 LDS R24,micros_nu0
01C5 3084 CPI R24,4
01C6 F431 BNE 0x01CD
(0246) {da_counter=da_counter+8;}
01C7 91800077 LDS R24,da_counter
01C9 5F88 SUBI R24,0xF8
01CA 93800077 STS da_counter,R24
01CC C013 RJMP 0x01E0
(0247) else
(0248) {
(0249) if (micros_nu0==2)
01CD 91800075 LDS R24,micros_nu0
01CF 3082 CPI R24,2
01D0 F431 BNE 0x01D7
(0250) {da_counter=da_counter+16;}
01D1 91800077 LDS R24,da_counter
01D3 5F80 SUBI R24,0xF0
01D4 93800077 STS da_counter,R24
01D6 C009 RJMP 0x01E0
(0251) else
(0252) {
(0253) if (micros_nu0==1)
01D7 91800075 LDS R24,micros_nu0
01D9 3081 CPI R24,1
01DA F429 BNE 0x01E0
(0254) {da_counter=da_counter+32;}
01DB 91800077 LDS R24,da_counter
01DD 5E80 SUBI R24,0xE0
01DE 93800077 STS da_counter,R24
(0255) }
(0256) }
(0257) }
(0258) }
(0259) }
01E0 9029 LD R2,Y+
01E1 BE2F OUT 0x3F,R2
01E2 91F9 LD R31,Y+
01E3 91E9 LD R30,Y+
01E4 9199 LD R25,Y+
01E5 9189 LD R24,Y+
01E6 9129 LD R18,Y+
01E7 9109 LD R16,Y+
01E8 9039 LD R3,Y+
01E9 9029 LD R2,Y+
01EA 9518 RETI
_time2_int:
01EB 922A ST R2,-Y
01EC 923A ST R3,-Y
01ED 938A ST R24,-Y
01EE 939A ST R25,-Y
01EF B62F IN R2,0x3F
01F0 922A ST R2,-Y
(0260) }
(0261)
(0262) /******************************************************
(0263) 测量脉冲闸门时间波形中断函数(定时器2比较匹配中断)20-12KHZ 1-600RPM
(0264) ******************************************************/
(0265) void time2_int(void)
(0266) {
(0267) //200MS闸门
(0268) counter++;
01F1 91800062 LDS R24,counter
01F3 5F8F SUBI R24,0xFF
01F4 93800062 STS counter,R24
(0269) if (counter==6)
01F6 3086 CPI R24,6
01F7 F411 BNE 0x01FA
(0270) {OCR2=32;}
01F8 E280 LDI R24,0x20
01F9 BD83 OUT 0x23,R24
(0271) if (counter==7)
01FA 91800062 LDS R24,counter
01FC 3087 CPI R24,7
01FD F491 BNE 0x0210
(0272) {
(0273) speed_pull=pull_number;
01FE 9020007D LDS R2,pull_number
0200 9030007E LDS R3,pull_number+1
0202 92300061 STS speed_pull+1,R3
0204 92200060 STS speed_pull,R2
(0274) pull_number=0;
0206 2422 CLR R2
0207 2433 CLR R3
0208 9230007E STS pull_number+1,R3
020A 9220007D STS pull_number,R2
(0275) counter=0;
020C 92200062 STS counter,R2
(0276) OCR2=0XFF;
020E EF8F LDI R24,0xFF
020F BD83 OUT 0x23,R24
(0277) }
0210 9029 LD R2,Y+
0211 BE2F OUT 0x3F,R2
0212 9199 LD R25,Y+
0213 9189 LD R24,Y+
0214 9039 LD R3,Y+
0215 9029 LD R2,Y+
0216 9518 RETI
_pull_int:
0217 922A ST R2,-Y
0218 923A ST R3,-Y
0219 938A ST R24,-Y
021A 939A ST R25,-Y
021B B62F IN R2,0x3F
021C 922A ST R2,-Y
(0278) }
(0279) /******************************************************
(0280) 测量脉冲数中断函数(外部INT0中断)
(0281) ******************************************************/
(0282) void pull_int(void)
(0283) {
(0284) pull_number++;
021D 9180007D LDS R24,pull_number
021F 9190007E LDS R25,pull_number+1
0221 9601 ADIW R24,1
0222 9390007E STS pull_number+1,R25
0224 9380007D STS pull_number,R24
(0285) if (pull_number>2400)
0226 E680 LDI R24,0x60
0227 E099 LDI R25,0x9
0228 9020007D LDS R2,pull_number
022A 9030007E LDS R3,pull_number+1
022C 1582 CP R24,R2
022D 0593 CPC R25,R3
022E F420 BCC 0x0233
(0286) {pull_number=2400;}
022F 9390007E STS pull_number+1,R25
0231 9380007D STS pull_number,R24
0233 9029 LD R2,Y+
0234 BE2F OUT 0x3F,R2
0235 9199 LD R25,Y+
0236 9189 LD R24,Y+
0237 9039 LD R3,Y+
0238 9029 LD R2,Y+
0239 9518 RETI
(0287) }
(0288) /****************************************************************
(0289) 定时器1初始化函数
(0290) ****************************************************************/
(0291) void timer1_init(void)
(0292) {
(0293) TCCR1B = (1<<CS10)|(1<<WGM12); //time1的控制寄存器B,CTC模式,clk=系统时钟
_timer1_init:
023A E089 LDI R24,0x9
023B BD8E OUT 0x2E,R24
(0294) TIMSK &=~(1<<OCIE1A); //定时中断屏蔽寄存器
023C B789 IN R24,0x39
023D 7E8F ANDI R24,0xEF
023E BF89 OUT 0x39,R24
023F 9508 RET
(0295) }
(0296)
(0297) /****************************************************************
(0298) 定时器2初始化函数
(0299) ****************************************************************/
(0300) void timer2_init(void)
(0301) {
(0302) TCCR2=(1<<CS20)|(1<<CS21)|(1<<CS22)|(1<<WGM21);
_timer2_init:
0240 E08F LDI R24,0xF
0241 BD85 OUT 0x25,R24
(0303) OCR2=0XFF;
0242 EF8F LDI R24,0xFF
0243 BD83 OUT 0x23,R24
0244 9508 RET
(0304) }
(0305) /****************************************************************
(0306) INT0初始化函数
(0307) ****************************************************************/
(0308) void int0_init(void)
(0309) {
(0310) DDRD&=~(1<PULL_IN);
_int0_init:
0245 9888 CBI 0x11,0
(0311) MCUCR=(1<<ISC01)|(1<<ISC00);
0246 E083 LDI R24,3
0247 BF85 OUT 0x35,R24
0248 9508 RET
(0312) }
(0313)
(0314)
(0315) /****************************************************************
(0316) 端口初始化
(0317) ****************************************************************/
(0318) void port_init(void)
(0319) {
(0320) //PORTA = 0xff;
(0321) //DDRA = 0xdf;
(0322) //PORTB = 0x00;
(0323) //DDRB = 0x00;
(0324) //PORTC = 0b01111110;
(0325) //DDRC = 0b10000001;
(0326) //PORTD = 0xff;
(0327) //DDRD = 0x00;
(0328) PORTC&=~(1<<INT);
_port_init:
0249 98A9 CBI 0x15,1
(0329) DDRC |=(1<<INT);
024A 9AA1 SBI 0x14,1
024B 9508 RET
(0330) }
(0331)
(0332) /******************************************************
(0333) 脉冲输入开始函数
(0334) ******************************************************/
(0335) void pull_start(void)
(0336) {
(0337) GICR|=(1<<INT0);
_pull_start:
024C B78B IN R24,0x3B
024D 6480 ORI R24,0x40
024E BF8B OUT 0x3B,R24
(0338) TIMSK|=(1<<OCIE2);
024F B789 IN R24,0x39
0250 6880 ORI R24,0x80
0251 BF89 OUT 0x39,R24
(0339) pull_number=0;
0252 2422 CLR R2
0253 2433 CLR R3
0254 9230007E STS pull_number+1,R3
0256 9220007D STS pull_number,R2
(0340) counter=0;
0258 92200062 STS counter,R2
(0341) OCR2=0XFF;
025A EF8F LDI R24,0xFF
025B BD83 OUT 0x23,R24
025C 9508 RET
(0342) }
(0343) /******************************************************
(0344) 脉冲输入开始函数
(0345) ******************************************************/
(0346) void pull_stop(void)
(0347) {
(0348) GICR&=~(1<<INT0);
_pull_stop:
025D B78B IN R24,0x3B
025E 7B8F ANDI R24,0xBF
025F BF8B OUT 0x3B,R24
(0349) TIMSK&=~(1<<OCIE2);
0260 B789 IN R24,0x39
0261 778F ANDI R24,0x7F
0262 BF89 OUT 0x39,R24
0263 9508 RET
(0350) }
(0351) /******************************************************
(0352) D/A初始化函数
(0353) ******************************************************/
(0354) void da_init(void)
(0355) {
(0356) cal_timer1(speed);
_da_init:
0264 91000081 LDS R16,speed
0266 91100082 LDS R17,speed+1
0268 D102 RCALL _cal_timer1
(0357) PORTA|=(1<<DA_WR);
0269 9AD9 SBI 0x1B,1
(0358) PORTD|=(1<<DA_CS);
026A 9A96 SBI 0x12,6
(0359) DDRA|=(1<<DA_WR);
026B 9AD1 SBI 0x1A,1
(0360) DDRD|=(1<<DA_CS)|(1<<DA_AB);
026C B381 IN R24,0x11
026D 6C80 ORI R24,0xC0
026E BB81 OUT 0x11,R24
(0361) DDRC|=(1<<DA_SIN)|(1<<DA_COS);
026F B384 IN R24,0x14
0270 6C80 ORI R24,0xC0
0271 BB84 OUT 0x14,R24
(0362) DATA_OUT=0x00;
0272 2422 CLR R2
0273 BA28 OUT 0x18,R2
(0363) DATA_IO=0xff;
0274 EF8F LDI R24,0xFF
0275 BB87 OUT 0x17,R24
(0364) timer1_init();
0276 DFC3 RCALL _timer1_init
0277 9508 RET
(0365) }
(0366)
(0367)
(0368) /****************************************************************
(0369) A/D初始化
(0370) ****************************************************************/
(0371) void adc_init(void)
(0372) {
(0373) ADMUX=0b00000000; //选择ADC0做AD输入
_adc_init:
0278 2422 CLR R2
0279 B827 OUT 0x07,R2
(0374) ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADATE); //允许AD转换,128分频
027A EA87 LDI R24,0xA7
027B B986 OUT 0x06,R24
027C 9508 RET
_adc_change:
l --> R22
g --> R20
s --> Y+0
j --> R12
k --> R10
i --> R14
027D 940E0A23 CALL push_gset5
027F 9764 SBIW R28,0x14
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -