📄 16f630pwm.asm
字号:
;用TMR0实现PWM试验程序 ***
;RC7输出PWM,RC0 RC1输入 ***
;*********************************
LIST P=16F630
include<p16f630.inc>
__CONFIG 0x3194
Y1 EQU 20H
Y2 EQU 21H
QQ EQU 22H
ORG 0000H
NOP
GOTO MAIN
ORG 004H ;中断入口
;*********中断服务程序***************
MOVF QQ,W ;如果QQ到255
XORLW .255 ;则跳至_GO,不
BTFSC STATUS,Z ;再加一操作
GOTO _GO
BTFSC PORTC,0 ;脉宽增检测
GOTO _GO
INCF QQ,F
_GO
MOVF QQ,W
XORLW 01H ;如果QQ到1
BTFSC STATUS,Z ;则跳至FIE,不
GOTO FIE ;再减一操作
BTFSS PORTC,1 ;脉宽减检测
DECF QQ,F
FIE ;
BTFSS INTCON,T0IF ;检测是否是TMR0溢出
RETFIE ;否,则返回
BCF INTCON,T0IF ;是,马上清标志位
BSF PORTC,2 ;脉宽调整
MOVF QQ,W
CALL DELAY ;RB1 一开一关,
BCF PORTC,2 ;形成高电平占空比
RETFIE
;**********主程序*******************
MAIN
BSF STATUS,RP0
MOVLW B'00000100' ;设TMR0为定时器
MOVWF OPTION_REG ;分频比为1:32
BCF TRISC,2 ;设RC7输出
BSF TRISC,1 ;设RC0输入
BSF TRISC,0 ;设RC1输入
BCF STATUS,RP0
BSF INTCON,GIE ;INTCON在4个体均能寻址
BSF INTCON,T0IE
BCF INTCON,T0IF ;清标志位
MOVLW 00H
MOVWF TMR0 ;启动TMR0
CLRF QQ ;清QQ
LOOP
NOP ;在此循环等TMR0溢出
GOTO LOOP ;则转到中断服务程序
;*******高电平延时子程序**************
DELAY
MOVWF Y1
M2
MOVLW 0AH
MOVWF Y2
M1
DECFSZ Y2
GOTO M1
DECFSZ Y1
GOTO M2
RETURN
;***********************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -