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

📄 scon2.lis

📁 M8制作的舵机控制器
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module scon2.c
                        .area data(ram, con, rel)
 0000           _time1::
 0000                   .blkb 2
                        .area idata
 0000 7F00              .word 127
                        .area data(ram, con, rel)
 0002                   .dbfile D:\AVR程序\舵机控制2\scon2.c
 0002                   .dbsym e time1 _time1 i
 0002           _time2::
 0002                   .blkb 2
                        .area idata
 0002 7F00              .word 127
                        .area data(ram, con, rel)
 0004                   .dbfile D:\AVR程序\舵机控制2\scon2.c
 0004                   .dbsym e time2 _time2 i
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AVR程序\舵机控制2\scon2.c
 0000                   .dbfunc e Delay _Delay fV
 0000           ;           time -> R16,R17
                        .even
 0000           _Delay::
 0000                   .dbline -1
 0000                   .dbline 40
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define Uchar unsigned char
 0000           ; #define Uint unsigned int
 0000           ; 
 0000           ; 
 0000           ; #define nop() asm("nop")
 0000           ; #define _nop_() asm("nop")
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; #define PB PORTB
 0000           ; #define PC PORTC
 0000           ; #define PD PORTD
 0000           ;  
 0000           ; 
 0000           ; 
 0000           ; #define Forward0 PB|=0x01; PB&=~0x02;
 0000           ; #define Backward0 PB|=0x02; PB&=~0x01;
 0000           ; #define Stop0 PB|=0x03;
 0000           ; 
 0000           ; #define Forward1 PC|=0x10; PC&=~0x20;
 0000           ; #define Backward1 PC|=0x20; PC&=~0x10;
 0000           ; #define Stop1 PC|=0x30;
 0000           ; 
 0000           ; 
 0000           ; #define IN0 PIND&0x04
 0000           ; #define IN1 PIND&0x08
 0000           ; #define OF2 TIFR&0x40
 0000           ; #define COF2 TIFR|=0x40
 0000           ; 
 0000           ; //原理;外部上升中断-定时器开-0。4毫秒后比较中断-清零定时器-外部下降中断-读出计数器-PWM输出
 0000           ; 
 0000           ; Uint time1=127,time2=127;//定时器数据
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; void Delay (Uint time)
 0000           ; {
 0000 02C0              rjmp L3
 0002           L2:
 0002                   .dbline 42
 0002                   .dbline 43
 0002 0150              subi R16,1
 0004 1040              sbci R17,0
 0006                   .dbline 44
 0006           L3:
 0006                   .dbline 41
 0006           ; while(time)
 0006 0030              cpi R16,0
 0008 0107              cpc R16,R17
 000A D9F7              brne L2
 000C           X0:
 000C                   .dbline -2
 000C           L1:
 000C                   .dbline 0 ; func end
 000C 0895              ret
 000E                   .dbsym r time 16 i
 000E                   .dbend
 000E                   .dbfunc e port_init _port_init fV
                        .even
 000E           _port_init::
 000E                   .dbline -1
 000E                   .dbline 50
 000E           ; {
 000E           ; time--;
 000E           ; }
 000E           ; }
 000E           ; 
 000E           ; 
 000E           ; 
 000E           ; void port_init(void)
 000E           ; {
 000E                   .dbline 51
 000E           ;  PORTB = 0x00;
 000E 2224              clr R2
 0010 28BA              out 0x18,R2
 0012                   .dbline 52
 0012           ;  DDRB  = 0x0F;
 0012 8FE0              ldi R24,15
 0014 87BB              out 0x17,R24
 0016                   .dbline 53
 0016           ;  PORTC = 0x00; //m103 output only
 0016 25BA              out 0x15,R2
 0018                   .dbline 54
 0018           ;  DDRC  = 0x30;
 0018 80E3              ldi R24,48
 001A 84BB              out 0x14,R24
 001C                   .dbline 55
 001C           ;  PORTD = 0x00;
 001C 22BA              out 0x12,R2
 001E                   .dbline 56
 001E           ;  DDRD  = 0x00;
 001E 21BA              out 0x11,R2
 0020                   .dbline -2
 0020           L5:
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbend
 0022                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0022           _timer1_init::
 0022                   .dbline -1
 0022                   .dbline 67
 0022           ; }
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ; //TIMER1 initialize - prescale:8
 0022           ; // WGM: 0) Normal, TOP=0xFFFF
 0022           ; // desired value: 1Hz
 0022           ; // actual value: Out of range
 0022           ; void timer1_init(void)
 0022           ; {
 0022                   .dbline 68
 0022           ;  TCCR1B = 0x00; //stop
 0022 2224              clr R2
 0024 2EBC              out 0x2e,R2
 0026                   .dbline 69
 0026           ;  TCNT1 = 0x00 /*INVALID SETTING*/; //setup
 0026 3324              clr R3
 0028 3DBC              out 0x2d,R3
 002A 2CBC              out 0x2c,R2
 002C                   .dbline 70
 002C           ;  OCR1A = 100;
 002C 84E6              ldi R24,100
 002E 90E0              ldi R25,0
 0030 9BBD              out 0x2b,R25
 0032 8ABD              out 0x2a,R24
 0034                   .dbline 71
 0034           ;  OCR1B = 0x00 /*INVALID SETTING*/;
 0034 39BC              out 0x29,R3
 0036 28BC              out 0x28,R2
 0038                   .dbline 72
 0038           ;  ICR1  = 0x00 /*INVALID SETTING*/;
 0038 37BC              out 0x27,R3
 003A 26BC              out 0x26,R2
 003C                   .dbline 73
 003C           ;  TCCR1A = 0x00;
 003C 2FBC              out 0x2f,R2
 003E                   .dbline -2
 003E           L6:
 003E                   .dbline 0 ; func end
 003E 0895              ret
 0040                   .dbend
 0040                   .dbfunc e timer2_init _timer2_init fV
                        .even
 0040           _timer2_init::
 0040                   .dbline -1
 0040                   .dbline 84
 0040           ; // TCCR1B = 0x03; //start Timer
 0040           ; }
 0040           ; 
 0040           ; 
 0040           ; 
 0040           ; //TIMER2 initialize - prescale:8
 0040           ; // WGM: Normal
 0040           ; // desired value: 1Hz
 0040           ; // actual value: Out of range
 0040           ; void timer2_init(void)
 0040           ; {
 0040                   .dbline 85
 0040           ;  TCCR2 = 0x00; //stop
 0040 2224              clr R2
 0042 25BC              out 0x25,R2
 0044                   .dbline 86
 0044           ;  ASSR  = 0x00; //set async mode
 0044 22BC              out 0x22,R2
 0046                   .dbline 87
 0046           ;  TCNT2 = 0x00 /*INVALID SETTING*/; //setup
 0046 24BC              out 0x24,R2
 0048                   .dbline 88
 0048           ;  OCR2  = 100;
 0048 84E6              ldi R24,100
 004A 83BD              out 0x23,R24
 004C                   .dbline -2
 004C           L7:
 004C                   .dbline 0 ; func end
 004C 0895              ret
 004E                   .dbend
 004E                   .dbfunc e adc_init _adc_init fV
                        .even
 004E           _adc_init::
 004E                   .dbline -1
 004E                   .dbline 97
 004E           ;  //TCCR2 = 0x03; //start
 004E           ; }
 004E           ; 
 004E           ; 
 004E           ; 
 004E           ; //ADC initialize
 004E           ; // Conversion time: 104uS
 004E           ; void adc_init(void)
 004E           ; {
 004E                   .dbline 98
 004E           ;  ADCSR = 0x00; //disable adc
 004E 2224              clr R2
 0050 26B8              out 0x6,R2
 0052                   .dbline 99
 0052           ;  ADMUX = 0x00; //select adc input 0
 0052 27B8              out 0x7,R2
 0054                   .dbline 100
 0054           ;  ACSR  = 0x80;
 0054 80E8              ldi R24,128
 0056 88B9              out 0x8,R24
 0058                   .dbline 101
 0058           ;  ADCSR = 0x86;
 0058 86E8              ldi R24,134
 005A 86B9              out 0x6,R24
 005C                   .dbline -2
 005C           L8:
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbend
                        .area vector(rom, abs)
                        .org 2
 0002 2FC0              rjmp _int0_isr
                        .area text(rom, con, rel)
 005E                   .dbfile D:\AVR程序\舵机控制2\scon2.c
 005E                   .dbfunc e int0_isr _int0_isr fV
                        .even
 005E           _int0_isr::
 005E 2A92              st -y,R2
 0060 3A92              st -y,R3
 0062 0A93              st -y,R16
 0064 1A93              st -y,R17
 0066 8A93              st -y,R24
 0068 9A93              st -y,R25
 006A EA93              st -y,R30
 006C 2FB6              in R2,0x3f
 006E 2A92              st -y,R2
 0070                   .dbline -1
 0070                   .dbline 106
 0070           ; }
 0070           ; 
 0070           ; #pragma interrupt_handler int0_isr:2
 0070           ; void int0_isr(void)
 0070           ; {
 0070                   .dbline 108
 0070           ;  //external interupt on INT0
 0070           ;  switch(IN0)
 0070 00B3              in R16,0x10
 0072 1127              clr R17
 0074 0470              andi R16,4
 0076 1070              andi R17,0
 0078 0030              cpi R16,0
 007A 0107              cpc R16,R17
 007C 49F0              breq L13
 007E           X1:
 007E 0030              cpi R16,0
 0080 E0E0              ldi R30,0
 0082 1E07              cpc R17,R30
 0084 3CF1              brlt L10
 0086           L17:
 0086 0430              cpi R16,4
 0088 E0E0              ldi R30,0
 008A 1E07              cpc R17,R30
 008C 09F1              breq L16
 008E 22C0              rjmp L10
 0090           X2:
 0090                   .dbline 109
 0090           ;  {
 0090           L13:
 0090                   .dbline 111
 0090           ;  case 0://下降触发
 0090           ;  TCCR1B = 0x00; //stop
 0090 2224              clr R2
 0092 2EBC              out 0x2e,R2
 0094                   .dbline 112
 0094           ;  time1=TCNT1&0x01ff;
 0094 8CB5              in R24,0x2c
 0096 9DB5              in R25,0x2d
 0098 9170              andi R25,1
 009A 90930100          sts _time1+1,R25
 009E 80930000          sts _time1,R24
 00A2                   .dbline 113
 00A2           ;  time1-=40;
 00A2 8897              sbiw R24,40
 00A4 90930100          sts _time1+1,R25
 00A8 80930000          sts _time1,R24
 00AC                   .dbline 114
 00AC           ;  if(time1>250)time1=250;
 00AC 8AEF              ldi R24,250
 00AE 90E0              ldi R25,0
 00B0 20900000          lds R2,_time1
 00B4 30900100          lds R3,_time1+1
 00B8 8215              cp R24,R2
 00BA 9305              cpc R25,R3
 00BC 20F4              brsh L14
 00BE                   .dbline 114
 00BE 90930100          sts _time1+1,R25
 00C2 80930000          sts _time1,R24
 00C6           L14:
 00C6                   .dbline 115
 00C6           ;  TCNT1=0;
 00C6 2224              clr R2
 00C8 3324              clr R3
 00CA 3DBC              out 0x2d,R3
 00CC 2CBC              out 0x2c,R2
 00CE                   .dbline 116
 00CE           ;  break;
 00CE 02C0              rjmp L11
 00D0           L16:
 00D0                   .dbline 118
 00D0           ;  case 0x04://上升触发
 00D0           ;  TCCR1B = 0x03; //start Timer
 00D0 83E0              ldi R24,3
 00D2 8EBD              out 0x2e,R24
 00D4                   .dbline 119
 00D4           ;  }
 00D4           L10:
 00D4           L11:
 00D4                   .dbline -2
 00D4           L9:
 00D4 2990              ld R2,y+
 00D6 2FBE              out 0x3f,R2
 00D8 E991              ld R30,y+
 00DA 9991              ld R25,y+
 00DC 8991              ld R24,y+
 00DE 1991              ld R17,y+
 00E0 0991              ld R16,y+
 00E2 3990              ld R3,y+
 00E4 2990              ld R2,y+
 00E6                   .dbline 0 ; func end
 00E6 1895              reti
 00E8                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 74C0              rjmp _int1_isr
                        .area text(rom, con, rel)
 00E8                   .dbfile D:\AVR程序\舵机控制2\scon2.c
 00E8                   .dbfunc e int1_isr _int1_isr fV
                        .even
 00E8           _int1_isr::
 00E8 2A92              st -y,R2
 00EA 3A92              st -y,R3
 00EC 0A93              st -y,R16
 00EE 1A93              st -y,R17
 00F0 8A93              st -y,R24
 00F2 9A93              st -y,R25
 00F4 EA93              st -y,R30
 00F6 2FB6              in R2,0x3f
 00F8 2A92              st -y,R2
 00FA                   .dbline -1
 00FA                   .dbline 124
 00FA           ; }
 00FA           ; 
 00FA           ; #pragma interrupt_handler int1_isr:3
 00FA           ; void int1_isr(void)
 00FA           ; {
 00FA                   .dbline 126
 00FA           ;  //external interupt on INT1
 00FA           ;   switch(IN1)
 00FA 00B3              in R16,0x10
 00FC 1127              clr R17
 00FE 0870              andi R16,8
 0100 1070              andi R17,0
 0102 0030              cpi R16,0
 0104 0107              cpc R16,R17
 0106 49F0              breq L22
 0108           X3:
 0108 0030              cpi R16,0
 010A E0E0              ldi R30,0
 010C 1E07              cpc R17,R30
 010E C4F1              brlt L19
 0110           L28:
 0110 0830              cpi R16,8
 0112 E0E0              ldi R30,0
 0114 1E07              cpc R17,R30
 0116 91F1              breq L27
 0118 33C0              rjmp L19
 011A           X4:
 011A                   .dbline 127
 011A           ;  {
 011A           L22:
 011A                   .dbline 129
 011A           ;  case 0://下降触发
 011A           ;  TCCR2 = 0x00; //stop
 011A 2224              clr R2
 011C 25BC              out 0x25,R2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -