欣欣工作室——带你走进单片机世界

         
累计访问3895695
当前在线90
首   页 | 常用器件 | 问答集萃 | 技术文摘 | 在线学习 | 共享工程 | 资料下载 | 网友交流

 
Web xinworks
 学习板概述
 安装keil C51软件
 在线烧写程序
 keil C51使用入门
 使用keil C51仿真调试
 使用标准输入输出设备
 点灯程序
 跑马灯程序
 LED数码管扫描显示程序
 键盘扫描程序
 键盘数码管联合扫描
 计时秒表程序
 蜂鸣器发声程序
 产生音阶程序
 字符LCD控制程序
 Flash读写程序
 使用ADC检测模拟量程序
 相关软件与文档



单片机/C51学习板

Flash读写程序示例


注:

本实验是针对 欣欣工作室单片机/C51学习板 设计的,如选用其它开发板实现,部分内容需做调整。有关 单片机/C51学习板 的详细说明,参见 欣欣工作室 主页:http://www.xinworks.com

程序代码如下:


#include       /* special function register declarations   */
#include       /* for the intended 8051 derivative         */

#include       /* prototype declarations for I/O functions */

unsigned int i,j;

unsigned char timer1=0;
unsigned char timer2=0;

unsigned char xdata buf[256];

void read_flash(unsigned int Sector,unsigned char xdata *p);
void write_flash(unsigned int Sector,unsigned char xdata *p);
void delay_1s(void);

void main (void)  
{                                 /* execution starts here after stack init   */

  SCON  = 0x50;                   /* SCON: mode 1, 8-bit UART, enable rcvr    */
  TMOD |= 0x21;                   /* TMOD: timer 1, mode 2, 8-bit reload      */
  TH1   = 0xfd;                   /* TH1:  reload value for 19200 baud        */
  TR1   = 1;                      /* TR1:  timer 1 run                        */
  TH0   = 0xff;
  TR0   = 1; 
  TI    = 1;                      /* TI:   set TI to send first char of UART  */
  IE    = 0x82;
  
  read_flash(0,buf);
  i=buf[0];
  i=i*256;
  i+=buf[1];

  printf("Counter is %d when last Power off.\n\r",i);
 
  while (1) {  
    delay_1s();
    i++;
    buf[0]=i/256;
    buf[1]=i%256;
    write_flash(0,buf);
    printf("Now Counter is %d.\n\r",i);
  }                              
}

void delay_1s(void)
{
  j=0;
  while(j<10){
    timer2=0;
    while(timer2<100);
    j++;
  }
}
                               

dir() interrupt 1
{
  static unsigned char i;
  TL0=0xcd;
  TH0=0xf8;
  timer1++;
  timer2++;
}

void read_flash(unsigned int Sector,unsigned char xdata *p)
{
  unsigned int i;
  unsigned int j;
  XBYTE[0xffff]=Sector/8;
  i=(Sector%8)*256+0x8000;
  for( j=0;j<256;j++ )
  {
    p[j]=XBYTE[i+j];
  }
}

void write_flash(unsigned int Sector,unsigned char xdata *p)
{
  unsigned int i;
  unsigned int j;
  i=(Sector%8)*256+0x8000;
  EA=0;
  XBYTE[0x9000]=0x0a;
  XBYTE[0x8555]=0xaa;
  XBYTE[0x9000]=0x05;
  XBYTE[0x82aa]=0x55;
  XBYTE[0x9000]=0x0a;
  XBYTE[0x8555]=0xa0;
  XBYTE[0x9000]=Sector/8;
  for( j=0;j<256;j++ )
  {
    XBYTE[i+j]=p[j];
  }
  EA=1;
  timer1=0;
  while( timer1<20 ){}
}

                  
                






粤ICP备06035157号