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';
} 还有最近上论坛很慢,我这里是烟台
是不是其他地方也一样啊 STC不同型号或同型号不同批次都有差别,换其他型号试一下 有这种事 不会吧i 我吧pca的中断向量改成6就好用了
也不知道什么问题,文档错了?
真不敢使用stc的了,什么时候学lgt{:biggrin:} lindabell 发表于 2012-5-3 15:15 static/image/common/back.gif
我吧pca的中断向量改成6就好用了
也不知道什么问题,文档错了?
真不敢使用stc的了,什么时候学lgt{:biggri ...
STC各型号有些方面没做到通用统一,不知他们怎么想的,
像一些特殊寄存器命名、中断号、EEPROM触发命令不尽相同,用新型号都要专门去看看资料中这几处,挺折腾人的 BXAK 发表于 2012-5-3 16:24 static/image/common/back.gif
STC各型号有些方面没做到通用统一,不知他们怎么想的,
像一些特殊寄存器命名、中断号、EEPROM触发命令不 ...
同感,一不小心就踩地雷,无语,不知道害了多少人
页:
[1]