📄 step.s
字号:
; PORTC |= (1<<(3-i/2))|(1<<(4-i/2));
ldi R18,2
ldi R19,0
mov R16,R2
clr R17
xcall div16s
movw R4,R16
ldi R18,4
ldi R19,0
sub R18,R16
sbc R19,R17
ldi R16,1
ldi R17,0
xcall lsl16
movw R2,R16
ldi R18,3
ldi R19,0
sub R18,R4
sbc R19,R5
ldi R16,1
ldi R17,0
xcall lsl16
movw R4,R16
or R4,R2
or R5,R3
in R2,0x15
clr R3
or R2,R4
or R3,R5
out 0x15,R2
xjmp L37
L36:
.dbline 115
; else
; PORTC |= (1<<(3-i/2))|1;
lds R2,_i
lsr R2
ldi R17,3
sub R17,R2
ldi R16,1
xcall lsl8
mov R24,R16
ori R24,1
in R2,0x15
or R2,R24
out 0x15,R2
L37:
.dbline 116
; }
L35:
.dbline 117
; i++;
lds R24,_i
subi R24,255 ; addi 1
sts _i,R24
.dbline 118
; if(i>=8)i=0;
cpi R24,8
brlo L23
X21:
.dbline 118
clr R2
sts _i,R2
.dbline 119
; break;
.dbline 122
; case 4:
;
; default:break;
L23:
.dbline -2
L21:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym r a 10 c
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 134
; }
; }
;
; /****************************
; * 定时器1配置函数 *
; * 工作模式:普通模式 *
; * 工作方式:溢出中断 *
; * 预 分 频:64 *
; * 时钟频率:外部7.3728MHZ *
; ****************************/
; void timer1_init(void)
; {
.dbline 135
; TCCR1B = 0x00;
clr R2
out 0x2e,R2
.dbline 136
; TCNT1H = zhuansu>>8;
lds R2,_zhuansu
lds R3,_zhuansu+1
mov R2,R3
clr R3
out 0x2d,R2
.dbline 137
; TCNT1L = zhuansu&0xFF;
lds R24,_zhuansu
lds R25,_zhuansu+1
andi R25,0
out 0x2c,R24
.dbline 138
; TCCR1A = 0x00;
clr R2
out 0x2f,R2
.dbline 139
; TCCR1B = 0x02;
ldi R24,2
out 0x2e,R24
.dbline -2
L41:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 32
jmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile F:\ziliao\新建文件夹\stepmotor\step.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
st -y,R0
st -y,R1
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R8
st -y,R9
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R26
st -y,R27
st -y,R30
st -y,R31
in R0,0x3f
st -y,R0
.dbline -1
.dbline 146
; }
; /****************************
; * 定时器1中断函数 *
; ****************************/
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 147
; TCNT1H = zhuansu>>8;
lds R2,_zhuansu
lds R3,_zhuansu+1
mov R2,R3
clr R3
out 0x2d,R2
.dbline 148
; TCNT1L = zhuansu&0xFF;
lds R24,_zhuansu
lds R25,_zhuansu+1
andi R25,0
out 0x2c,R24
.dbline 149
; PORTC &= 0xF0;
in R24,0x15
andi R24,240
out 0x15,R24
.dbline 150
; if(n)
lds R2,_n
tst R2
breq L43
X26:
.dbline 151
; bj_fsf(m); //反转
lds R16,_m
xcall _bj_fsf
xjmp L44
L43:
.dbline 153
; else
; bj_fs(m); //正转
lds R16,_m
xcall _bj_fs
L44:
.dbline -2
L42:
.dbline 0 ; func end
ld R0,y+
out 0x3f,R0
ld R31,y+
ld R30,y+
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R9,y+
ld R8,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
ld R1,y+
ld R0,y+
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 160
; }
;
; /****************************
; * 器件初始化函数 *
; ****************************/
; void init_devices(void)
; {
.dbline 161
; CLI();
cli
.dbline 162
; port_init();
xcall _port_init
.dbline 163
; timer1_init();
xcall _timer1_init
.dbline 165
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 166
; GICR = 0x00;
out 0x3b,R2
.dbline 167
; TIMSK = 0x04;
ldi R24,4
out 0x39,R24
.dbline 168
; SEI();
sei
.dbline -2
L45:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; key1 -> R22
; key -> R20
.even
_main::
.dbline -1
.dbline 175
; }
;
; /****************************
; * 主函数 *
; ****************************/
; void main(void)
; {
.dbline 177
; unsigned char key,key1;
; init_devices();
xcall _init_devices
xjmp L48
L47:
.dbline 180
;
; while(1)
; {
.dbline 181
; key=RD_KEY(); //按键扫描
in R20,0x13
ori R20,15
com R20
swap R20
andi R20,#0x0F
.dbline 182
; if(key)
brne X39
xjmp L50
X39:
X27:
.dbline 183
; {
.dbline 184
; delay_nms(200);
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 185
; key1=RD_KEY();
in R22,0x13
ori R22,15
com R22
swap R22
andi R22,#0x0F
.dbline 186
; if(key==key1)
cp R20,R22
breq X40
xjmp L70
X40:
X28:
.dbline 187
; {
.dbline 188
; switch(key) //按键有效,相应处理
mov R22,R20
clr R23
cpi R22,1
ldi R30,0
cpc R23,R30
breq L57
X29:
cpi R22,2
ldi R30,0
cpc R23,R30
breq L60
X30:
cpi R22,4
ldi R30,0
cpc R23,R30
brne X41
xjmp L63
X41:
X31:
cpi R22,8
ldi R30,0
cpc R23,R30
brne X42
xjmp L66
X42:
X32:
xjmp L70
L57:
.dbline 191
; {
; case 0x01: //S1键处理:转速增加
; zhuansu += 100;
lds R24,_zhuansu
lds R25,_zhuansu+1
subi R24,156 ; offset = 100
sbci R25,255
sts _zhuansu+1,R25
sts _zhuansu,R24
.dbline 192
; if(zhuansu>62000)zhuansu=62000;
ldi R24,48
ldi R25,242
ldi R26,0
ldi R27,0
lds R2,_zhuansu
lds R3,_zhuansu+1
clr R4
clr R5
cp R24,R2
cpc R25,R3
cpc R26,R4
cpc R27,R5
brlt X43
xjmp L70
X43:
X33:
.dbline 192
ldi R24,62000
ldi R25,242
sts _zhuansu+1,R25
sts _zhuansu,R24
.dbline 193
; break;
xjmp L70
L60:
.dbline 195
; case 0x02: //S2键处理:转速降低
; zhuansu -= 100;
lds R24,_zhuansu
lds R25,_zhuansu+1
subi R24,100
sbci R25,0
sts _zhuansu+1,R25
sts _zhuansu,R24
.dbline 196
; if(zhuansu<5000)zhuansu=5000;
cpi R24,136
ldi R30,19
cpc R25,R30
brsh L70
X34:
.dbline 196
ldi R24,5000
ldi R25,19
sts _zhuansu+1,R25
sts _zhuansu,R24
.dbline 197
; break;
xjmp L70
L63:
.dbline 199
; case 0x04: //S3键处理:转换驱动方式
; m++;
lds R24,_m
subi R24,255 ; addi 1
sts _m,R24
.dbline 200
; if(m>=4)m=1;
cpi R24,4
brlo L70
X35:
.dbline 200
ldi R24,1
sts _m,R24
.dbline 201
; break;
xjmp L70
L66:
.dbline 203
; case 0x08: //S4键处理:正反转控制
; if(n)
lds R2,_n
tst R2
breq L67
X36:
.dbline 204
; n=0;
clr R2
sts _n,R2
xjmp L70
L67:
.dbline 206
; else
; n=1;
ldi R24,1
sts _n,R24
.dbline 207
; break;
.dbline 208
; default:break;
.dbline 210
; }
; }
xjmp L70
L69:
.dbline 212
; while(key) //等待按键释放
; {
.dbline 213
; delay_nms(100);
ldi R16,100
ldi R17,0
xcall _delay_nms
.dbline 214
; key=RD_KEY();
in R20,0x13
ori R20,15
com R20
swap R20
andi R20,#0x0F
.dbline 215
; }
L70:
.dbline 211
tst R20
brne L69
X37:
.dbline 216
; }
L50:
.dbline 217
; }
L48:
.dbline 179
xjmp L47
X38:
.dbline -2
L46:
.dbline 0 ; func end
ret
.dbsym r key1 22 c
.dbsym r key 20 c
.dbend
; }
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -