background image
宏晶科技:www.MCU-Memory.com   Mobile:13922805190(姚永平)   Tel:0755-82948409    Fax: 0755-82944243
宏晶科技:专业单片机 / 存储器供应商   www.MCU-Memory.com   STC12C5410AD 系列 1T 8051 单片机中文指南
85
;   MOV   PCA_PWM1, #03H        ;释放本行注释, PWM 输出就一直是 0, 无脉冲。
    SETB  EPCA_LVD              ;开 PCA 中断
    SETB  EA                    ;开总中断
    SETB  CR                    ;将 PCA 计数器打开
    RET
;------------------------------------------------------------
PWM:                            ;用示波器进行观察较为理想。
        ;逐渐变亮。
    MOV   A, #pulse_width_MIN   ;为输出脉冲宽度设置初值。
    MOV   pulse_width, A        ;pulse_width 数字越大脉宽越窄,P3.5 的 LED  越亮。
PWM_loop1:
    MOV   A, pulse_width        ;判是否到达最大值。
    CLR   C
    SUBB  A, #pulse_width_MAX
    JNC   PWM_a                 ;到达最大值就转到逐渐变暗。
    MOV  A, pulse_width        ;设置脉冲宽度。数字越大、脉宽越窄、LED  越亮。
    MOV   CCAP0H, A              ;*** 示例程序核心语句
    MOV   CCAP1H, A              ;*** 示例程序核心语句
    CPL   A                      ;用 P1 口的 LED 显示占空比,
    MOV   P1, A                  ;占空比 = ( pulse_width/256 ) * 100%  。
    MOV   A, pulse_width        ;计算下一次输出脉冲宽度数值。
    ADD   A, #step
    MOV   pulse_width, A
    ACALL delay                 ;在一段时间内保持输出脉冲宽度不变。
    SJMP  PWM_loop1
PWM_a:
        ;逐渐变暗。
    MOV   A, #pulse_width_MAX   ;为输出脉冲宽度设置初值。
    MOV   pulse_width, A        ;pulse_width 数字越大脉宽越窄,P3.5 的 LED  越亮。
PWM_loop2:
    MOV   A, pulse_width        ;判是否到达最小值。
    CLR   C
    SUBB  A, #pulse_width_MIN
    JC    PWM_b                 ;到达最小值就返回。
    JZ    PWM_b                 ;到达最小值就返回。
    MOV  A, pulse_width       ;设置脉冲宽度。数字越大、脉宽越窄、LED  越亮。
    MOV   CCAP0H, A              ;*** 示例程序核心语句
    MOV   CCAP1H, A              ;*** 示例程序核心语句
    CPL   A                      ;用 P1 口的 LED 显示占空比,