永发信息网

已知单片机主频12MHZ,在P1.2口输出频率150HZ,用定时器1中断方式,(占空比通过按键调节

答案:3  悬赏:0  手机版
解决时间 2021-12-30 22:44
  • 提问者网友:且恨且铭记
  • 2021-12-30 11:16
已知单片机主频12MHZ,在P1.2口输出频率150HZ,用定时器1中断方式,(占空比通过按键调节)
最佳答案
  • 五星知识达人网友:逐風
  • 2021-12-30 12:20
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit pulse=P1^2;
sbit keyup=P1^0,
sbit keydn=P1^1;
uint high,low;
bit flag=0;
void t1isr() interrupt 3
{
pulse=~pulse;

flag=~flag;

if(flag)

{
TH1=(65536-3333*low/100)/256;

TL1=(65536-3333*low/100)%256;

}

else

{
TH1=(65536-3333*high/100)/256;

TL1=(65536-3333*high/100)%256;

}

}

main()
{
TMOD=0x10;
high=50;
low=50;
TH1=(65536-3333*high/100)/256;

TL1=(65536-3333*high/100)%256;

TR1=1;

ET1=1;

EA=1;

while(1)

{
if(keyup==0)

{
while(keyup==0);

high++;

if(high>99)high=99;

low=100-high;

}

if(keydn==0)

{
while(keydn==0);

high--;

if(high<1)high=1;

low=100-high;

}

}

}
全部回答
  • 1楼网友:野慌
  • 2021-12-30 14:35
#include #define uchar unsigned char sbit pulse=p1^1; bit flag=0; void t1isr() interrupt 3 { pulse=~pulse; flag=~flag; if(flag) { th1=(65536-7500)/256; tl1=(65536-7500)%256; } else { th1=(65536-2500)/256; tl1=(65536-2500)%256; } } main() { tmod=0x10; th1=(65536-2500)/256; tl1=(65536-2500)%256; tr1=1; et1=1; ea=1; while(1); }
  • 2楼网友:你哪知我潦倒为你
  • 2021-12-30 13:23
直接要代码的? 给你点提示吧 1。初始化定时器1,初始值10毫秒; 2。定义2个变量,一个用于保存高电平持续时间A,一个用于保存低电平持续时间B; 3。定时器启动之后,拉高p1.2口输出高电平,定时器数据开始增加到A时,把p1.2端口拉低,并将计数器总数清零,然后等计数器数据到达B时,再把端口p1.2拉高,如此循环就能得到你要的pwm; 4。做一个按键程序,用于调整高低电平时间,来修改A,B数据; 5。A+B=1/150秒。(这个应该不难理解吧)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯