📄 coder.lis
字号:
00A8 8ABD out 0x2a,R24
00AA .dbline 113
00AA ; if(ch_counter==9)ch_counter=0;//计数清零同步放行
00AA 80911200 lds R24,_ch_counter
00AE 8930 cpi R24,9
00B0 09F0 breq X2
00B2 36C0 rjmp L10
00B4 X2:
00B4 .dbline 113
00B4 20921200 sts _ch_counter,R2
00B8 .dbline 114
00B8 ; break;
00B8 33C0 rjmp L10
00BA L15:
00BA .dbline 116
00BA ;
00BA ; case 1:OUTL;
00BA 9798 cbi 0x12,7
00BC .dbline 117
00BC ; TCNT1=0;//定时器清零
00BC 2224 clr R2
00BE 3324 clr R3
00C0 3DBC out 0x2d,R3
00C2 2CBC out 0x2c,R2
00C4 .dbline 118
00C4 ; OCR1A=ch_time[ch_counter];
00C4 20901200 lds R2,_ch_counter
00C8 82E0 ldi R24,2
00CA 829D mul R24,R2
00CC F001 movw R30,R0
00CE 80E0 ldi R24,<_ch_time
00D0 90E0 ldi R25,>_ch_time
00D2 E80F add R30,R24
00D4 F91F adc R31,R25
00D6 2080 ldd R2,z+0
00D8 3180 ldd R3,z+1
00DA 3BBC out 0x2b,R3
00DC 2ABC out 0x2a,R2
00DE .dbline 119
00DE ; if(ch_counter==8)//最后一个高电平是同步电平
00DE 80911200 lds R24,_ch_counter
00E2 8830 cpi R24,8
00E4 C1F4 brne L16
00E6 .dbline 120
00E6 ; {
00E6 .dbline 121
00E6 ; for(counter=0;counter<=8;counter++)
00E6 0027 clr R16
00E8 13C0 rjmp L21
00EA L18:
00EA .dbline 122
00EA .dbline 123
00EA 82E0 ldi R24,2
00EC 809F mul R24,R16
00EE 80E0 ldi R24,<_time
00F0 90E0 ldi R25,>_time
00F2 F001 movw R30,R0
00F4 E80F add R30,R24
00F6 F91F adc R31,R25
00F8 8081 ldd R24,z+0
00FA 9181 ldd R25,z+1
00FC 885A subi R24,168 ; offset = 600
00FE 9D4F sbci R25,253
0100 E0E0 ldi R30,<_ch_time
0102 F0E0 ldi R31,>_ch_time
0104 D001 movw R26,R0
0106 AE0F add R26,R30
0108 BF1F adc R27,R31
010A 8D93 st x+,R24
010C 9C93 st x,R25
010E .dbline 125
010E L19:
010E .dbline 121
010E 0395 inc R16
0110 L21:
0110 .dbline 121
0110 88E0 ldi R24,8
0112 8017 cp R24,R16
0114 50F7 brsh L18
0116 .dbline 126
0116 ; {
0116 ; ch_time[counter]=time[counter]+600;
0116 ;
0116 ; }
0116 ; }
0116 L16:
0116 .dbline 127
0116 ; ch_counter++;
0116 80911200 lds R24,_ch_counter
011A 8F5F subi R24,255 ; addi 1
011C 80931200 sts _ch_counter,R24
0120 .dbline 128
0120 ; }// switch(output_static)
0120 L9:
0120 L10:
0120 .dbline -2
0120 L5:
0120 0990 ld R0,y+
0122 0FBE out 0x3f,R0
0124 F991 ld R31,y+
0126 E991 ld R30,y+
0128 B991 ld R27,y+
012A A991 ld R26,y+
012C 9991 ld R25,y+
012E 8991 ld R24,y+
0130 1991 ld R17,y+
0132 0991 ld R16,y+
0134 3990 ld R3,y+
0136 2990 ld R2,y+
0138 1990 ld R1,y+
013A 0990 ld R0,y+
013C .dbline 0 ; func end
013C 1895 reti
013E .dbsym r counter 16 c
013E .dbend
013E .dbfunc e adc_init _adc_init fV
.even
013E _adc_init::
013E .dbline -1
013E .dbline 137
013E ;
013E ; }//void timer1_compa_isr(void)
013E ;
013E ;
013E ;
013E ; //ADC initialize
013E ; // Conversion time: 104uS
013E ; void adc_init(void)
013E ; {
013E .dbline 138
013E ; ADCSR = 0x00; //disable adc
013E 2224 clr R2
0140 26B8 out 0x6,R2
0142 .dbline 139
0142 ; ADMUX = 0x00; //select adc input 0
0142 27B8 out 0x7,R2
0144 .dbline 140
0144 ; ACSR = 0x80;
0144 80E8 ldi R24,128
0146 88B9 out 0x8,R24
0148 .dbline 141
0148 ; ADCSR = 0x86;
0148 86E8 ldi R24,134
014A 86B9 out 0x6,R24
014C .dbline -2
014C L22:
014C .dbline 0 ; func end
014C 0895 ret
014E .dbend
014E .dbfunc e watchdog_init _watchdog_init fV
.even
014E _watchdog_init::
014E .dbline -1
014E .dbline 147
014E ; }
014E ;
014E ; //Watchdog initialize
014E ; // prescale: 32K
014E ; void watchdog_init(void)
014E ; {
014E .dbline 148
014E ; WDR(); //this prevents a timout on enabling
014E A895 wdr
0150 .dbline 149
0150 ; WDTCR = 0x18;
0150 88E1 ldi R24,24
0152 81BD out 0x21,R24
0154 .dbline 150
0154 ; WDTCR = 0x09; //WATCHDOG ENABLED - dont forget to issue WDRs
0154 89E0 ldi R24,9
0156 81BD out 0x21,R24
0158 .dbline -2
0158 L23:
0158 .dbline 0 ; func end
0158 0895 ret
015A .dbend
015A .dbfunc e init_devices _init_devices fV
.even
015A _init_devices::
015A .dbline -1
015A .dbline 158
015A ;
015A ; }
015A ;
015A ;
015A ;
015A ; //call this routine to initialize all peripherals
015A ; void init_devices(void)
015A ; {
015A .dbline 160
015A ; //stop errant interrupts until set up
015A ; CLI(); //disable all interrupts
015A F894 cli
015C .dbline 162
015C ;
015C ; port_init();
015C 51DF rcall _port_init
015E .dbline 163
015E ; timer0_init();
015E 5CDF rcall _timer0_init
0160 .dbline 164
0160 ; timer1_init();
0160 6BDF rcall _timer1_init
0162 .dbline 165
0162 ; adc_init();
0162 EDDF rcall _adc_init
0164 .dbline 166
0164 ; OSCCAL=0xb3;
0164 83EB ldi R24,179
0166 81BF out 0x31,R24
0168 .dbline 167
0168 ; watchdog_init();
0168 F2DF rcall _watchdog_init
016A .dbline 168
016A ; MCUCR = 0x05;
016A 85E0 ldi R24,5
016C 85BF out 0x35,R24
016E .dbline 170
016E ; //GICR//中断开关应在MAIN中用开关和信号有无控制
016E ; GICR = 0x00;
016E 2224 clr R2
0170 2BBE out 0x3b,R2
0172 .dbline 171
0172 ; TIMSK = 0x11; //timer interrupt sources
0172 81E1 ldi R24,17
0174 89BF out 0x39,R24
0176 .dbline 172
0176 ; SEI(); //re-enable interrupts
0176 7894 sei
0178 .dbline -2
0178 L24:
0178 .dbline 0 ; func end
0178 0895 ret
017A .dbend
.area vector(rom, abs)
.org 2
0002 BDC0 rjmp _int0_isr
.area text(rom, con, rel)
017A .dbfile D:\AVR程序\简易编码系统\coder.c
017A .dbfunc e int0_isr _int0_isr fV
.even
017A _int0_isr::
017A 2A92 st -y,R2
017C 0A93 st -y,R16
017E 1A93 st -y,R17
0180 8A93 st -y,R24
0182 EA93 st -y,R30
0184 2FB6 in R2,0x3f
0186 2A92 st -y,R2
0188 .dbline -1
0188 .dbline 180
0188 ; //all peripherals are now initialized
0188 ; }
0188 ;
0188 ;
0188 ;
0188 ; #pragma interrupt_handler int0_isr:2
0188 ; void int0_isr(void)
0188 ; {
0188 .dbline 182
0188 ; //external interupt on INT0 负输入
0188 ; TCNT0 = 0x00 ;//有信号
0188 2224 clr R2
018A 22BE out 0x32,R2
018C .dbline 183
018C ; input=1;
018C 81E0 ldi R24,1
018E 80931300 sts _input,R24
0192 .dbline 184
0192 ; if(train)//先不忙发送
0192 20901400 lds R2,_train
0196 2220 tst R2
0198 99F0 breq L26
019A .dbline 185
019A ; switch(IN0)
019A 00B3 in R16,0x10
019C 1127 clr R17
019E 0470 andi R16,4
01A0 1070 andi R17,0
01A2 0030 cpi R16,0
01A4 0107 cpc R16,R17
01A6 49F0 breq L31
01A8 X3:
01A8 0030 cpi R16,0
01AA E0E0 ldi R30,0
01AC 1E07 cpc R17,R30
01AE 44F0 brlt L28
01B0 L33:
01B0 0430 cpi R16,4
01B2 E0E0 ldi R30,0
01B4 1E07 cpc R17,R30
01B6 19F0 breq L32
01B8 03C0 rjmp L28
01BA X4:
01BA .dbline 186
01BA ; {
01BA L31:
01BA .dbline 188
01BA ; case 0:
01BA ; OUTL;
01BA 9798 cbi 0x12,7
01BC .dbline 189
01BC ; break;
01BC 01C0 rjmp L29
01BE L32:
01BE .dbline 191
01BE ; case 0x04:
01BE ; OUTH;
01BE 979A sbi 0x12,7
01C0 .dbline 192
01C0 ; }
01C0 L28:
01C0 L29:
01C0 L26:
01C0 .dbline -2
01C0 L25:
01C0 2990 ld R2,y+
01C2 2FBE out 0x3f,R2
01C4 E991 ld R30,y+
01C6 8991 ld R24,y+
01C8 1991 ld R17,y+
01CA 0991 ld R16,y+
01CC 2990 ld R2,y+
01CE .dbline 0 ; func end
01CE 1895 reti
01D0 .dbend
.area vector(rom, abs)
.org 4
0004 E8C0 rjmp _int1_isr
.area text(rom, con, rel)
01D0 .dbfile D:\AVR程序\简易编码系统\coder.c
01D0 .dbfunc e int1_isr _int1_isr fV
.even
01D0 _int1_isr::
01D0 2A92 st -y,R2
01D2 0A93 st -y,R16
01D4 1A93 st -y,R17
01D6 8A93 st -y,R24
01D8 EA93 st -y,R30
01DA 2FB6 in R2,0x3f
01DC 2A92 st -y,R2
01DE .dbline -1
01DE .dbline 197
01DE ; }
01DE ;
01DE ; #pragma interrupt_handler int1_isr:3
01DE ; void int1_isr(void)
01DE ; {
01DE .dbline 199
01DE ; //external interupt on INT1 正输入自动反向
01DE ; TCNT0 = 0x00 ;//有信号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -