lindabell 发表于 2012-5-3 12:17:01

STC 外中断0、1和PCA中断不能同时存在

1.中断有外中断0、1、PCA中断、串口中断;当这4个中断都开放时,好像单片机死机了
2.去掉其中的(外中断0、1、PCA中断)的任意一个,有是好用的

有没有遇到同样问题的童靴啊

#include "STC12LE5604AD.h"

sbit CoversbitPort=P3^2;
sbit SealLinebitPort=P3^3;

void ClkDiv(void)
{
        CLK_DIV=0x07;        //0000 0111                =128 div
}

void UartInit(void)                //600bps@0.0864MHz
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xfe;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0f;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xF7;                //设定定时初值
        TH1 = 0xF7;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
}
void CoversInit(void)
{
        CoversbitPort=1;        //set pin as input
        IT0=1;                                 //Falling edge
        EX0=1;                                //interrrupt enable
}
unsigned int reload=0;
void PCA_TimerInit(void)
{
        reload=7200;//1s
        CCON=0;
        CL=0;
        CH=0;
        CMOD=0x00;                //sys/12
        CCAP0L=reload;        //
        CCAP0H=reload>>8;
        reload+=7200;
        CCAPM0=0x49;
       
        CR=1;
        EPCA_LVD=1;
       
}
void PCA_TimerIsr(void) interrupt 7
{
       
        CCF0=0;
        CCAP0L=reload;        //
        CCAP0H=reload>>8;
        reload+=7200;
        SBUF='c';
       
}
void SealLineInit(void)
{
        SealLinebitPort=1;        //set pin as input
        IT1=1;                                 //Falling edge
        EX1=1;                                //interrrupt enable
}

void ExternInterrupt1_ISR(void) interrupt 2
{
//    PCON = 0X00;                //退出休眠模式
//        Event|=dEvent_SealLine;        //记录事件
//SleepFlag = 1;
        SBUF='a';
}
void main(void)
{
        CoversInit();
        SealLineInit();
        ClkDiv();
        //PCA_TimerInit();
        UartInit();
        ES=1;
        EA=1;
        while (1)
        {
               
        }
}

void UartIsr(void) interrupt 4
{
        unsigned char temp;
        if(TI==1)
        {
                TI=0;
        }
        else
        {
                temp=SBUF;
                RI=0;
                SBUF=temp;
        }
}


void ExternInterrupt0_ISR(void) interrupt 0
{
        SBUF='b';
}

lindabell 发表于 2012-5-3 12:21:06

还有最近上论坛很慢,我这里是烟台
是不是其他地方也一样啊

shudz 发表于 2012-5-3 13:08:40

STC不同型号或同型号不同批次都有差别,换其他型号试一下

lindabell 发表于 2012-5-3 14:17:31

有这种事

lindabell 发表于 2012-5-3 14:44:18

不会吧i

lindabell 发表于 2012-5-3 15:15:43

我吧pca的中断向量改成6就好用了
也不知道什么问题,文档错了?
真不敢使用stc的了,什么时候学lgt{:biggrin:}

BXAK 发表于 2012-5-3 16:24:34

lindabell 发表于 2012-5-3 15:15 static/image/common/back.gif
我吧pca的中断向量改成6就好用了
也不知道什么问题,文档错了?
真不敢使用stc的了,什么时候学lgt{:biggri ...

STC各型号有些方面没做到通用统一,不知他们怎么想的,
像一些特殊寄存器命名、中断号、EEPROM触发命令不尽相同,用新型号都要专门去看看资料中这几处,挺折腾人的

1501697860 发表于 2013-7-29 10:06:05

BXAK 发表于 2012-5-3 16:24 static/image/common/back.gif
STC各型号有些方面没做到通用统一,不知他们怎么想的,
像一些特殊寄存器命名、中断号、EEPROM触发命令不 ...

同感,一不小心就踩地雷,无语,不知道害了多少人
页: [1]
查看完整版本: STC 外中断0、1和PCA中断不能同时存在