1, 首先打开编激吵辑软件,TD,TE,TF 三个中的其中一个。下面我们以TE030来举例说明。在body name 里选择TE030(30”2I,6I/O,64G),code number里填入你的工程编号。输出方式pwm/dac根据你明塌侍的要求来选择。工作电压根据要求来设定。衫行功能设定为默认功能,触发时间为50US,TG5复位在reset打钩,具体见如图所示:版本为TE Editor2.11
单片机的工作
状态及其状态迁移单片机的各种活动,可以描述成多个不同的工作状态或工作模式。\x0d\x0a①把单片机经历的所有生存状态归纳和描绘成5个状态——1个非工作状态(即无电状态)和4个工作状态。\x0d\x0a②只有复位状态是一个暂态,其他均为稳态;并且每次单片机进入正常运行状态时,都要经历一次复位状态。\x0d\x0a③只有在正常运行状态(这里记作NORMAL)下,单片机才按照
程序存储器中同化的用户程序按部就班地一步一步执行,从而完成开发者设计的各项任务。\x0d\x0a④停机状态(或PD模式)和待机状态(或IDL模式),主要是为节能降耗而规划的节电状态(或称“睡眠状态”)。\x0d\x0a⑤从无电状态离开的唯一条件就是谨镇上电,并且唯一能培让够到达的是一个暂态——复位状态。\x0d\x0a⑥复位状态以外的4个状态都有迁移到复位状态的途径,只是导致迁移的条件不尽相同。\x0d\x0a⑦无电状态之外的4个工作状态,都可能因为随时断电而导致单片机进入“无电状态”。\x0d\x0a⑧从另外3个工作状态迁移到复位状态,基本都是依靠外部引脚RST上的复位信号。原始复位源比较单\x0d\x0a一,这是因为传统80C5l的复位逻辑相对简单。如果想增加“电源欠压复位”和“看门狗复位”等其他复位源,则需要片外扩充独立电路来实现。\x0d\x0a⑨标准80C51没有设计“软件复位”功能,如果需要该功能,可以通过用户程序自行实现。不同的是,软件复位不会令CPU经历一次复位状态。\x0d\x0a \x0d\x0a2 复位源、复位 *** 作和复位状态\x0d\x0a像数字电路中的时序逻辑电路器件需要具备复位功能一样,各种类型的单片机也都需要具备复位功能(RESET)。复位功能按其英文原意是重新设置的意思,也就是从头开始执行程序,或者重新从头执行程序(Restart)的意思。复位是单片机的一项重要 *** 作内容,其目标是确保单片机运行过程有一个良好的开端,确保单片机运行过程中有一个良好的状态。\x0d\x0a需要强调的是:关于“复位”一词,它既包含复位活动的意思,又包含复位状态的意思。或者说,复位既是一个动态的概念(指复位活动、复位 *** 作、复位处理或复位过程等),又是一个静态的概念(指复位状态或复位模式等)。\x0d\x0a2.1 常规复位源和扩充复位源\x0d\x0a从现今的技术高度来看,标准80C5l单片机的复位功能设计得不够完善,不仅没有设置复位标志位寄存器,而且复位源的种类也很少。\x0d\x0a所谓“复位源”,就是导致或者引起单片机内部复位的源泉。对于当前市场上出现的种类比较齐全的单片机,其典型复位源大致可以归纳为以下6种:上电复位、人工复位、电源欠压复位、看门狗复位、非法地址复位和软件复位。这些复位源的特点是:\x0d\x0a①上电复位这一种复位源是必不可少的。因为每次给单片机加电时,其电源电压的稳定,以及时钟振荡器的起振和振幅稳定,都需要一定的延迟时间。\x0d\x0a②只有上电复位和人工复位这两种复位源,是讲解80C51单片机的教科书、技术文章和文献资料中比较常见的。\x0d\x0a③对于电源欠压复位、看门狗复位和非法地址复位3种复位源,标准80C5l是不具备的,不过可以额外扩充,可由单片机用户根据实际需要通过附加一些软件或硬件的手段来实现。\x0d\x0a④虽然电源欠压复位、看门狗复位、非法地址复位3种复位源可以额外扩充,但是都必须借助于复位引脚RST来实施复位 *** 作或复位锁定。\x0d\x0a⑤标准80C51本来不具备软件复位功能,但是可以通过纯软件方式以及虚拟手段,来实现或者部分实现其他单片机的软件复位。这种方法扩充的软件复位是一种比较特殊的复位源,一是不通过RST引脚实现复位,二是复位 *** 作的内容与众不同。软件复位作为配晌局一种新技术,目前有越来越多的新型单片机配备了该功能。例如Phililps公司的P87LPC700和P89LPC900系列、TI-BB公司的MSC1200系列、SunPlus公司的SPMC65系列等,内部都设计了专门用于实现软件复位的控制寄存器或者控制位。\x0d\x0a2.2 复位 *** 作的具体内容\x0d\x0a单片机复位功能的实现过程实质上就是在单片机内部进行一系列的复位 *** 作。在复位期间,单片机内部的复位 *** 作究竟完成了哪些内容,是程序设计人员应该搞清的问题,因为单片机复位 *** 作完成之后的内部状态,就是运行用户程序和进行软件处理的背景、基础和起点。\x0d\x0a对80C51单片机来说,只有软件复位的具体内容和影响范围,是可以由用户自由定制的;而凡是直接作用于复位引脚RST上的复位源(如上电复位等),所实现的复位 *** 作的具体内容和影响范围都应该是一样的。现在归纳如下:\x0d\x0a①程序计数器PC返同到原始状态0000H;\x0d\x0a②所有特殊功能寄存器SFR全部还原为复位值(可以查阅技术手册);\x0d\x0a③所有通用并行端口(PO、Pl、P2和P3)的引脚全部被设置为输入状态;\x0d\x0a④清除各级中断优先级的激活触发器,以便受理各级中断请求(在标准80C5l中只设置了2个中断优先级别,而在有些新型兼容产品中设置了4个级别)。\x0d\x0a2.3 复位状态的具体表现\x0d\x0a单片机一旦进入复位状态并且停留在复位状态下(即外接引脚RST被锁定在有效的高电平上),就会表现出如下一些具体特征:\x0d\x0a◇CPU不再执行程序而保持静止(冻结)状态;\x0d\x0a◇各种片内外围模块(定时器、串行口、总线接口、中断系统等)均停止工作;\x0d\x0a◇各个并口(P0~P3)的所有口线均对外呈现高阻状态;\x0d\x0a◇各SFR的内容均恢复到复位值(即返回到知情范围);\x0d\x0a◇内部RAM内容维持记忆,只要电源电压不低于最低维持电压(一般为2 V)就能够保持原有内容;\x0d\x0a◇内部时钟源振荡器仍然会维持振荡,只要电源电压还在lV(甚至略低于1 V),振荡器就能够维持工作;\x0d\x0a◇各种片外电路(如扩展存储器、扩展I/O端口或锁存器等)都应该维持原有内容和状态。可以使用下面的程序跳到0000H实现软复位,下面的程序实际上是一个函数指针,指针指向了0000H地址。
((void (code *) (void)) 0x0000) ()
下面的例子将实现软件自复位void reset (void)
{
((void (code *) (void)) 0x0000) ()
}
void main (void)
{
reset ()
}
你可能注意到以上的软复位程序并不能清除8051的中断系统和某些8051的外围设备,当您在中断程序中调用上面郑尺的软件复位程序后,中断将再不能触发。因此,以上的软复位程序不能在中断子程序中调用。
下面的小段汇编函数可以在中断程序喊滑高或主程序中调用,该函数将0x0000压栈,然后通过“RETI”出栈,这将清除中断环境并让程序从0000H重新开始运行。
?PR?RESET SEGMENT CODE
RSEG ?PR?RESET
C prototype: void reset (void)
PUBLIC reset
reset: POP ACC pop return address
POP ACC
CLR Apush 0 as new
PUSH ACC return address to stack
PUSH ACC
RETI execute return of interrupt
END
以上程序在选择bank 0寄存器组时工作良好,假如选择的不是bank0寄存器组,那么可能无法获得预料的结果。你应该在以上的程序或启动代码中加上“MOV PSW, #0”来选择bank 0寄存器组。
以上让喊文章由龙啸九天翻译自KEIL FAQ,可能有疏漏,欢迎提出。
评论列表(0条)