⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coder.lis

📁 m8改造4VF遥控器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -