用软件实现单片机的系统复位:

STC单片机增加了响应的硬件功能,内部的ISP/IAP控制寄存器ISP_CONTR便可以实现此功能,用户只需要简单的控制ISP_CONTR特殊功能寄存器中的SWBS和SWRST两位便可以实现系统的复位

示例代码:

#include

#define uint unsigned int

#define uchar unsigned char

sfr ISP_CONTR = 0xe7;

sbit dula = P2^6;

sbit wela = P2^7;

uchar num ,gw,sw,aa;

uchar code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void init()//初始化函数

{

TMOD = 0x01;

TH0 = (65535-50000)/256;

TL0 = (65535-50000)%256;

EA = 1;

ET0 = 1;

TR0 =1;

}

void delayms(uint x)//延时函数

{

uint i,j;

for(i = x;i》0;i--)

for(j=110;j》0;j--);

}

void display(uchar gw,uchar sw)//显示函数

{

dula = 1;

P0 = table[sw];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xfe;

wela = 0;

delayms(5);

P0 = 0x0;//消影

dula = 1;

P0 = table[gw];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xfd;

wela = 0;

delayms(5);

}

void main()

{

init();

while(1)

{

if(aa ==20)

{

aa =0;

num++;

if(num == 99)

num =0;

if(num ==10)

{

ISP_CONTR = 0x20;//0010 0000,操控寄存器实现软件复位

}

gw = num%10;

sw = num/10;

}

display(gw,sw);

}

}

void timer0()interrupt 1

{

TH0 = (65536-50000)/256;

TL0 = (65536-50000)%256;

aa ++;

}

实验现象,数码管以秒速递增,递增到10后,系统复位,之后重新开始从0计时

说一下STC单片机的寄存器ISP/IAP寄存器,这个寄存器的地址是E7H,不能位寻址,在这里只需要将寄存器的第五个bit设置为1,便可以实现软件的复位

因此代码通常是

sfr ISP_CONTR = 0xe7;

ISP_CONTR = 0x20;//0010 0000

责任编辑;zl

关于控制,MCU就介绍完了,您有什么想法可以联系小编。