欣欣学习网,老工程师带你学习单片机技术,欢迎来坐坐。
首  页 | 学习NIOSII | 学习C51 | 学习CPLD | 51+CPLD实验板 | | | MY-RTOS

本栏目的实验需在 WinXp 上操作。建议在 Virtual Box 虚机上安装WinXp系统,使用更方便。

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


单片机/C51学习板

Flash读写程序示例


程序代码如下:


#include <reg52.h>      /* special function register declarations   */
#include <absacc.h>     /* for the intended 8051 derivative         */

#include <stdio.h>      /* 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 ){}
}




管理员信箱: stonewayqi@hotmail.com

欣 欣 学 习 网

粤ICP备2023138008号