51单片机测量PWM波的占空比的C语言程序

51单片机测量PWM波的占空比的C语言程序,第1张

定时器产生程序如下:

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的值即可调节占空比,程序框架就是这样,具体自己改吧

PULSE

EQU

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11173575.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存