您现在所在的是:

单片机论坛

回帖:7个,阅读:691 [上一页] [1] [下一页]
955
hernde
文章数:20
年度积分:50
历史总积分:955
注册时间:2009/8/8
发站内信
发表于:2011/11/10 10:39:46
#0楼
LED BIT P1.0
       K1 BIT P2.1
       K2 BIT P2.2
       PWM DATA 20H
       ORG 0000H
       AJMP MAIN
       ORG 000BH
       LJMP TIMER0
       ORG 001BH
       LJMP TIMER1
       ORG 0100H
MAIN:   MOV SP,#30H
       MOV PWM,#7FH
       MOV TMOD,#21H     ;1ms 定时
       MOV TH0,#0FCH
       MOV TL0,#18H
       MOV TH1,PWM        ;125us
       MOV TL1,#00H
       SETB EA
       SETB ET1
       SETB ET0
       SETB TR0
       SETB LED
JIANCE: JNB K1,LOOP1      ;按键K1
       JNB K2,LOOP2      ;按键K2
       JMP JIANCE
LOOP1:  INC PWM
       JMP DELAY
       MOV R0,PWM
      CJNE R0,#0FFH,JIANCE
       MOV PWM,#7FH
       JMP JIANCE
LOOP2:DEC PWM
    JMP DELAY
     MOV R0,PWM
    CJNE R0,#7FH,JIANCE
     MOV PWM,#7FH
     JMP JIANCE

DELAY:    ;将立即数传给寄存器R5   10MS延时
MOV R6,#014H
F2: MOV R7,#0FFH
A1: DJNZ R7,A1       ;若为0程序向下执行,若不为0程序跳转到
DJNZ R6,F2
RET

TIMER0: PUSH ACC
       PUSH PSW
       CLR TR1
       MOV TH0,#0FCH
       MOV TL0,#66H
       MOV TH1,PWM
       MOV TL1,#01H
       SETB TR1
       CLR LED
       POP PSW
       POP ACC
       RETI
TIMER1: CLR TR1
       SETB LED
       RETI

END
哪位大侠,能否帮我看一下,这个是用两个定时器输出一个方波,通过两个按键增减脉宽.
两个能产生初始方波,但按键,增减,无法改变脉宽,外部硬件连接一切正常,小弟反复查看,还是无法看出程序上有什么错误
两个定时器产生的,方波
用的是STC89C52RC
忘各位师傅百忙中,抽空帮我看一下程序.表情






[此贴子已经被作者于2011/11/11 19:23:55编辑过]
9062
吴辉
文章数:2351
年度积分:50
历史总积分:9062
注册时间:2002/1/15
发站内信
发表于:2011/11/10 18:18:59
#1楼
MOV TH1,PSW
955
hernde
文章数:20
年度积分:50
历史总积分:955
注册时间:2009/8/8
发站内信
发表于:2011/11/11 19:21:44
#2楼
恩,是的,非常感谢抽空看我的贴 。。。但改了以后,还是不能实现。。。还是找不到原因
2231
jog0821
文章数:250
年度积分:50
历史总积分:2231
注册时间:2010/6/16
发站内信
发表于:2011/11/12 11:32:14
#3楼
你们能不能用C写,直观明了!
天道酬勤!
759
crazyman67
文章数:3
年度积分:50
历史总积分:759
注册时间:2011/11/6
发站内信
发表于:2011/11/12 22:36:59
#4楼
汇编没学好,看看是不是延时问题,时间太短没有显示出来,c中经常有这样的情况。
765
2890069
文章数:5
年度积分:50
历史总积分:765
注册时间:2010/4/6
发站内信
发表于:2011/11/22 15:24:34
#5楼
PWM data 20h
你换成PWM equ 20H  试一下
808
hDragon
文章数:19
年度积分:50
历史总积分:808
注册时间:2011/3/30
发站内信
发表于:2011/12/5 23:01:14
#6楼
好久没上这个论坛了,今天发现居然还有人用汇编写程序!
说一下你的程序吧。总体感觉:乱。
我整理了一下你的程序,个别地方有轻微改动,贴出来你看一下:
LED BIT P1.0
K1 BIT P2.1
K2 BIT P2.2

PWM DATA 20H

ORG 0000H
AJMP MAIN
ORG 000BH
LJMP TIMER0
ORG 001BH
LJMP TIMER1
ORG 0100H
MAIN:
MOV SP,#30H
MOV PWM,#7FH
MOV TMOD,#21H ;1ms 定时,T0方式1,T1方式2
MOV TH0,#0FCH
;MOV TL0,#18H
MOV TL0,#66H
MOV TH1,PWM ;125us
;MOV TL1,#00H
MOV TL1,PWM
SETB EA
SETB ET1
SETB ET0
SETB TR0
SETB LED

JIANCE:
JNB K1,LOOP1 ;按键K1
JNB K2,LOOP2 ;按键K2
SJMP JIANCE

LOOP1:
INC PWM
;SJMP DELAY
MOV R0,PWM
CJNE R0,#0FFH,JIANCE
MOV PWM,#7FH
SJMP JIANCE

LOOP2:
DEC PWM
;SJMP DELAY
MOV R0,PWM
CJNE R0,#7FH,JIANCE
MOV PWM,#7FH
SJMP JIANCE

DELAY: ;将立即数传给寄存器R5 10MS延时
MOV R6,#014H
F2: MOV R7,#0FFH
A1: DJNZ R7,A1 ;若为0程序向下执行,若不为0程序跳转到
DJNZ R6,F2
RET

TIMER0:
PUSH ACC
PUSH PSW
CLR TR1
MOV TH0,#0FCH
MOV TL0,#66H
MOV TH1,PWM
;MOV TL1,#01H
MOV TH1,PWM
SETB TR1
CLR LED
POP PSW
POP ACC
RETI

TIMER1:
CLR TR1
SETB LED
RETI

END
你的程序中按键调整的是PWM这个量,也就是低电平时间。如果你的程序正常的话,实现的效果应该是:调占空比的同时也在调周期。
只有T0时间到后才能启动一次T1定时PWM这么长的时间,T1时间一到就把自身关掉了。在T0的中断服务程序中,你没有关T0,所以在T1定时的过程中(此时LED为低电平),T0也在工作,所以你实际的输出波形是:高电平时间=T0时间-T1时间,低电平时间=一次T1时间,而整个波形的周期就是T0的定时时间1ms。你只调整PWM这个量,相当于只调整T1的时间(LED为低电平的时间),而T1是工作在方式2(自动重载初值的8位方式),所以你的占空比可调范围应该是75%(左右,按最长250us算)~100%。
所有这些分析只适用于你输出的连续波形,不适用于输出的第一个波形。输出的第一个波形是:T0老老实实地定时了1ms(此时LED为高电平),然后才能按我上面说的输出波形。
你到底想做个什么效果的PWM波,说得详细一点贴出来,我再看看。
808
hDragon
文章数:19
年度积分:50
历史总积分:808
注册时间:2011/3/30
发站内信
发表于:2011/12/6 18:37:43
#7楼
上贴中第一段说的效果不准确,应该是:周期不变,调低电平时间。表情

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

109.2007