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

📄 coder.lis

📁 m8改造4VF遥控器
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module coder.c
                        .area data(ram, con, rel)
 0000           _ch_time::
 0000                   .blkb 2
                        .area idata
 0000 E803              .word 1000
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 E803              .word 1000
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 E803              .word 1000
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 E803              .word 1000
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 E803              .word 1000
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A E803              .word 1000
                        .area data(ram, con, rel)
 000C                   .blkb 2
                        .area idata
 000C E803              .word 1000
                        .area data(ram, con, rel)
 000E                   .blkb 2
                        .area idata
 000E E803              .word 1000
                        .area data(ram, con, rel)
 0010                   .blkb 2
                        .area idata
 0010 E803              .word 1000
                        .area data(ram, con, rel)
 0012                   .dbfile D:\AVR程序\简易编码系统\coder.c
 0012                   .dbsym e ch_time _ch_time A[18:9]i
 0012           _ch_counter::
 0012                   .blkb 1
                        .area idata
 0012 00                .byte 0
                        .area data(ram, con, rel)
 0013                   .dbfile D:\AVR程序\简易编码系统\coder.c
 0013                   .dbsym e ch_counter _ch_counter c
 0013           _input::
 0013                   .blkb 1
                        .area idata
 0013 00                .byte 0
                        .area data(ram, con, rel)
 0014                   .dbfile D:\AVR程序\简易编码系统\coder.c
 0014                   .dbsym e input _input c
 0014           _train::
 0014                   .blkb 1
                        .area idata
 0014 00                .byte 0
                        .area data(ram, con, rel)
 0015                   .dbfile D:\AVR程序\简易编码系统\coder.c
 0015                   .dbsym e train _train c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AVR程序\简易编码系统\coder.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 49
 0000           ; //中断方式发送PWM脉冲,负脉冲,变化范围为1MS~2MS。INT0为教练接口输入负脉冲,INT1为教练接口2,输入正脉冲后自动翻转,
 0000           ; //外部中断接口打开上拉。隔离脉冲为500US
 0000           ; //有一个教练允许开关,打开后进入死循环,并允许外部中断,前提条件是有信号,用定时器0进行信号有无判断
 0000           ; //定时器1采用比较匹配方式触发中断进行信号发送
 0000           ; 
 0000           ; 
 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           ; #define IN0 PIND&0x04
 0000           ; #define IN1 PIND&0x08
 0000           ; 
 0000           ; #define LEDH PB|=0x01
 0000           ; #define LEDL PB&=~0x01
 0000           ; 
 0000           ; #define BUTTON1 PINB&0x02
 0000           ; #define BUTTON2 PINB&0x04
 0000           ; #define BUTTON3 PINB&0x08
 0000           ; #define BUTTON4 PINB&0x10
 0000           ; #define BUTTON5 PINB&0x20
 0000           ; 
 0000           ; #define OUTH PD|=0x80
 0000           ; #define OUTL PD&=~0x80
 0000           ; 
 0000           ; #define LOW_TIME 400
 0000           ; #define SWH_time 900
 0000           ; #define SWL_time 100
 0000           ; 
 0000           ; Uint ch_time[9]={1000,1000,1000,1000,1000,1000,1000,1000,1000};//输出用
 0000           ; Uint time[9];//输出缓存
 0000           ; Uchar ch_counter=0;//通道计数,用来与数据采集同步
 0000           ; Uchar input=0;//信号输入有无标志
 0000           ; Uchar train=0;//训练开始表示,防止切换时发生抖舵
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 50
 0000           ;  PORTB = 0x3E;
 0000 8EE3              ldi R24,62
 0002 88BB              out 0x18,R24
 0004                   .dbline 51
 0004           ;  DDRB  = 0x01;
 0004 81E0              ldi R24,1
 0006 87BB              out 0x17,R24
 0008                   .dbline 52
 0008           ;  PORTC = 0x00; //m103 output only
 0008 2224              clr R2
 000A 25BA              out 0x15,R2
 000C                   .dbline 53
 000C           ;  DDRC  = 0x00;
 000C 24BA              out 0x14,R2
 000E                   .dbline 54
 000E           ;  PORTD = 0x0C;
 000E 8CE0              ldi R24,12
 0010 82BB              out 0x12,R24
 0012                   .dbline 55
 0012           ;  DDRD  = 0x80;
 0012 80E8              ldi R24,128
 0014 81BB              out 0x11,R24
 0016                   .dbline -2
 0016           L1:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbend
 0018                   .dbfunc e timer0_init _timer0_init fV
                        .even
 0018           _timer0_init::
 0018                   .dbline -1
 0018                   .dbline 64
 0018           ; }
 0018           ; 
 0018           ; //c输入
 0018           ; 
 0018           ; //TIMER0 initialize - prescale:1024
 0018           ; // desired value: 1Hz
 0018           ; // actual value: Out of range
 0018           ; void timer0_init(void)
 0018           ; {
 0018                   .dbline 65
 0018           ;  TCCR0 = 0x00; //stop
 0018 2224              clr R2
 001A 23BE              out 0x33,R2
 001C                   .dbline 66
 001C           ;  TCNT0 = 0x00 /*INVALID SETTING*/; //set count
 001C 22BE              out 0x32,R2
 001E                   .dbline -2
 001E           L2:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
                        .area vector(rom, abs)
                        .org 18
 0012 10C0              rjmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 0020                   .dbfile D:\AVR程序\简易编码系统\coder.c
 0020                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 0020           _timer0_ovf_isr::
 0020 2A92              st -y,R2
 0022 2FB6              in R2,0x3f
 0024 2A92              st -y,R2
 0026                   .dbline -1
 0026                   .dbline 72
 0026           ;  //TCCR0 = 0x05; //start timer
 0026           ; }
 0026           ; 
 0026           ; #pragma interrupt_handler timer0_ovf_isr:10
 0026           ; void timer0_ovf_isr(void)
 0026           ; {
 0026                   .dbline 73
 0026           ;  input=0;
 0026 2224              clr R2
 0028 20921300          sts _input,R2
 002C                   .dbline 74
 002C           ;  train=0;
 002C 20921400          sts _train,R2
 0030                   .dbline -2
 0030           L3:
 0030 2990              ld R2,y+
 0032 2FBE              out 0x3f,R2
 0034 2990              ld R2,y+
 0036                   .dbline 0 ; func end
 0036 1895              reti
 0038                   .dbend
 0038                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0038           _timer1_init::
 0038                   .dbline -1
 0038                   .dbline 82
 0038           ; }
 0038           ; 
 0038           ; //TIMER1 initialize - prescale:8
 0038           ; // WGM: 0) Normal, TOP=0xFFFF
 0038           ; // desired value: 1Hz
 0038           ; // actual value: Out of range
 0038           ; void timer1_init(void)
 0038           ; {
 0038                   .dbline 83
 0038           ;  TCCR1B = 0x00; //stop
 0038 2224              clr R2
 003A 2EBC              out 0x2e,R2
 003C                   .dbline 84
 003C           ;  TCNT1H = 0x00 /*INVALID SETTING*/; //setup
 003C 2DBC              out 0x2d,R2
 003E                   .dbline 85
 003E           ;  TCNT1L = 0x00 /*INVALID SETTING*/;
 003E 2CBC              out 0x2c,R2
 0040                   .dbline 86
 0040           ;  OCR1AH = 0x00 /*INVALID SETTING*/;
 0040 2BBC              out 0x2b,R2
 0042                   .dbline 87
 0042           ;  OCR1AL = 0x00 /*INVALID SETTING*/;
 0042 2ABC              out 0x2a,R2
 0044                   .dbline 88
 0044           ;  OCR1BH = 0x00 /*INVALID SETTING*/;
 0044 29BC              out 0x29,R2
 0046                   .dbline 89
 0046           ;  OCR1BL = 0x00 /*INVALID SETTING*/;
 0046 28BC              out 0x28,R2
 0048                   .dbline 90
 0048           ;  ICR1H  = 0x00 /*INVALID SETTING*/;
 0048 27BC              out 0x27,R2
 004A                   .dbline 91
 004A           ;  ICR1L  = 0x00 /*INVALID SETTING*/;
 004A 26BC              out 0x26,R2
 004C                   .dbline 92
 004C           ;  TCCR1A = 0x00;
 004C 2FBC              out 0x2f,R2
 004E                   .dbline 93
 004E           ;  TCCR1B = 0x02; //start Timer
 004E 82E0              ldi R24,2
 0050 8EBD              out 0x2e,R24
 0052                   .dbline -2
 0052           L4:
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbend
                        .area vector(rom, abs)
                        .org 12
 000C 2AC0              rjmp _timer1_compa_isr
                        .area text(rom, con, rel)
 0054                   .dbfile D:\AVR程序\简易编码系统\coder.c
                        .area data(ram, con, rel)
 0015                   .dbfile D:\AVR程序\简易编码系统\coder.c
 0015           L6:
 0015                   .blkb 1
                        .area idata
 0015 01                .byte 1
                        .area data(ram, con, rel)
 0016                   .dbfile D:\AVR程序\简易编码系统\coder.c
                        .area text(rom, con, rel)
 0054                   .dbfile D:\AVR程序\简易编码系统\coder.c
 0054                   .dbfunc e timer1_compa_isr _timer1_compa_isr fV
 0054                   .dbsym s output_static L6 c
 0054           ;        counter -> R16
                        .even
 0054           _timer1_compa_isr::
 0054 0A92              st -y,R0
 0056 1A92              st -y,R1
 0058 2A92              st -y,R2
 005A 3A92              st -y,R3
 005C 0A93              st -y,R16
 005E 1A93              st -y,R17
 0060 8A93              st -y,R24
 0062 9A93              st -y,R25
 0064 AA93              st -y,R26
 0066 BA93              st -y,R27
 0068 EA93              st -y,R30
 006A FA93              st -y,R31
 006C 0FB6              in R0,0x3f
 006E 0A92              st -y,R0
 0070                   .dbline -1
 0070                   .dbline 98
 0070           ; }
 0070           ; 
 0070           ; #pragma interrupt_handler timer1_compa_isr:7
 0070           ; void timer1_compa_isr(void)
 0070           ; {
 0070                   .dbline 106
 0070           ;  //compare occured TCNT1=OCR1A//本函数来自4Vf改装系统,有部分改变
 0070           ;  static Uchar output_static=1;//输出状态,0代表即将输出一个低电平,1代表即将输出一个高电平
 0070           ;                            //第一次发信号先发一个低电平
 0070           ;       
 0070           ; Uchar counter;//普通计数器用来拷贝数据
 0070           ; 
 0070           ;                                          
 0070           ; output_static=!output_static;
 0070 20901500          lds R2,L6
 0074 2220              tst R2
 0076 19F4              brne L7
 0078 01E0              ldi R16,1
 007A 10E0              ldi R17,0
 007C 02C0              rjmp L8
 007E           L7:
 007E 0027              clr R16
 0080 1127              clr R17
 0082           L8:
 0082 00931500          sts L6,R16
 0086                   .dbline 108
 0086           ;   
 0086           ; switch(output_static)
 0086 1127              clr R17
 0088 0030              cpi R16,0
 008A 0107              cpc R16,R17
 008C 29F0              breq L12
 008E           X0:
 008E 0130              cpi R16,1
 0090 E0E0              ldi R30,0
 0092 1E07              cpc R17,R30
 0094 91F0              breq L15
 0096 44C0              rjmp L9
 0098           X1:
 0098                   .dbline 109
 0098           ; {
 0098           L12:
 0098                   .dbline 110
 0098           ; case 0:OUTH;
 0098 979A              sbi 0x12,7
 009A                   .dbline 111
 009A           ;        TCNT1=0;//定时器清零
 009A 2224              clr R2
 009C 3324              clr R3
 009E 3DBC              out 0x2d,R3
 00A0 2CBC              out 0x2c,R2
 00A2                   .dbline 112
 00A2           ;          OCR1A=LOW_TIME;
 00A2 80E9              ldi R24,400
 00A4 91E0              ldi R25,1
 00A6 9BBD              out 0x2b,R25

⌨️ 快捷键说明

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