+ -
当前位置:首页 → 问答吧 → pwm脉冲调光程序

pwm脉冲调光程序

时间:2011-05-23

来源:互联网

老师们:
      请各位老师们好,下面有个pwm脉冲调光程序,我调试了好几天了,没有找到毛病,还是不能达到调光的功能,请高手们,老师们多多指教,我是个新手,在此感谢不尽


P_PWM1   EQU   P1.6

CYCLE   EQU     1000    
CYCLE_HIGH     EQU     500      
DSEG   AT   20h

ORG     40H

PWM_HIGH_L   DATA   40H

PWM_HIGH_H   DATA   41H  
PWM_LOW_L   DATA   42H

PWM_LOW_H   DATA   43H      
ORG     60H                        
STACK:   DS   20H                  

CSEG

ORG     0000H              
JMP   ON_RESET  

ORG       0003H            
RETI                      
ORG       001BH               JMP     TIMER1_ISR

ORG     0023H              
RETI                        


;系统初始化

ORG       0033H

USING       0

ON_RESET:

      MOV     R7   ,#00h

      DJNZ       R7,$       ;延时

      MOV     SP,#(STACK-1)            
;禁止各中断

            MOV     IE,#00h

            MOV     IP,#00H

SYS_INIT_LOOP:

              MOV       R1,#00H

              DJNZ     R1,$

              DJNZ     R0,SYS_INIT_LOOP


;RAM(30H-50H)清零

          MOV     R1,#30h

          MOV     A,#0

ZERO_LOOP:

          MOV   R1,A

          INC     R1

        CJNE     R1,#60H,ZERO_LOOP

;定时器1初始化

        mov   TMOD,#00010000BH         ;方式1,16位定时器模式

        mov     PWM_HIGH_L,#LOW(65536-CYCLE_HIGH)

        MOV     PWM_HIGH_H,#HIGH(65536-CYCLE_HIGH)

        mov     PWM_LOW_L,#LOW(65536-CYCLE-(CYCLE_HIGH))

        MOV     PWM_LOW_H,#HIGH(65536-CYCLE-(CYCLE_HIGH))

        SETB     P_PWM1

        MOV     TL1,PWM_HIGH_L

        MOV     TH1,PWM_HIGH_H

        SETB     ET1                   ;T1开中断

        SETB       EA

        SETB     TR1

MAIN_LOOP:             ;主循环

            SJMP     $

      ;定时器1中断服务程序

TIMER1_ISR:

        USING     1

      PUSH     ACC

      PUSH     PSW

      JB         P_PWM1,pwm_out_low

      SETB       P_PWM1

        MOV     TL1,PWM_HIGH_L

        MOV     TH1,PWM_HIGH_H

        JMP     TIMER_ISR_RET

PWM_OUT_LOW:

          CLR     P_PWM1

        MOV     TL1,PWM_LOW_L

        MOV     TH1,PWM_LOW_H

TIMER_ISR_RET:

        POP     PSW

        POP     ACC

RETI

END

作者: zhangmingshou   发布时间: 2011-05-23

1. 固定周期调占空比。
2.固定输出宽度调空闲比

用示波器观察是否有PWM输出。
注意:使能IO为定时器输出功能,否则是不会有输出的。
打开定时器使能标志,否则也是不会有输出的。
再就是设定定时器位PWM工作模式。否则也是不会有输出的。

作者: duojinian   发布时间: 2011-05-24

不要只贴代码,要说明环境,问题现象。

作者: xiaopei1982   发布时间: 2011-05-24