F9234自动复位
我用的是F9234,我设置成内部8MHZ时钟时全完正常工作。当我把它改成外部陶瓷晶振时,会来回自动复位。就是说原来用内部时钟时,我按下开机键打开电源,系统指示灯会亮起来(注:系统指示灯是由一个IO口控制,当上电时IO口输出高,灯亮)。如果我改成外部晶振时,我按下开机键之后系统指示灯在闪,很认真看才能看到在闪,因为它闪得很快。 一定是复位了吗? 看时钟配置位有没有问题,把狗关起来看看…… 不敢确定是不是不停的在重复复位了!我的设置如下:
/*====================== 选项字节配置 ==========================================*/
#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;
}
我把程序做其它处理的东西全删掉了,关于时钟的设置就这些。 ?????????????????????????????
页:
[1]