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
请各位老师们好,下面有个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工作模式。否则也是不会有输出的。
2.固定输出宽度调空闲比
用示波器观察是否有PWM输出。
注意:使能IO为定时器输出功能,否则是不会有输出的。
打开定时器使能标志,否则也是不会有输出的。
再就是设定定时器位PWM工作模式。否则也是不会有输出的。
作者: duojinian 发布时间: 2011-05-24
不要只贴代码,要说明环境,问题现象。
作者: xiaopei1982 发布时间: 2011-05-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28