微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请教单片机程序

请教单片机程序

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



好呀

1\time是的char型有的, 最大255;
2、内部T0、中断初始化,

7位EA-中断总开关,6位ES-串口中断,5,1位ET1,0-定时器具,0中断,2,0位EX1,EX0-外部1,0中断
IE=0X8A,1000 1010就是开总中断,开定时器1,0

IT0=1;  EX0=1表明用的是定时/计数器T0;要换成 (IT1=1; EX1=1;)则用的事T1了那应初始化为TMOD=0x10呢!IE是中断允许寄存器,他的地址是A8H.故可以直接寻址和位寻址(即对IE中得各位单独赋值) IE=0x8a等价于EA=1;ET1=1;ET0=1;即T0,T1中断都开了,

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top