打印

遇到奇怪的问题,KEIL中T1、UART0中断处理函数被编译器忽略!

[复制链接]
2647|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
emicro|  楼主 | 2007-4-14 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MCU为77E516,附上主要程序:
void main(void)
{    

    McuIint();
    EN1 = 1;
    T1_Init();
    UART_Init();
    
    EA = 1;
    while (1)
    {
        MainTask();    // 目前为空函数
                                }
}

void McuIint(void)
{
    EA = 0;                                    // 中断禁止
    P1 = 0xff;                                // 初始化P1口
    PMR = 0x40;                                // 设定一个机器周期为4个振荡器周期

    CKCON = 0x3c;                                // T0、T1、T2计数周期为4个振荡器周期
    IP = 0x00;
    IE = 0x00;
    EIE = 0x00;

}

void T1_Init(void)
{
    TMOD &= 0x0F;     // 清除T1控制位(T0不变)
       TMOD |= 0x10;    // T1作为16位定时器
                                                                
    TH1 = T1_RELOADH;
    TL1 = T1_RELOADL;

         ET1 = 1;
         TR1 = 1;    
}

void UART_Init(void)
{
    T2MOD = 0;                                        // T2向上计数
     T2CON = 0x30;                                        // T2做波特率发生器  
                                                         
    RCAP2L = T2_RELOADL;
    RCAP2H = T2_RELOADH;
    TH2 = T2_RELOADH;
    TL2 = T2_RELOADL;    
    
    SCON0 = 0x50;                                    // 串口工作于方式1:8位数据,1位停止位,无奇偶校验 
    PCON = 0x80;                                    // 波特率加倍
    ES0 = 0;                                         // 串口中断允许   1-enable 
//    PS0 = 0;                                         // 串口中断优先级 1-高,0-低  
    TR2 = 0;                                        // 启动T2  
}

void T1_ISR(void) interrupt 3
{            
    TR1 = 0;
       TH1  = T1_RELOADH;
       TL1  = T1_RELOADL;
    TR1  = 1;    
    
    KeyScan();
}
void UART_ISR(void)  interrupt 4
{
    TI=0;
}
结果编译过后,KEIL报告说T1_ISR和UART_ISR是未使用的段
真是奇怪了,这到底是什么原因造成的呢?

相关帖子

沙发
dreambird| | 2007-4-15 13:18 | 只看该作者

re

很简单,请问你在哪里挂接了这两个ISR呢?ISR的地址是需要跟对应的中断向量挂接的,建议你看看例程,很多例子都有一段初始化的汇编代码,会有ISR的挂接。

使用特权

评论回复
板凳
emicro|  楼主 | 2007-4-15 15:36 | 只看该作者

re

晕了,楼上兄弟,你不会以为我第一次用ISR吧,中断向量是没错的,我以前也是这么用的,不知道这次怎么会遇到这种问题,兄弟们谁有相似的经历吗?

使用特权

评论回复
地板
dreambird| | 2007-4-15 20:16 | 只看该作者

re

hehe,sorry

使用特权

评论回复
5
ayb_ice| | 2007-4-16 07:46 | 只看该作者

错误信息帖出来...

使用特权

评论回复
6
thw| | 2007-4-17 01:55 | 只看该作者

貌似是这样。。。

函数调用前要声明。建议把MAIN函数放在最后编译下试试。

使用特权

评论回复
7
lenglx| | 2007-4-17 10:56 | 只看该作者

多半是你把中断向量的选项搞丢了

在options of target "xxx" -> c51 -> interrupt vectors at 0 
勾上.

使用特权

评论回复
8
emicro|  楼主 | 2007-4-18 22:06 | 只看该作者

多谢lenglx!

确实跟你说的情况一样,出错的项目工程中 interrupt vectors at 0 被取消了。真纳闷什么时候动过这个了,我的mian函数文件和项目文件不在一个文件夹,后来我把它们都提出来重建了一个项目就正常了,一直在怀疑是这个引起的,lenglx要是不说,我八成还晕着呢。多谢了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

49

帖子

1

粉丝