areshan 发表于 2010-5-22 09:41:32

我的中断设置有什么问题吗???请高手帮我看看,很简单的!!!

#include<io78f9234.h>
#include<intrinsics.h>
#define uchar unsigned char
#define uint unsigned int
#pragma location="OPTBYTE"
__root const uchar optbyte={0x9d,0x00};
#pragma vector=INTTM80_vect
__interrupt void tm80(void)
{
P0_bit.no0=~P0_bit.no0;//在中断中吧P00端口取反
TMIF80=0;//清除中断标志
//CR80=0X7A;//不知道要不要在中断中在给比较寄存器赋值
}
int main(void)
{
PM0_bit.no0=0;//设置端口P00为输出
__enable_interrupt();//打开全局中断
TMMK80=0;//打开tm80中断,0表示中断允许
TMC80=0x06;//设置工作在65536分频下
CR80=0x7a;//设置比较寄存器122,产生中断时刚好是1S钟
TCE80=1;//打开定期80,开始工作
while(1)//让程序进入死循环,以免在main()中重复写上面的设置。。。。。
return 0;
}
//不知道怎么回事,该设置的我都设置了,编译器也没有提示有语法错误,就是不知道为什么在P00管脚不能产生1S的时钟定时电平取反!!!用的是IAR4.6的编译器!!!!

areshan 发表于 2010-5-22 10:47:34

#include<io78f9234.h>
#include<intrinsics.h>
#define uchar unsigned char
#define uint unsigned int
#pragma location="OPTBYTE"
__root const uchar optbyte={0x9d,0x00};
#pragma vector=INTTM80_vect
__interrupt void tm80(void)
{
P0_bit.no0=~P0_bit.no0;//在中断中吧P00端口取反
TMIF80=0;//清除中断标志
//CR80=0X7A;//不知道要不要在中断中在给比较寄存器赋值
}
int main(void)
{
PCC=0;
PPCC=0;
PM0_bit.no0=0;//设置端口P00为输出
__enable_interrupt();//打开全局中断
TMMK80=0;//打开tm80中断
TMC80=0x06;//设置工作在65536分频下
CR80=0x7a;//设置比较寄存器122,产生中断时刚好是1S钟
TCE80=1;//打开定期80,开始工作
while(1)//让程序进入死循环,以免在main()中重复写上面的设置。。。。。
return 0;
}

areshan 发表于 2010-5-22 10:57:15

在程序中加了PCC=0,和PPCC=0的设置竟然成功了,本来以为这两个寄存器启动后就是0的状态,原来不是,NEC难怪在手册上写的复位后的状态特别的多,这里把改好的程序来出来和大家共享。。。。。刚学NEC,是用IAR上手的。这里我也感到奇怪,PCC,和PPCC的设置只是涉及到时钟的分频,没有涉及到时钟的选择。时钟的选择是在可选字节中设置的。我上个程序没有设置PCC和PPCC,它的初始状态是分频16倍,那我设置的1秒延时应该是16S的延时,怎么我没有看到变化????刚学NEC,还有很多不会,希望以后和大家多多交流!!!

areshan 发表于 2010-5-27 08:28:21

上面的程序把看门狗打开了,没有设置喂狗指令,现在更正一下。。。。单片机工作在不停的复位状态。。。。

areshan 发表于 2010-5-28 17:19:55

在程序中加上一条WDTE=0XAC;就可以了,我把以前的程序重新修改下,以免给大家带来误会!!!

moon557 发表于 2010-7-25 15:31:45

如果我不要用看门狗就一定要在初始化的时候关闭看门狗吗?

sophie0403 发表于 2010-7-26 09:50:11

WDTM复位后值为0x67,只要内部低速振荡器工作,看门狗就工作,所以调试阶段一般建议初始化时关掉看门狗
页: [1]
查看完整版本: 我的中断设置有什么问题吗???请高手帮我看看,很简单的!!!