请教单片机程序

2019-07-16 04:30发布

请各位抽个时间帮忙看看这个新手写的程序,是自己写但很多地方是调试时修改过来的,不明白,还请多多指导。
#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是什么意思啊?
            







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。