51单片快速入门教程——51核心开发板(STC89C52RC)4

第十一章 看门狗

复位方法:

STC89系列微控制器有四种复位方法,分别是外部RST引脚复位、软件复位、掉电复位以及看门狗复位。

名称

描述

地址

位和符号

7

6

5

4

3

2

1

0

ISP_CONTR

ISP-IAP

控制寄存器

0xE7

ISPEN

SWBS

SWRST

-

-

WT2

WT1

WT0

看门狗复位:

相关寄存器:

计算溢出时间;

喂狗操作:

功能:按下KEY1,模拟死机状态,一定时间后自动重启。

#include <STC89C5xRC.H>

sbit BEEP=P1^0;
void Delay1ms(unsigned int xms)		//@11.0592MHz
{
  while(xms--)
  {
     unsigned char i, j;

    i = 2;
    j = 199;
    do
    {
      while (--j);
    } while (--i);
  }
	
}
void InitInterrupt()//中断初始化
{
  IT0=1;
  EX0=1;
  EA=1;
}
void main()
{
  unsigned char i;
  BEEP=0;
  Delay1ms(50);
  BEEP=1;
  InitInterrupt();
  WDT_CONTR=0x33;
  while(1)
  {
    P2=0xEF;
    for(i=0;i<4;i++)
    {
      Delay1ms(500);
      P2=P2<<1;
      WDT_CONTR|=0x10;
    }
  }
}
void External0_Handler() interrupt 0//制造死机现象
{
  Delay1ms(2000);
}

第十二章 FLASH读取

编程方式:

寄存器:

功能:LED状态,写入FLASH,实现保存。

头函数:

EMPROM.h

void IAPSectorErase(unsigned int addr);
void IAPByteWrite(unsigned int addr,unsigned char dat);
unsigned char IAPByteRead(unsigned int addr);
#include <STC89C5xRC.H>

#include<EMPROM.h>
void IAPTrigger()
{
  ISP_TRIG=0x46;
  ISP_TRIG=0xB9;
}
void IAPDisable()
{
  ISP_CONTR=0x00;//禁用读写
  ISP_CMD=0x00;
  ISP_TRIG=0x000;//关闭
}
unsigned char IAPByteRead(unsigned int addr)
{
  unsigned char dat;
  ISP_CONTR=0x81;//打开设置等待时间
  ISP_CMD=0x01;//允许读取
  ISP_ADDRL=addr;
  ISP_ADDRH=addr>>8;
  
  IAPTrigger();
  dat=ISP_DATA;
  IAPDisable();
  return dat;
}
void IAPSectorErase(unsigned int addr)//单字节
{
  ISP_CONTR=0x81;
  ISP_CMD=0x03;//允许擦除
  ISP_ADDRL=addr;
  ISP_ADDRH=addr>>8;
  IAPTrigger();
  IAPDisable();
  
}
void IAPByteWrite(unsigned int addr,unsigned char dat)//单字节
{
  ISP_CONTR=0x81;
  ISP_CMD=0x02;//写入
  
  ISP_ADDRL=addr;
  ISP_ADDRH=addr>>8;
  ISP_DATA=dat;
  
  IAPTrigger();
  IAPDisable();
  
}

FLASH读取:

#include <STC89C5xRC.H>
#include <EMPROM.h>

void Delay1ms(unsigned int xms)		//@12.000MHz
{
  while(xms--)
  {
      unsigned char i, j;

    i = 2;
    j = 239;
    do
    {
      while (--j);
    } while (--i);
  }
}

sbit KEY1=P3^2;
sbit LED=P2^4;
void main()
{
  P2=IAPByteRead(0x2000);
  while(1)
  {
      if(KEY1==0)
    {
      Delay1ms(20);
      LED=~LED;
      while(KEY1==0);
      IAPSectorErase(0x2000);
      IAPByteWrite(0x2000,P2);
    } 
  }
     
}

至此,51单片机小知识内容已经学完。

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值