UBOOT+LINUX上电启动

UBOOT+LINUX上电启动
UBOOT+LINUX上电启动

基于MPC8308 uboot全程启动

【本文导读】:本文基于20M项目开发中的一些心得和体会,主要描述UBOOT是如何运转起来的。重点详细的描述uboot的启动流程,为uboot移植做详细的分析笔录及后续调试查找问题提供依据。

【keywords】:配置字,uboot,启动,移植

1 启动配置

1.1启动配置字

CPU根据CFG_RESET_SOURCE[0:3]引脚信号判别从哪处读取重启配置字。根据RRU8B10电路图中的CFG_RESET_SOURCE[0:3]四根线接,即CFG_RESET_SOURCE[0:3]= 0000,可知重启配置字从NOR Flash中加载。根据TEXT_BASE = 0xFE000000定义.text的起始地址。

.text

#define _HRCW_TABLE_ENTRY(w) \

.fill 8,1,(((w)>>24)&0xff); \

.fill 8,1,(((w)>>16)&0xff); \

.fill 8,1,(((w)>> 8)&0xff); \

.fill 8,1,(((w) )&0xff)

_HRCW_TABLE_ENTRY(CONFIG_SYS_HRCW_LOW)

_HRCW_TABLE_ENTRY(CONFIG_SYS_HRCW_HIGH)

CPU读完启动配置字后,主要配置PLL及启动地址。下面是对启动配置字的详细描述。

图1是RCWLR与RCWHR格式。

RCWLR:主要用于PLL比例

RCWHR:主要用于决定从哪里启动及其他

1

图1:重启配置字格式

下面是本项目中对启动配置字的配置

2

3

4

1.1.1 PLL

图二:时钟子系统

(1) csb_clk = [SYS_CLK_IN] × SPMF 其中SYS_CLK_IN 24-66MHZ and 33.3平均 (2) qe_clk = (QE_CLK_IN × CEPMF) ÷ (1 + CEPDF) (3) ddr_clk = 2*csb_clk; (4) lbc_clk

= csb_clk;

csb_clk = 33.3*4=133Mhz

ddr_clk = 2* csb_clk=266Mhz

以及其他模块可通过SCCR寄存器配置时钟

1.1.2 RCW关键字段

下面重点描述RCWHR的配置某个字段:

RCWHR[ROMLOC]、RCWHR[RLEXT]共同决定设备启动。

RCWHR[BMS]:

从相应的地方读取硬件配置字(RCWL,RCWH)后,会设置相应的寄存器。其中RCWH 中的BMS位值为1,定义了e300核心的MSR[IP]位初始值,如上图所示,MSR[IP]为1决定中断向量的前缀为0xFFF,启动存储空间的位置为0xFF80_0000~0xFFFF_FFFF;SWEN位为0,禁止软件看门狗;ROMLOC位为0b110,RLEXT位为0b00确定了选择local bus GPCM-16bit ROM 为启动ROM。复位向量和本地地址映射的默认启动ROM访问将直接指向ROMLOC指定的接口。选中的启动ROM的本地访问窗口(LBLAW0)将被使能,CPU根据LBLAWBAR0,BR0,OR0确定启动后第一条指定从哪处取,这点在powerpc上电复位过程.docx中有所描述。

中断向量的前缀为0x000,复位向量为100,决定了系统复位后的第一条指令从

0x0000_0100处获得。

5

/cpu/mpc83xx/u-boot.lds文件时连接器脚本文件,其中

.text :

{

cpu/mpc83xx/start.o (.text)

…………………….

}

………………

ENTRY(_start)

规定了代码段从/cpu/mpc83xx/start.s开始。而ENTRY(_start)这一句告诉编译器uboot.bin的镜像入口点为start.s中的_start标号。

UBOOT内存映射:

Range Start Range End Definition Size

0x0000_0000 0x07ff_ffff DDR 128M

0xa000_0000 0xafff_ffff PCI Express 1 Mem 256M

0xb000_0000 0xb0ff_ffff PCI Express 1 Config 16M

0xb100_0000 0xb17f_ffff PCI Express 1 IO 8M

0xe000_0000 0xe00f_ffff IMMR 1M

0xfe00_0000 0xffff_ffff NOR Flash (CS0) 32M

The 32M NOR flash starts at address 0xfe000000:

Range Start Range End Definition

0xfe00_0000 0xfe05_ffff U-Boot

0xfe0a_0000 0xfe2f_ffff Kernel

0xfe30_0000 0xfe7f_ffff Ramdisk file system

0xfe80_0000 0xfe81_0000 DTB

6

下面通过uboot源码实现看看这些实现过程;

2 U-Boot 启动流程

2.1 总体启动流程

1. /cpu/mpc83xx/u-boot.lds文件时连接器脚本文件,其中

.text :

{

cpu/mpc83xx/start.o (.text)

…………..

}

………ENTRY(_start)

规定了代码段从/cpu/mpc83xx/start.s开始。而ENTRY(_start)这一句告诉编译器uboot.bin的镜像入口点为start.s中的_start标号。

2.CPU入口函数_start(FLASH中运行):/cpu/mpc83xx/start.S

主要功能:

(1)设置IMMRBAR

(2)初始化E300处理器内核

(3)初始化并使能MMU

(4)使能数据cache

(5)调用CPU初始化函数cpu_init_f

(6)调用主板初始化函数board_init_f

3.CPU初始化函数cpu_init_f(FLASH中运行):/cpu/mpc83xx/cpu_init.c

主要功能:

7

(1)初始化CPU相关寄存器

(2)建立系统内存映射

4.主板初始化函数一board_init_f(FLASH中运行):/lib_ppc/board.c

主要功能:

(1)初始化Time Base

(2)初始化串口

(3)初始化console

(4)检查CPU型号

(5)初始化DDR内存

(6)将U-Boot重定位到内存中

5.主板初始化函数二board_init_r(内存中运行):/lib_ppc/board.c

主要功能:

(1)使能指令cache

(2)初始化FLASH驱动

(3)初始化中断

(4)初始化以太网

(5)进入main主循环处理用户命令

(6)从FLASH中加载Linux内核、文件系统以及DTB

8

2.2init_e300_core函数

初始化e300核心,禁止中断响应,只允许machine check中断和system reset中断,禁止指令和数据地址转换,即关闭MMU,进行实地址转换,设置为supervisor级别,禁止看门狗,无效指令和数据cache,等,为系统创建一个干净可靠的初始环境。

2.3 窗口重映射

从前面MPC8308上电流程可以看出,上电之后,第一条代码是从0xFFF0_0100的地方开始执行的,但是flash并不一定会分配在0xFF00_0000到0xFFFF_FFFF的地方(以32M的为例)。在本系统中,Flash的地址就被分配到了0xFE00_0000到0xFFFF_FFFF的地方。所以这其中需要做一个跳转,这正是这段代码中map_flash_by_law1,remap_flash_by_law0等函数要做的,具体的流程可以由下面的五张图来说明:

9

1 开始时,BR0,OR0为全零,4G全是重复的Flash,CPU通过LBLAW0访问Flash空间FF80_0000到FFFF_FFFF。

2 map_flash_by_law1函数使用LBLAW1映射FE00_0000到FEFF_FFFF这段空间。

3 跳转到FE00_0000这段空间执行代码,由于4G空间重复,只要偏移地址计算正确就会顺序执行。

10

4 remap_flash_by_law0函数设置BR0为FE00_0000,OR0大小为32M。

5 remap_flash_by_law0函数设置LBLAW0窗口映射FE00_0000到FFFF_FFFF区域,并

清除LBLAW1。

11

2.4 Dcache 中分配空间做堆栈

程序跑到这里,就要进入第一个C函数了,C函数的运行需要堆栈空间,但这时,RAM 还没有初始化,只能在Dcache中锁定一定的空间,用于C的堆栈空间。

lock_ram_in_cache函数在Dcache中锁定4k的空间。

下面的几行代码将堆栈指针指向刚刚分配好的Dcache空间。

lis r1, (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET)@h

ori r1, r1, (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET)@l

li r0, 0

stwu r0, -4(r1)

2.5 cpu_init_f 函数

该函数是系统执行的第一个C语言的函数,主要是做一些CPU寄存器的初始化,其中最重要的部分是初始化Local Access Windows的值和Local Bus上的片选BR,OR的值。这些值需要在/include/configs/MPC8308rru.h中配置好。

12

2.6 board_init_f 函数

该函数为板级初始化的第一个函数,会对板子上很多硬件外设做初始化,其中最重要的为init_sequence数组,该数组里面包含了很多板级的硬件初始化函数,在

board_init_f函数中会依次的调用该数组中的函数去初始化各个硬件,该数组如下:init_fnc_t *init_sequence[] = {

#if defined(CONFIG_BOARD_EARLY_INIT_F)

board_early_init_f,

#endif

#if !defined(CONFIG_8xx_CPUCLK_DEFAULT)

get_clocks, /* get CPU and bus clocks (etc.) */

#if defined(CONFIG_TQM8xxL) && !defined(CONFIG_TQM866M) /

&& !defined(CONFIG_TQM885D)

adjust_sdram_tbs_8xx,

#endif

init_timebase,

#endif

#ifdef CFG_ALLOC_DPRAM

#if !defined(CONFIG_CPM2)

dpram_init,

#endif

#endif

#if defined(CONFIG_BOARD_POSTCLK_INIT)

board_postclk_init,

#endif

13

env_init,

#if defined(CONFIG_8xx_CPUCLK_DEFAULT)

get_clocks_866, /* get CPU and bus clocks according to the environment variable */

sdram_adjust_866, /* adjust sdram refresh rate according to the new clock */

init_timebase,

#endif

init_baudrate,

serial_init,

console_init_f,

display_options,

#if defined(CONFIG_8260)

prt_8260_rsr,

prt_8260_clks,

#endif /* CONFIG_8260 */

#if defined(CONFIG_MPC83XX)

prt_83xx_rsr,

#endif

checkcpu,

#if defined(CONFIG_MPC5xxx)

prt_mpc5xxx_clks,

#endif /* CONFIG_MPC5xxx */

#if defined(CONFIG_MPC8220)

14

prt_mpc8220_clks,

#endif

checkboard,

INIT_FUNC_WATCHDOG_INIT

#if defined(CONFIG_MISC_INIT_F)

misc_init_f,

#endif

INIT_FUNC_WATCHDOG_RESET

#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)

init_func_i2c,

#endif

#if defined(CONFIG_DTT) /* Digital Thermometers and Thermostats */ dtt_init,

#endif

#ifdef CONFIG_POST

post_init_f,

#endif

INIT_FUNC_WATCHDOG_RESET

init_func_ram,

#if defined(CFG_DRAM_TEST)

testdram,

#endif /* CFG_DRAM_TEST */

INIT_FUNC_WATCHDOG_RESET

15

NULL, /* Terminate this list */

};

可以看到时钟,内存,串口,控制台等初始化函数的调用,其中串口的初始化要先于内存初始化。

2.7 relocate_code 函数

到目前为止,boot代码都是在Flash中运行,但是代码最终是要到RAM中运行的,在上面的board_init_f函数中已经将RAM初始化好了,具备了在RAM中运行程序的能力,现在relocate_code函数需要做两个事情:

1 从Flash中拷贝uboot的代码到RAM

2记下现在执行代码的偏移,跳转到RAM中相应的位置执行。

2.8 board_init_r 函数

该函数为板级初始化的第二阶段,主要是初始化PCI,PCIE,网口,Flash等设备,关闭看门狗,把前面借dcache做堆栈的空间解锁,还给cache。在一切设备都初始化好后,便会进去main_loop的死循环中。

16

3 U-Boot 关键的数据结构

U-boot的主要功能是用于引导OS的,但是本身也提供了许多强大的功能,可以通过输入命令行来完成许多操作。所以它本身也是一个很完备的系统。U-boot的大部分操作都是围绕它自身的数据结构,这些数据结构是通用的,但是不同的板子初始化这些数据就不一样了。所有U-boot的通用代码是依赖于这些重要的数据结构的。

3.1 gd全局数据变量指针

它保存了U-boot运行需要的全局数据,类型定义:

typedef struct global_data {

bd_t *bd; //board data pointor板子数据指针

unsigned long flags; //指示标志,如设备已经初始化标志等。

unsigned long baudrate; //串口波特率

unsigned long have_console; //串口初始化标志

unsigned long reloc_off; //重定位偏移,就是实际定向的位置与编译连接时指定的位置之差,一般为0

unsigned long env_addr; //环境参数地址

unsigned long env_valid; //环境参数CRC检验有效标志

unsigned long fb_base; //base address of frame buffer

#ifdef CONFIG_VFD

unsigned char vfd_type; //display type

#endif

void **jt; //跳转表

} gd_t;

3.2 bd 板子数据指针

板子很多重要的参数。类型定义如下:

typedef struct bd_info {

17

int bi_baudrate; //串口波特率

unsigned long bi_ip_addr; //IP地址

unsigned char bi_enetaddr[6]; //MAC地址

struct environment_s *bi_env;

ulong bi_arch_number; //unique id for this board

ulong bi_boot_params; //启动参数

struct //RAM配置

{

ulong start;

ulong size;

} bi_dram[CONFIG_NR_DRAM_BANKS];

} bd_t;

3.3环境变量指针

env_t *env_ptr = (env_t *)(&environment[0]); (common/Env_nand.c)

env_ptr指向环境参数区,系统启动是默认的环境参数environment[],定义在common/environment.c中。

参数解释:

bootdelay 定义执行自动启动的等候秒数

baudrate 定义串口控制台的波特率

netmask 定义以太网接口的掩码

ethaddr 定义以太网接口的MAC地址

bootfile 定义缺省的下载文件

bootargs 定义传递给Linux内核的命令行参数

18

bootcmd 定义自动启动时执行的几条命令

serverip 定义tftp服务器段的IP地址

ipaddr 定义本地的IP地址

stdin 定义标准输入设备,一般是串口

stdout 定义标准输出设备,一般是串口

stderr 定义标准错误信息输出设备,一般是串口

3.4设备相关

标准IO设备数组evice_t *stdio_devices[] = {NULL, NULL, NULL};

设备列表list_t devlist = 0;

device_t的定义:include/devices.h

typedef struct {

int flags; /* Device flags: input/output/system */

int ext; /* Supported extensions */

char name[16]; /*Device name */

/* GENERAL functions */

int (*start)(void); /* To start the device */

int (*stop)(void); /* To stop the device */

/* 输出函数*/

void (*putc)(const char c); /* To put a char */

void (*puts)(const char *s); /* To put a string(accelerator) */

/* 输入函数*/

int (*tstc)(void); /* To test if a char is ready… */

19

int (*getc)(void); /* To get that char */

/* Other functions */

void *priv; /* Private extensions */\ } device_t;

U-boot把可以用为控制台输入输出的设备添加到设备列表devlist,并把当前用作标准IO的设备指针加到stdio_devices数组中。

在调用标准IO函数如printf()时将调用stdio_devices数组对应设备的IO函数如putc()。

3.5命令结构体类型定义:include/command.h

struct cmd_tbl_s {

char *name; /* Command Name 命令名*/

int maxargs; /* maximum number of arguments 最大参数个数*/

int repeatable; /* autorepeat allowed? */

/* Implementation function 命令执行函数*/

int (*cmd)(struct cmd_tbl_s *, int, int, char *[]);

char *usage; /* Usage message (short) */

#ifdef CFG_LONGHELP

char *help; /* Help message (long) */

#endif

#ifdef CONFIG_AUTO_COMPLETE

/* do auto completion on the arguments */

int (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);

#endif

};

20

c单片机上电复位和复位延时的时序分析

80C51单片机上电复位和复位延时的时序分析 80C51单片机的上电复位POR(Power On Reset)实质上就是上电延时复位,也就是在上电延时期间把单片机锁定在复位状态上.为什么在每次单片机接通电源时,都需要加入一定的延迟时间呢?分析如下. 1 上电复位时序 在单片机及其应用电路每次上电的过程中,由于电源回路中通常存在一些容量大小不等的滤波电容,使得单片机芯片在其电源引脚VCC和VSS之间所感受到的电源电压值VDD,是从低到高逐渐上升的.该过程所持续的时间一般为1~100 ms(记作taddrise).上电延时taddrise的定义是电源电压从10% VDD上升到90% VDD所需的时间,如图1所示. 图1 上电延时taddrise和起振延时tosc实测结果 在单片机电源电压上升到适合内部振荡电路运行的范围并且稳定下来之后,时钟振荡器开始了启动过程(具体包括偏置、起振、锁定和稳定几个过程).该过程所持续的时间一般为1~50 ms(记作tosc).起振延时tosc的定义是时钟振荡器输出信号的高电平达到Vih1所需的时间.从图1所示的实际测量图中也可以看得很清楚.这里的Vih1是单片机电气特性中的一个普通参数,代表XTAL1和RST引脚上的输入逻辑高电平.例如,对于常见的单片机型号AT89C51和AT89S51,厂家给出的Vih1值为0.7VDD~VDD+0.5 V. 从理论上讲,单片机每次上电复位所需的最短延时应该不小于treset.这里,treset等于上电延时taddrise与起振延时tosc之和,如图1所示.从实际上讲,延迟一个treset往往还不够,不能够保障单片机有一个良好的工作开端. 在单片机每次初始加电时,首先投入工作的功能部件是复位电路.复位电路把单片机锁定在复位状态上并且维持一个延时(记作TRST),以便给予电源电压从上升到稳定的一个等待时间;在电源电压稳定之后,再插入一个延时,给予时钟振荡器从起振到稳定的一个等待时间;在单片机开始进入运行状态之前,还要至少推迟2个机器周期的延时,如图2所示.

单片机复位原理总结

题6是作者在2006年10月份全国巡回人才招聘的考题,居然60%的同学得零分,却只有一位同学得满分,这种现象值得我们彻底地反思。 题6:单片机上电复位电路如图3所示,请回答下列问题(12分): (1)该复位电路适用于高电平复位还是低电平复位? (2)试述复位原理,画出上电时Vc的波形; (3)试述二极管D的作用。 图3RC复位电路 答案:(1)低电平复位。 (2)在图3中,CPU上电时,但由于电容C两端的电压V C不能突变,因此V C保持低 不断上升,上升曲线如图4所示。只要选择合适电平。但随着电容C的充电,V C 就可以在CPU复位电压以下持续足够的时间使CPU复位。复位之后,的R和C,V C V 上升至电源电压,CPU开始正常工作。相当于在CPU上电时,自动产生了一个C 一定宽度的低电平脉冲信号,使CPU复位。 4 RC充放电曲线 图 (3)当电源电压消失时,二极管D为电容C提供一个迅速放电的回路,使/RESET端迅速回零,以便下次上电时CPU能可靠复位。 这是一个非常重要的知识点,如果CPU的复位电路设计得不合理将会导致CPU严重死机,并且影响与CPU有关的外围器件的稳定性,比如存储器上电丢失数据。因此我们在学习的过程中,一定要善于将前后的知识连贯起来。千万不要随意放过哪怕一个细小的问题,只有这样才能做到融会贯通。在管理新产品的开发过程中,作者发现出现质量事故的产品都是由一些看起来并不起眼的小问题所引起的,最终给企业带来的损失却是巨大的,甚至是毁灭性的打

击。 二、复位电路的工作原理 在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,那这个过程是如何实现的呢? 在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。 开机的时候为什么为复位 在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。 也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。 按键按下的时候为什么会复位 在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。 总结: 1、复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。 2、按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。

单片机常用模块电路大全

单片机常用模块电路大全 1. 双路232通信电路:3线连接方式,对应的是母头,工作电压5V,可以使用MAX202或MAX232。 2. 三极管串口通信:本电路是用三极管搭的,电路简单,成本低,但是问题,一般在低波特率下是非常好的。 3. 单路232通信电路:三线方式,与上面的三级管搭的完全等效。 4. USB转232电路:采用的是PL2303HX,价格便宜,稳定性还不错。 5. SP706S复位电路:带看门狗和手动复位,价格便宜(美信的贵很多),R4为调试用,调试完后焊接好R4。 卡模块电路(带锁):本电路与SD卡的封装有关,注意与封装对应。此电路可以通过端口控制SD卡的电源,比较完善,可以用于5V和。但是要注意,有些器件的使用,5V和是不一样的。 液晶模块(ST7920):本电路是常见的12864电路,价格便宜,带中文字库。可以通过PSB端口的电平来设置其工作在串口模式还是并行模式,带背光控制功能。

字符液晶模块(KS0066):最常用的字符液晶模块,只能显示数字和字符,可4位或8位控制,带背光功能。 9.全双工RS485电路(带保护功能):带有保护功能,全双工4线通信模式,适合远距离通信用。 半双工通信模块:可以通过选择端口选择数据的传输方向,带保护功率。此模块只能工作在5V. 11. ARM JTAG仿真接口电路:比较完善,可以应用在常规的ARM芯片下,具有有自动下载功能,可以用JLINK或ULINK. 电源模块:这个电路比较简单,如果用直插可以达到,如果用贴片的可以到达1A。 电源模块:可以到达800mA,价格非常便宜,也有相应的的芯片,可以直接替换。 常用开关电源电路 buck电源电路。 14.最常用的开关电源:

51单片机复位电路有关问题

想问一下单片机复位电路问题 复位过程我明白,RST接高电平复位,接低电平单片机正常工作 但电路连接不太理解什么意思, 想知道图中电解电容的作用,既然是按键高电平复位为什么要加电解电容呢不加可以吗?如果一定要加原因是什么? 另外想知道电容作用是隔直流通交流,是绝对的直流不通过还是什么充电过程无电流放电过程有电流,求指教 我认为绛红的蓝同学说的不太好。 电容确实可以起到按键去除抖动的作用,但是这里的电容还有一个更重要的作用就是上电复位,因为考虑到芯片刚刚上电时由于供电不稳定而做出错误的计算,所以增加一个上电复位以达到延时启动CPU的目的,使芯片能够正常工作。虽然现在很多芯片自带了上电延时功能,但是我们一般还是会增加额外的上电复位电路,提高可靠性。 上电复位是如此工作的,此时不用考虑按键和你图中1K电阻的作用。上电瞬间,电压VCC短时间内从0V上升到5V(比方说5V),这一瞬间相当于交流电,电容相当于导线,5V的电压全部加在10K电阻上,也就是说,这时RST的电平状态为高电平。但是从上电开始,电容自己就慢慢充电,其两端电压呈曲线上升,最终达到5V,也就是说其正端电位为5V,负端电位为0V,其负端也就正好是RST,此时RST为低电平,单片机开始正常工作。 添加按键是为了手动复位,一般那个1K电阻可以不加。当按键按下时,电容两端构成回路并放电,使RST端重新变为高电平,按键抬起时电容又充电使RST 变回低电平。 复位电路的作用 在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。 无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。 基本的复位方式 单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位 1、手动按钮复位 手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。

单片机最小系统原理图

单片机最小系统 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的 系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路. 下面给出一个51单片机的最小系统电路图. 说明

复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C 取10u,R取8.2K.当然也有其他取法的,原则就是要让R C组合可以在RST脚上产生不少于2个机周期的高电平.至于如何具体定量计算,可以参考电路分析相关书籍. 晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作) 单片机:一片AT89S51/52或其他51系列兼容单片机 特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行.这一点是初学者容易忽略的. 复位电路: 一、复位电路的用途 单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。 单片机复位电路如下图:

二、复位电路的工作原理 在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,那这个过程是如何实现的呢? 在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。 开机的时候为什么为复位 在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充

单片机各种复位电路原理

单片机各种复位电路原理 复位电路的作用 在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。 无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。 基本的复位方式 单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位 1、手动按钮复位 手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一般采用的办法是在RST 端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。

图1 图2 2、上电复位 AT89C51的上电复位电路如图2所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1μF。上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在图2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU 可能会从一个未被定义的位置开始执行程序。 2、积分型上电复位 常用的上电或开关复位电路如图3所示。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST 为一段时间的高电平,从而实现上电或开关复位的操作。 根据实际操作的经验,下面给出这种复位电路的电容、电阻参考值。 图3中:C:=1uF,Rl=lk,R2=10k

51单片机复位电路

51单片机复位电路 单片机在可靠的复位之后,才会从0000H地址开始有序的执行应用程序。同时,复位电路也是容易受到外部噪声干扰的敏感部分之一。因此,复位电路应该具有两个主要的功能: 1.必须保证系统可靠的进行复位; 2.必须具有一定的抗干扰的能力; 一、复位电路的RC选择 复位电路应该具有上电复位和手动复位的功能。以MCS-51单片机为例,复位脉冲的高电平宽度必须大于2个机器周期,若系统选用6MHz晶振,则一个机器周期为2us,那么复位脉冲宽度最小应为4us。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。图1是利用RC充电原理实现上电复位的电路设计。实践证明,上电瞬间RC电路充电,RESET引脚出现正脉冲。只要RESET端保持10ms以上的高电平,就能使单片机有效的复位。

二.供电电源稳定过程对复位的影响 单片机系统复位必须在CPU得到稳定的电源后进行,一次上电复位电路RC参数设计应考虑稳定的过渡时间。 为了克服直流电源稳定过程对上电自动复位的影响,可采用如下措施: (1)将电源开关安装在直流侧,合上交流电源,待直流电压稳定后再合供电开关K,如图3所示。 (2)采用带电源检测的复位电路,如图4所示。合理配置电阻R3、R4的阻值和选择稳压管DW的击穿电压,使VCC未达到额定值之前,三极管BG截止,VA点电平为低,电容器C不充电;当VCC稳定之后,DW击穿,三极管BG饱和导通,致使VA点位高电平,对电容C充电,RESET为高电平,单片机开始复位过程。当电容C上充电电压达到2V 时,RESET为低电平,复位结束。

单片机系统复位电路

单片机复位电路 为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V 低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。 复位电路的分类: 单片机复位电路主要有四种类型:(1)微分型复位电路;(2)积分型复位电路;(3)比较器型复位电路;(4)看门狗型复位电路。 ISA总线的复位信号到南桥之间会有一个非门,跟随器或电子开关,常态时为低电平,复位时为高电平。IDE的复位和ISA总线正好相反,通常两者之间会有一个非门或是一个反向电子开关,也就是说IDE常态时为高电平,复位时为低电平,这里的高电平为5V或3.3V,低电平为0.5V以下的电位。 任何单片机在工作之前都要有个复位的过程,复位是什么意思呢?它就象是我们上课之前打的预备铃。预备铃一响,大家就自动地从操场、其它地方进入教室了,在这一段时间里,是没有老师干预的,对单片机来说,是程序还没有开始执行,是在做准备工作。显然,准备工作不需要太长的时间,复位只需要5ms的时间就可以了。如何进行复位呢?只要在单片机的RST引脚上加上高电平,就可以了,按上面所说,时间不少于5ms。为了达到这个要求,可以用很多种方法。实际上,我们在上一次实验的图中已见到过了。 复位电路工作原理如上图所示,VCC上电时,C充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下S,C放电。S松手,C又充电,在10K电阻上出现电压,使得单片机复位。几个毫秒后,单片机进入工作状态。 单片机复位电路原理是在单片机的复位引脚RST上外接电阻和电容,实现上电复位。当复位电平持续两个机器周期以上时复位有效。复位电平的持续时间必须大于单片机的两个机器周期,具体数值可以由RC电路计算出时间常数。 如上图所示,单片机复位电路是由按键复位和上电复位两部分组成。其中,STC89系列单片及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进行复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为10K和10uF.而按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。

80C51单片机的上电复位POR

80C51单片机的上电复位POR(Pmver On Reset)实质上就是上电延时复位,也就是在上电延时期间把单片机锁定在复位状态上。为什么在每次单片机接通电源时,都需要加入一定的延迟时间呢?分析如下。 1 上电复位时序 在单片机及其应用电路每次上电的过程中,由于电源同路中通常存在一些容量大小不等的滤波电容,使得单片机芯片在其电源引脚VCC和VSS之间所感受到的电源电压值VDD,是从低到高逐渐上升的。该过程所持续的时间一般为1~100ms(记作 tsddrise)。上电延时taddrise的定义是电源电压从lO%VDD上升到90%VDD所需的时间,如图1所示。 在单片机电源电压上升到适合内部振荡电路运行的范围并且稳定下来之后,时钟振荡器开始了启动过程(具体包括偏置、起振、锁定和稳定几个过程)。该过程所持续的时间一般为1~50 ms(记作tOSC)。起振延时tOSC的定义是时钟振荡器输出信号的高电平达到Vih1所需的时间。从图1所示的实际测量图中也可以看得很清楚。这里的 Vih1是单片机电气特性中的一个普通参数,代表XTALl和RST引脚上的输入逻辑高电平。例如,对于常见的单片机型号AT89C5l和 AT89S5l,厂家给出的Vih1值为0.7VDD~VDD+0.5V。 从理论上讲,单片机每次上电复位所需的最短延时应该不小于treset。这里,treset等于上电延时taddrise与起振延时tOSC之和,如图1所示。从实际上讲,延迟一个treset往往还不够,不能够保障单片机有--一个良好的工作开端。 在单片机每次初始加电时,首先投入工作的功能部件是复位电路。复位电路把单片机锁定在复位状态上并且维持一个延时(记作TRST),以便给予电源电压从上升到稳定的一个等待时间;在电源电压稳定之后,再插入一个延时,给予时

单片机复位电路理图解

单片机复位电路原理图解 复位电路的作用 在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。 无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。 基本的复位方式 单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位 1、手动按钮复位 手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一

般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。 图1 图2 2、上电复位 AT89C51的上电复位电路如图2所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电

容减至1µF。上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在图2的复位电路中,当Vcc 掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。 2、积分型上电复位 常用的上电或开关复位电路如图3所示。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。 根据实际操作的经验,下面给出这种复位电路的电容、电阻参考值。图3中:C:=1uF,Rl=lk,R2=10k

单片机常用复位电路

单片机复位电路设计 一、概述 影响单片机系统运行稳定性的因素可大体分为外因和内因两部分: 1、外因 射频干扰,它是以空间电磁场的形式传递在机器内部的导体(引线或零件引脚)感生出相应的干扰,可通过电磁屏蔽和合理的布线/器件布局衰减该类干扰; 电源线或电源内部产生的干扰,它是通过电源线或电源内的部件耦合或直接传导,可通过电源滤波、隔离等措施来衰减该类干扰。 2、内因 振荡源的稳定性,主要由起振时间频率稳定度和占空比稳定度决定。起振时间可由电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电路的可靠性。 二、复位电路的可靠性设计 1、基本复位电路 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。图1所示的RC复位电路可以实现上述基本功能,图3为其输入-输出特性。但解决不了电源毛刺(A 点)和电源缓慢下降(电池电压不足)等问题而且调整 RC 常数改变延时会令驱动能力变差。左边的电路为高电平复位有效右边为低电平 Sm为手动复位开关Ch 可避免高频谐波对电路的干扰。

图1 RC复位电路 图2所示的复位电路增加了二极管,在电源电压瞬间下降时使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。图3所示复位电路输入输出特性图的下半部分是其特性,可与上半部比较增加放电回路的效果 图2 增加放电回路的RC复位电路 使用比较电路,不但可以解决电源毛刺造成系统不稳定,而且电源缓慢下降也能可靠复位。图4 是一个实例当 VCC x (R1/(R1+R2) ) = 0.7V时,Q1截止使系统复位。Q1的放大作用也能改善电路的负载特性,但跳变门槛电压 Vt 受 VCC 影响是该电路的突出缺点,使用稳压二极管可使 Vt 基本不受VCC影响。见图5,当VCC低于Vt(Vz+0.7V)时电路令系统复位。 图3 RC复位电路输入-输出特性

单片机延时程序

实验一单片机延时程序实验 一、实验目的与要求: 在使用4MH在外部晶体振荡器的PIC16F877A上用软件设计一个20ms的软件延时子程序。另外,还要求用MPLAB的软件模拟器及其附带的软件工具窗口stopwatch观测延时程序执行的时间。 二、实验内容: 1.硬件电路设计: 本实验中用的是软件延时,利用循环来实现延时功能。电路就用了单片机的原本电路。没有用到其他的功能模块,单片机与ICD3相连接。 2.软件设计思路: 单片机软件延时的前提和基础是每条指令的执行时间是固定的,且大部分指令的执行时间是相同的。这要求对每条指令所花费的指令周期(Tcy)做到心中有数。指令集中5条无条件跳转指令GOTO,CALL.RETURN,RETLW和RETFIE,由于它们必然引起程序跳转,造成流水线中断,因此肯定将占用2个指令周期。而其他4条有可能引起程序跳转的条件跳转指令DECFSZ,INCFSZ,BTFSC和,BTFSS的执行时间,需要占用2个指令周期,当条件为假不发生跳转时,仅占用1个指令周期。其余所有指令都只用1个指令周期。

每个指令周期Tcy的时间长度,计算方法:如果采用4MHz 的外部晶体(fosc=4 MHz),则PIC中档单片机的指令周期Tcy 为1us,这是一个整数。而采用其他频率的外部晶体时,指令周期时间将反比于外部晶体频率。 至于软件延时的结构和实现方法,其实可以采用任何指令和结构,因为只是通过执行指令耗费时间。但通常情况下有两个选择延时程序结构的原则: (1)执行指令周期数计算方便。如果含有太多复杂的条件跳转循环等结构势必会造成指令周期的计算困难,甚至可 能造成执行所造成的软件延时时间不等。 (2)不能占用太多的程序空间。试想用20000个NOP指令来实现20ms的延时,显然是可以的,但是这样做浪费了 整整一个页的程序存储器,得不偿失,而通过适当的循 环结构,重复执行某些相同的程序是比较合理的方法。 因此,软件延时程序一般采用下列方法:如果延时时间 短(微妙级别),可以连续插入几条NOP指令;如果延 时时间长(几个毫秒级别),则可以使用双嵌套循环的 方法来实现。 实验的流程图:

51单片机复位电路设计方案

51单片机复位电路设计 单片机在可靠的复位之后,才会从0000H地址开始有序的执行应用程序。同时,复位电路也是容易受到外部噪声干扰的敏感部分之一。因此,复位电路应该具有两个主要的功能: 1.必须保证系统可靠的进行复位; 2.必须具有一定的抗干扰的能力; 复位电路应该具有上电复位和手动复位的功能。以MCS-51单片机为例,复位脉冲的高电平宽度必须大于2个机器周期,若系统选用6MHz 晶振,则一个机器周期为2us,那么复位脉冲宽度最小应为4us。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。图1是利用RC充电 原理实现上电复位的电路设计。实践证明,上电瞬间RC电路充电,RESET引脚出现正脉冲。只要RESET端保持10ms以上的高电平,就能使单片机有效的复位。

单片机在可靠的复位之后,才会从0000H地址开始有序的执行应用程 序。同时,复位电路也是容易受到外部噪声干扰的敏感部分之一。 因此,复位电路应该具有两个主要的功能: 1.必须保证系统可靠的进行复位; 2.必须具有一定的抗干扰的能力; 一、复位电路的RC选择 复位电路应该具有上电复位和手动复位的功能。以MCS-51单片机为例,复位脉冲的高电平宽度必须大于2个机器周期,若系统选用6MHz 晶振,则一个机器周期为2us,那么复位脉冲宽度最小应为4us。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。图1是利用RC充电 原理实现上电复位的电路设计。实践证明,上电瞬间RC电路充电,RESET引脚出现正脉冲。只要RESET端保持10ms以上的高电平,就能使单片机有效的复位。

单片机复位电路

单片机在启动运行时都需要复位,复位使CPU 和系统中的其他部件都处于一个确定的工作状态,并从这个状态开始工作。在系统中,有时也会出现显示不正常,也为了调试方便,需要设计一个复位电路,复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。 在此系统中单片机的复位靠外部电路实现的,AT89C51单片机有一个复位引脚RST ,高电平有效。只要RST 保持高电平,单片机便保持复位状态。此时,ALE/PSEN 、P0、P1、P2、P3口都输出高电平。RST 变成低电平后,退出复位状态,CPU 开始正常工作。需要注意的是,复位操作不影响片内RAM 的内容。 复位电路的基本功能是系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。图1为基本RC 复位电路,其电路为高电平复位有效, SW1为手动复位开关,可以实现上述基本功能。 图1基本RC 复位电路 对于图1中的电阻10R 两端的电压R u (即复位信号)是一个时间的函数。上电复位时R u 和t 有以下函数关系,波形图如图2(a )所示。 ) 2.2.3(V u C R R 10a e cc t - ?= 按键复位时设t 在0~0t 之间时SW1合上,t 0t ≥ 时,SW1断开,则R u 和t 有以下函数关系,波形图如图2(b )所示。 ) 2.2.3()1(0)1(2 1 0110 11010 110b t t e e V R R R t t e V R R R u o t t CC o t CC R ????? ??≥-+<<-+=- --τττ 其中,C R //1011?=R τ,C R 102?=τ,Vcc 为电源电压(+5V )。

单片机复位电路设计

单片机复位电路设计 :blog.sina.. /s/blog_4b7b591401000ai0.html 一、概述 影响单片机系统运行稳定性的因素可大体分为外因和内因两部分: 1、外因 射频干扰,它是以空间电磁场的形式传递在机器内部的导体(引线或零件引脚)感生出相应的干扰,可通过电磁屏蔽和合理的布线/器件布局衰减该类干扰; 电源线或电源内部产生的干扰,它是通过电源线或电源内的部件耦合或直接传导,可通过电源滤波、隔离等措施来衰减该类干扰。 2、内因 振荡源的稳定性,主要由起振时间频率稳定度和占空比稳定度决定起振时间可由电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电路的可靠性。 二、复位电路的可靠性设计 1、基本复位电路 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。图1所示的RC复位电路可以实现上述基本功能,图3为其输入-输出特性。但解决不了电源毛刺(A 点)和电源缓慢下降(电池电压不足)等问题而且调整RC 常数改变延时会令驱动

能力变差。左边的电路为高电平复位有效右边为低电平Sm为手动复位开关Ch 可避免高频谐波对电路的干扰调频FM发射话筒制作套件 图1RC复位电路 图2所示的复位电路增加了二极管,在电源电压瞬间下降时使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。图3所示复位电路输入输出特性图的下半部分是其特性,可与上半部比较增加放电回路的效果电子元件邮购 图2增加放电回路的RC复位电路 使用比较电路,不但可以解决电源毛刺造成系统不稳定,而且电源缓慢下降也能可靠复位。图4 是一个实例当VCC x (R1/(R1+R2) ) = 0.7V时,Q1截止使系统复

51单片机复位电路及复位后寄存器的状态

51单片机复位电路及复位后寄存器的状态 51单片机复位电路 当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。 根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。 上电复位要求接通电源后,自动实现复位操作。常用的上电复位电路如下图A中左图所示。图中电容C1和电阻R1对电源十5V来说构成微分电路。上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R1,也能达到上电复位的操作功能,如下图(A)中右图所示。 上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。常用的上电或开关复位电路如上图(B)所示。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K 后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。 根据实际操作的经验,下面给出这两种复位电路的电容、电阻参考值。 上图(A)中:Cl=10-30uF,R1=1kO 上图1.27(B)中:C:=1uF,Rl=lkO,R2=10kO 单片机复位后的状态: 单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值,见下表。 值得指出的是,记住一些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,减少应用程序中的韧始化部分是十分必要的。 说明:表中符号*为随机状态; A=00H,表明累加器已被清零;

单片机上电复位

80C51单片机的上电复位POR 80C51单片机的上电复位POR(Power On Reset)实质上就是上电延时复位,也就是在上电延时期间把单片机锁定在复位状态上。为什么在每次单片机接通电源时,都需要加入一定的延迟时间呢?分析如下。 1 上电复位时序 在单片机及其应用电路每次上电的过程中,由于电源回路中通常存在一些容量大小不等的滤波电容,使得单片机芯片在其电源引脚VCC和VSS之间所感受到的电源电压值VDD,是从低到高逐渐上升的。该过程所持续的时间一般为1~100ms(记作taddrise)。上电延时taddrise的定义是电源电压从10% VDD 上升到90% VDD所需的时间,如图1所示。 图1 上电延时taddrise和起振延时tosc实测结果 在单片机电源电压上升到适合内部振荡电路运行的范围并且稳定下来之后,时钟振荡器开始了启动过程(具体包括偏置、起振、锁定和稳定几个过程)。该过程所持续的时间一般为1~50 ms(记作tosc)。起振延时tosc的定义是时钟振荡器输出信号的高电平达到Vih1所需的时间。从图1所示的实际测量图中也可以看得很清楚。这里的Vih1是单片机电气特性中的一个普通参数,代表XTAL1和RST引脚上的输入逻辑高电平。例如,对于常见的单片机型号AT89C51和AT89S51,厂家给出的Vih1值为0.7VDD~VDD+0.5 V。

从理论上讲,单片机每次上电复位所需的最短延时应该不小于treset。这里,treset等于上电延时taddrise与起振延时tosc之和,如图1所示。从实际上讲,延迟一个treset往往还不够,不能够保障单片机有一个良好的工作开端。 在单片机每次初始加电时,首先投入工作的功能部件是复位电路。复位电路把单片机锁定在复位状态上并且维持一个延时(记作TRST),以便给予电源电压从上升到稳定的一个等待时间;在电源电压稳定之后,再插入一个延时,给予时钟振荡器从起振到稳定的一个等待时间;在单片机开始进入运行状态之前,还要至少推迟2个机器周期的延时,如图2所示。 图2 复位信号释放的时机 2 上电复位电路3款 上述一系列的延时,都是利用在单片机RST引脚上外接一个RC支路的充电时间而形成的。典型复位电路如图3(a)所示,其中的阻容值是原始手册中提供的。在经历了一系列延时之后,单片机才开始按照时钟源的工作频率,进入到正常的程序运行状态。从图2所示的实测曲线中可以同时看到4条曲线:VDD、Vrst、XTAL2和ALE。在电源电压以及振荡器输出信号稳定之后,又等待了一段较长的延时才释放RST信号,使得CPU脱离复位锁定状态;而RST 信号一旦被释放,立刻在ALE引脚上就可检测到持续的脉冲信号。

CPU与单片机的复位电路的作用及基本复位方式

在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。 无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。 基本的复位方式 单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。 1、手动按钮复位 手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一般采用的办法是在RST 端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST 端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。 图1 2、上电复位

AT89C51的上电复位电路如图2所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1?F。上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在图2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。 图2 3、积分型上电复位 常用的上电或开关复位电路如图3所示。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。 根据实际操作的经验,下面给出这种复位电路的电容、电阻参考值。 图3中:C:=1uF,Rl=lk,R2=10k

浅谈单片机上电复位后端口的状态问题

浅谈单片机上电复位后端口的状态问题 在MSP430单片机的手册中,对于端口复位后的状态,是这样描述的:复位后,所有端口处于输入状态。 就这个问题,我们来简单说一下单片机上电复位后端口的状态问题。 首先,单片机上电后端口的状态应尽量避免处于输出状态(无论是输出低还是输出高)为什么要这样说呢?因为单片机外围电路的动作就是靠单片机端口输出低电平或者高电平来控制的。假如单片机端口一上电就处于输出高或者低电平的状态,那么很容易出现误动作。例如,有一个端口是控制继电器的,在正常状态下,单片机端口输出低电平使得继电器吸合,输出高电平断开继电器。平时我们要求继电器处于断开状态,那就要让单片机的这个端口处于输出高电平的状态,但是如果这个单片机的端口在上电复位后是处于输出低电平的状态,这时候就会出现问题了,即使我们在程序中一开始就把这个端口置为输出高电平,但是在复位期间,这个端口的状态我们是无法控制的,于是就会出现一个瞬间的低电平,虽然这个低电平持续的时间很短,有时候不足以使继电器吸合,当继电器仍会有轻微的吸合动作。这显然是我们不希望看到的。 有些单片机复位后端口默认为输入口的原因前面我们说了,单片机上电后,如果端口默认为输出口,那么不管是输出低电平还是高电平,都可能会引起误动作,甚至会产生致命后果。 而假如端口上电后默认为输入口呢?我们知道,单片机的输出控制操作一般都是根据输入信号来实现的。这样的话,就会好很多,我们可以根据输入情况做处理,尤其是对于瞬间的输入,我们可以通过软件抗干扰技术来进行过滤,这样我们就能自己掌握主动,让误操作不会发生。 单片机复位后端口处于高阻态的原因单片机复位后端口处于高阻态的原因无外乎降低功

相关文档
最新文档