- 打卡等级:常住居民III
- 打卡总天数:172
- 最近打卡:2025-05-01 10:06:01
金牌会员
- 积分
- 1437
|
用PWM控制彩屏亮度,但始终没有用
环境
mcu: STC8H1K08-TSSOP20
目的
想用PWM输出引脚(P1.6)控制屏幕的BLK针脚,达到控制屏幕亮度的目的
遇到的问题
没想到配置之PWM输出这么复杂 :-(。照着手册,逐个bit位配置寄存器,还是没有达到控制屏幕亮度的目的。代码如下:
GPIO配置
MOV P1M1, #0BFH
MOV P1M0, #40H
PWM输出配置和中断:
PWM4PCONF:
; PWM4P output pin selection: P1.6
MOV DPTR, #PWMA_PS
MOVX A, @DPTR
ANL A, #NOT 0C0H
MOVX @DPTR, A
; turn off input capture/ compare output
MOV A, #00H
MOV DPTR, #PWMA_CCER2
MOVX @DPTR, A
; set output mode to PWMA
; enable preload func
MOV DPTR, #PWMA_CCMR4
MOVX A, @DPTR
ORL A, #78H
MOVX @DPTR, A
; enable preload buffer and edge align mode
; counter up
MOV DPTR, #PWMA_CR1
MOVX A, @DPTR
ORL A, #84H
ANL A, #NOT 70H
MOVX @DPTR, A
; enable CC4P output
MOV DPTR, #PWMA_CCER2
MOVX A, @DPTR
ORL A, #10H
MOVX @DPTR, A
; setup PWM duty; high byte first
MOV A, #0FFH
MOV DPTR, #PWMA_CCR4H
MOVX @DPTR, A
MOV A, #0FH
MOV DPTR, #PWMA_CCR4L
MOVX @DPTR, A
; auto-reload value; high byte first
MOV A, #0FFH
MOV DPTR, #PWMA_ARRH
MOVX @DPTR, A
MOV A, #0FFH
MOV DPTR, #PWMA_ARRL
MOVX @DPTR, A
; enable PWMA update interrupt
MOV DPTR, #PWMA_IER
MOVX A, @DPTR
ORL A, #11H
; set prescale
MOV A, #00H
MOV DPTR, #PWMA_PSCRH
MOVX @DPTR, A
MOV A, #00H
MOV DPTR, #PWMA_PSCRL
MOVX @DPTR, A
; re-init counter
MOV DPTR, #PWMA_EGR
MOVX A, @DPTR
ORL A, #01H
MOVX @DPTR, A
; enable PWM4P output; disable PWM4N output
MOV DPTR, #PWMA_ENO
MOVX A, @DPTR
ORL A, #40H
ANL A, #NOT 80H
MOVX @DPTR, A
; extra PWM4P control
MOV DPTR, #PWMA_IOAUX
MOVX A, @DPTR
ORL A, #40H
MOVX @DPTR, A
; enable OC output
MOV DPTR, #PWMA_BKR
MOVX A, @DPTR
ORL A, #80H
MOVX @DPTR, A
; enable counter
MOV DPTR, #PWMA_CR1
MOVX A, @DPTR
ORL A, #01H RET
PWMAISR:
PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR, #PWMA_SR1
MOVX A, @DPTR
ANL A, #NOT 11H
MOVX @DPTR, A
POP DPL
POP DPH
POP ACC
RETI
这能有什么错?逐bit位配置
|
|