📄 em78p153designpwmout.asm
字号:
;以纯软件方式在低速MCU上实现高速PWM的方法
;作为消费电子的开发人员来说,控制成本是头等待大事,因此在开发过程中以各种方法来控制成本,
;下面介绍一下在4MHZ的MCU上实现20KHz以上的可调PWM输出:
;程序以EMC78P153为MCU,使用内部RC振荡器,频率为4MHz
MAIN:
WDTC
;=============================
JBC MOTOR_PLUS_F
JMP PWM_MOTOR_PLUS
JBC MOTOR_MINUS_F
JMP PWM_MOTOR_MINUS
CLR PORT6
CALL DELAY_80US
CALL SCAN_KEY
JMP PWM_MOTOR_EXIT
;=============================
PWM_MOTOR_PLUS:
BC MOTOR_2L_P
BS MOTOR_2H_P
BC MOTOR_1H_P
BS MOTOR_1L_P
CALL SCAN_KEY
MOV A,MOTOR_POWER
MOV WR0,A
DJZ WR0;0.25*4=1US
JMP $-1
MOV A,MOTOR_POWER
SUB A,@_MAX_MOTOR_POWER
MOV WR0,A
JBC Z_F
JMP PWM_MOTOR_PLUS_EXIT
BC MOTOR_1L_P
DJZ WR0;0.25*4=1US
JMP $-1
PWM_MOTOR_PLUS_EXIT:
JMP PWM_MOTOR_EXIT
;=============================
PWM_MOTOR_MINUS:
/*
BC MOTOR_1L_P
BS MOTOR_1H_P
BC MOTOR_2H_P
BS MOTOR_2L_P
*/
MOV A,@0B00100100
MOV PORT6,A
CALL SCAN_KEY
MOV A,MOTOR_POWER
MOV WR0,A
DJZ WR0;0.25*4=1US
JMP $-1
MOV A,MOTOR_POWER
SUB A,@_MAX_MOTOR_POWER
MOV WR0,A
JBC Z_F
JMP PWM_MOTOR_MINUS_EXIT
BC MOTOR_2L_P
DJZ WR0;0.25*4=1US
JMP $-1
PWM_MOTOR_MINUS_EXIT:
JMP PWM_MOTOR_EXIT
;=============================
PWM_MOTOR_EXIT:
JMP MAIN
;==========================================================
;原理其实很简单,因为一个指令周期为0.5US,如果只是控制I/O的高低电平,理论上的PWM频率就可以做的很高,实际应用中,
;还要进行键扫描等处理,但做到20KHZ还是比较轻松的!
;这里只是提供一个思路,如果大家发现有什么好的方法可以相互交流!!!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -