📄 stc12c_pwm.txt
字号:
;PCA/PWM新增特殊功能寄存器声明
CMOD EQU 0D9H
CCON EQU 0D8H
;------------------------
CCAPM0 EQU 0DAH
CCAPM1 EQU 0DBH
CCAPM2 EQU 0DCH
CCAPM3 EQU 0DDH
;------------------------
CH EQU 0F9H ;PCA 计数器高8位。
CL EQU 0E9H ;PCA 计数器低8位。
;------------------------
CCAP0H EQU 0FAH
CCAP0L EQU 0EAH
CCAP1H EQU 0FBH
CCAP1L EQU 0EBH
CCAP2H EQU 0FCH
CCAP2L EQU 0ECH
CCAP3H EQU 0FDH
CCAP3L EQU 0EDH
PCA_PWM0 EQU 0F2H
PCA_PWM1 EQU 0F3H
PCA_PWM2 EQU 0F4H
PCA_PWM3 EQU 0F5H
;------------------------
CCF0 EQU CCON.0 ;PCA模块0 中断标志, 由硬件置位, 必须由软件清0。
CCF1 EQU CCON.1 ;PCA 模块1 中断标志, 由硬件置位, 必须由软件清0。
CR EQU CCON.6 ;1:允许 PCA 计数器计数, 必须由软件清0。
CF EQU CCON.7 ;PCA计数器溢出标志,由硬件或软件置位,必须由软件清0。
;------------------------
;------------------------
;IP EQU 0B8H;[PCA_LVD ADC_SPI PS PT1 PX1 PT0 PX0]
IPH EQU 0B7H;[PCA_LVD ADC_SPI PS PT1 PX1 PT0 PX0]优先级=二进制值(0最低)
EPCA EQU IE.6;PCA 中断屏蔽位∈IE
;========================================================================================
AUXR EQU 8EH;[T0 T1 UART EADCI || ESPI ELVDI XX XX] 0=传统12分频;1=1T
CLK_DIV EQU 0C7H;[DB末3位有效]001=1/2;010=1/4;011=1/8;100=1/16;101=1/32;110=1/64;111=1/128fose
;***************************************************************************************
;***************************************************************************************
ORG 0000H
AJMP START
ORG 0003H;外中断0
;AJMP OUT0
XRL PCA_PWM0,#00000011B
MOV R7,#255
D2:MOV R0,#255
D1:DJNZ R0,D1
DJNZ R7,D2
RETI
ORG 000BH;定时器0
NOP;AJMP TIME0
ORG 0013H;外中断1
;AJMP OUT1
MOV R7,#255
D22:MOV R0,#255
D11:DJNZ R0,D11
DJNZ R7,D22
RETI
ORG 001BH;定时器1
;AJMP TIME1
ORG 0023H;串口 ES
;AJMP SERIAL
ORG 002BH
;AJMP ADC_SPI;
ORG 0033H
;AJMP PCA_LVD
MOV CL,#00H;------中断后重新送数改变总周期----------
MOV CH,#7FH;----------------------------------------
MOV CCAP0H,#080H;--中断后一定要重新送占空比---------
CPL P2.7
MOV CCON,#01000000B;一定要清零CF或CCFn--但不要清CR--
RETI
ORG 50H
START:MOV SP,#70H
ACALL PCA
AJMP $
PCA:MOV CMOD,#01111011B;[CIDL XX XX XX || XX CPS1 CPS0 ECF ]
; 0 =idle状态继续计数 0 0 fosc/12 1=PCA计数器溢出中断允许
; 0 1 fosc/2
; 1 0 T0溢出
; 1 1 P3.4入外部时钟
MOV CCON,#0000000B;[CF CR XX XX || CCF3 CCF2 CCF1 CCF0 ]
; 允许CHCL溢出中断=1 允许PCA 模块中断标志(如CCAPMn中①MATn=1则置位②置位后且ECCFn=1则进入中断)
MOV CCAPM0,#01000010B;[XX ECOMn CAPPn CAPNn || MATn TOGn PWMn ECCFn ]
; 允许=1 比较 上/下升沿触发 匹配置位CCFn 匹配翻转 PWM 允许CCON的CCFn触发中断
; - x 1 0 0 0 0 x 16位上升沿触发捕捉
; - x 0 1 0 0 0 x 16位下降沿触发捕捉
; - x 1 1 0 0 0 x 16位边沿触发捕捉
; - 1 0 0 1 0 0 x 16位软件定时器 48H
; - 1 0 0 1 1 0 x 16位高速脉冲输出 4CH
; - 1 0 0 0 0 1 0 8位 PWM
MOV CL,#00H
MOV CH,#7FH
MOV CCAP0L,#080H
MOV CCAP0H,#080H;在运行过程中可改变此值
MOV PCA_PWM0,#00000000B;在运行过程中可改变H位 [X X X X || X X EPCnH EPCnL]
SETB EPCA
SETB EA
;SETB EX0
SETB EX1
ORL CCON,#01000000B;SETB CR
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -