请各位抽个时间帮忙看看这个新手写的程序,是自己写但很多地方是调试时修改过来的,不明白,还请多多指导。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit yt0=P1^0;
sbit yt1=P1^1;
sbit yt2=P1^2;
sbit yt3=P1^3;
sbit yt4=P1^4;
sbit yt5=P1^5;
sbit yt6=P1^6;
sbit yt7=P1^7;
unsigned char zkb; //占空比
unsigned char
time; // 时间
void delay_ms(unsigned int i);
void ds_sys(); //初始化
void delay_ms(unsigned int i)
{
for(;i!=0;i--);
}
void ds_sys() //初始化
{
TMOD=0X01;
TH0 =0XFF;
TL0 =0X9C; //100us
TR0 =1;
ET0 =1;
EA =1;
}
void timer0(void) interrupt 1
{
TH0=0XFF;
TL0=0X9C;
++time;
if(time>1000)
time=0;
if(time<=zkb)
yt0=1;
else
yt0=0;
if(time<=zkb)
yt1=1;
else
yt1=0;
if(time<=zkb)
yt2=1;
else
yt2=0;
if(time<=zkb)
yt3=1;
else
yt3=0;
if(time<=zkb)
yt4=1;
else
yt4=0;
if(time<=zkb)
yt5=1;
else
yt5=0;
if(time<=zkb)
yt6=1;
else
yt6=0;
if(time<=zkb)
yt7=1;
else
yt7=0;
}
void main()
{
ds_sys();
zkb=100;
yt0=0;
yt1=0;
yt2=0;
yt3=0;
yt4=0;
yt5=0;
yt6=0;
yt7=0;
while(1)
{
delay_ms(1000);
yt0=1;
yt1=1;
yt2=1;
yt3=1;
yt4=1;
yt5=1;
yt6=1;
yt7=1;
}
}
我想问 这个程序里面的ZKB是怎么计算的??
第一个问题:time的最大是1000,zkb的设置是100.是不100/1000*100%=10%?
第二个问题:我不明白这段;
void ds_sys() //初始化{
TMOD=0X01;
TH0 =0XFF;
TL0 =0X9C; //100us
TR0 =1;
ET0 =1;
EA =1;
} 这段是否是内部T0吗?
如果我改成:IT0=1; EX0=1; (IT1=1; EX1=1;)就不行,还不明白中断这章
我看到有人这样写: TR1 = 1; ET1=1; IE =0x8A; 这个IE=0x8a是什么意思啊?
你好!我问下 外部中断IT0 IT1对应的中断标志位是不是EX0 EX1 ??
那是否可以这样写:IT0=1; EX0=1; EA=1; 这个是否外部中断打开?
第二个问题,上述程序段落里面的ZKB占空比是怎么计算出来的?是我那样计算的吗?
一周热门 更多>