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

📄 stc12c_pwm.txt

📁 STC12C5410/STC12C5410AD 系列 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 + -