📄 coder.lis
字号:
.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 + -