导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→大虾们,帮忙给看看。没加看门狗,数码管可以显示00-99。

* 42806: 大虾们,帮忙给看看。没加看门狗,数码管可以显示00-99。

   www_com 
www_com发表的帖子 

 大虾们,帮忙给看看。没加看门狗,数码管可以显示00-99。
数码管显示99。看看应该在哪儿喂狗呢?
    /* this program is a led's example */

#include  <reg51.h>     
#include  <stdio.h>  
#include  <INTRINS.H>  
                           
#define uchar unsigned char                     
#define uint  unsigned int 

#define WREN    0x06
#define WRDI    0x04
#define RDSR    0x05
#define WRSR    0x01
#define READ    0x03
#define WRITE   0x02
#define nop5(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

sbit SO=P2^0;
sbit SI=P2^2;
sbit SCK=P2^3;
sbit SCS=P2^4;
sbit WP=P2^1;


void rd_data(uchar);
void timeToBuffer();
void delay(uint);
void scanled();
void csh_X25045();
void rest_dog();


bit dog_sign;
uchar one;
uchar ten;
uchar buffer[2];
uchar dog_buff[10];

void delay(uint x)
{ uchar j;
 while((x--)!=0){
 for(j=0;j  <125;j++)
{;}
}
}

void init_sys(void)
 { IP=0x08;
  TMOD=0x11;
  TH0=0x4c;
  TL0=0;
  TH1=0xb8;
  TL1=0;
  TR0=1;
  TR1=1;
  ET0=1;
  ET1=1;
  EA=1;
  ten=0;
  one=0;
  dog_sign=0;
  buffer[0]=0x28;
  buffer[1]=0x28;
  }


void timer0(void) interrupt 1 using 1
 {uchar click=0;
  TH0=0x4c;
  TL0=0x81;
  ++click;
  if(click>  =20){
    click=0;
  if(one++>  =9){ 
   one=0;
    if(ten++>  =9){
     ten=0;
  }
    }
  }
 }

void timer1(void) interrupt 3 using 2
 {uchar count=0;
  TL1=0;
  TH1=0xb8;
  ++count;
  if(count==70)
  rest_dog();
  }
  
void scanled()
 {uchar i;
  uchar opt0=0xff;
  uchar digit=0x80;
  for(i=0;i  <2;i++){
    P2=digit&0xc0;
    P0=buffer[i];
 delay(1);
 P0=0xff;
   digit>  >  =1;
 }    
}

void timeToBuffer()
  { rd_data(10);
    buffer[0]=dog_buff[one];
    buffer[1]=dog_buff[ten];

}

/*********************************************************************
%%%%%%%%%%%%%%%%%%%%%%%%*X5045开始%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
**********************************************************************/

/**********************************************************************
向 X5045 发送命令 (8 bit) (初始:SCS = 0), SCK上升沿锁存数据
***********************************************************************/
void sent_X5045(uchar n)
{
 uchar    i;

    for ( i=0x80; i>  =0x01; i=i>  >  1 )
    {
     SCK = 0;    /* SCK=0 */
     if ( ( n & i ) == 0 ) SI = 0; 
  else SI = 1;    /* 置SI */
     SCK = 1;    /* SCK=1 */
     SI=0;        /* 清SI */
    }
}

/***********************************************************************
从 X5045 读出数据 (8 bit) (初始:SCS = 0), SCK下降沿输出数据
************************************************************************/
uchar    get_X5045()
{
 uchar    i,n;

    n=0x00;
    for ( i=0x80; i>  =0x01; i=i>  >  1 )
    {
       SCK = 1;
       SO = 1;        /* 置 SO 为读 */
       SCK = 0;

      if ( SO == 1 ) n = ( n | i );    
    }
    return( n );
}

/******************************************************************************
读 X5045 状态寄存器 (8 bit)
******************************************************************************/
uchar    rdsr_X5045()
{
 uchar    n;
    SCK = 0;
    SCS = 0;
    sent_X5045( 0x05 );     /* RDSR =>   X5045 */
    n = get_X5045( );
    SCK = 0;
    SCS = 1;
    return( n );
}

/******************************************************************************
等 X5045 内部写完成 
******************************************************************************/
void    wrok_X5045()
{
uchar    i;
    for ( i=0; i  <=99; i++ )
    {
     if ( ( rdsr_X5045() & 0x01 ) == 0x00 ) break;
    }
}

/******************************************************************************
置 X5045 写使能 
******************************************************************************/
void    wren_X5045()
{
    SCK = 0;
    SCS = 0;
    sent_X5045( 0x06 );     /* WREN =>   X5045 写使能 */
    SCK = 0;
    SCS = 1;
}

/******************************************************************************
置 X5045 写禁止 
******************************************************************************/
void    wrdi_X5045()
{
    SCK = 0;
    SCS = 0;
    sent_X5045( 0x04 );     /* WREN =>   X5045 写使能 */
    SCK = 0;
    SCS = 1;
}

/******************************************************************************
写 X5045 状态寄存器 (8 bit) 
******************************************************************************/
void    wrsr_X5045( uchar n )
{

    SCK = 0;
    SCS = 0;
 wren_X5045();
 nop5();
 SCS=0;
    sent_X5045( 0x01 );     /* WRSR=>   X5045 */
    sent_X5045( n );     /* n =>   X5045 看门狗定时, 块保护范围,  */
    SCK = 0;
    SCS = 1;
    wrok_X5045();
}


/******************************************************************************
初始化  X5045 
******************************************************************************/
void    csh_X5045()
{
 uchar    n;

    n = 0x00;     /* 0x00 =>   X25045状态寄存器看门狗定时:1.4s, 块保护范围: NO  */
    
    if ( rdsr_X5045() != n )
    {
    wren_X5045(); 
    wrsr_X5045( n );
    wrdi_X5045(); 
    }
}
/******************************************************************************
从 X5045 读1个字节
uchar    Cread_EEPROM( uint addr )
输入:    addr 地址范围 0x000-0x1FF [512B]
输出:    数据 (uchar,char)
******************************************************************************/
uchar    Cread_EEPROM( uint addr )
{
 uchar    n;
 /* 访问看门狗 */
   SCS = 0;    /* 清看门狗 */
   SCS = 1;    /* 恢复看门狗 */

    n = 0x03;    /* 0000 (A8)011 READ */
    if ( ( addr & 0x0100 ) != 0 ) n = ( n | 0x08 ); //高位

    SCK = 0;
    SCS = 0;
    sent_X5045( n );         /* READ =>   X5045 */
    sent_X5045( (uchar)(addr) );    /* addr =>   X5045 */
    n = get_X5045( );         /* X5045 =>   n */
    SCK = 0;
    SCS = 1;

    return( n );

/******************************************************************************
从 X5045 读数组
uchar    read_data(uchar count )
输入:    addr 地址范围 0x000-0x1FF [512B]
输出:    数据 (char)
******************************************************************************/
void rd_data(uchar count)
{
 uchar i;
  for(i=0;i  <count;i++)
    {
      dog_buff[i]=Cread_EEPROM( 0x010 );
    }
}
/******************************************************************************
向 X5045 写1个字节
void    Cwrite_EEPROM( uint addr, uchar n )
输入:    addr 地址范围 0x000-0x1FF [512B]
    n 数据(uint,uchar)
******************************************************************************/
void    Cwrite_EEPROM( uint addr, uchar n )
{
 uchar    i;
 /* 访问看门狗 */
   SCS = 0;      /* 清看门狗 */
   SCS = 1;      /* 恢复看门狗 */

    if ( Cread_EEPROM( addr ) == n ) return;
    
    i = 0x02;        /* 0000 (A8)010 WRITE */
    if ( ( addr & 0x0100 ) != 0 ) i = ( i | 0x08 ); 

    wren_X5045(); 
    SCK = 0;
    SCS = 0;
    sent_X5045( i );           /* WRITE =>   X5045 */
    sent_X5045( (uchar)(addr) );    /* addr =>   X5045 */
    sent_X5045( n );           /* n =>   X5045 */
    SCK = 0;
    SCS = 1;
    wrok_X5045();
    wrdi_X5045(); 
}
/******************************************************************************
向 X5045写数据 整型数(2B)
void    Iwrite_EEPROM( uint addr, uint n )
输入:    addr 地址范围0x000-0x1FF [512B]
    n = 写入数值(uint, int)    
******************************************************************************/
void write_data(uchar *buff,uchar n)
 {
  uchar i;
  for(i=0;i  <n;i++)
   {
    Cwrite_EEPROM(0x010,buff[i]);
   
 }
}

//复位看门狗子程
void rest_dog(void)
{
    SCS=1;
    SCS=0;
}

/**************************************************
*  X5045
*  结束
**************************************************/
void main()
{
 uchar table[10]={0x28,0x7E,0xA4,0x64,0x72,0x61,0x21,0x7C,0x20,0x60}; 
 csh_X5045();
 init_sys();
 write_data(&table,10);

 for(;;)
  {
   timeToBuffer();
   scanled();
  }
  }

发表时间:2003年9月26日10:23:51

  
回复该帖

本主题共有 10 帖,分页:>>>>>该主题的所有内容[10]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  42815.[详细]实时运行考察,狗快叫的时候喂食。c语言无法分析运行所需时间的
摘要:实时运行考察,狗快叫的时候喂食。 c语言无法分析运行所需时间的......(61字)
- [guest][819次] 2003年9月26日

  42821.[详细]难道再学汇编?这应该和语言的关系不大吧?
摘要:......(无内容)
- [www_com][990次] 2003年9月26日

  42828.[详细]不会C,难以提高效率。不会汇编,难以达到高水平。应该在C之前掌握汇编。狗喂的不好的话,还不如不养它..
摘要:不会C,难以提高效率。 不会汇编,难以达到高水平。 应该在C之前掌握汇编。 狗喂的不好的话,还不如不养它。......(104字)
- [红心J][865次] 2003年9月26日

[上一篇帖子]:sos:关于aduc832的问题我用keil c编好程序了,编译也通过了。可是就是不能do
[下一篇帖子]:义隆156的目标代码谁反汇编,我的原程序不见了义隆156的目标代码谁反汇编,我的原程序不见了,只剩下