car_main.lis
来自「基于m16的寻迹小车(包含小车题目」· LIS 代码 · 共 1,632 行 · 第 1/5 页
LIS
1,632 行
006A 1127 clr R17
006C DBDF xcall _PwmBSet
006E .dbline -2
006E L9:
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbend
0070 .dbfunc e LightOnOff _LightOnOff fV
0070 ; onoff -> R16
.even
0070 _LightOnOff::
0070 .dbline -1
0070 .dbline 111
0070 ; }
0070 ;
0070 ; //--------------------------------------------声光报警
0070 ; void LightOnOff (uchar onoff)
0070 ; {
0070 .dbline 112
0070 ; DDRC |= (1 << PC0);
0070 A09A sbi 0x14,0
0072 .dbline 114
0072 ;
0072 ; if (onoff == OFF) {
0072 0023 tst R16
0074 11F4 brne L11
0076 X0:
0076 .dbline 114
0076 .dbline 115
0076 ; PORTC &=~ (1 << PC0);
0076 A898 cbi 0x15,0
0078 .dbline 116
0078 ; }
0078 03C0 xjmp L12
007A L11:
007A .dbline 118
007A ;
007A ; else if (onoff == ON) {
007A 0130 cpi R16,1
007C 09F4 brne L13
007E X1:
007E .dbline 118
007E .dbline 119
007E ; PORTC |= (1 << PC0);
007E A89A sbi 0x15,0
0080 .dbline 120
0080 ; }
0080 L13:
0080 L12:
0080 .dbline -2
0080 L10:
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r onoff 16 c
0082 .dbend
.area data(ram, con, rel)
0012 .dbfile d:\我的文档\桌面\小车\car1\car_main.c
0012 _T2_int_n::
0012 .blkb 1
.area idata
0012 00 .byte 0
.area data(ram, con, rel)
0013 .dbfile d:\我的文档\桌面\小车\car1\car_main.c
0013 .dbsym e T2_int_n _T2_int_n c
0013 _T2_1s_set_n::
0013 .blkb 4
.area idata
0013 00000000 .word 0,0
.area data(ram, con, rel)
0017 .dbfile d:\我的文档\桌面\小车\car1\car_main.c
0017 .dbsym e T2_1s_set_n _T2_1s_set_n l
0017 _T2_1s_set::
0017 .blkb 1
.area idata
0017 00 .byte 0
.area data(ram, con, rel)
0018 .dbfile d:\我的文档\桌面\小车\car1\car_main.c
0018 .dbsym e T2_1s_set _T2_1s_set c
.area text(rom, con, rel)
0082 .dbfile d:\我的文档\桌面\小车\car1\car_main.c
0082 .dbfunc e timer2_init _timer2_init fV
.even
0082 _timer2_init::
0082 .dbline -1
0082 .dbline 136
0082 ; }
0082 ;
0082 ; /*------------------------------------end car active ----------------------------------------*/
0082 ;
0082 ; /*------------------------------------TIME ----------------------------------------*/
0082 ; uchar T2_int_n = 0; //定时器25ms溢出次数
0082 ; unsigned long int T2_1s_set_n = 0; //1s次数
0082 ; uchar T2_1s_set = 0;
0082 ;
0082 ;
0082 ; //TIMER2 initialize - prescale:1024
0082 ; // WGM: CTC
0082 ; // desired value: 25mSec
0082 ; // actual value: 25.088mSec (0.4%)
0082 ; void timer2_init(void)
0082 ; {
0082 .dbline 137
0082 ; TCCR2 = 0x00; //stop
0082 2224 clr R2
0084 25BC out 0x25,R2
0086 .dbline 138
0086 ; ASSR = 0x00; //set async mode
0086 22BC out 0x22,R2
0088 .dbline 139
0088 ; TCNT2 = 0x3D; //setup
0088 8DE3 ldi R24,61
008A 84BD out 0x24,R24
008C .dbline 140
008C ; OCR2 = 0xC3;
008C 83EC ldi R24,195
008E 83BD out 0x23,R24
0090 .dbline 141
0090 ; TCCR2 = 0x0F; //start
0090 8FE0 ldi R24,15
0092 85BD out 0x25,R24
0094 .dbline -2
0094 L15:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbend
.area vector(rom, abs)
.org 12
000C 0C944B00 jmp _timer2_comp_isr
.area text(rom, con, rel)
0096 .dbfile d:\我的文档\桌面\小车\car1\car_main.c
0096 .dbfunc e timer2_comp_isr _timer2_comp_isr fV
.even
0096 _timer2_comp_isr::
0096 0A92 st -y,R0
0098 1A92 st -y,R1
009A 2A92 st -y,R2
009C 3A92 st -y,R3
009E 4A92 st -y,R4
00A0 5A92 st -y,R5
00A2 8A93 st -y,R24
00A4 9A93 st -y,R25
00A6 AA93 st -y,R26
00A8 BA93 st -y,R27
00AA 0FB6 in R0,0x3f
00AC 0A92 st -y,R0
00AE .dbline -1
00AE .dbline 146
00AE ; }
00AE ;
00AE ; #pragma interrupt_handler timer2_comp_isr:iv_TIM2_COMP
00AE ; void timer2_comp_isr(void)
00AE ; {
00AE .dbline 149
00AE ; //compare occured TCNT2=OCR2
00AE ; //compare occured TCNT0=OCR0
00AE ; if((T2_int_n++) == 40) { //25ms溢出, 40次则1s
00AE 20901200 lds R2,_T2_int_n
00B2 3324 clr R3
00B4 822D mov R24,R2
00B6 8F5F subi R24,255 ; addi 1
00B8 80931200 sts _T2_int_n,R24
00BC 822D mov R24,R2
00BE 8832 cpi R24,40
00C0 F1F4 brne L17
00C2 X2:
00C2 .dbline 149
00C2 .dbline 150
00C2 ; T2_1s_set = 1;
00C2 81E0 ldi R24,1
00C4 80931700 sts _T2_1s_set,R24
00C8 .dbline 151
00C8 ; T2_1s_set_n ++; //置位1s
00C8 81E0 ldi R24,1
00CA 90E0 ldi R25,0
00CC A0E0 ldi R26,0
00CE B0E0 ldi R27,0
00D0 40901500 lds R4,_T2_1s_set_n+2
00D4 50901600 lds R5,_T2_1s_set_n+2+1
00D8 20901300 lds R2,_T2_1s_set_n
00DC 30901400 lds R3,_T2_1s_set_n+1
00E0 280E add R2,R24
00E2 391E adc R3,R25
00E4 4A1E adc R4,R26
00E6 5B1E adc R5,R27
00E8 30921400 sts _T2_1s_set_n+1,R3
00EC 20921300 sts _T2_1s_set_n,R2
00F0 50921600 sts _T2_1s_set_n+2+1,R5
00F4 40921500 sts _T2_1s_set_n+2,R4
00F8 .dbline 152
00F8 ; T2_int_n = 0; //溢出次数清0
00F8 2224 clr R2
00FA 20921200 sts _T2_int_n,R2
00FE .dbline 153
00FE ; }
00FE L17:
00FE .dbline -2
00FE L16:
00FE .dbline 0 ; func end
00FE 0990 ld R0,y+
0100 0FBE out 0x3f,R0
0102 B991 ld R27,y+
0104 A991 ld R26,y+
0106 9991 ld R25,y+
0108 8991 ld R24,y+
010A 5990 ld R5,y+
010C 4990 ld R4,y+
010E 3990 ld R3,y+
0110 2990 ld R2,y+
0112 1990 ld R1,y+
0114 0990 ld R0,y+
0116 1895 reti
0118 .dbend
0118 .dbfunc e Time2OnOff _Time2OnOff fV
0118 ; onoff -> R16
.even
0118 _Time2OnOff::
0118 .dbline -1
0118 .dbline 159
0118 ; }
0118 ;
0118 ;
0118 ; //计时开始停止控制
0118 ; void Time2OnOff (uchar onoff)
0118 ; {
0118 .dbline 160
0118 ; if (onoff == ON) {
0118 0130 cpi R16,1
011A 21F4 brne L20
011C X3:
011C .dbline 160
011C .dbline 161
011C ; TIMSK |= (1 << OCIE2); //开时间中断
011C 89B7 in R24,0x39
011E 8068 ori R24,128
0120 89BF out 0x39,R24
0122 .dbline 162
0122 ; }
0122 05C0 xjmp L21
0124 L20:
0124 .dbline 164
0124 ;
0124 ; else if (onoff == OFF) {
0124 0023 tst R16
0126 19F4 brne L22
0128 X4:
0128 .dbline 164
0128 .dbline 165
0128 ; TIMSK &=~ (1 << OCIE2); //禁止时间中断
0128 89B7 in R24,0x39
012A 8F77 andi R24,127
012C 89BF out 0x39,R24
012E .dbline 166
012E ; }
012E L22:
012E L21:
012E .dbline -2
012E L19:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbsym r onoff 16 c
0130 .dbend
.area data(ram, con, rel)
0018 .dbfile d:\我的文档\桌面\小车\car1\car_main.c
0018 _T0_10_n::
0018 .blkb 4
.area idata
0018 00000000 .word 0,0
.area data(ram, con, rel)
001C .dbfile d:\我的文档\桌面\小车\car1\car_main.c
001C .dbsym e T0_10_n _T0_10_n l
001C _T0_10_set::
001C .blkb 1
.area idata
001C 00 .byte 0
.area data(ram, con, rel)
001D .dbfile d:\我的文档\桌面\小车\car1\car_main.c
001D .dbsym e T0_10_set _T0_10_set c
.area text(rom, con, rel)
0130 .dbfile d:\我的文档\桌面\小车\car1\car_main.c
0130 .dbfunc e timer0_init _timer0_init fV
.even
0130 _timer0_init::
0130 .dbline -1
0130 .dbline 177
0130 ; }
0130 ;
0130 ; //-----------------------T0------------------------------------
0130 ; unsigned long int T0_10_n = 0; //处部计数满10后溢出次数, 周长 = [((10 * T0_10_n) + TCNT0) / 5 ]* LENGHT_PER_CIRCLE
0130 ; uchar T0_10_set = 0;
0130 ; //TIMER0 initialize - prescale:Falling edge
0130 ; // WGM: CTC
0130 ; // desired value: 1Hz
0130 ; // actual value: Out of range
0130 ; void timer0_init(void)
0130 ; {
0130 .dbline 178
0130 ; TCCR0 = 0x00; //stop
0130 2224 clr R2
0132 23BE out 0x33,R2
0134 .dbline 179
0134 ; OCR0 = 9 /*INVALID SETTING*/; //set compare
0134 89E0 ldi R24,9
0136 8CBF out 0x3c,R24
0138 .dbline 180
0138 ; TCCR0 = 0x0E; //start timer
0138 8EE0 ldi R24,14
013A 83BF out 0x33,R24
013C .dbline -2
013C L24:
013C .dbline 0 ; func end
013C 0895 ret
013E .dbend
.area vector(rom, abs)
.org 76
004C 0C949F00 jmp _timer0_comp_isr
.area text(rom, con, rel)
013E .dbfile d:\我的文档\桌面\小车\car1\car_main.c
013E .dbfunc e timer0_comp_isr _timer0_comp_isr fV
.even
013E _timer0_comp_isr::
013E 2A92 st -y,R2
0140 3A92 st -y,R3
0142 4A92 st -y,R4
0144 5A92 st -y,R5
0146 8A92 st -y,R8
0148 9A92 st -y,R9
014A 8A93 st -y,R24
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?