当前位置:首页 » 编程语言 » 51单片机占空比程序c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

51单片机占空比程序c语言

发布时间: 2022-08-29 05:35:07

⑴ 用51单片机产生周期500,占空比%25(高电平125,低电平375)的矩形波,机器周期1us。用汇编和C语言。

;脉宽为500us;占空比为25%,高电平宽度为 500 / 4 = 125us = 125个机器周期
CLKOUT BIT P1.0 ;频率输出脚
ORG 00H
JMP MAIN
ORG 0BH
T0_ISR:
JBC CLKOUT,T0_ISR1
INC A
CJNE A,#03H,T0_ISR1
SETB CLKOUT
CLR A
T0_ISR1:
RETI
T0_INIT:
CLR A
SETB CLKOUT
MOV TMOD,#02H
MOV TL0,#(256 - 125)
MOV TH0,TL0
MOV IE,#82H
SETB TR0
RET
MAIN:
MOV SP,#5FH
CALL T0_INIT
JMP $
END

#include<reg51.h>
sbit CLKOUT = P1^0; //频率输出脚
unsigned char Cnt;
void T0ISR(void)interrupt 1
{
if(CLKOUT)
{
CLKOUT = 0;
}
else if(++Cnt >= 3)
{
Cnt = 0;
CLKOUT = 1;
}
}
void InitT0(void)
{
Cnt = 0;
CLKOUT = 1;
TMOD = 0x02;
TL0 = 131;
TH0 = 131;
IE = 0x82;
TR0 = 1;
}
void main(void)
{
InitT0();
while(1)
;
}

⑵ 如何用51程序改变占空比

*介绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。程序中使用定时器0产生2.5ms周期脉冲,使用占空比控制变量scale控制占空比,在低电平期间使LED灯亮,在高电平期间使LED灯灭,改变scale就改变了高电平与低电平的时间,因此也就控制了LED灯的亮度。*/#include "AT89X51.H" //模拟PWM输出控制灯的10个亮度级 unsigned int scale; //占空比控制变量 void main(void) // 主程序 { unsigned int n; //延时循环变量 TMOD=0x02; //定时器0,工作模式2(0000,0010),8位定时模式 TH0=0x06; //写入预置初值6到定时器0,使250微秒溢出一次(12MHz) TL0=0x06; //写入预置值 TR0=1; //启动定时器 ET0=1; //允许定时器0中断 EA=1; //允许总中断 while(1) //无限循环,实际应用中,这里是做主要工作 { for(n=0;n<50000;n++); //每过一段时间,就自动加一个档次的亮度 scale++; //占空比控制变量scale加1 if(scale==10) scale=0; //如果scale=10,使scale为0 } } timer0() interrupt 1 //定时器0中断服务程序 {unsigned int tt ; //tt用来保存当前时间在一秒中的比例位置 tt++; //每250微秒增加1 if(tt==10) //2.5毫秒的时钟周期 { tt=0; //使tt=0,开始新的PWM周期 P2_0=0; //使LED灯亮 } if(scale==tt) //按照当前占空比切换输出为高电平 P2_0=1; //使LED灯灭 } /*程序中从tt=0开始到scale为低电平,从scale开始到tt=10为高电平,由于scale是变量,所以改变scale就可以改变占空比。*/

⑶ AT89C51单片机P1.0口输出一个周期为7ms,占空比为2:7的矩形波程序,用C语言编写

高电平时间 7000us*2/9=1556us
低电平时间 7000us-1556=5444
程序大致这样:
TMOD=0X01;
while(1)
{
P1^0=1;//高电平
TH0=(65536-1556)/256;
TL0=(65536-1556)%256;
TR0=1;
while(TF0==0);//等待定时时间到
TF0=0;TR0=0;//清溢出标志,停止计时
P1^0=0;//低电平
TH0=(65536-5444)/256;
TL0=(65536-5444)%256;
TR0=1;
while(TF0==0);//等待定时时间到
TF0=0;TR0=0;
}
虽然用了定时器,但由于中间有装定时器初值,开启定时器等指令,多少会占用一点时间,
造成周期和占空比有误 差,因此定时器初值需要微调

⑷ AT80C51单片机,用C语言编写程序,在单片机的P3.7口产生一个占空比为2:5周期为500ums的方波脉冲信号

占空比为2:5周期为500ums的方波脉冲信号...
----
题目写错了。

第一、500ums,不是时间单位。
第二、占空比为2:5,也不是方波。
第三、题目并没有给出晶振频率。

因此,凡是按照题目回答的答案,都是错误的。

⑸ 51单片机输出方波,周期20ms,占空比5%,p2^0串口,频率333HZ,求大神给个c程序!

这是周期为20毫秒的程序,至于你说的频率333Hz,与前者冲突选用前者
#include<reg51.h>
unsignedcharcnt;
sbitpwm=P2^0;
voidt0isr()interrupt1
{
cnt++;
if(cnt<5)pwm=1;
elsepwm=0;
if(cnt>=100)cnt=0;
}
main()
{
TMOD=0x02;
TH0=56;
TL0=56;
TR0=1;
ET0=1;
EA=1;
while(1);
}

⑹ 51单片机输出可调节占空比的方波,周期20ms,占空比5%-10%,串口调节,求大神给个c程序。

周期20毫秒,占空比5%~10%,所以高电平为1ms~2ms,以1%变化为调节量(200us)计算来设计程序。
#include<reg51.h>
#define uchar unsigned char
sbit pwm=P1^0;
uchar u_p=5,num=0;
void t0isr() interrupt 1
{
num++;
if(num<=u_p)pwm=1;
if(num>u_p)pwm=0;
num%=100;
}
void uart() interrupt 4
{
if(RI)
{
RI=0;
u_p=SBUF;
}
}
main()
{
TMOD=0x22;
TH0=56;
TL0=56;
TH1=0xfd;
TL1=0xfd;
TR0=1;
TR1=1;
ET0=1;
ES=1;
EA=1;
pwm=1;
while(1);
}

⑺ 51单片机测占空比和周期程序求解

您好,单片机可以实现对方波频率、占空比的检测。做这个东西你得从以下方面入手:
1、首先测出方波的频率(这个跟占空比无关),利用这个计算出周期T;
2、利用一个独立的外部中断,在测量完频率后启动。
(1)先开启中断,并设置为上升边沿触发;
(2)方波从低电平跳变到高电平后,中断触发后,将其设置为下降边沿触发,同时启动定时器;
(3)第二次触发中断后,停止计时,两次中断之间的间隔修正补偿后,就是高电平的持续时间Tu。
占空比可以计算出来,就是q=Tu/T*100%,
然后就显示即可。

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

用定时器产生程序如下:
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的值即可调节占空比,程序框架就是这样,具体自己改吧

⑼ 51单片机C语言编程实现10k占空比可变矩形波

#include<reg51.h>
//设CPU是时钟12MHz的8051系列
voidSetupTimer0()
{
TMOD&=0XF0;//仅保留T1信息
TMOD|=0X02;//设置T0:定时功能,方式2,自动重载8位定时器/计数器
TH0=256-50;//每个周期为1us,定时每50us中断一次,两次为100us,
TL0=256-50;//自动重装,TL0,TH0均置256-50
TR0=1;//开启定时器
ET0=1;//定时器0中断打开
}

voidTimer0_ISR()interrupt1//中断服务程序
{
staticdataunsignedcharp0;
p0^=1;P0=p0;//p1完成翻转后输出到P1,两次翻转完成一个周期输出
}

voidmain()
{
SetupTimer0();
EA=1;//全局中断打开
while(1);//死循环,中断程序完成波形输出
}