导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→x5045的奇怪复位?[wanglujun]

 *第20506篇: x5045的奇怪复位?

  
楼 主:wanglujun 2004年3月26日23:57
 x5045的奇怪复位?
各位高手:
  麻烦看一下,我目前只需要用X5045做看门狗用,但为何上电不稳定,有时上电后不复位,有时侯上电复位。我用两种MCU比较,Philps89c58和华邦的W78E58B,发现前者复位的概率很小,而后者就总是复位。电路的口线方式是CS——>  P3.2(INT0) SO——>  P3.3(INT1) SCK——>  P3.4(T0) SI——>  P3.5(T1),为了排除原因,我其它口线都没接外围电路。复位经常出现,不知哪位高手可以指点迷津。谢谢!程序如下:
#include  <reg52.h>  
#define uchar unsigned char
#define uint unsigned int
#define WREN_INST 0x06//写使能
#define WRSR_INST 0x01//写状态
#define RDSR_INST 0x05//读状态
#define STATUS_REG 0x00//初始化状态
#define MAX_POLL 0x99//检测

sbit CS=P3^2;
sbit SI=P3^5;
sbit SCK=P3^4;
sbit SO=P3^3;
void outbyt( uchar c);//输出单字节
uchar inbyt(void);//读字节
void wip_poll(void);//检测
void wren_cmd(void);//使能写操作
void wrsr_cmd(void);//写状态寄存器(看门狗和块锁)
uchar rdsr_cmd (void);//读状态寄存器
void rst_wdog (void);//喂狗
void Init(void);//初始化
void delay10ms(uint count);//延迟10ms*count

uchar code date[]={0xfe,0xfd,0xfb,0xf9,0xfc,0xfa,0xfc,0xf9,0xf8,0xfb,0xfd,0xfe,0xfc,0xf9,0xfb};

void main(void)
{
uchar i;
rst_wdog ();
Init();//初始化
wren_cmd();//使能写操作
wrsr_cmd();//写状态寄存器(看门狗和块锁)
rst_wdog ();//喂狗
while(1)
{for(i=0;i  <(sizeof(date)/sizeof(char));i++)
{P0=date[i];
delay10ms(10);
rst_wdog ();
}
}

void delay10ms(uint count)//10ms 6M
{uint i,j;
 for(j=0;j  <count;j++)
 {for(i=0;i  <5000;i++)
  {}
 }
}

void outbyt( uchar c)
{
    uchar i;

    for (i = 0; i   < 8;i++)
      {
          SCK=0;
       SI=c&0x80;

        c   <  <= 1;
      SCK=1;
      }
     SI=0;
}

uchar inbyt(void)
{
    uchar i,c;
    c = 0;
    for (i = 0; i   <8 ;i++)
      {
          SCK= 1;
          SCK = 0;
        c    <  <= 1;
        c |= SO;
      }
    return c;
}
void wip_poll(void)
{uchar c;
uchar idata my_flag;
 for (c=1;c  <MAX_POLL;c++)
 {
  my_flag=rdsr_cmd();
  if ((my_flag&&0x01)==0) {c=MAX_POLL;}
 }
}
void wren_cmd(void)//使能写操作
{
 SCK=0;
 CS=0;
 outbyt(WREN_INST);
 SCK=0;
 CS=1;
}

void wrsr_cmd(void)//写状态寄存器(看门狗和块锁)
{
 SCK=0;
 CS=0;
 outbyt(WRSR_INST);
 outbyt(STATUS_REG);
 SCK=0;
 CS=1;
 wip_poll();
}

uchar rdsr_cmd (void)//读状态寄存器
{
 uchar c;
 SCK=0;
 CS=0;
 outbyt(RDSR_INST);
 c=inbyt();
 SCK=0;
 CS=1;
 return c;
}

void rst_wdog (void)//喂狗
{CS=1;
 CS=0;
 CS=1;
}

void Init(void)//启动X5045
{EA=0;
CS=1;
SO=1;
SCK=0;
SI=0;
}



>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:TCP/IP以太网转换器-TCP/IP转换rs232 485 422 

[下一篇主题]:问一下protel里面有没有ATMEL的AT89C2051的库?