📄 m8pwm.lis
字号:
01EA .dbline 183
01EA .dbline 184
01EA 2224 clr R2
01EC 25BC out 0x25,R2
01EE .dbline 185
01EE 85B7 in R24,0x35
01F0 8460 ori R24,4
01F2 85BF out 0x35,R24
01F4 .dbline 186
01F4 85B3 in R24,0x15
01F6 8360 ori R24,3
01F8 85BB out 0x15,R24
01FA .dbline 187
01FA 85E5 ldi R24,85
01FC 80930C00 sts _BrakeFlag,R24
0200 .dbline 188
0200 L17:
0200 .dbline -2
0200 L15:
0200 2990 ld R2,y+
0202 2FBE out 0x3f,R2
0204 8991 ld R24,y+
0206 2990 ld R2,y+
0208 .dbline 0 ; func end
0208 1895 reti
020A .dbend
020A .dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
020A _uart0_rx_isr::
020A 00D0 rcall push_lset
020C .dbline -1
020C .dbline 194
020C ; else
020C ; {//下降沿触发中断,为刹车状态
020C ; TCCR2=0;//
020C ; MCUCR|=(0x01<<ISC10);//set ISC10,设为上升沿触发
020C ; BRAKE_LED_ON;
020C ; BrakeFlag=0x55;
020C ; }
020C ; }
020C ; /***************************************************************************
020C ; 串口接收中断程序
020C ; ****************************************************************************/
020C ; void uart0_rx_isr(void)
020C ; {
020C .dbline 197
020C ; //uart has received a character in UDR
020C ;
020C ; UartBuf[UartBufCount++]= UDR;
020C 20900A00 lds R2,_UartBufCount
0210 3324 clr R3
0212 822D mov R24,R2
0214 8F5F subi R24,255 ; addi 1
0216 80930A00 sts _UartBufCount,R24
021A 80E0 ldi R24,<_UartBuf
021C 90E0 ldi R25,>_UartBuf
021E E22D mov R30,R2
0220 FF27 clr R31
0222 E80F add R30,R24
0224 F91F adc R31,R25
0226 2CB0 in R2,0xc
0228 2082 std z+0,R2
022A .dbline 199
022A ; //PORTC ^=0x20;
022A ; if(UartBuf[0]==0xaa)//包头
022A 80910000 lds R24,_UartBuf
022E 8A3A cpi R24,170
0230 79F5 brne L19
0232 .dbline 200
0232 ; {
0232 .dbline 203
0232 ; //UartBuf[3]=Rev,Rev,Rev,RevMode,Rev,Rev,LEFT_LED,RIGHT_LED
0232 ;
0232 ; if(UartBufCount>4)
0232 84E0 ldi R24,4
0234 20900A00 lds R2,_UartBufCount
0238 8215 cp R24,R2
023A 68F5 brsh L20
023C .dbline 204
023C ; {
023C .dbline 205
023C ; if( ((UartBuf[1]+UartBuf[2])==0xff)&&
023C 20900200 lds R2,_UartBuf+2
0240 80910100 lds R24,_UartBuf+1
0244 820D add R24,R2
0246 8F3F cpi R24,255
0248 F9F4 brne L23
024A 20900400 lds R2,_UartBuf+4
024E 80910300 lds R24,_UartBuf+3
0252 820D add R24,R2
0254 8F3F cpi R24,255
0256 C1F4 brne L23
0258 .dbline 207
0258 ; ((UartBuf[3]+UartBuf[4])==0xff) )
0258 ; {
0258 .dbline 208
0258 ; LrLedReg=UartBuf[3]&0x03;//
0258 80910300 lds R24,_UartBuf+3
025C 8370 andi R24,3
025E 80930B00 sts _LrLedReg,R24
0262 .dbline 209
0262 ; if(BrakeFlag!=0x55)
0262 80910C00 lds R24,_BrakeFlag
0266 8535 cpi R24,85
0268 41F0 breq L30
026A .dbline 210
026A ; {
026A .dbline 211
026A ; PORTC&=0xfc;//
026A 85B3 in R24,0x15
026C 8C7F andi R24,252
026E 85BB out 0x15,R24
0270 .dbline 212
0270 ; PORTC|=LrLedReg;
0270 20900B00 lds R2,_LrLedReg
0274 35B2 in R3,0x15
0276 3228 or R3,R2
0278 35BA out 0x15,R3
027A .dbline 213
027A ; }
027A L30:
027A .dbline 214
027A ; tx_pack(UartBuf[3]);
027A 00910300 lds R16,_UartBuf+3
027E 11D0 rcall _tx_pack
0280 .dbline 215
0280 ; PORTC ^=0x20;
0280 80E2 ldi R24,32
0282 25B2 in R2,0x15
0284 2826 eor R2,R24
0286 25BA out 0x15,R2
0288 .dbline 216
0288 ; }
0288 L23:
0288 .dbline 217
0288 ; UartBufCount=0;
0288 2224 clr R2
028A 20920A00 sts _UartBufCount,R2
028E .dbline 218
028E ; }
028E .dbline 219
028E ; }
028E 03C0 rjmp L20
0290 L19:
0290 .dbline 220
0290 2224 clr R2
0292 20920A00 sts _UartBufCount,R2
0296 L20:
0296 .dbline -2
0296 L18:
0296 00D0 rcall pop_lset
0298 .dbline 0 ; func end
0298 1895 reti
029A .dbend
029A .dbfunc e uart0_tx _uart0_tx fV
029A ; tdata -> R16
.even
029A _uart0_tx::
029A .dbline -1
029A .dbline 227
029A ; else UartBufCount=0;
029A ;
029A ; }
029A ; /***************************************************************************
029A ; 串口接收程序
029A ; ****************************************************************************/
029A ; void uart0_tx(unsigned char tdata)
029A ; {
029A L34:
029A .dbline 228
029A L35:
029A .dbline 228
029A ; while(!(UCSRA & (1<<UDRE) ));
029A 5D9B sbis 0xb,5
029C FECF rjmp L34
029E .dbline 229
029E ; UDR = tdata;
029E 0CB9 out 0xc,R16
02A0 .dbline -2
02A0 L33:
02A0 .dbline 0 ; func end
02A0 0895 ret
02A2 .dbsym r tdata 16 c
02A2 .dbend
02A2 .dbfunc e tx_pack _tx_pack fV
02A2 ; tmptt -> R20
02A2 ; mode -> R20
.even
02A2 _tx_pack::
02A2 00D0 rcall push_gset1
02A4 402F mov R20,R16
02A6 .dbline -1
02A6 .dbline 232
02A6 ; }
02A6 ; void tx_pack(uchar mode)
02A6 ; { //revmode=mode&0x10
02A6 .dbline 234
02A6 ; uchar tmptt;
02A6 ; uart0_tx(0xaa);
02A6 0AEA ldi R16,170
02A8 F8DF rcall _uart0_tx
02AA .dbline 235
02AA ; if(mode&0x10)
02AA 44FF sbrs R20,4
02AC 1BC0 rjmp L38
02AE .dbline 236
02AE ; {//revmode=1,返回里程;
02AE .dbline 237
02AE ; tmptt=KiloMeter&0x00ff;
02AE 40910500 lds R20,_KiloMeter
02B2 5070 andi R21,0
02B4 .dbline 238
02B4 ; uart0_tx(tmptt);
02B4 042F mov R16,R20
02B6 F1DF rcall _uart0_tx
02B8 .dbline 239
02B8 ; uart0_tx(0xff-tmptt);
02B8 242E mov R2,R20
02BA 3324 clr R3
02BC 0FEF ldi R16,255
02BE 0219 sub R16,R2
02C0 1309 sbc R17,R3
02C2 EBDF rcall _uart0_tx
02C4 .dbline 240
02C4 ; tmptt=(KiloMeter>>8)&0x00ff;
02C4 40910500 lds R20,_KiloMeter
02C8 50910600 lds R21,_KiloMeter+1
02CC 452F mov R20,R21
02CE 5527 clr R21
02D0 5070 andi R21,0
02D2 .dbline 241
02D2 ; uart0_tx(tmptt);//+24V
02D2 042F mov R16,R20
02D4 E2DF rcall _uart0_tx
02D6 .dbline 242
02D6 ; uart0_tx(0xff-tmptt);
02D6 242E mov R2,R20
02D8 3324 clr R3
02DA 0FEF ldi R16,255
02DC 0219 sub R16,R2
02DE 1309 sbc R17,R3
02E0 DCDF rcall _uart0_tx
02E2 .dbline 243
02E2 ; }
02E2 14C0 rjmp L39
02E4 L38:
02E4 .dbline 245
02E4 .dbline 246
02E4 00910100 lds R16,_SpeedVal
02E8 D8DF rcall _uart0_tx
02EA .dbline 247
02EA 20900100 lds R2,_SpeedVal
02EE 3324 clr R3
02F0 0FEF ldi R16,255
02F2 0219 sub R16,R2
02F4 1309 sbc R17,R3
02F6 D1DF rcall _uart0_tx
02F8 .dbline 248
02F8 00910000 lds R16,_AdResult
02FC CEDF rcall _uart0_tx
02FE .dbline 249
02FE 20900000 lds R2,_AdResult
0302 3324 clr R3
0304 0FEF ldi R16,255
0306 0219 sub R16,R2
0308 1309 sbc R17,R3
030A C7DF rcall _uart0_tx
030C .dbline 251
030C L39:
030C .dbline -2
030C L37:
030C 00D0 rcall pop_gset1
030E .dbline 0 ; func end
030E 0895 ret
0310 .dbsym r tmptt 20 c
0310 .dbsym r mode 20 c
0310 .dbend
0310 .dbfunc e SpeedControl _SpeedControl fV
0310 ; tmp2 -> <dead>
0310 ; tmp1 -> R16,R17
.even
0310 _SpeedControl::
0310 .dbline -1
0310 .dbline 254
0310 ; else
0310 ; {//revmode=0,返回电压和速度
0310 ; uart0_tx(SpeedVal);
0310 ; uart0_tx(0xff-SpeedVal);
0310 ; uart0_tx(AdResult);//+24V
0310 ; uart0_tx(0xff-AdResult);
0310 ;
0310 ; }
0310 ; }
0310 ; void SpeedControl(void)
0310 ; {
0310 .dbline 256
0310 ; uint tmp1,tmp2;
0310 ; tmp1=OCR2+SpeedVal+5;
0310 20900100 lds R2,_SpeedVal
0314 3324 clr R3
0316 03B5 in R16,0x23
0318 1127 clr R17
031A 020D add R16,R2
031C 131D adc R17,R3
031E 0B5F subi R16,251 ; offset = 5
0320 1F4F sbci R17,255
0322 .dbline 257
0322 ; if(tmp1>0xff)tmp1=0xff;
0322 8FEF ldi R24,255
0324 90E0 ldi R25,0
0326 8017 cp R24,R16
0328 9107 cpc R25,R17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -