标题: 我做了一个项目需要用到上位机控制下位机,同时还需要另外一个中断,请问程序怎么.... [打印本页]

作者: hl5105363    时间: 2018-7-20 12:04
标题: 我做了一个项目需要用到上位机控制下位机,同时还需要另外一个中断,请问程序怎么....
void init()  //初始化函数
{
     TMOD=0X01;                                 //初始化定时器
         TH0=(65536-10)/256;         //初值配置
         TL0=(65536-10)%256;
         EA=1;                                         //开总中断
         ET0=1;                                         //定时/计数器T0中断允许
         TR0=1;                                         
}
void time0(void) interrupt 1         //定时器中断函数
  {

    TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        ++i;
        if(i>10)
          {
          i=0;
          };

        if(i<=zkb)
        {
        OE=0;
        }
        else OE=1;


  }

这个是我要用到的定时器中断

void UsartConfiguration()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
}
void Usart() interrupt 4
{
       

    if (RI)  //接收到字节
    {                                                                                                                                                   
                cmdIndex = SBUF;
                RI = 0;  //清零接收中断标志位
                SBUF = cmdIndex;//将接收到的数据放入到发送寄存器
                cmdArrived = 1;  
    }
    if (TI)      //字节发送完
    {                                                                                                         
        TI = 0;  //清零发送中断标志位
    }
                                         //清除发送完成标志位
}
这个是我用到的通讯中断

单独可以运行,为什么放在一个程序就不行了呢????求大神指点迷津



作者: 小猫猫爱吃鱼    时间: 2018-7-20 18:28
你好!把具体功能要求说一下吧
作者: HC6800-ES-V2.0    时间: 2018-7-21 09:23
你的程序单独能执行,放一起就不能执行,很正常!!!!!
因为:你是两个程序的复制粘贴,不是程序逻辑的组合。
你的程序中,第一次初始化定时器,TMOD=0x01,第二次又重新设置为TMOD=0x20,不论两个初始化函数谁行谁后,反正只有后一次设置的那个定时器是可用的。
所以,应该两个定时器一次性设置完,这就是程序的逻辑组合了。
当然,如果你不参加考试,可以用STC-ISP程序中的定时器设置功能做函数,那么,得到的两个函数是可以独立运行的,你也可以从它给出的程序中学到如何在第二次设置时,不改变第一次设置——很高级的知识哦。
作者: wulin    时间: 2018-7-21 16:55
要同时设置TMOD
void Timer_Init()                  //初始化定时器
{
        TMOD=0X21;           //定时器0方式1,定时器1方式2
        SCON=0X50;           //设置串口控制寄存器
        PCON=0X80;           //波特率加倍
        TH0=(65536-10)/256;  //定时器0初始值
        TL0=(65536-10)%256; //定时器0初始值
        TH1=0XF3;            //定时器1重载值,注意波特率是4800的设置定时重载值
        TL1=0XF3;            //定时器1初始值
        TR0=1;              //开定时器0
        TR1=1;              //开定时器1
        EA=1;               //开总中断
        ET0=1;              //定时/计数器T0中断允许
        ES=1;               //打开接收中断
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1