📄 dtm48-td.s
字号:
.module dtm48-td.C
.area data(ram, con, rel)
_mark::
.blkb 2
.area idata
.word 1500
.area data(ram, con, rel)
.dbfile H:\ele\AVR\ICC\diantiao\dtm48-td\dtm48-td.C
.dbsym e mark _mark I
.area text(rom, con, rel)
.dbfile H:\ele\AVR\ICC\diantiao\dtm48-td\dtm48-td.C
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 32
; /******************************************/
; /* 燕山大学无线电爱好者协会 */
; /* 电子调速器 */
; /* 作者:张翃鹏 2005-2-27 9:04:40 */
; /* 目标MCU:MEGA8 晶振:INT RC 8MHZ */
; /******************************************/
;
; #include <iom48v.h>
; #include <macros.h>
; #include <eeprom.h>
; #define uchar unsigned char
; #define unit unsigned int
; #define ulong unsigned long
; #define xtal 8
; #define j11 PORTD|=0x02
; #define j10 PORTD&=~0x02
; #define j21 PORTD|=0x10
; #define j20 PORTD&=~0x10
; #define j31 PORTB|=0x40
; #define j30 PORTB&=~0x40
; #define j41 PORTD|=0x40
; #define j40 PORTD&=~0x40
; #define LED1 PORTB|=0x08;
; #define LED0 PORTB&=~0x08;
;
;
; int mark=1500;
; unit ai,aa;
; uchar i,j,az,flag,flagh,zb,mid,pwm;
;
; void port_init(void)
; {
.dbline 33
; PORTB = 0x23;
ldi R24,35
out 0x5,R24
.dbline 34
; DDRB = 0x58;
ldi R24,88
out 0x4,R24
.dbline 35
; PORTC = 0x04; //m103 output only
ldi R24,4
out 0x8,R24
.dbline 36
; DDRC = 0x38;
ldi R24,56
out 0x7,R24
.dbline 37
; PORTD = 0x00;
clr R2
out 0xb,R2
.dbline 38
; DDRD = 0x52;
ldi R24,82
out 0xa,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 42
; }
;
; void timer1_init(void)
; {
.dbline 43
; TCCR1B = 0x00; //stop
clr R2
sts 129,R2
.dbline 44
; TCNT1H = 0x00 /*INVALID SETTING*/; //setup
sts 133,R2
.dbline 45
; TCNT1L = 0x00 /*INVALID SETTING*/;
sts 132,R2
.dbline 46
; OCR1AH = 0x00 /*INVALID SETTING*/;
sts 137,R2
.dbline 47
; OCR1AL = 0x00 /*INVALID SETTING*/;
sts 136,R2
.dbline 48
; OCR1BH = 0x00 /*INVALID SETTING*/;
sts 139,R2
.dbline 49
; OCR1BL = 0x00 /*INVALID SETTING*/;
sts 138,R2
.dbline 50
; ICR1H = 0x00 /*INVALID SETTING*/;
sts 135,R2
.dbline 51
; ICR1L = 0x00 /*INVALID SETTING*/;
sts 134,R2
.dbline 52
; TCCR1A = 0x00;
sts 128,R2
.dbline 53
; TCCR1B = 0x02; //start Timer
ldi R24,2
sts 129,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer2_init _timer2_init fV
.even
_timer2_init::
.dbline -1
.dbline 61
; }
;
; //TIMER2 initialize - prescale:8
; // WGM: Normal
; // desired value: 255uSec
; // actual value: 255.000uSec (0.0%)
; void timer2_init(void)
; {
.dbline 62
; TCCR2B = 0x00; //stop
clr R2
sts 177,R2
.dbline 63
; ASSR = 0x00; //set async mode
sts 182,R2
.dbline 64
; TCNT2 = 0x01; //setup
ldi R24,1
sts 178,R24
.dbline 65
; OCR2A = 0;
sts 179,R2
.dbline 66
; OCR2B = 0x00;
sts 180,R2
.dbline 67
; TCCR2A = 0x00;
sts 176,R2
.dbline 68
; TCCR2B = 0x02; //start
ldi R24,2
sts 177,R24
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 71
; }
; void watchdog_init(void)
; {
.dbline 72
; WDR(); //this prevents a timout on enabling
wdr
.dbline 73
; WDTCSR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
ldi R24,8
sts 96,R24
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 79
; }
;
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 81
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 82
; port_init();
rcall _port_init
.dbline 83
; timer1_init();
rcall _timer1_init
.dbline 84
; timer2_init();
rcall _timer2_init
.dbline 85
; watchdog_init();
rcall _watchdog_init
.dbline 87
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 88
; EICRA = 0x00; //extended ext ints
sts 105,R2
.dbline 89
; EIMSK = 0x00;
out 0x1d,R2
.dbline 91
;
; TIMSK0 = 0x00; //timer 0 interrupt sources
sts 110,R2
.dbline 92
; TIMSK1 = 0x00; //timer 1 interrupt sources
sts 111,R2
.dbline 93
; TIMSK2 = 0x03; //timer 2 interrupt sources
ldi R24,3
sts 112,R24
.dbline 95
;
; PCMSK0 = 0x00; //pin change mask 0
sts 107,R2
.dbline 96
; PCMSK1 = 0x00; //pin change mask 1
sts 108,R2
.dbline 97
; PCMSK2 = 0x00; //pin change mask 2
sts 109,R2
.dbline 98
; PCICR = 0x00; //pin change enable
sts 104,R2
.dbline 99
; PRR = 0x00; //power controller
sts 100,R2
.dbline 100
; SEI(); //re-enable interrupts
sei
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e del _del fV
; time -> R16,R17
.even
_del::
.dbline -1
.dbline 107
; //all peripherals are now initialized
; }
;
;
; /* 微秒级延时程序 */
; void del(int time)
; {
L7:
.dbline 109
; do
; {
.dbline 110
; time--;
subi R16,1
sbci R17,0
.dbline 111
; }
L8:
.dbline 112
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L7
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i1 -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 117
; }
;
; /* 毫秒级延时程序 */
; void delay_1ms(void)
; { unsigned int i1;
.dbline 118
; for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
ldi R16,1
ldi R17,0
rjmp L14
L11:
.dbline 119
L12:
.dbline 118
subi R16,255 ; offset = 1
sbci R17,255
L14:
.dbline 118
cpi R16,118
ldi R30,4
cpc R17,R30
brlo L11
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r i1 16 i
.dbend
.dbfunc e delay _delay fV
; i2 -> R20,R21
; n -> R22,R23
.even
_delay::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 123
; ;
; }
;
; void delay(unsigned int n)
; {
.dbline 124
; unsigned int i2=0;
clr R20
clr R21
rjmp L17
L16:
.dbline 126
.dbline 126
rcall _delay_1ms
.dbline 127
subi R20,255 ; offset = 1
sbci R21,255
.dbline 127
wdr
.dbline 128
L17:
.dbline 125
; while(i2<n)
cp R20,R22
cpc R21,R23
brlo L16
.dbline -2
L15:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i2 20 i
.dbsym r n 22 i
.dbend
.area vector(rom, abs)
.org 14
rjmp _timer2_compa_isr
.area text(rom, con, rel)
.dbfile H:\ele\AVR\ICC\diantiao\dtm48-td\dtm48-td.C
.dbfunc e timer2_compa_isr _timer2_compa_isr fV
.even
_timer2_compa_isr::
st -y,R24
in R24,0x3f
st -y,R24
.dbline -1
.dbline 133
.dbline 135
lds R24,_zb
cpi R24,255
brsh L20
.dbline 136
.dbline 136
cbi 0xb,1
.dbline 136
cbi 0xb,4
.dbline 136
cbi 0x5,6
.dbline 136
cbi 0xb,6
.dbline 136
L20:
.dbline -2
L19:
ld R24,y+
out 0x3f,R24
ld R24,y+
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 18
rjmp _timer2_ovf_isr
.area text(rom, con, rel)
.dbfile H:\ele\AVR\ICC\diantiao\dtm48-td\dtm48-td.C
.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
_timer2_ovf_isr::
st -y,R2
st -y,R3
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 141
; {delay_1ms();
; i2++; WDR();
; }
; }
;
; #pragma interrupt_handler timer2_compa_isr:8
; void timer2_compa_isr(void)
; {
; //compare occured TCNT2=OCR2a
; if(zb<255)
; {j10;j20; j30;j40;}
; }
;
; #pragma interrupt_handler timer2_ovf_isr:10
; void timer2_ovf_isr(void)
; {
.dbline 142
; if(zb>0)
clr R2
lds R3,_zb
cp R2,R3
brsh L23
.dbline 143
; {
.dbline 144
; if(flag==1)
lds R24,_flag
cpi R24,1
brne L25
.dbline 145
; {j11;j31;}
.dbline 145
sbi 0xb,1
.dbline 145
sbi 0x5,6
.dbline 145
rjmp L26
L25:
.dbline 147
; else
; if(flag==0)
lds R2,_flag
tst R2
brne L27
.dbline 148
; {j21;j41;}
.dbline 148
sbi 0xb,4
.dbline 148
sbi 0xb,6
.dbline 148
L27:
L26:
.dbline 149
; }
L23:
.dbline 150
; TCNT2 = 0x0; //reload counter value
clr R2
sts 178,R2
.dbline 151
; OCR2A=zb;
lds R2,_zb
sts 179,R2
.dbline -2
L22:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e fenc _fenc fi
; bc -> R20,R21
; bb -> R16,R17
.even
_fenc::
rcall push_gset1
.dbline -1
.dbline 156
; }
;
;
; unit fenc(int bb)
; {
.dbline 158
lds R24,_mark
lds R25,_mark+1
subi R24,188
sbci R25,2
cp R16,R24
cpc R17,R25
brlt L32
lds R24,_mark
lds R25,_mark+1
subi R24,68 ; offset = 700
sbci R25,253
cp R24,R16
cpc R25,R17
brge L30
L32:
.dbline 158
; int bc;
; if((bb<mark-700)||(bb>(mark+700))) return(0);
clr R16
clr R17
rjmp L29
L30:
.dbline 159
; if(mark<bb)
lds R2,_mark
lds R3,_mark+1
cp R2,R16
cpc R3,R17
brge L33
.dbline 160
; {
.dbline 161
; flag=1;
ldi R24,1
sts _flag,R24
.dbline 162
; bc=bb-mark;
movw R20,R16
sub R20,R2
sbc R21,R3
.dbline 163
; }
L33:
.dbline 164
; if(mark>bb)
lds R2,_mark
lds R3,_mark+1
cp R16,R2
cpc R17,R3
brge L35
.dbline 165
; {
.dbline 166
; flag=0;
clr R2
sts _flag,R2
.dbline 167
; bc=mark-bb;
lds R20,_mark
lds R21,_mark+1
sub R20,R16
sbc R21,R17
.dbline 168
; }
L35:
.dbline 169
ldi R24,25
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L37
.dbline 169
.dbline 169
sbi 0x5,3
.dbline 169
.dbline 169
rjmp L38
L37:
.dbline 169
; if(bc<=25) { LED1; } else { LED0; }
.dbline 169
cbi 0x5,3
.dbline 169
.dbline 169
L38:
.dbline 170
; if(bc<=50) return(0);
ldi R24,50
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L39
.dbline 170
clr R16
clr R17
rjmp L29
L39:
.dbline 171
; if(bc>=305) return(255);
cpi R20,49
ldi R30,1
cpc R21,R30
brlt L41
.dbline 171
ldi R16,255
ldi R17,0
rjmp L29
L41:
.dbline 172
; else return(bc-50);
movw R16,R20
subi R16,50
sbci R17,0
.dbline -2
L29:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r bc 20 I
.dbsym r bb 16 I
.dbend
.dbfunc e cy _cy fV
.even
_cy::
.dbline -1
.dbline 176
; }
;
; void cy(void)
; {
.dbline 177
; if(!(PINC&0x04))
sbic 0x6,2
rjmp L44
.dbline 178
; {
.dbline 179
; TCNT1=0;
clr R2
clr R3
sts 132+1,R3
sts 132,R2
rjmp L47
L46:
.dbline 180
wdr
L47:
.dbline 180
sbis 0x6,2
rjmp L46
.dbline 181
lds R2,132
lds R3,132+1
sts _aa+1,R3
sts _aa,R2
.dbline 182
movw R16,R2
rcall _fenc
sts _zb,R16
.dbline 183
L44:
.dbline -2
L43:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; tr -> <dead>
.even
_main::
sbiw R28,2
.dbline -1
.dbline 187
; while(!(PINC&0x04)) WDR();
; aa=TCNT1;
; zb=fenc(aa);
; }
; }
;
; void main(void)
; {
.dbline 189
; unit tr;
; EEPROM_READ(0x10,ai);//校正振荡频率
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_ai
ldi R19,>_ai
ldi R16,16
ldi R17,0
rcall _EEPROMReadBytes_extIO
.dbline 190
; OSCCAL=ai;
lds R2,_ai
lds R3,_ai+1
sts 102,R2
.dbline 191
; init_devices();
rcall _init_devices
.dbline 193
;
; EEPROM_READ(0x112,ai);
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_ai
ldi R19,>_ai
ldi R16,274
ldi R17,1
rcall _EEPROMReadBytes_extIO
.dbline 196
;
;
; if(ai==0xFFFF)
lds R24,_ai
lds R25,_ai+1
cpi R24,255
ldi R30,255
cpc R25,R30
brne L50
.dbline 197
; {
.dbline 198
; mark=1500; //0xD805
ldi R24,1500
ldi R25,5
sts _mark+1,R25
sts _mark,R24
.dbline 199
; EEPROM_WRITE(0x110,mark);
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_mark
ldi R19,>_mark
ldi R16,272
ldi R17,1
rcall _EEPROMWriteBytes_extIO
.dbline 200
; aa=0;
clr R2
clr R3
sts _aa+1,R3
sts _aa,R2
.dbline 201
; EEPROM_WRITE(0x112,aa);
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_aa
ldi R19,>_aa
ldi R16,274
ldi R17,1
rcall _EEPROMWriteBytes_extIO
.dbline 202
; }
L50:
.dbline 203
; EEPROM_READ(0x110,mark);
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_mark
ldi R19,>_mark
ldi R16,272
ldi R17,1
rcall _EEPROMReadBytes_extIO
rjmp L53
L52:
.dbline 207
;
;
; while(1)
; {
.dbline 211
;
; //cy();
;
; if(!(PINC&0x04))
sbic 0x6,2
rjmp L55
.dbline 212
; {
.dbline 213
; TCNT1=0;
clr R2
clr R3
sts 132+1,R3
sts 132,R2
L57:
.dbline 214
L58:
.dbline 214
; while(!(PINC&0x04)) ;
sbis 0x6,2
rjmp L57
.dbline 215
; aa=TCNT1;
lds R2,132
lds R3,132+1
sts _aa+1,R3
sts _aa,R2
.dbline 216
; zb=fenc(aa);
movw R16,R2
rcall _fenc
sts _zb,R16
.dbline 217
; }
L55:
.dbline 219
;
; WDR();
wdr
.dbline 221
;
; if(!(PINB&0x20))
sbic 0x3,5
rjmp L60
.dbline 222
; {
.dbline 223
; delay(300);
ldi R16,300
ldi R17,1
rcall _delay
.dbline 224
; if(!(PINB&0x20))
sbic 0x3,5
rjmp L62
.dbline 225
; {
.dbline 226
; cy();
rcall _cy
.dbline 227
; WDR();
wdr
.dbline 228
; LED1;
sbi 0x5,3
.dbline 228
.dbline 229
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 230
; mark=aa; EEPROM_WRITE(0x110,mark);
lds R2,_aa
lds R3,_aa+1
sts _mark+1,R3
sts _mark,R2
.dbline 230
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_mark
ldi R19,>_mark
ldi R16,272
ldi R17,1
rcall _EEPROMWriteBytes_extIO
.dbline 231
; j10;j20;j30;j40;
cbi 0xb,1
.dbline 231
cbi 0xb,4
.dbline 231
cbi 0x5,6
.dbline 231
cbi 0xb,6
.dbline 232
; CLI();
cli
.dbline 233
; delay(500);
ldi R16,500
ldi R17,1
rcall _delay
.dbline 234
; SEI();
sei
.dbline 235
; }
L62:
.dbline 236
; }
L60:
.dbline 238
L53:
.dbline 206
rjmp L52
X0:
.dbline -2
L49:
adiw R28,2
.dbline 0 ; func end
ret
.dbsym l tr 3 i
.dbend
.area bss(ram, con, rel)
.dbfile H:\ele\AVR\ICC\diantiao\dtm48-td\dtm48-td.C
_pwm::
.blkb 1
.dbsym e pwm _pwm c
_mid::
.blkb 1
.dbsym e mid _mid c
_zb::
.blkb 1
.dbsym e zb _zb c
_flagh::
.blkb 1
.dbsym e flagh _flagh c
_flag::
.blkb 1
.dbsym e flag _flag c
_az::
.blkb 1
.dbsym e az _az c
_j::
.blkb 1
.dbsym e j _j c
_i::
.blkb 1
.dbsym e i _i c
_aa::
.blkb 2
.dbsym e aa _aa i
_ai::
.blkb 2
.dbsym e ai _ai i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -