MCS

单片机研究

摘要

在缺乏硬件看门狗的系统和对单片机 I/O 口线状态高度敏感的系统中,软复位功能至关重要。标准 MCS-51 和许多常见的51 内核单片机都未提供软复位方法。本文分别以 5lasm 子程序和 C51 函数的形式,为 MCS-51 单片机系统提供完善的软复位方法。

关键词

MCS-51 单片机, 软复位, 51asm, C51

引言

复位是单片机的初始化操作,用来将单片机和其他系统部件置于确定的初始状态,并从该状态开始工作。标准 MCS-51 的复位逻辑较为简单,仅通过复位引脚 RST 进行外部扩展。

对于带有外部看门狗芯片的系统,当单片机因某种原因程序跑飞且未按时喂狗时,或者被软件陷阱捕获到程序运行异常而故意不喂狗时,看门狗芯片将向单片机的 RST 引脚提供复位信号,使单片机进行一次硬复位,以恢复程序的正常运行。部分 51 内核的单片机内置片内看门狗或提供可访问寄存器实现软件复位,但通常实现的都是与向 RST 引脚提供复位信号相等的硬复位。

在某些应用中,由于单片机所连接的外设严格遵循单片机口线的时序,甚至不允许硬件复位时对口线的复位操作;或者由于系统没有外部看门狗,只能用软件监测程序运行异常并重新对单片机进行初始化操作,此时就需要软复位。

软复位要实现的功能

对于 MCS-51 系统,软复位是一种由用户软件控制的复位活动,利用一系列指令模拟硬件复位实现的操作内容,并从头开始执行用户程序。其内容包括:

  1. 程序计数器 PC 的复位,从 0000H 开始执行程序
  2. 中断优先级状态触发器的复位
  3. 单片机
  4. 特殊功能寄存器的复位
  5. 程序跑飞前状态的恢复

其中,特殊功能寄存器的复位可根据具体系统的需要,在软复位前逐个为相关寄存器赋值再软复位的方法完成,或在复位后的初始化程序中实现;程序跑飞前状态的恢复也可根据 RAM 中留存的数据来进行判断处理。本文重点讨论关于程序计数器的复位和中断优先级状态触发器的复位,在此基础上可进一步增加特殊功能寄存器的复位和程序跑飞前状态的恢复。

软复位的实现方法

前文已经阐述了软复位要完成的功能,包括程序计数器 PC 的复位、中断优先级状态触发器的复位、特殊功能寄存器的复位和程序跑飞前状态的恢复。下面分别用汇编程序和 C51 程序来实现,重点介绍 C51 程序的实现方法。

51asm 汇编程序实现

; RST_0 软复位入口
RST_0:
  LJMP 0000H
; 实际复位代码写在这里
  LJMP 0000H
  LJMP 0000H
  ; ......
  RETI
  RETI
  

使用时,在软件陷阱处理程序段或软件看门狗中用 LJMP RST_O 指令跳转到此段程序入口处即可。

C51 程序实现

void soft_reset(void)
{
  __asm
    mov a, r7
    mov r7, -2
    mov r0, a
    mov r1, -2
    mov r2, -2
    ; ......
    ljmp 0
    ljmp 0
    ljmp 0
    reti
    reti
  __endasm;
}
  

使用时,在程序中调用 soft_reset() 函数即可软复位。

结论

本文提出了一种功能完善、占用资源少的 MCS-51 单片机系统软复位实现方法,在 51asm 和 C51 下都可方便使用。该方法适用于没有硬件看门狗的系统或对单片机 I/O 口线状态高度敏感的系统,提供了可靠且灵活的软复位机制。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论