找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2619|回复: 3
收起左侧

我做了一个项目需要用到上位机控制下位机,同时还需要另外一个中断,请问程序怎么....

[复制链接]
ID:292149 发表于 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;  //清零发送中断标志位
    }
                                         //清除发送完成标志位
}
这个是我用到的通讯中断

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


回复

使用道具 举报

ID:303383 发表于 2018-7-20 18:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:164602 发表于 2018-7-21 09:23 | 显示全部楼层
你的程序单独能执行,放一起就不能执行,很正常!!!!!
因为:你是两个程序的复制粘贴,不是程序逻辑的组合。
你的程序中,第一次初始化定时器,TMOD=0x01,第二次又重新设置为TMOD=0x20,不论两个初始化函数谁行谁后,反正只有后一次设置的那个定时器是可用的。
所以,应该两个定时器一次性设置完,这就是程序的逻辑组合了。
当然,如果你不参加考试,可以用STC-ISP程序中的定时器设置功能做函数,那么,得到的两个函数是可以独立运行的,你也可以从它给出的程序中学到如何在第二次设置时,不改变第一次设置——很高级的知识哦。

评分

参与人数 1黑币 +5 收起 理由
yousunny + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 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;               //打开接收中断
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表