为什么点亮的灯一样亮
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
//1KHz时T=0.001S=1000uS,T/2=0.0005S=0.5mS=500uS
uchar tt;
void main()
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-100)/256;//定时100uS
TL0=(65536-100)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(tt==9)//1/10T的时间灭
{
tt=0;
led=1;
}
else//9/10T的时间亮
led=0;
}
}
void exter0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
tt++;
}
单片机PWM调光的实质不是调节占空比么,我分别调节两个程序一个是周期内9/10T亮、另一个是周期内1/10T亮
答案:3 悬赏:0 手机版
解决时间 2021-02-06 00:36
- 提问者网友:戎马万世
- 2021-02-05 15:44
最佳答案
- 五星知识达人网友:第四晚心情
- 2021-02-05 16:42
很显然是有逻辑上的错误,你原来的程序在tt为9的时候,只有一瞬间的时间,也就是说在中断的时候,tt一旦为9,主程序中立刻就将它变成了0,所以你的led为1的时间是相当短的,几乎是全部是0的情况,所以,不管你怎么调,都是和led为0的结果是一样的。
我稍微给你改下,结果如下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
//1KHz时T=0.001S=1000uS,T/2=0.0005S=0.5mS=500uS
uchar tt;
void main()
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-100)/256;//定时100uS
TL0=(65536-100)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(tt>=9)//1/10T的时间灭 。
{
led=1;
}
else//9/10T的时间亮
led=0;
}
}
void exter0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
tt++;
if(tt>=10)
// 这里为了保证程序的抗干扰,不能让它留有其他的可能性,所以改为>=
//楼主可以想想为什么
{tt=0;}
}
我稍微给你改下,结果如下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
//1KHz时T=0.001S=1000uS,T/2=0.0005S=0.5mS=500uS
uchar tt;
void main()
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-100)/256;//定时100uS
TL0=(65536-100)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(tt>=9)//1/10T的时间灭 。
{
led=1;
}
else//9/10T的时间亮
led=0;
}
}
void exter0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
tt++;
if(tt>=10)
// 这里为了保证程序的抗干扰,不能让它留有其他的可能性,所以改为>=
//楼主可以想想为什么
{tt=0;}
}
全部回答
- 1楼网友:掌灯师
- 2021-02-05 18:09
你好!
你 的程序对吗?
如有疑问,请追问。
- 2楼网友:青尢
- 2021-02-05 17:48
程序都不对
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯