一、复位介绍
复位为单片机提供了一条从已知初始条件启动处理的途径。复位期间,大部分控制和状态寄存器被迫使用初始值,单片机的外围模块被禁止,单片机用于复位的复位源有加电复位、外部RESET管脚复位、看门狗复位等。
我们实验对应的硬件复位电路,如下图所示。
这个图中集成了51单片机和AVR单片机的复位电路,对于51单片机,将J12上的跳线帽跳到左侧,则左侧的电路与单片机的复位引脚相连,正常情况由于R14的下拉作用,单片机的复位引脚为低电平,单片机正常工作,如果按下按键,VCC与单片机复位引脚相连,单片机产生复位。
二、例程测试
1、硬件复位
这个实验我们来测试硬件复位功能,测试代码的主要部分如下所示,完整代码可以从本文资源中下载。
void main (void)
{
unsigned char j;
for(j=0;j<5;j++) //LED灯闪烁5次
{
LED1=0; //将P00口赋值0,对外输出低电平,灯点亮。
delay(30000); //调用延时函数
LED1=1; //将P00口赋值1,对外输出高电平,灯熄灭。
delay(30000); //调用延时函数
}
for(;;);
}
在这个代码中,LED1闪烁5次,然后进入死循环。将代码烧写到单片机中并运行,LED1闪烁5次,按下复位按键,则LED1重新闪烁5次,说明单片机产生了复位,程序重新从头开始运行。
2、软件复位
这个实验的代码如下所示
void main (void)
{
unsigned char j;
for(j=0;j<5;j++) //LED灯闪烁5次
{
LED1=0; //将P00口赋值0,对外输出低电平,灯点亮。
delay(30000); //调用延时函数
LED1=1; //将P00口赋值1,对外输出高电平,灯熄灭。
delay(30000); //调用延时函数
}
delay(60000); //延时
delay(60000); //延时
delay(60000); //延时
ISP_CONTR=0x20; //软件复位
for(;;);
}
从代码中可以看到,上电之后LED1闪烁5次,然后延时,之后通过ISP_CONTR=0x20;语句将单片机软件复位。
将代码烧写到单片机中,LED1闪5下之后熄灭。过几秒之后,又闪5下,如此反复。
关键字:51单片机 单片机复位
引用地址:
51单片机(十二)—— 单片机复位
推荐阅读最新更新时间:2024-11-14 08:47
51单片机(STC89C52RC)小综合实验
这个实验包含以下几个内容: 51单片机最小系统 单片机外接继电器 整流桥的使用 lm393电压比较器的使用 首先先上实验结果图: 前面两个继电器,中间是最小系统,最下脚是整流器和lm393电压比较器. 好,下面来说这个板子制作过程当中的经验: 一是整流桥输出的电压输入到电压比较器当中,这里牵扯到电压比较器的零点漂移概念,即输入为零的时候,输出不为零,主要原因是温度对电子元件的影响,电子元件一般都不是纯种的.二是稳压直流电压的输出,这里用电稳压电源的一套系统,要求不高的话一般是线性稳压:交流电压- 整流器- RC电路滤波- LR滤波(可选)- 稳压(三端稳压器)- 稳压管.三是51单片机下载,在接通串口线
[单片机]
51单片机 EEPROM 24c02 + 数码管 + 中断 统计开机次数
_ :24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码; _ :delay.c 1 #include delay.h 2 /* 3 uS延时函数,含有输入参数 unsigned char t,无返回值 4 unsigned char 是定义无符号字符变量,其值的范围是 5 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 6 长度如下 T=tx2+5 uS 7 */ 8 void DelayUs2x(unsigned char t) 9 { 10 while(--t); 11 } 12 /* 13 mS延时函数,含有输入参数 unsi
[单片机]
51单片机简易频率计源代码
//定时器0 设置定时时间1秒 定时器1 设置计数1秒内的脉冲数量 #include reg51.h #define uchar unsigned char #define uint unsigned int uint ff; //接受频率值 uchar start=1; //定时器,计数模式启动变量 code uchar seg ={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60}; code uchar tab ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; void delay(uint k) //延时函数 { whi
[单片机]
51单片机矩阵键盘扫描和显示
KEYCARD BIT 00H ;用于标志是否有键按下 KEYS EQU 5AH ;记录键值 KEY1 EQU 5BH ;记录行扫描时的值 KEY2 EQU 5CH ;记录列扫描时的值 ORG 0000H ;程序开始 AJMP START ORG 30H ;为避免占用中断向量区,主程序从30H开始 START: MOV SP,#5FH ;设置堆栈的初始地址 MOV P3,#0FH ;P3,P2,P0的初始化 MOV P2,#00H MOV P0,#0FFH MOV KEYS,#00H ;各键值清0 MOV KEY
[单片机]
ET 与RETI 基于51单片机中断跳出指令“RETI”浅议
最近在基于51单片机编程的过程中出现了个很奇怪的问题“程序执行中在寄存器EA=1,ET0=1,TR0=1条件下,单TF0=1时并没有执行中断”。在有过单片机中断编程经历者都知道当EA=1,ET0=1的条件下,满足TF0=1时,如果在此期间没有更高优先级的中断执行的情况下定时器中断0必定会产生中断响应。而在我所编写的程序中仅使用了定时器中断0,一个中断也就谈不上存在优先级问题。经过我对自己程序的检查并对各教材中断程序对比发现我的程序中的一个问题:由于中断的不可控性决定其跳出中断返回主程序的不确定,而由于程序需要中断跳出后能跳到指定的地址。为了解决这个问题我在中断结束的地方直接用了无条件跳转指令“LJMPADR16”其中ADR16
[单片机]
关于51单片机存储空间的说明
在学校很少用到外扩ROM/RAM的情况,都是用C语言编程,不差空间,代码太大了,买个大ROM的芯片就行了。现在工作了,单位是做SoC的,采用了51的IP核,才算对51的代码/数据空间有了清晰的认识。 MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。 好,说回MCS-51。 对于程序存储器,有片内和片外两部分。而且无论
[单片机]
51单片机-按键部分(2)
程序功能:数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。按下第二个时计时开始,按下第三个是计数值清零。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 7
[单片机]
基于51单片机的大气压温度检测系统
一.硬件方案 本设计主要通过气压传感器BMP180获得当前位置的温度和大气压值,并通过LCD1602显示。并根据测量值与设置好的阀值进行对比进而控制蜂鸣器与LED灯进行提示使用者。 主要由51单片机+最小系统+LCD1602液晶显示模块+BMP180气压检测模块+AT24C02存储电路+蜂鸣器模块+LED指示灯模块+按键模块;如图: 二.设计功能 (1)本设计采用STC89C51/52、AT89C51/52作为主控芯片,LCD1602实时显示信息,BMP180作为大气压温度传感器。 (2)当所采集到的温度超出设置好的限值时蜂鸣器红色LED灯发出声光提示; (3)当所采集到的气压超出设置好的限值时蜂鸣器绿色LED灯发出声光提
[单片机]