请教单片机程序

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是什么意思啊?
            







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
ytww19
1楼-- · 2019-07-17 05:34
changjiang008 发表于 2012-9-28 10:48
IT0=1;  EX0=1表明用的是定时/计数器T0;要换成 (IT1=1; EX1=1;)则用的事T1了那应初始化为TMOD=0x10呢!I ...

你好!我问下   外部中断IT0 IT1对应的中断标志位是不是EX0  EX1 ??
那是否可以这样写:IT0=1;  EX0=1; EA=1;    这个是否外部中断打开?
第二个问题,上述程序段落里面的ZKB占空比是怎么计算出来的?是我那样计算的吗?

一周热门 更多>