微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 几乎完全一样的两段程序,单片机只能运行一个

几乎完全一样的两段程序,单片机只能运行一个

时间:10-02 整理:3721RD 点击:
51单片机,keil 2编译都没问题:
正常运行的:

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
sbit spk=P2^3;
uchar num;
void main()
{
       num=0;
           TMOD=0x01;   // 工作方式是1
       TH0=(65536-45872)/256;     //计算初值
       TL0=(65536-45872)%256;    //计算初值
       EA=1;                     //开总中断
       ET0=1;                    //定时器T0 中断允许
       TR0=1;                    //启动定时器定时的功能
       while(1);
}
void T0_time()interrupt 1         //定时器0的中断服务程序
{
       TH0=(65536-45872)/256;     //重装初值
       TL0=(65536-45872)%256;
       num++;
                                  if(num==10)
              {
                     num=0;            //重新赋值num进入下一次循环
                     spk=~spk;                        //蜂鸣器哒哒声
                    led1=~led1;       //定时1s后,改变发光二极管的状态

            
              }     
        
}
把中断函数的语句放在main函数中,单片机不能正常运行。
不能正常运行的程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
sbit spk=P2^3;
uchar num;
void main()
{
       num=0;
           TMOD=0x01;   // 工作方式是1
       TH0=(65536-45872)/256;     //计算初值
       TL0=(65536-45872)%256;    //计算初值
       EA=1;                     //开总中断
       ET0=1;                    //定时器T0 中断允许
       TR0=1;                    //启动定时器定时的功能
       while(1)
           {
                  if(num==10)
              {
                     num=0;            //重新赋值num进入下一次循环
                     spk=~spk;                        //蜂鸣器哒哒声
                     led1=~led1;       //定时1s后,改变发光二极管的状态

            
              }     
           }
}
void T0_time()interrupt 1         //定时器0的中断服务程序
{
       TH0=(65536-45872)/256;     //重装初值
       TL0=(65536-45872)%256;
       num++;
}
期待在大家的帮助下,解开这个谜团。


朋友们可以试试,确实这样,

第二个你说的有问题程序我看了下没发现什么问题,为了证明没问题,我刚还用keil编译了下,单片机正常运行。

谢谢小编。我终于找到原因了。原来是我在选项中改动了interrupt vectors at address 导致的。保持默认值就行了。另外,我发现有时候,T0中断入口地址不在0x000b,程序也可运行。奇怪了。

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

网站地图

Top