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

📄 motor.s

📁 运动控制:利用单片机的定时器中断来产生脉冲
💻 S
字号:
	.module motor.c
	.area text(rom, con, rel)
	.dbfile D:\桌面\avr程序设计\电机控制\motor.c
	.dbfunc e for_ward _for_ward fV
;          speed -> R16
	.even
_for_ward::
	.dbline -1
	.dbline 9
; /****************************************************************
; ** 文件名:motor.c   电机驱动函数
; ****************************************************************/
; #include "config.h"
; 
; /******************************************************************************/
; //正转,速度
; void for_ward(uint8 speed)
; {
	.dbline 10
;  	 if(speed!=0)
	tst R16
	breq L2
	.dbline 11
;  	  {
	.dbline 12
;   	   OCR2 = speed;
	out 0x23,R16
L4:
	.dbline 13
L5:
	.dbline 13
;   	   while(ASSR&(1<<TCR2UB)==1) ; //启动TC2 pwm 输出,异步操作需要等待 OCR2写入完毕
	in R2,0x22
	sbrc R2,0
	rjmp L4
	.dbline 14
;   	  }
L2:
	.dbline 15
;  	 TC2_EN;   //pwm_start
	in R24,0x39
	ori R24,192
	out 0x39,R24
	.dbline 16
;  	 moto_en1;
	sbi 0x12,4
	.dbline 17
;  	 moto_uen2;
	cbi 0x12,5
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r speed 16 c
	.dbend
	.dbfunc e back_ward _back_ward fV
;          speed -> R16
	.even
_back_ward::
	.dbline -1
	.dbline 22
; }
; /******************************************************************************/
; //反转,速度
; void back_ward(uint8 speed)
; {
	.dbline 23
;  	 if(speed!=0)
	tst R16
	breq L8
	.dbline 24
;   	{
	.dbline 25
;        OCR2 = speed;
	out 0x23,R16
L10:
	.dbline 26
L11:
	.dbline 26
;   	   while(ASSR&(1<<TCR2UB)==1) ;// 启动TC2 pwm 输出,异步操作需要等待OCR2写入完毕
	in R2,0x22
	sbrc R2,0
	rjmp L10
	.dbline 27
;     }
L8:
	.dbline 28
;    TC2_EN;   //pwm start
	in R24,0x39
	ori R24,192
	out 0x39,R24
	.dbline 29
;    moto_uen1;
	cbi 0x12,4
	.dbline 30
;    moto_en2;
	sbi 0x12,5
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r speed 16 c
	.dbend
	.dbfunc e motor_stop _motor_stop fV
	.even
_motor_stop::
	.dbline -1
	.dbline 35
; }
; /******************************************************************************/
; //停止
; void motor_stop(void)
; {
	.dbline 36
;  moto_en1;   //同时置一停止
	sbi 0x12,4
	.dbline 37
;  moto_en2;
	sbi 0x12,5
	.dbline 38
;  TC2_DIS;    //pwm stop
	in R24,0x39
	andi R24,127
	out 0x39,R24
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e speed_add _speed_add fV
;            add -> R16
	.even
_speed_add::
	.dbline -1
	.dbline 44
	.dbline 45
	in R24,0x23
	add R24,R16
	cpi R24,240
	brsh L15
	.dbline 46
	.dbline 47
	in R2,0x23
	add R2,R16
	out 0x23,R2
	.dbline 48
L15:
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym r add 16 c
	.dbend
	.dbfunc e speed_subtract _speed_subtract fV
;       subtract -> R16
	.even
_speed_subtract::
	.dbline -1
	.dbline 54
	.dbline 55
	in R2,0x23
	sub R2,R16
	ldi R24,10
	cp R24,R2
	brsh L18
	.dbline 56
	.dbline 57
	in R2,0x23
	sub R2,R16
	out 0x23,R2
	.dbline 58
L18:
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbsym r subtract 16 c
	.dbend

⌨️ 快捷键说明

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