zlng 发表于 2011-3-29 00:36:44

F9234自动复位

我用的是F9234,我设置成内部8MHZ时钟时全完正常工作。当我把它改成外部陶瓷晶振时,会来回自动复位。就是说原来用内部时钟时,我按下开机键打开电源,系统指示灯会亮起来(注:系统指示灯是由一个IO口控制,当上电时IO口输出高,灯亮)。如果我改成外部晶振时,我按下开机键之后系统指示灯在闪,很认真看才能看到在闪,因为它闪得很快。

guantingwei 发表于 2011-3-29 08:43:32

一定是复位了吗?

asdf123321 发表于 2011-3-29 18:39:50

看时钟配置位有没有问题,把狗关起来看看……

zlng 发表于 2011-3-30 00:07:08

不敢确定是不是不停的在重复复位了!
我的设置如下:

/*====================== 选项字节配置 ==========================================*/
#pragma location = 0X0080
//__root const unsigned char XUAN=0X9c;   //选择内部8MHZ   注:打开内部时钟一切正常。

__root const unsigned char XUAN=0X99; // 设置成外部石英晶体注:先择成外部晶体时不断的在重复复位。

/*================== 时钟初始化函数,系统时钟为8MHz ===========================*/
void clock()
{
PPCC=0X00;
PCC=0X00;
   
}

/*============================================================================
复位后初始化
============================================================================*/
void hdwinit(void)//复位后初始化
{
/*----------------------------------------------------------------------------   
初始化看门狗定时器 + 低电压检测 + 设置时钟
----------------------------------------------------------------------------*/

/* 初始化看门狗定时器 */
WDTM= 0x77;/* 停止看门狗定时器的操作。 */
   
/* 设置时钟 <1> */

LSRCM = 0x01; /* 停止内部低速振荡器。 */
      
/* 检查复位源信号 */
   
if (!(RESF & 0x01))/* 在 LVI 复位期间,忽略后续 LVI 相关处理。 */
{
    /* 设置低电压检测 */
    LVIS= 0x00;   /* 设置低电压检测电平(VLVI)为 4.3 V +-0.2 V。 */
    LVION = 1;      /* 低电压检测器操作使能。 */
   
    for (ucCnt200us = 0; ucCnt200us < 9; ucCnt200us++) /* 等待大约 200 us。 */
    {
      NOP();
    }
   
    while (LVIF)/* 等待 VDD >= VLVI */
    {
      NOP();
    }
    LVIMD = 0x1; /*如此设置以便当 VDD < VLVI 时产生内部复位信号。 */
}
}

/*==========================INTTM80中断服务程序===============================*/
#pragma vector=INTTM80_vect
__interrupt void tm80(void)
{
LgkeyFlag = 1;   // 左边按键扫描标志
RgkeyFlag = 1;   //右边按键扫描标志

TMIF80 = 0;   // 清除中断标志

return;
}


void main()
{

hdwinit();      //复位后初始化
LSRSTOP=0x01;   //停止低速内部振荡器
clock();      //时钟初始化
PORT_Init();    //端口初始化

/*==================TM8080中程序设置============================*/   
__enable_interrupt();    //打开全局中断不屏蔽 INTTM80 中断。

TMMK80=0;                //打开tm80中断
TMC80=0x06;            //设置工作在65536分频下
CR80=0x5;                //设置比较寄存器5,产生中断时刚好是50MS钟

EI();/* 向量中断使能。 */   
IF0   = 0x00; /* 预先清除无效中断请求。 */

/*==============================================================*/   
while(1)
{
   if(KEY==0) SYS_ON=1;   
   else if (KEY==1)SYS_ON=0;                  
                  
}

我把程序做其它处理的东西全删掉了,关于时钟的设置就这些。

zlng 发表于 2011-3-31 00:59:22

?????????????????????????????
页: [1]
查看完整版本: F9234自动复位