
unsigned
int
a=0
,b=10
void
main()
{
tmod=0x01
th0=(65536-50000)/256
tl0=(65536-50000)%256
ea=1
et0=1
tr0=1
}
void
pwm()
interrupt
1
{
th0=(65536-50000)/256
tl0=(65536-50000)%256
a++
p1^1=0
if(a=20)
{
a=0
}
if(a=b)
{
p1^1=1
}
}
调节a
,b的值即可调节占空比,程序框架就是这样,具体自己改吧
PULSEEQU
P1.0
ORG
0000H
LJMP
MAIN
ORG
0030H
MAIN:
MOV
TMOD,#11H
定时器0,1设置为工作模式1
MOV
TH0,#00H
MOV
TL0,#00H
MOV
TH1,#00H
MOV
TL1,#00H
JNB
PULSE,$
SETB
TR0
SETB
TR1
JB
PULSE,$
CLR
TR0
JNB
PULSE,$
CLR
TR1
MOV
R3
,TH0
MOV
R4
,TL0
MOV
R7
,#100
LCALL
MUL21
脉宽
*100
MOV
R5
,TH1
MOV
R6
,TL1
MOV
R7,#0
DIV:
以下完成R2R3R4/R5R6也就是求出
占空比
大小
CLR
C
MOV
A,R4
SUBB
A,R6
MOV
R4,A
MOV
A,R3
SUBB
A,R5
JNC
DIV1
MOV
A,R2
JNZ
DIV0
MOV
TMOD,#21
定时器1设置为模式2,作为
波特率发生器
MOV
TH1,#0FDH
MOV
TL1,#0FDH
MOV
SCON,#50H
SETB
TR1
MOV
SBUF,R7
将占空比值通过串口发送给计算机
JNB
TI,$
CLR
TI
LJMP
MAIN
DIV0:
DEC
R2
DIV1:
INC
R7
SJMP
DIV
MUL21:
R3R4*R7=R2R3R4
MOV
A,R4
MOV
B,R7
MUL
AB
MOV
R4,A
MOV
A,B
XCH
A,R3
MOV
B,R7
MUL
AB
ADD
A,R3
MOV
R3,A
CLR
A
ADDC
A,B
MOV
R2,A
CLR
OV
RET
END
100Hz,周期=10mS,那么定时器周期取 T=1mS,输出信号周期/定时器周期=10,那么如果使P1.0口输出5个T0高电平,5个T低电平,则得到占空比=50%,周期=10T=10mS的方波信号;使P1.0口输出3个T0高电平,7个T低电平,则得到占空比=30%,周期=3T+7T=10T=10mS的方波信号;
如果想得到占空比=33%,那么取输出信号周期/定时器周期=100,即定时器周期取 T=0.1mS=100uS
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)