义隆单片机EM78P153使用_第1页
义隆单片机EM78P153使用_第2页
义隆单片机EM78P153使用_第3页
义隆单片机EM78P153使用_第4页
义隆单片机EM78P153使用_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于EM78P153S勺应用设计(V1.0)第一章EM78P153S的初识11.1 EM78P152/3S 特性11.2 EM78P152/3S 引脚 21.3功能寄存器21.3.1累加器与端口控制寄存器 21.3.2中断状态寄存器与中断使能寄存器 31.3.3操作寄存器 41.3.4特殊功能寄存器61.4数据存储器的配置 71.5休眠与唤醒71.6分频器91.7定时器/计数器TCC 9第二章EM78系列单片机应用软件的编辑与仿真 112.1 Simulator的下载与安装 112.2 Simulator的使用方法112.3 Simulator系统常用命令汇总 142.4 Simulator仿

2、真中的常见问题 15第三章EM78系列单片机的汇编指令 173.1 寻址方式173.2 伪指令183.3 指令速查表18第四章EM78P153S应用软件设计204.1 外部中断程序204.2 花样灯程序 224.2.1 设计需求224.2.2 软件设计 234.2.3 硬件设计374.2.4 元器件明仑田表 38第五章EM78系列单片机应用程序的烧录 395.1 程序的转换过程395.2 烧录器与烧录软件 405.3 烧录步骤41IEM78P153S使用总结第一章EM78P153S的初识EM78P152/3S是采用低功耗高速 CMOS工艺设计开发的8位微控制器,它的内部有一 个1024X 13

3、位一次性可编程只读存储器(OTP_ROM),可见1k的只读存储器(ROM)决 定了应用程序不能够太多,否则应用程序机器码将无法烧录到芯片中。硬件设计中,EM78P152/3S可以通过设置代码选项寄存器使微处理器工作在内部RC振荡模式(IRC)下,此模式下采用上电复位模式而不需要外接时钟电路;同时利用上电 自动复位而不需要外接复位电路,P63复位引脚可以直接作为输入脚使用,充分提高了微 处理器端口的利用率,这样硬件应用电路极为简化,节省了硬件成本。此外,EM78P153S单片机具有休眠模式,在一些不需要微处理器实时工作的应用场合, 可以节省用电量,特别是在使用电池供电时,应用此模式可以延长电池的

4、使用时间;另外 在休眠模式下避免了微处理器在运行时受到来自外在杂波信号的干扰而导致程序跑飞。1.1 EM78P152/3S 特性EM78P152/3 S的性能如表1.1所示。表 1.1 EM78P152/3S 特性产品特性备注CPU配置? 1K X俭片内ROM? 32 X侥片内寄存器? 5级堆栈用于子程序嵌套外于 1.5 mA 5V/4MHz?木眠模式下的典型值为 1 mA。I/O端口配置? 2组双向I/O端口: P5, P6? 11个I/O引脚狈醒端口: P6? 6个可编程下拉I/O引脚? 7个可编程上拉I/O引脚? 7个可编程漏极开路I/O引脚?外部中断:P60工作电压范围? OTP版本;

5、工作电压范围:2.3V5.5V工作频率范围? IRC 模式;振荡模式:4MHz , 8MHz , 1MHz , 455KHz外设配置? 8位实时时钟/计数器,可编程选择其信号源、触发边沿,溢出产生中断三种中断源? TCC溢出中断?俞入端口状态改变中断(可使微控制器从休眠模式唤醒)?外部中断专有特性诂电模式(休眠模式)? 可选振荡模式封装类型? 14引脚 DIP : EM78P153SP/S/J? 14引脚 SOP: EM78P153SN/S/J? 10弓|脚 SSOP: EM78P152SN/S/J其它?具备一个保护寄存器以防止 OTP ROM中的程序代码被窃取1.2 EM78P152/3S

6、引脚EM78P152/3S的引脚图如图1.1,引脚功能如表1.2所示P50P67P66VddPC5/OSCIP64/OSCOP63/RSTP51P52P53VssP6O/7INTP61P62/TCCEM78P153SP/N/S/JP60/INTVssP67P66VddP61P62TTCGP63/RSTFWOSG。P65/OSCIEM78P152SP/N/S/J图 1.1 EM78P152/3S 引脚图表1.2 EM78P152/3 S引脚功能表引脚名称序号类型功能备注P50P531、12、13、14i/o n*通用的I/O引脚P60P62P64P672、3、56、8、9、10I/O*通用的I/

7、O引脚*引脚状态发生改变时,从休眠模式唤醒*可以设置为上拉P60/INT10I/O*下降沿触发的外部中断引脚P62/TCC8_i/o n*外部定时/计数器信号输入引脚P63/RESET7i*若设置/RESET引脚并使其保持逻辑低,器件将产生复位*引脚状态改变时,从休眠模式唤醒* P63仅用作输入引脚P64、 P655、6I/O*外部时钟信号输入*晶体振荡器的输入引脚VDD4*电源正极VSS11_*电源地1.3功能寄存器期望微处理器按预期的性能工作,就需要对功能寄存器进行有效的定义,这也是汇编 编程初始化的基本任务。针对EM78P153单片机,在汇编程序编写中,使用频率相对较高的寄存器有累加器A

8、、I/O端口控制寄存器IOC5IOC6、中断状态寄存器(RF)、中断使能寄存器(IQCF)o1.3.1累加器与端口控制寄存器示例1端口数值的传送(读取一个端口的值送给另一个端口)。源程序如下:.*;.DIP输入,LED输出*dip=5 ; dip5led=6 ;定义显示端口的地址为6org0x00;定义程序存放区的起始地址jmpmain;跳转到主程序org0x50;声明主程序开始地址main:mov a, 0x00;iowled;设定显示端口引脚全部输出mov a, 0xff;iowdip;设定dip端口全部为输入loopcoma dip;读取dip状态并取反送 amov led , a ;传

9、送到端口 6上面显示jmploop;循环回去;* end;告知汇编器源程序结束1、累加器A累加器A用丁内部数据传送或指令操作数暂存,它不可被寻址。寄存器之间的数据传 递需要通过累加器A来过渡,即寄存器先传送给 A再由A传送给另一个寄存器。2、I/O 端口控制寄存器IOC5 IOC6I/O端口控制寄存器IOC5 IOC6:为“1”时,相关I/O引脚置为高阻态(输入);为 “0”时,相关I/O引脚置为输出。IOC5寄存器仅低4位可被有效定义,IOC5和IOC6 均为可读/写寄存器。1.3.2中断状态寄存器与中断使能寄存器示例2将寄存器0x20当做计数器,每当外部中断产生,就自动加 1。源程序如下:

10、* ;P60/INT 外部中断 ;将寄存器0x20当做计数器,每当外部中断产生,就自动加 1 .*ORG0x000x20EXT_PRO;0x08;定义程序存放区的起始地址;清除计数器跳转到主程序中断的入口地址CLRJMPORGINT_EXT:DISI0x0F;使能中断CLR;清除中断状态寄存器的标志位INC0x20;计数器加1RETI;返回主程序ORG0x50;主程序的开始地址EXT_PRO: CLR0x0F;清除标志位MOVA, 0x04;使能外部中断信号产生IOW0x0F;把A的内容送给0x0FMOVA, 0x40;定义P60为外部中断引脚IOW0x0EENIEXT_WAIT: NOP N

11、OP;开总中断JMPEXT_WAIT;循环等待外部中断* ;END;汇编器源程序结束1、中断状态寄存器(RF)中断状态寄存器(RF)地址0x0F,它反映三种中断标志情形,硬件自动置 1,均需要通过软件的方式活0,以活除中断标志。RF各位的含义如表1.3所示。表1.3 中断状态寄存器 RF地址BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT00x0FEXIFICIF二 TCIF其中:Bit 2(EXIF):外部中断标志位,/INT管脚输入下降沿时置“ 1”,由软件活“0”; Bit 1(ICIF):端口 6输入状态改变标志位,输入状态改变时置“1”,由软件活“0”; Bit 0(T

12、CIF) : TCC溢出中断标志位,TCC溢出时置“ 1”,由软件活“0”。2、中断使能寄存器(IOCF)中断使能寄存器(IOCF)地址0x0F,与中断状态寄存器共用一个地址,它反映三种中 断的开启与关闭,在程序运行每个指令周期中,硬件自身判断中断使能位,当中断使能位 为1时响应相应中断,同时在中断服务程序中务必活中断状态寄存器的相应标志位为00IOCF各位的含义如表1.4所示。表1.4 中断使能寄存器地址BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT00x0FEXIEICIETCIE功能0:禁止EXIF中断1 :使能EXIF中断0:禁止ICIF中断1 :使能ICIF中断0:禁

13、止TCIF中断1:使能TCIF中断其中:Bit 2 (EXIE)是外部中断EXIF使能位;Bit 1 (ICIE)是端口 6输入状态改变引发 中断ICIF使能位;Bit 0 (TCIE)是定时溢出中断TCIF使能位。1.3.3操作寄存器1、间接寻址寄存器R0R0并非实际存在的寄存器,它的主要功能是作为间接寻址指针,任何以R0为指针的指 令,实际上是对RAM选择寄存器R4所指向地址的数据内容进行操作。2、定时/计数器R1(1) TCC引脚的外部信号边沿或内部指令周期时钟触发 (由CONT寄存器的TE位设 定),会使TCC寄存器加1;(2) 像其它寄存器一样可读/写;(3) 通过复位PAB位(CO

14、NT-3)设定;(4) 如果PAB bit (CONT-3)被复位,预分频器分配给 TCC;(5) 写入一个值到TCC寄存器后,TCC计数器的内容会被刷新。3、程序计数器R2&堆栈复位时,程序计数器R2所有位均活0,它提供了程序指令代码的片内 OTP_ROM地址c 一个程序贞为1024字长。在程序编译调试时,可以通过查看 R2的值,判断程序是否跳转 正常,或者通过对比某个程序的入口判断是否进入某个函数。“JMP”指令直接加载程序计数器的低10位,因此,“JMP”允许PC跳转到一个程序 贞的任何位置。“CALL ”指令首先加载PC的低10位,然后将PC+1推入堆栈,因此,子 程序的入口地

15、址可位丁一个程序贞的任何位置。正常情况下,所有指令均是单指令周期(一个指令周期包含2个振荡周期),但改变程 序计数器(R2寄存器)内容的指令,均为2个指令周期。EM78P153S有五级堆栈,这就决定了在程序编写的时候,子程序的嵌套调用不能够超 过5次,否则编译会出错。4、状态寄存器R3(程序)状态寄存器R3的地址为0x03,如表1.5所示。表1.5 状态寄存器R3地址0x03BIT7RST0代表其它复位类型引发唤醒复位方式;1代表引脚状态改变引发控制器从休眠模式唤醒方式BIT6GP1通用读/写位BIT5GP0BIT4T时间溢出标志位,执行“ SLEP”和“WDTC ”指令或上电时置“ 1 ”,

16、WDT溢出时复位为“ 0”BIT3P省电标志位,上电或执行"WDTC”指令时置“ 1”,执行“ SLEP”指令时复位为“ 0”BIT2Z零标志位,当算术或逻辑运算的结果为 0时置“ 1 ”BIT1DC辅助进位标志位BIT0C进位标志位在程序编译调试时,可以通过查看 R3的值,了解程序的工作过程。5、RAM选择寄存器R4: I/O寄存器,仅低4位可用。6、端口 5寄存器R5: I/O寄存器,引脚都为I/O 口。7、端口 6寄存器R6: I/O寄存器,除P63仅用作输入引脚外,其它引脚都为I/O 口8、 R10-R2F:所有这些寄存器均为8位通用寄存器。表1.6 控制寄存器CONTBIT

17、7BIT6INT中断使能标志位:0代表被DISI或硬件中断屏蔽;1代表被ENI/RETI指令使能BIT5TSTCC信号源选择位:0代表内部指令周期时钟,P62为双向I/O引脚;1代表TCC引脚的跳变信号BIT4TETCC信号边沿选择位:0代表TCC引脚信号由低变到高时 TCC计数器加1; 1代表TCC引脚信号由高变 到低时TCC计数器加1BIT3PAB预分频器分配位:0代表TCC ; 1代表WDTBIT2PSR2TCC/WDT预分频比选择位PSR200001111BIT1PSR1PSR100110011PSR001010101BIT0PSR0TCC预分频比;1:21:41:81:16;1:32

18、1:641:1281:256WDT预分频比1:11:21:41:81:161:321:641:1281.3.4特殊功能寄存器1、控制寄存器CONT控制寄存器CONT各位定义如表1.6所示2、下拉控制寄存器IOCB、漏极开路控制寄存器IOCC、上拉控制寄存器IOCD下拉控制寄存器IOCB各位定义如表1.7所示表1.7 下拉控制寄存器IOCBBIT7BIT6/PD6P62引脚下拉功能使能控制位;0代表使能内部下拉功能;1代表禁止内部下拉功能BIT5/PD5P61引脚下拉功能使能控制位;0代表使能内部下拉功能;1代表禁止内部下拉功能BIT4/PD4P60引脚下拉功能使能控制位;0代表使能内部下拉功能

19、;1代表禁止内部下拉功能BIT3BIT2/PD2P52引脚下拉功能使能控制位;0代表使能内部下拉功能;1代表禁止内部下拉功能BIT1/PD1P51引脚下拉功能使能控制位;0代表使能内部下拉功能;1代表禁止内部下拉功能BIT0/PD0P50引脚下拉功能使能控制位;0代表使能内部下拉功能;1代表禁止内部下拉功能漏极开路控制寄存器IOCC各位定义如表1.8所示表1.8 漏极开路控制寄存器IOCCBIT7OD7P67引脚漏极开路功能使能控制位;0代表禁止漏极开路输出;1代表使能漏极开路输出BIT6OD6P66引脚漏极开路功能使能控制位;0代表禁止漏极开路输出;1代表使能漏极开路输出BIT5OD5P65

20、引脚漏极开路功能使能控制位;0代表禁止漏极开路输出;1代表使能漏极开路输出BIT4OD4P64引脚漏极开路功能使能控制位;0代表禁止漏极开路输出;1代表使能漏极开路输出BIT3BIT2OD2P62引脚漏极开路功能使能控制位;0代表禁止漏极开路输出;1代表使能漏极开路输出BIT1OD1P61引脚漏极开路功能使能控制位;0代表禁止漏极开路输出;1代表使能漏极开路输出BIT0OD0P60引脚漏极开路功能使能控制位;0代表禁止漏极开路输出;1代表使能漏极开路输出上拉控制寄存器IOCD各位定义如表1.9所示表1.9 上拉控制寄存器IOCDBIT7/PH7P67引脚上拉功能使能控制位;0代表使能内部上拉功

21、能;1代表禁止内部上拉功能BIT6/PH6P66引脚上拉功能使能控制位;0代表使能内部上拉功能;1代表禁止内部上拉功能BIT5/PH5P65引脚上拉功能使能控制位;0代表使能内部上拉功能;1代表禁止内部上拉功能BIT4/PH4P64引脚上拉功能使能控制位;0代表使能内部上拉功能;1代表禁止内部上拉功能BIT3BIT2/PH2P62引脚上拉功能使能控制位;0代表使能内部上拉功能;1代表禁止内部上拉功能BIT1/PH1P61引脚上拉功能使能控制位;0代表使能内部上拉功能;1代表禁止内部上拉功能BIT0/PH0P60引脚上拉功能使能控制位;0代表使能内部上拉功能;1代表禁止内部上拉功能通过操作IOC

22、B、IOCC、IOCD寄存器可以设置端口的输入输出方式。 当某端口作为输 入口使用时,只需要考虑是否上拉或者下拉;当某端口作为输出口使用时,则考虑是否开 漏极输出。端口采用内部上拉,可以减少外部对引脚电平的干扰,如果要实现检测某端口是否为 低电平的功能,则必须设置为内部上拉,若该端口没有上拉功能,则需要外部加上拉电阻。端口采用内部下拉,理论上可以减少外部对引脚电平的干扰,但是实际的测试效果不 明显,和没有设置下拉的效果一样。所以如果端口设置为内部下拉,该端口只可以用丁检 测高电平,但是在没有输入的情况下,该引脚的电平并没有变为1V以下,不能看作真正的低电平。端口采用内部开漏极输出,适用丁微处理

23、器工作电压与外围器件工作电压不相同的场 合,输出的高电平将达不到 VDD电压值。5、看门狗定时器控制寄存器IOCE看门狗定时器控制寄存器IOCE各位定义如表1.10所示。表1.10 看门狗定时器控制寄存器 IOCE地址BIT7WDTE看门狗定时器使能控制位:0代表禁止 WDT; 1代表使能 WDTBIT6EIS定义P60(/INT)引脚功能的控制位:0定义P60为双向I/O引脚;1定义为外部中断输 入引脚/INT,在此情况下,P60弓I脚的I/O控制位(IOC6的bit 0)必须置为“1”BIT5 01.4数据存储器的配置通过了解数据存储器的分布,可以在仿真时直接了解各个寄存器的状态以及程序运

24、行 情况,数据存储器的配置如表1.11所示。表1.11数据存储器配置地址R PAGE寄存器IOC PAGE寄存器00R0间接寻址寄存器保留01R1定时/计数器CONT控制寄存器02R2程序计数器保留03R3状态寄存器保留04R4RAM选择寄存器保留05R5Port5IOC5I/O端口控制寄存器06R6Port6IOC6I/O端口控制寄存器07保留保留08保留保留09保留保留0A保留保留0B保留IOCB下拉控制寄存器0C保留IOCC漏极开路控制寄存器0D保留IOCD上拉控制寄存器0E保留IOCE看门狗定时器控制寄存器0FRF中断状态寄存器IOCF中断屏敝寄存器10 2F通用寄存器无1.5休眠与唤

25、醒EM78P152/3S微处理器可以在程序中执行 SLEP指令将进入休眠模式,微处理器可以 由以下事件唤醒:(1) /RESET引脚的外部复位信号输入;(2) WDT溢出(若使能);(3) Port 6输入状态改变(若使能);“/RESET引脚的外部复位信号输入”以及“ WDT溢出”都将使 EM78P152/3S复位, 可用R3寄存器的T和P标志位来判断复位源(唤醒源)。由丁采用上电复位的方式,P63 脚将作为输入脚使用,而不用作复位脚,所以不存在复位脚;另外若 WDT的使用频率不 高,可以设置为不使能(附:实际中可以不采取这两种唤醒模式)。实际中更多考虑的则是“ Port 6输入状态改变”的

26、唤醒模式。“Port 6输入状态改变” 将综合考虑后续程序的执行和全局中断(“ENI ”或“DISI”指令的执行情况),来决定控 制器在唤醒后是否进入中断向量。如果在 SLEP指令前执行了 ENI指令,唤醒后将从地址 为008H处开始执行。如果在SLEP指令前执行了 DISI指令,唤醒后将从SLEP指令的下 一条指令开始执行。在SLEP指令之前Port6输入状态的改变中断要使能,即中断使能寄存器(IOCF)中 ICIE位要置“1”,同时必须通过软件编程禁止 WDT,但代码选项寄存器(Code Option) 的WDT位仍要保持使能。代码选项寄存器将在介绍烧录程序的章节详细介绍。休眠与管脚唤醒的

27、使用步骤:(1) 唤醒端口设置为输入口;(2) 使能唤醒端口内部上拉;(3) 设置 WDT分频比大丁 1:1,并禁止 WDT;(4) 活 TCC;(5) 读 PORT6状态,即下 “ MOVPORT6,PORT6'指令;(6) 使能唤醒功能设置ICIE位为“1”;(7) 如需要中断则使能总中断下“ ENI ”指令;(8) 下 “SLEP” 指令;(9) 加三条“ NOP”指令延时;(10) 下 “WDTC” 指令;(11) 禁止 WDT;(12) 禁止管脚唤醒功能;在编程的时候,要注意执行 SLEP指令之前,要按照上述步骤编写, 在SLEP®令后面 要加上三条“ NOP指令,

28、这个不能够缺少。在休眠模式下,若 WDT已使能,WDT也将 被活零,但WDT会继续保持运行状态。在唤醒后,要间隔10ms左右就要执行一次“WDTC” 指令,防止WDT溢出引起复位。此处设置预分频的比例要大丁 1:1也是为防止WDT溢出 引起复位。1.6分频器看门狗定时器 WDT与TCC共用一个分频器,但某一时刻分频器只能够分配给二者之 一。与TCC配合使用时,它是以一个“预”分频器的角色出现在TCC的输入信号路径中的;而与 WDT配合使用时,它是以一个“后”分频器的角色出现在WDT的输出信号路径中的。分频器实际上就是一个8位的累加计数器,不过不能够像TCC那样通过内部数据 总线用软件进行读写操

29、作。分频器的功能就是将进入TCC的时钟信号(或从 WDT出来的 序列脉冲信号)频率除以一个指定的倍数,这个倍数就是分频比,由 CONT寄存器中的 PSR2PSR0® 决定。需要注意的是,当分频器分配给 TCC时,任何以TCC为目标的写操作指令(如 CLR TCC、MOV TCC, A)都会同时将分频器活零。同理当分频器分配给 WDT时,一条活 WDT的指令(WDTC)将会同时将分频器活零。这里说的只是分频器活零,而分配比和分 配的对象不会改变。看门狗定时器的时钟源是一个自由运行的片内RC振荡器。即使在其它的振荡器关闭的时候(也就是休眠模式下),WDT仍然保持运行。在正常模式下或休眠模

30、式下,WDT溢出(若 WDT使能)将会使器件产生复位。在正常模式下,可以通过软件编程为禁止或 使能,不使用分频器的时候, WDT的溢出周期约为18ms。所以通常从休眠模式下唤醒后 要间隔一段时间就要加一条活 WDT的指令,防止 WDT溢出产生复位。1.7定时器/计数器TCC与定时器/计数器TCC模块相关的寄存器有4个,分别为R1(TCC寄存器)、RF(中断状 态寄存器)、CONT(控制寄存器)、IOCF(中断屏蔽寄存器)。TCC具有两种工作模式,一种 定时器模式,另一种是计数器模式。两种模式之间的主要差异就是送入累加计数寄存器 TCC的“触发信号”的来源不同而已。TCC的工作模式由CONT(控

31、制寄存器)的第5位TS 决定。(1)工作模式1、定时器模式当TS为0时,TCC模块工作在定时器模式,触发信号源取自丁内部的指令周期信号。 一旦往计数器中写入初始值后,TCC便重新启动累加计数。在没有使用分频器的情况下, TCC会在每个指令周期信号到来时自动加 1。在配置了分频器的情况下,指令周期信号经 过分频器分频后送给TCC,使TCC自动加1。2、计数器模式当TS为1时,TCC模块工作在计数器模式,触发信号源取自芯片外部引脚TCC上面的输入信号。可以通过 CONT(控制寄存器)的第4位TE设定外部时钟信号的触发边沿, TE=1时下降沿触发;TE=0时上升沿触发。处丁计数器模式下,一旦往计数寄

32、存器中写入 初值后,TCC便立即开始新一轮的累加计数。值得注意的一点:在一些没有使用到 TCC的应用项目中,如果TCC进入定时器模式, 只要单片机处丁非睡眠状态,内部时钟就不会停止,以指令周期为触发信号的TCC就不停 的自动累加。这不仅增加单片机额外的电能消耗,而且会个给片内其他数字电路带来不必 要的干扰。此时可以将 CONT(控制寄存器)的TS位设定为“1”,使TCC工作在计数器模 式;同时将外部触发输入引脚 TCC固定接到VDD或VSS,这样可以使TCC永远处丁静 止状态。(2) TCC的应用使用步骤:1、给TCC寄存器赋初值;2、 设置CONT寄存器(选择时钟源并设置预分频比,当预分频比

33、分配给 WDT时TCC 预分频比为1:1);3、若需要执行中断功能,需设置IOCF寄存器中的TCIE位为“1”,并执行“ENI”指 令。注意:每次计时溢出需给 TCC赋初值(初值为0除外)。计算公式T=(1/FOSC)*Prescaler*(256-TCCcnt)*2(CLK=2)T=(1/FOSC)*Prescaler*(256-TCCcnt)*4(CLK=4)FOSC: TCC 时钟源频率;Prescaler TCC 预分频比;TCCcnt:TCC(R1)初始值。例如:FOSC=4MHz ; Prescaler=25目 TCCcnt=0; CLK=2 时,计算定时时间 TT=(1/4MHz

34、)*256*(256-0)*2(CLK=2)=32.768ms第二章EM78系列单片机应用软件的编辑与仿真EMC Simulator是一款开发软件,也是一种非实时性、非在线的仿真工具,在某种程度 上可以代替价格较贵的硬件仿真器,它届丁软件模拟器的范畴,以纯软件的方式模拟仿真 EM78P153、EM78P156E、EEM78P447S这三种型号的单片机。通过软件的手段来模拟单 片机的指令执行过程和内部硬件资源的操作方法,从而实现对用户源程序的模拟运行、功 能调试和(深层次)逻辑错误查找。EMC Simulator 的局限性:(1) 不能够模拟单片机的片外电路;(2) 执行速度慢,只适合调试实时性

35、要求不高的程序。2.1 Simulator的下载与安装用户可以通过访问这个网站 EMC乏59 J巳卜 立一Hi丁45.! I. »«i.EHFWpar(|TT:g jraKEtW.£ J (S IlnIVK-ll U 厦径 1nijrrak wiwir*riww*Jirfl 5"M 帆MJ>>>nrriSimulator仿真软件,图2.1所示的是打开网站后的页面。>»0 !U£RimK- rJx:rtim ci图2.1 网站页面在技术支持的标题下面就有一个 Simulator (义隆windows模拟仿真软件)

36、的连接,点 击之后便自动下载。在下载完之后,可以在下载的文件中,找“Setup.ex4的可执行文件,双击该文件,即可以开始安装了。安装的位置可以自由设置,然后一直点击Next,直到完成安装。可以看到桌面上将会多了一个新的图标,双击既可以运行此软件。2.2 Simulator的使用方法通过模拟仿真第一章中示例 2的程序,来介绍如何使用EMC Simulator软件。(1) 如何建立一个新项目打开软件后会出现如图2.2所示的对话框,在下拉选项中可以设置要模拟的芯片型号,19选择EM78P153点击OK,便进入了软件的界面图2.2型号选择对话框图2.3新建工程窗口图2.4新建工程文件对话框序,也可以

37、直接将已经写好的程序粘贴进来图2.6寄存器和I/O窗口创建一个新项目的方法有两种:方法一:选择菜单命令:Project>New.,会出现一个如图2.3所示的对话框,在其“Project Name”内输入自己的项目文件名(比如在此定义为jf002),系统会自动追加一个扩展名.prj。方法二:选择菜单命令 File>New.,会出现一个如图2.4所示的对话框,在其中选择 “Project”标签,并且在其“ Project Name:”条内输入自己的项目名称。(2)如何在项目中添加文件选择菜单命令File>New.,出现一个如图2.4所示的对话框。在“File”标签下,其“File

38、 Name”条内输入自己的源程序文件名,左侧窗口内三个选项分别对应三种不同拓展名的文 件:源程序文件(.dt或.asm)、头文件(.h)、和文本文件(.txt)。点击“OK”后,会出现如 图2.5所示的空白源文件编辑窗口。在其中可以编辑源程L图2.5源程序编辑窗口对丁文本编辑的几点说明:1、支持汉字输入和编辑功能 2、标点符号的输入要在半角的西文方式下输入。3、通过选择菜单命令Option>Font.来自由设置字体字号(3)如何调试程序在调试程序之前,要进行程序的编译工作,选择菜单命令Project>Rebuild All,此后在输出信息窗口可以看到汇编和链接的结果。没有错误,没有

39、警告,没有提示信息,编译完 成之后,进行复位操作,复位之后的寄存器状态如图2.6所小。复位操作的具体方法有三种:(1) 选择菜单命令Debug>Reset(2) 按一次键盘上F6键;(3) 点击工具栏上面的G图标。软件模拟器提供了多种运行程序的方式或调试程序的 手段,比较常用的有以下几种:设置寄存器观察窗、复位、 连续运行、单步运行、自动单步运行和连续单步运行、设 置断点运行、自由运行、运行到光标、从指定行开始运行 等。其具体的用法和Keil中的调试类似。and 5m ynyU:血:im Ft E KEtrYOhiWI调SEl.ir_E:c:D1SI:失Kt中!WCLGOSOF.清障标志

40、位诳0X20计低喜却IEET1:迥tel主程序ORG0)(50.主理序的开馅虬此:Jtr.PRO:CLEMOP清除悸志趋她Vk40X04皿能州册中断宣号产生OSOF浏A, SOS40走KP6D为炒郎中折引禅10VMOEEXI.开度/折河州:SOPEsr.nrr谑环等行件册中昕图2.7调试示意图1此实例中采用单步运行的方式来调试程序,这样可以很直观的看到每条语句执行完后 寄存器的改变情况(每次寄存器的数值有修改都会将改动的地方变为红色,以示区别)通过单步操作,程序将会在 EXI_WAIT子程序中循序执行,等待外部中断信号。如图 2.7所示。此时通过修改寄存器的值,来模拟外部中断信号的产生,进而观

41、察程序的运行STand I/Os VindGTJ |回|X0UPPins StatusP5 601001111 ClocksA CO:4U CUMIIFFR 1 000 RO(AaU):O»tFFR1 169 R1/TCC:001412on H2/FCR 1300 R3 :600111aoAUi09765M3210141UH Ha:UUI9ClillllE»UR 1600 fi5 GF C5 0IFR1769 H6 :FE C6:FFI4 WUHR09Rift00141 EEm»R 1C00CB z FFR:1l»09CC : 0i0141 LUUDD

42、: FFR 1F09CE :J|0RF :G0 CF:W<I>图2.8调试示意图2图2.9调试示意图3情况具体方法:将光标停留在P6端口的第1位上面,然后单击鼠标左键,此时第1位和第2位之间将会出现闪烁的光标。通过输入 0来模拟外部中断的下降沿信号。每修改一个数字,系统均会立即更改“软件模拟器”的缓冲存储器。人工修改后的值自动以“蓝色”显示,以示区别。操作的示意图如图2.8。此时点击单步运行一次,就会看到PC指针已经指向了地址0x08, 这是中断的入口地址,操作示意图如图2.9。2.3 Simulator系统常用命令汇总(1)自定义寄存器变量的视窗Watch通过选择View菜单命令

43、,选择 Watch选项,可以打开观察窗(Watch Window)。刚打图2.10 添加变量到观察窗开时是一个空窗口,可以添加所需观察的寄存器变量。 操作步骤如下:利用菜单命令 Project>Dump to ICE ,将目标文件 装载到模拟器的虚拟缓冲器内。利用菜单命令 Debug>Add label to watch,即可打开 一个如图2.10所示的对话框,在“ File”窗口显示源程 序及其存放路径。在“ Label”窗口中,选中其中的变 量,然后点击“ Add to watch”按钮,此时在该变量前 面就会出现一个“*”,表明该变量已经比添加到了 Watch 窗口。(2)

44、Get 1FFF Code Space(获取程序存储器占用信息)获取关丁程序存储器各个页面空闲情况的统计信息,并且显示在输出信息窗口中。例表 1 Output Vi Tidnv.回区1Code=lFFF, Pa睛=0.Start=0X00O2,Code=lFFF, Pa窿=。,Start-OXOOOC,End=0XO007,End=0XOO4F, Size-68图2.11输出视窗如在调试示例2的集成模拟环 境中,在Tool下拉菜单命令中 点击此条内容,则会显示如下 如图2.11里面的内容。该内容表示程序存储的位置以及没有使用的地址范围,其中 Start与End表示没有使用的起始地址与结束地址,

45、Size表示是没有使用的地址的范围。需要说图2.12寄存器显示格式对话框明的是,这里面说显示的剩余空间是指在 0x50前面的地 址,而在其后面的地址是没有给出的。 在0x50后面的地址 是存放主程序的。(3) Register view (寄存器视图)设定部分常用寄存器的显示格式,是以十六进制还是 以二进制格式显示。方法是在Option选择命令中选择其选 项。在弹出的对话框中,把打算二进制显示的寄存器进行 勾选,没有勾选的默认为以十六进制显示,如图2.12所示。(4) Debug (调试类操作命令)在Debug下拉菜单如图2.13所示,从上到下依次代表的含义是:1、Go:连续运行2、Reset

46、系统复位BTBP1&3 caraiectedTool Optig Ki.nd.4iT H«lp如Into3、Step into:单步进入4、Step over :单步跨越5、Go to Cursor:运行到光标处T# Cursor knim Run £rambdl lingT£gle Show all breakpointT Add m w-it ch Ktstt 虹0rmAndAlt*F5Clear all Clear watchTra.ceTra.cc For t!h图2.13调试类操作命令6、Animation:自动单步运行7、Run from se

47、lected line: 选定行作为运行的起点8、Toggle Brakpoint :设置、删除断点9、Show all breakpint:显示所有的断点10、Add label to watch:添加标号到观察窗11、Reset and Free rurj位和自由运行12、Reset and Go复位和连续运行13、Clear all breakpoint游除所有的断点14、Clear watch:活除观察窗15、Trace back反向追踪16、Track forth:正向追踪2.4 Simulator仿真中的常见问题1、仿真时候出现执行完一些语句后,但相应的寄存器并没有修改?【方法】一

48、般情况下是软件自身问题,需要关闭软件后再重新打开仿真。2、在程序中设置端口的值,执行完相关语句后,端口的值并没有改变?【方法】需要明确的是先设置的端口值还是先设置的端口输入输出状态,如果是先设 置的是端口值,那么要等设置完端口的输入输出状态后,才会在寄存器窗口中显示出来。 一般先设置端口的输入输出状态再设置端口值,那么就不会出现这种情况了。3、编译的时候提示找不到头文件?【方法】把头文件放到在工程文件的目录下面,再次编译既可以。4、编译时出现地址超过多少范围的提示?【方法】对丁 EM78P153地址最大可以到1FFH,而EM78P153S则可以到3FFH。仿 真软件只能够仿真EM78P153,

49、所以如果程序的存储地址超过了 1FFH,就会出现错误提示。EM78P153S使用总结 如果需要仿真EM78P153S的程序,而且程序的存储地址已经超过了 1FFH,那么只能够通 过硬件仿真器来实现了。5、头文件的调用由丁仿真软件只能够仿真型号为 EM78P153的芯片,而不能够仿真EM78P153S芯片, 所以仿真时在调用头文件的时候,要注意调用的是EM78P153.INC头文件,而不是EM78P153S.INC头文件。这两个头文件只是里面的定义方式有不同,在程序调用中,不存在差别。当要烧录EM78P153S芯片程序的时候,只要在另一款义隆单片机的编译软件(Wice Plus)中,新建一个工程

50、并且将之前仿真时候建立的以“ .DT”为后缀的文件添加进来,然 后将头文件改为EM78P153S.INC,编译通过之后就可以通过烧录软件给芯片烧录程序了, 具体的过程烧录程序章节介绍。6、在调试程序时,若采取程序延时且延时时间比较长就会出现程序乱跑的情形?【方法】将延时函数循环变量的值设小些,再次调试,如果不行,就需要设置更小。 一般调试的时候是设置为1,便丁程序的调试。出现这种问题的原因可能是软件自身的缺 陷所致。所以,一旦程序中需要延时功能,尽可能采取硬件定时手段(定时器)。20EM78P153S使用总结第三章EM78系列单片机的汇编指令EM78系列单片机共有指令 47条(EM78P447

51、、EM78P 451、EM78P 458各有48条), 指令码宽度为13位。一条指令的指令码一般可以分成两部分:第一部分为操作码,代表 指令的功能;第二部分为操作数,表示指令操作的对象,或运算时所需要的参数。3.1 寻址方式指令是CPU执行特殊运算的代码,它是程序语句的核心,一般在程序语句中还包含有 操作数,对操作数的操作就需要明确操作数的届性,即究竟是源操作数还是目的操作数? 究竟是参与运算的数据还是数据所在的存放地址?总体而言就是需要对操作数寻址。寻址就是寻找操作数的存放地址,寻址方式就是寻找操作数或者操作数所在地址的方 法或形式。根据操作数来源的不同,有 5种寻址方式。(1) 立即数寻址:操作数为立即数,直接从指令中获取。例MOV A , 0x16;将常数0x16送给寄存器A(2) 直接寻址:若是要存取寄存器的内容,需要通过累加器A来过渡。例将寄存器0x20的内容,复制到寄存器0x21中。MOVA, 0x20MOV0x21, A(3) 间接寻址:通过寄存器R4来实现,R4的bit0-5是用来选择寄存器(地址:00-06, 0F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论