凌阳十六位单片机原理及应用829_第1页
凌阳十六位单片机原理及应用829_第2页
凌阳十六位单片机原理及应用829_第3页
凌阳十六位单片机原理及应用829_第4页
凌阳十六位单片机原理及应用829_第5页
已阅读5页,还剩824页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第1章单片机概述1.1单片机简介1.2单片机的发展及应用领域1.3单片机主要机型介绍本章小结

1.1单

1.1.1单片机的概念

20世纪80年代,随着科学技术的发展,计算机技术逐渐被应用到传统电子控制领域。科学家们在计算机技术进步的基础上,将计算机的基本系统集成在一个芯片上,从而形成早期的单片机芯片。单片机现在是世界上数量最多的计算机,已经广泛地渗入到人们的生活中。1.1.2单片机的分类

1.通用型

通用型单片机的特点是内部可开发的资源丰富、性能全面,如RAM、ROM、I/O等功能部件全部提供给用户。

2.专用型

专用型单片机是指专门针对某些产品的特定用途而制作的单片机。

1.2单片机的发展及应用领域

1.2.1单片机的历史和现状

单片机的发展可大致分为三个阶段。

20世纪70年代为单片机发展的初级阶段。

20世纪80年代为高性能单片机的发展阶段。

20世纪90年代以来为单片机的高速发展阶段。1.2.2单片机的发展趋势

目前单片机的发展呈现出多样化,主要有以下特点。

(1)小型化:

(2)低电压、低功耗化:

(3)高性能化:

(4)大容量化:

(5)高性价比化:1.2.3单片机的应用领域

(1)智能化家用电器。

(2)办公自动化设备。

(3)商业营销设备。

(4)工业自动化控制。

(5)智能化仪表。

(6)智能化通信产品。

(7)汽车电子产品。

(8)航空航天系统和国防军事领域。单片机在该领域的应用更为广泛。

1.3单片机主要机型介绍

1.3.1MCS-51系列单片机

MCS-51系列单片机采用HMOS工艺,其硬件结构特点如下:

(1)MCS-51单片机中有1个8位的CPU,与通用的CPU基本相同,同样包括了运算器和控制器两大部分,只是增加了面向控制的位处理功能。

(2)片内RAM空间为128 KB或256 KB,片外最多可外扩64 KB。片内的RAM,以高速RAM的形式集成在单片机内,可以加快单片机的运行速度,且这种结构的RAM还可以降低功耗。

(3) MCS-51单片机的I/O线有32根,即4个并行接口:P0、P1、P2、P3。其中有一个由两根I/O线构成的全双工的串行口。

(4)MCS-51系列单片机具有两个16位的定时/计数器,可以通过编程实现中断工作模式。

(5)有5个中断源,分为两个优先级,每个中断源的优先级都是可以编程的。

(6) MCS-51系列单片机的处理器可作为一个完整的微控制器。1.3.2ATmega系列AVR单片机

AVR单片机是1997年由Atmel公司研发的增强型内置Flash的RISC(ReducedInstructionSetCPU,精简指令集CPU)高速8位单片机,简称AVR单片机。1.3.3PIC18C系列单片机

PIC系列单片机是由美国Microchip公司推出的产品,采用RISC结构的嵌入式微控制器,分别有33、35、58条指令(依单片机的级别而定),属于精简指令集。相应地,51系列有111条指令,AVR单片机有118条指令,都比PIC系列复杂。

PIC18C系列单片机的主要功能特点:

(1)采用哈佛总线结构,指令和数据空间是完全分开的。取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,实现了单周期指令。

(2)无片内程序存储器,使用时须外扩。

(3)具有线性寻址范围最高可达2MB的外部程序存储器。

(4)具有片上启动RAM和可编程片选信号。

(5)所有寄存器,包括I/O口、定时器和程序计数器等都采用RAM结构形式,而且都只需要一个指令周期就可以完成访问和操作。

(6)有8/16位的外部程序存储器接口。

(7)具有可软件控制的锁相环回路。

(8)有可软件编程的看门狗后置分频器。

(9)配置有安全访问寄存器,可用于保护重要配置和用于提供访问的组合锁。1.3.4M68HC16系列单片机

Motorola公司的单片机是全球应用最广、功能最强的单片机,在国际市场上一直有很高的市场率。该公司的M68HC16系列单片机也是应用极为广泛的16位机,且性价比较高,能满足一些8位机难以实现的复杂应用,例如自动控制、自动化设备、汽车、电机、机密仪器仪表、数字信号处理等领域。1.3.5SPCE系列单片机

凌阳科技公司是消费性电子产品供应厂商,目前主要产品包括液晶IC、微控制器IC、多媒体IC、语音IC以及各种专用IC。它可以提供数千种标准产品,广泛应用于工业领域和消费电子产品领域。该系列单片机具有以下技术性能。

(1)较宽的电源电压范围:2.4~5.5 V。

(2)较宽的系统时钟频率范围:0.32~49.152 MHz。

(3)大容量的ROM及静态RAM。

(4) 16位数据总线大大提高了工作速度。

(5) RS-232通用异步全双工串行接口。

(6) 10位A/D及D/A。

(7)可编程音频处理。

(8)内置式自动增益控制的扩音机输出通道。

(9)低电压复位/低电压检测。本章小结

单片机技术已经成为现代电子技术应用领域十分重要的技术之一,是电子技术应用领域工程技术人员必备的知识和技能,它能够使产品更具智能化和先进性。本章简要介绍了单片机的类型、概念、发展历程、应用领域以及常用的几种机型等学习单片机的预备知识。第2章SPCE061A单片机基本结构2.1SPCE061A简介2.2SPCE061A的引脚介绍2.3SPCE061A的内核结构2.4SPCE061A单片机的存储器本章小结

2.1SPCE061A简介

2.1.1SPCE061A主要性能特点

SPCE061A是凌阳科技公司继成功推出μ'nSP系列产品SPCE500A之后,又在其基础上进一步开发出来的一款新型16位机。与SPCE500A相比,SPCE061A在存储器资源方面考虑到相关用户对其需求较少以及便于程序调试等原因,芯片里只内嵌了32K字的闪存(FLASH),处理速度大幅提高,使μ'nSP能够非常容易地、快速地处理复杂的数字信号。

SPCE061A单片机具有如下特点和性能。

(1) 16位μ‘nSP处理器。

(2)工作电压(CPU)VDD为2.4~3.6 V,VDDH为2.4~5.5 V(I/O)。

(3) CPU时钟:0.32~49.152 MHz。

(4)内置2K字SRAM。

(5)内置32KFlash。

(6)可编程音频处理。

(7)内置晶体振荡器。

(8)系统处于备用状态下(时钟处于停止状态)时,耗电仅为2 μA@3.6 V。

(9) 2个10位DAC(数/模转换)输出通道。

(10) 2个16位可编程定时器/计数器(可自动预置初始计数值)。

(11) 32位通用可编程输入/输出端口。

(12)14个中断源可来自定时器、时基发生器、2个外部时钟源、触键中断等模块,其中断系统可管理多极中断。

(13)具备触键唤醒的功能。

(14)使用凌阳音频编码SACM_S240方式(2.4 kb/s),能容纳210 s的语音数据。

(15) 32 768 Hz实时时钟。

(16)锁相环PLL振荡器提供系统时钟信号。

(17) 7通道10位电压模/数转换器(ADC)和单通道声音模/数转换器。

(18)声音模/数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能。

(19)具备串行设备接口。

(20)具有低电压复位(LVR)功能和低电压监测(LVD)功能。

(21)内置在线仿真电路ICE(In-CircuitEmulator)接口,极大地简化了片外仿真器的硬件逻辑。

(22)具有不可破解的程序代码保护功能。

(23)具有看门狗(WatchDog)功能。2.1.2SPCE061A的结构

SPCE061A采用冯·诺伊曼结构,其片内的程序空间(Flash)和数据空间(RAM)是统一编址的。其结构可以分为内核、硬件外设和存储器三部分,如图2.1所示。图2.1SPCE061A的结构2.1.3SPCE061A的最小系统

SPCE061A的最小系统接线如图2.2所示,在OSCO、OSCI端接上晶振及谐振电容,在锁相环压控振荡器的阻容输入VCP端接上相应的电容电阻后即可工作。其他不同的电源端和地端接上0.1mF的去耦电容以提高抗干扰能力。图2.2SPCE061A最小系统2.1.4SPCE061A的开发方法

传统的单片机学习硬件方案是“编程器 + 开发系统 + 仿真器”,由于设备相互之间各自独立,使用者在学习或开发项目时,需要反复不停地拔插电缆、芯片、电源等,操作极其复杂繁琐。图2.3

在线调试器

SPCE061A单片机的强大功能、低廉价格以及简易方便的开发工具,使其具有巨大的市场潜力和宽广的应用领域,以下是该款单片机常应用的领域。

(1)有语音功能的仪器仪表、游戏机、智能玩具、学习机等;

(2)电表、水表、煤气表、暖气表等;

(3)智能家具控制器:空调、冰箱、洗衣机等;

(4)工业控制;

(5)智能机器人;

(6)安保产品;

(7)通信产品:多功能录音电话、数字留言机、数字语音信箱、数字免提电话;

(8)医疗设备、保健器械、体育健身器材。

2.2SPCE061A的引脚介绍

在SPCE061A芯片中,为了尽量增加片内模块的功能,一般采用引脚复用的方式,也就是大部分引脚有两种甚至多种功能。

SPCE061A的引脚可按功能分为5大类:电源类(含VDD和VSS)、时钟类(X32I和X32O)、控制类(RESET)、输入/输出类(IOA和IOB)、调试类。据此,一个单片机轮廓可以简单地用图2.4来描述。图2.4SPCE061A简单逻辑图

SPCE061A可采用PLCC84和LQFP80两种不同的封装形式。PLCC84封装以插拔的方式安装,工序较为简单,而LQFP80比较适合表面贴装的封装形式。PLCC84封装与LQFP80封装引脚排列图分别如图2.5和2.6所示。为了方便读者理解,后面的内容将围绕以PLCC84形式封装的芯片来讲述。图2.5SPCE061APLCC84封装排列图图2.6SPCE061ALQFP80封装引脚排列图

SPCE061A共有84个引脚,在PLCC84封装中,有15个空余脚,用户使用时这15个空余脚悬浮。在LQFP80封装中有9个空余脚,用户使用时这9个空余脚接地。表2.1为PLCC84封装引脚功能介绍。

2.3SPCE061A的内核结构

SPCE061A采用的是凌阳公司的μ'nSP内核。μ'nSP内核是一个通用高性能的16位内核,由总线、ALU算术逻辑运算单元、寄存器组、中断系统及堆栈等部分组成,具有4M的寻址空间,支持乘法、乘累加、除法等运算,支持多种寻址方式,拥有多个通用寄存器。其超强的功能不但拥有一些DSP具有的特征,还可以借助其通用的核结构和其他功能模块搭建成不同功能的派生产品。μ'nSP内核核心结构如图2.7所示。图2.7μ'nSP内核核心结构图2.3.1算术逻辑运算单元

μ‘nSP的ALU不仅能做基本的16位算术逻辑运算,还能做带移位操作的16位算术逻辑运算。在数字信号处理方面,也提供了高速的16位×16位乘法运算和内积(乘加)运算。

1.16位算术逻辑运算

2.结合算术逻辑的16位移位运算

3.16位 × 6位的乘法运算和内积(乘加)运算

2.3.2数据总线和地址总线

μ'nSP是16位单片机,它具有16位数据线和22位地址线。由此决定其基本数据类型是16位的“字”型,而不是8位的“字节”型,因此它的内存都是按“字”操作的,22位的地址线最多可寻址到4M字的内存空间。2.3.3寄存器组

μ'nSPCPU的寄存器组一共有8个16位寄存器,可分为通用寄存器和专用寄存器两大类别。通用寄存器包括R1~R4,作为算术逻辑运算的来源及目标寄存器。专用寄存器包括SP、BP、PC、SR,是与CPU特定用途相关的寄存器。

1.通用寄存器R1~R4(General-purposeregisters)

通用寄存器通常用作为数据运算或传送的来源及目标寄存器。寄存器R4、R3配对使用,还可组成一个32位的乘法结果寄存器MR,用于存放乘法和内积运算的结果,其中R4为MR的高字符组,R3为MR的低字符组。

2.堆栈指针寄存器SP(StackPointer)

SP是用来记录堆栈地址的寄存器,SP指向堆栈的顶端。堆栈是一个先进后出的内存结构,μ'nSP的堆栈结构是由高地址往低地址的方向来储存的。SP在CPU执行压栈/出栈(push/pop)、子程序调用/返回(call/retf)以及进入中断服务子程序(ISR,InterruptServiceRoutine)时自动减少(压栈)或增加(弹栈)来表示堆栈指针的移动。μ'nSP堆栈的大小限制在2K字的SRAM内,即地址在0x000000~0x0007FF的内存范围中。

3.基址指针寄存器BP(BasePointer)

μ'nSP提供了一种方便的寻址方式,即基址寻址方式[BP + IM6]。程序设计者可通过BP来存取ROM与RAM中的数据,包括局部变量(LocalVariable)、函数参数(FunctionParameter)、返回地址(ReturnAddress)等。这在C程序中特别有用。BP除了上述用途外,也可做为通用寄存器R5,用于数据运算传送的来源及目标寄存器。因此,BP与R5通常是共享的,均代表基址指针寄存器。

4.程序计数器PC(ProgramCounter)

和一般微控制器中的PC相同,μ'nSP的PC用来纪录程序目前执行位置的寄存器,以控制程序走向。CPU每执行完一个指令,就会改变PC的值,使其指向下一条指令的地址。在μ'nSP里,16位的PC寄存器与SR寄存器的CS字段共同组成一个22位的程序代码地址。

5.状态寄存器SR(StatusPointer)

SR内含许多字段,每个字段又有特别的用途,所以SR有多种功能。其中包含两个6位的区段选择字段:代码段选择字段(CS)、数据段选择字段(DS)。它们可与其它16位的寄存器结合在一起形成一个22位的地址,用来寻址4M字容量的内存。对于状态寄存器SR各个标志的几点总结:

(1)由于补码可以把有符号数与无符号数的运算统一起来,所以对于同一条加法或减法指令,既可以认为是有符号数运算,又可以认为是无符号数运算,只是观察的角度、判断的标准不同而已。

(2)进位标志C一般用于无符号数运算的进、借位判断。

(3) N、S的组合用于有符号数溢出的判断。

(4)有符号数的范围为-32 768~32 767,无符号数的范围为0~65 535。若为有符号数,运算前数值的正负应利用负标志N来判断,运算后结果的正负应利用符号标志S来判断。

【例2.1】R1=32767,R2=32767,求二者之和。运算后R1中的内容为0xFFFE。

若作为无符号数看待,此时C为0说明无进位产生;若作为有符号数看待,此时N!=S,则说明计算结果超出有符号数的范围,即产生溢出,另外S为0说明运算结果不为负。

【例2.2】R1=-12345,R2=-1,求二者之和。运算后R1中的内容为0xCFC6。

若作为无符号数看待,此时C为1说明有进位产生;若作为有符号数看待,此时N=S则说明无溢出产生,S为1说明运算结果为负。

【例2.3】R1=32767,R2=-12345,求二者之差。运算后R1中的内容为0xB038。

若作为无符号数看待,此时C为0说明有借位产生;若作为有符号数看待,此时N!=S说明有溢出产生,S为0说明运算结果为正。2.3.4中断系统

SPCE061A系列单片机中断系统,具有μ'nSP中断系统的风格,是凌阳16位单片机中中断功能较强的一种。它可以提供定时、时基、外部、UART以及软件中断等十四个中断源,具有两个中断优先级,可实现两级中断嵌套功能。2.3.5堆栈

堆栈既是一种特殊的存储区域,也是一种特殊的数据结构,对于SPCE061A单片机,堆栈是指在RAM地址空间中开辟的一块特殊存储器,并配有专用的堆栈指针(SP)和操作指令。堆栈的大小限制在2K字的RAM内,即地址为0x000000~0x0007FF的内存范围中。图2.8堆栈

2.4SPCE061A单片机的存储器

在学习μ'nSP内核时,我们了解到μ'nSP系列单片机能够寻址的最大空间是4 M,为配合16位的程序计数器PC寻址,我们把4M的地址空间分成64个容量为64K字的“存储段”,并由状态标志寄存器SR中的两个6位长的字段DS和CS提供段地址。2.4.1SPCE061A片内存储器结构

前面提到SPCE061A单片机最大的寻址空间是64K字,其片内存储器主要包括静态数据存储器SRAM和FLASHROM程序存储器,图2.9是SPCE061A片内存储器映射表。图2.9SPCE061A片内存储器映射表2.4.2RAM

从图2.9中可以看到SPCE061A有2K字的静态数据存储器SRAM(这其中也包括上节提到的堆栈区),其地址范围为0x0000~0x07FF。前64个字,即0x0000~0x003F地址范围内,可采用6位地址直接地址寻址方法,存取速度为2个CPU时钟周期;其余范围内(0x0040~0x07FF)内存的存取速度则为3个CPU时钟周期。本章小结

本章主要详细介绍了SPCE061A硬件结构的每个部分,它的结构也比较简单,在芯片内部集成了ICE仿真电路接口、SRAM数据存储器、通用I/O端口、定时器、计数器、中断控制、CPU时钟、模数转换器A/D、DCA输出、通用异步串行输入/输出端口、串行输入/输出接口、低电压监测/低电压复位等部分。希望读者通过本章的学习,能够更好地掌握SPCE061A单片机的硬件结构。第3章SPCE061A寻址方式及指令系统3.1基本概念3.2寻址方式3.3指令系统本章小结

3.1基本概念

3.1.1常用指令符号

为了方便阅读程序,在介绍寻址方式之前,先统一约定常用的指令符号,见表3.1。3.1.2汇编语言格式

用户要计算机完成各项任务,就要设计各种应用程序。程序设计常有三种:机器语言、汇编语言和高级语言。机器语言是计算机惟一能识别的语言,它由一组0、1二进制数组成,人们不便识别、记忆,因此很难用它来进行程序设计。高级语言是面向问题和计算过程的语言,可通用于各种不同的计算机,用户编程时不必仔细了解计算机的具体性能和指令系统。用汇编语言设计的程序具有针对性,不同的微处理器有不同的指令系统。

3.2寻址方式

3.2.1立即数寻址

立即数寻址直接包含操作数,操作数是一个6位或16位的常数,也叫立即数。6位立即数用IM6表示,范围是0x00~0x3F;16位立即数用IM16表示,范围是0x0000~0xFFFF。

【例3.1】3.2.2直接寻址

1.6位地址直接寻址

此寻址方式指令中给出的地址为6位有效地址[A6],由于只给出6位有效地址,所以只能用于第0页存储器(SPCE061A只用到第0页)的前64个字存储单元范围内寻址,指令周期短。

【例3.2】

2.16位地址直接寻址

此寻址方式指令中给出的地址为16位有效地址[A16],指令周期较6位地址直接寻址强。由于给出的是16位有效地址,所以只用于第0页存储器的64K字存储单元范围内寻址。

【例3.3】

3.22位地址直接寻址

此寻址方式指令中给出的地址为16位有效地址[A16],它是将CS代码段作为高6位地址和页内16位地址拼接而成的。其可在4 MB的存储单元范围内寻址,主要用于程序的调用与返回。3.2.3寄存器直接寻址

寄存器直接寻址是操作数存放在某个寄存器中,寄存器名称由指令指出。

【例3.4】

R2=R1+0x20003.2.4寄存器间接寻址

寄存器间接寻址是操作数的地址由寄存器给出,寄存器需用“[]”括起来,其格式为{D:}[Rs]。省略D,Rs指向0页存储器单元;不省略D,由寄存器Rs和段寄存器SR中的数据段DS共同指向存储单元。DS的值确定存储器的页码,然后再根据Rs的值寻址。由于SPCE061A地址只涉及到0页,故以后省略D。

【例3.5】

1.寄存器前置增量间接寻址

【例3.6】

R1=[++R3]

假设执行指令前R3中的内容为0x1000,该指令是先将R3的内容加1,即0x1000加1,得0x1001,再把0x1001地址中的内容存放到R1中。指令执行完后,R3的值变为0x1001。

2.寄存器后置增量间接寻址

【例3.7】

R1=[R3++]

同样假设执行指令前R3中的内容为0x1000,该指令是先将0x1000地址中的内容存放到R1中,再把R3的内容加1,即0x1000加1,得0x1001。指令执行完后,R3的值变为0x1001。

3.寄存器后置减量间接寻址

【例3.8】

R1=[R3--]

同样假设执行指令前R3中的内容为0x1000,该指令是先将0x1000地址中的内容存放到R1中,再把R3的内容减1,即0x1000减1,得0x0FFF。指令执行完后,R3的值变为0x0FFF。3.2.5变址寻址

【例3.9】

R1=[BP+0x30]

若BP的内容为0x1000,该指令执行的操作是将0页存储器0x1030的内容存放到寄存器R1中。3.2.6PC相对寻址

PC相对寻址主要用于跳转指令中,并且是短跳转。根据寄存器SR中标志段的4个标志位(NZSC)来作为程序跳转的条件。若条件满足则跳转到相关的地址上,其跳转范围是根据6位的相对偏移量来决定的,因此跳转范围限制在PC + 63个字,往前往后均最多跳63个字。

3.3指令系统

3.3.1数据传送类指令

数据传送类指令是把源操作数传送到指令所指定的目标地址。数据传送操作属复制性质,而不是搬家性质。指令执行后,源操作数不变,目的操作数被源操作数代替。通用格式是:

<目的操作数>=<源操作数>

1.立即数寻址

立即数寻址分6位和16位立即数寻址,格式:Rd=IM6和Rd=IM16,执行后将6位或16位立即数存入目的寄存器Rd中。

【例3.10】

R1=0x20

//将6位的立即数0x20送入寄存器R1

R1=0x1FFF//将16位立即数0x1FFF送入寄存器R1

2.寄存器直接寻址

寄存器直接寻址的格式为Rd=Rs,将源寄存器Rs中的内容存入目的寄存器Rd中。

【例3.11】

R1=R2

若执行前R2=0x2000,执行后将此数据存入R1,R1=0x2000。

3.寄存器间接寻址

寄存器间接寻址格式为[Rd]=Rs,将Rs的数据存入到以Rd的值作为地址的单元中。

【例3.12】

[++R3]=R1

4.直接地址寻址

该寻址方式有6位和16位两种。例如:

5.变址寻址

该寻址方式有两种寻址格式:

6.堆栈操作

堆栈操作也属于一种特殊的数据传送指令,其通过两条指令PUSH和POP来完成压栈与出栈操作。将多个寄存器同时压栈时,总是序号最高的寄存器先压栈,然后依次压入序号较低的寄存器,直到序号最低的寄存器最后入栈。所以,执行指令“PUSHR1,R4TO[SP]”与指令“PUSHR4,R1TO[SP]”是等效的,都是先压入R4,再依次R3、R2、R1。堆栈指令格式为:

PUSHRx,RyTO[SP]

POPRx,RyFROM[SP]

PUSHRxTO[SP]

POPRxFROM[SP]

【例3.13】

PUSHR2,PCTO[SP]图3.1PUSHR2,PCTO[SP]执行过程示意图【例3.14】

POPR2,PCFROM[SP]图3.2POPR2,PCFROM[SP]执行过程示意图3.3.2算术运算类指令

1.不带进位的加法指令ADD

加法运算中,被加数X可以是目的寄存器或源寄存器,加数Y可以是6种寻址方式中的任何一种,其运算结果存放到目的寄存器Rd中。表3.3是ADD运算的指令表。【例3.15】

R1+=[++R3]

该指令功能是先将R3加1,然后R1中的数据与R3中的内容作为地址所指向的单元中的数据相加,结果存放到R1中。

2.带进位的加法指令ADC

带进位的加法指令与不带进位的加法指令的唯一区别是执行加法时进位标志也参与加法运算,即Rd=X+Y+C,其余完全相同。

3.减法指令SUB与SBC

减法运算中,被减数X可以是目的寄存器或源寄存器,减数Y可以是6种寻址方式中的任何一种,其运算结果X-Y的差存放到目的寄存器Rd中。减法运算有不带进位的减法和带进位的减法两种,两者唯一的差别只是是否有进位参与运算。表3.5和3.6是这两种减法的指令表。【例3.16】

R1-=[R4--]

这是一条不带进位的减法指令,先将寄存器R1中的数据减去由R4中的值作为地址所指向的单元中的数据,结果存放于R1中,然后寄存器R4中的值再减1,即(R4)-1→(R4)。【例3.17】

求0x1000、0x1001单元数据的差值(不考虑进位C),结果存放于R1中。

R2=0x1000 //地址指针

R1=[R2++] //取0x1001单元的数据

R1-=[R2] //求差,结果存放到R1内【例3.18】

R2=R1-[0x1000],Carry

这是一条带进位的减法指令,执行(R1)-(0x1000)-C,所得结果存放到R2内。

4.求补指令

求补指令为NEG,求一个数的补码相当于执行(-X)+1操作,即将被求数据X进行取反后加1运算,操作结果存放于目的寄存器Rd中。求补指令可以采用6种寻址方式中的任何一种,表3.7给出了所有求补指令。【例3.19】

求-600与0x06FF单元的数据差,结果存放到R1中。

R1=-600

BP=0x06FF //地址指针

R2=-[BP] //求0x06FF的补码

R1+=R2 //相加,结果送入R1

5.乘法运算指令MUL

乘法运算分为有符号数乘法和无符号数乘法两种,乘法指令只能采用寄存器寻址,且Rd、Rs只能采用R1~R4、BP(R5),不采用SP、SR、PC,是为了避免误用,以及提供弹性给新版指令集作扩充。表3.8给出了有符号数乘法和无符号数乘法运算的指令格式、指令周期等。

1)有符号数乘法

MR=Rd*Rs{,ss}

2)无符号数和有符号数乘法

MR=Rd*Rs,ss

【例3.20】

计算一年(365天)共有多少小时,结果存放到R4(高位)R3(低位)中。

6.n项内积指令MULS

SPCE061A除了提供乘法指令外,还提供速度较快的n项内积指令MULS,使得其具有一定的数字信号处理(DSP)功能。表3.9列出了内积指令的格式。

1)有符号内积

MR=[Rd]*[Rs]{,ss}{,n}图3.3内积运算操作过程示意图

【例3.21】

2)无符号内积

MR=[Rd]*[Rs],us{,n}

7.比较指令

比较指令是两个数进行比较的指令。比较运算执行两数的减法操作,不存储运算结果,只影响标志位N、Z、S、C。比较指令主要用于判断,然后实现条件转移。表3.10为比较指令格式表。【例3.22】

CMPR1,[BP+0x08]

//比较R1,[BP+IM6]

JELabel_1

//若R1=[BP+0x08],则跳转

到Label_13.3.3逻辑运算与移位类指令

1.逻辑与、或、异或指令

这三条指令的语法格式、指令周期以及影响的标志位完全相同,在此一起介绍,表3.11为三者的指令格式。【例3.23】假设开始时的标志位为:N=0,Z=1,S=0,C=1。

2.测试指令

测试指令(TEST)对两个操作数进行逻辑与操作,即X&Y,不改变X、Y的值,结果不写入寄存器,仅影响N、Z标志位。

测试的数X、Y一个是寄存器(目的寄存器Rd或源寄存器Rs),另一个可是六种寻址方式中的任一种。表3.12为所有测试指令。【例3.24】假设开始时的标志位为:N=0,Z=1,S=0,C=1。

3.移位指令

SPCE061A的移位运算包括逻辑左移(LSL)、逻辑右移(LSR)、循环左移(ROL)、循环右移(ROR)、算术右移(ASR)等操作。在移位的同时还可进行其他运算,如加、减、求补、与、或、异或、测试,指令长度为1,指令周期为3/8。由于硬件原因,对于移位操作,每条指令可以移1~4位。表3.13为其指令格式。

1)逻辑左移(LSL)

逻辑左移的基本格式为Rd=RsLSLn,该指令对Rs进行n(可设为1~4)位逻辑左移,将Rs高n位移入SB寄存器,同时Rs的低n(1~4)位用0补足,结果送入Rd寄存器。假设n=3,其操作过程如图3.4所示。图3.4逻辑左移操作过程【例3.25】

R1=0xF11F//移位前R1的初值为0xF11F

R1=R1LSL3

//R1逻辑左移3位后值变为0x88F8

2)逻辑右移(LSR)

逻辑右移的基本格式为Rd=RsLSRn,该指令对Rs进行n(可设为1~4)位逻辑右移,将Rs低n位移入SB寄存器,同时Rs的高n(1~4)位用0补足,结果送入Rd寄存器。假设n=3,其操作过程如图3.5所示。图3.5逻辑右移操作过程

3)循环左移(ROL)

循环左移的基本格式为Rd=RsROLn,该指令对Rs进行n(可设为1~4)位循环左移,将Rs高n位移入SB寄存器,同时将SB寄存器的高n位移入Rs的低n位,结果送入Rd寄存器。假设n=1,其操作过程如图3.6所示。图3.6循环左移操作过程

【例3.26】

R1=0xF11F//移位前R1的初值为0xF11F

R1=R1ROL1

//R1循环左移1位后值变为0xE23F

4)循环右移(ROR)

循环右移的基本格式为Rd=RsRORn,该指令对Rs进行n(可设为1~4)位循环右移,将Rs低n位移入SB寄存器,同时将SB寄存器的低n位移入Rs的高n位,结果送入Rd寄存器。假设n=1,其操作过程如图3.7所示。图3.7循环右移操作过程【例3.27】

R1=0xF11F//移位前R1的初值为0xF11F

R1=R1ROR1//R1循环右移1位后值变为0xF88F

5)算术右移(ASR)

算术右移的基本格式为Rd=RsASRn,该指令对Rs进行n(可设为1~4)位算术右移,将Rs低n位移入SB寄存器,并对其符号位(最高位)进行扩展,结果送入Rd寄存器。该指令适合对所有有符号数的移位操作。假设n=3,其操作过程如图3.8所示。图3.8算术右移操作过程【例3.28】【例3.29】3.3.4控制转移类指令

表3.14为控制转移类指令表。

1.软件中断

软件中断为单字指令,助记符为BREAK,采用16位直接地址寻址方式,指令周期为13,不影响标志位,功能是产生软件中断请求,使CPU转到软件中断服务程序中去。软件中断服务程序的入口地址为[0x00FFF5],该地址固定,不得作其他用。

2.程序转移指令

程序转移指令分为近转移和远转移,又称相对转移和绝对转移。近转移时PC值只能在PC+63个字的范围内跳转(即前进或后退63个字);远转移则在页内64K个字的范围内跳转。【例3.30】条件转移。【例3.31】无条件转移。

3.子程序调用和返回指令

子程序调用指令用于从指定的代码段调用子程序,采用22位直接地址[A22]寻址方式,因此,该指令可以从整个64页代码的程序存储空间内调用任何指定的子程序。其助记符为CALL。子程序返回指令和CALL对应,表示子程序已结束,需返回主程序,同样采用22位直接地址[A22]寻址方式,助记符为RETF。

子程序返回过程:弹出调用子程序时压入的段寄存器SR和程序指针PC,使程序从调用CALL的下一条指令处开始继续执行主程序。

【例3.32】

4.中断返回指令

从中断服务子程序返回时须用RETF或者RETI指令从栈中弹出状态寄存器SR和程序指针PC的值。由于弹栈动作发生在本指令执行之后,故弹栈后SR和PC的值应分别与进入中断服务子程序之前二者的值相同。【例3.33】

5.功能设置类指令

1) FIR_MOV

该指令用来控制允许或禁止FIR滤波器运算过程中数据的自动移动。由于这会影响到FIR滤波器运算的状态,且此状态具有全局性质,因此用在中断服务子程序时要格外小心。

只有如下两条:

2) FIQ

该指令用来允许或禁止快速中断请求(FIQ),只有如下两条:

FIQON //允许FIQ中断

FIQOFF //禁止FIQ中断

3) IRQ

该指令用来允许或禁止中断请求(IRQ),只有如下两条:

IRQON //允许IRQ中断

IRQOFF //禁止IRQ中断

4) INT

该指令用来设置允许或禁止FIQ和IRQ中断的标志。具体如下:

5) NOP

该指令为空操作,是对CPU的控制指令,执行时机器不作任何操作,而转向下一条指令去执行,不影响任何寄存器和标志位,通常用于精确延时或等待。

【例3.34】3.3.5伪指令

阅读一些SPCE061A单片机的源程序开始段,会发现有一些特殊指令助记符,这些助记符与指令系统的助记不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令。为与汇编指令区别,伪指令前加一圆点。

1)定义类伪指令

定义类伪指令主要用于对段、程序数据性质等进行定义。

(1) CODE、DATA、TEXT。

【例3.35】

.CODE

.PUBLIC_MAIN;

_MAIN:

【例3.36】

.DATA

tone_table:.DW5,8,6,9,3,8,0;【例3.37】

.TEXT

.PUBLIC_IRQ0

.PUBLIC_IRQ1

.PUBLIC_IRQ2

_IRQ0://中断子程序入口

PUSHR1,R5to[SP]

(2) IRAM、ISRAM、ORAM、OSRAM、RAM、SRAM。

IRAM段用来存放具有初始值的变量。此段亦不可跨bank链接,且在链接时所有与其同名或同属性的各段都会被合并在一起,将会同时被分配空间于ROM及RAM中。

ISRAM段与IRAM段的性质基本相同,区别是ISRAM段在RAM中只能被分配在前面64(0~63)个字的数据单元。

下面给出各自的定义格式。

(3) MACRO、MACEXIT、ENDM。

MACRO伪指令用来起始宏定义,ENDM伪指令则用来结束宏定义,二者应成对使用。从宏定义里退出是立即且无条件的,MACEXIT伪指令并非用来终止宏定义,它常与条件汇编用在一起,条件满足时从宏定义里退出,对ENDM伪指令后面的指令进行汇编;条件不满足时,继续汇编MACEXIT伪指令后的宏定义内的其它指令。不必担心从宏里退出时条件会失衡,因为MACEXIT伪指令会自动将条件恢复到原来的均衡状态。下面给出各自定义格式。【例3.44】

Personal_info:.MACROarg1,arg2,arg3

Name:.DWarg1

Age:.DWarg2

.ENDM【例3.45】

eserve:.MACROarg1,arg2

.VARarg1

.IFcount

.MACEXIT

.ENDIF

.VARcount–1

.ENDM

(4) PROC、ENDP、STRUCT、ENDS。

PROC伪指令用于起始程序的定义,ENDP用来结束程序定义,两者成对使用;STRUCT伪指令用于起始结构的定义,ENDS用来结束结构定义,两者成对使用。下面给出各自定义格式。

(5) DEFINE、VAR、PUBLIC、EXTERNAL、EQU、VDEF。

DEFINE用来定义常量符号,给常量符号所赋之值既可以是一个已定义过的常量符号,也可以是一个表达式。切忌符号超前引用,即如果赋值引用的符号不是在引用前定义的,则会出现“非法超前引用”的错误。【例3.48】

.DEFINEBODY1;

.DEFINEIO_PORT0x7016;

.IFDEFBODY;

R1=0xFFFF;

[IO_PORT]=R1;

.ENDIF【例3.49】

.RAM

.VARs1,s2,s3; //无赋初值【例3.52】

label:.EQU10

VDEF用来为标号赋值,它可以在程序的任何部位为标号重复赋值。

【例3.53】

int0:.VDEF0x005F

2)存储类伪指令

存储类伪指令以指定的数据类型存储数据或设定程序地址等。数据类型包括DW、DD、FLOAT、DOUBLE、END等。表3.16为各数据类型的字长及值域。

(1) DW、DD、FLOAT、DOUBLE。

DW用来指示以16位整型数据的形式来存储常量或变量;DD用来指示以32位长整型数据的形式存储双字常量或变量;FLOAT用来指示以单精度浮点型实数数据单元来存储实数常量或变量;DOUBLE用来指示以双精度浮点型实数数据的形式存储实数常量或变量。

(2) END。

END用来结束程序文件或结束包含文件,本伪指令用在程序文件中意味该文件结束(不可再包含其它文件)。

3)存储定义类伪指令

DUP用来定义若干指定数据类型的数据存储单元,与DW、FLOAT、DD、DOUBLE存储类伪指令组合在一起用于存放若干个具有相同数值的常量;或者申请若干个备用的整型、单精度浮点型、长整型以及双精度浮点型数据单元。

4)条件类伪指令

条件类伪指令包括IF、ELSE、ENDIF、IFMA、IFDEF、IFNDEF,共6个。

IF指令引出在条件汇编结果为真时所要汇编的程序指令。ELSE引出IF伪指令设置的条件汇编结果为假时所要汇编的程序指令,它必须与IF伪指令结合使用。ENDIF用来结束条件汇编组合的定义,也必须与IF伪指令成对使用。

5)汇编方式类伪指令

该类伪指令包括两条:INCLUDE和SECTION。INCLUDE指令的作用是在汇编文件里包含某个文件。SECTION指令的作用是用来创建用户定义段,创建段的属性参量attribute可以是以下预定义段名当中的任意一个:CODE、DATA、TEXT、RAM、SRAM、IRAM、ISRAM、ORAM、OSRAM。3.3.6宏定义与调用

1.宏定义

宏(Macro)是指在源程序里将一序列的源指令行用一个简单的宏名(MacroName)所取代。这样做的好处是使程序的可读性增强。

2.宏标号

宏定义里可以用显式标号(由用户定义),亦可用隐含标号(由汇编器自动定义)。汇编器不会改变用户定义的显式标号。在宏标号后加上后缀符‘#’则表明该标号为隐含标号,汇编器会自动生成一个后缀数字符号‘_X_XXXX’(X表示一位数符,XXXX表示4位扩展数符)来取代这个隐含标号中的后缀符‘#’,如例3.65所示。隐含标号中的字母字符及其后缀数符总共不能超过32个字符。

3.宏调用

在调用宏时,可以使用任何类型的参数:直接型、间接型、字符串型或寄存器型。只有字符串型参数才能含有空格,但必须用引号将此空格括起,即‘’或“”(而字符串参数中的单引号,必须用双引号将其括起,即“‘”)。只要在宏嵌套中的形参名相同,则这些参数就可以穿过嵌套的宏使用。宏嵌套使用唯一所受的限制是内存空间的容量。宏的多个参数应以逗号隔开,参数前的空格及Tab键都将被忽略。单有一个逗号,而后面未带有任何参数时会被汇编器表示为参数丢失错误。

4.宏参数分隔符

在一个宏体中,宏参数的有效分隔为标点符号中的逗号,即“,”。

5.宏内字符串连接符

符号‘@’(40H)是字符串连接符。注意,字符串连接只能在宏内进行。

6.助记符搜索顺序

通常,汇编器以表3.17列出的顺序来搜索各种助记符或符号。

7.宏应用举例

【例3.66】数的比较。【例3.67】将标号名传入程序代码。3.3.7段的定义与调用

1.预定义段

在Xasm16里共定义有9个预定义段:CODE、DATA、TEXT、ORAM、OSRAM、RAM、IRAM、SRAM及ISRAM段。这些预定义段都分别被规定了以下内容:

(1)段内存储数据类型:指令/数据、无初始值的变量/有初始值的变量;

(2)存储介质类型:ROM/RAM(SRAM);

(3)存储范围:零页(或零页中前64个字)或当前页/整个64页;

(4)定位排放方式:合并排放/重叠排放。

2.用户定义段

为了使程序在链接时具有更大的灵活性,用户可以用伪指令.SECTION来定义段。定义的段名最多不可超过32个字符,且最多可定义4096个段,但不可嵌套使用。用户段定义的格式为:

label:.SECTION.attribute3.3.8结构的定义与调用

1.结构的定义

结构作为一种数据构造类型在μ‘nSP汇编语言程序中也要经历定义—说明—使用的过程。在程序中使用结构时,首先要对结构的组成进行描述,即结构的定义。定义的一般格式如下:

结构名:.STRUCT //定义结构开始数据存储类型定义

.ENDS //定义结构结束结构的定义以伪指令 STRUCT和ENDS作为标识符。结构名由用户命名,命名原则与标号等相同。在两个伪指令之间包围的是组成该结构的各成员项数据存储类型的定义。例如:

2.结构变量的定义——结构的说明

某个结构一经定义后,便可指明使用该结构的具体对象,这被称为结构的说明,其一般形式如下:

结构变量名:.结构名[结构成员表]

其中[结构成员表]用来存放结构变量中成员的值。例如:

3.结构变量的引用

结构是不同数据类型的若干数据变量的集合体。在程序中使用结构时不能把结构作为一个整体来参加数据处理,参加各种运算和操作的应是结构中各个成员项数据。结构成员项引用的一般形式为:

结构变量名.成员名例如:

R1+=[stru_var1.ad]

//'stru_var1'是一个定义过的结构变量,'ad'是它的一个成员3.3.9过程的定义与调用

1.过程的定义

过程的定义就是编写完成某一功能的子程序块,用伪指令PROC和ENDP作为定义的标识符。定义的一般格式如下。

2.过程的调用

在程序中调用一个过程时,程序控制就从调用程序中转移到被调用的过程,且从其起始位置开始执行该过程的指令。在执行完过程体中的各条指令并执行到RETF指令时,程序控制就返回调用过程时原来断点位置,继续执行下面的指令。过程调用的一般格式为:

CALL过程名图3.9SPCE061A片内存储器映射本章小结

本章主要对SPCE061A单片机的寻址方式和指令系统进行了阐述。由于SPCE061A采用μ'nSP的指令系统,因此μ'nSP的指令集完全适用于SPCE061A单片机,本章就是对μ'nSP的指令集的介绍。寻址方式通过对几种不同方式加以介绍而展开。第4章SPCE061A单片机硬件结构4.1SPCE061A输入/输出接口4.2系统时钟4.3定时器/计数器4.4A/D转换器4.5D/A转换器4.6通用异步串行通信口UART4.7工作方式本章小结

4.1SPCE061A输入/输出接口

4.1.1I/O接口结构及工作原理

SPCE061A单片机共有2组通用I/O端口:IOA和IOB,每组16位。I/O端口除了用做外设的输入、输出,还是片内定时器、UART、ADC等模块的输入/输出接口。

SPCE061A单片机的I/O结构如图4.1所示。图中读引脚和读Buffer端连接的小三角形为输入缓存,用来整形外部的模拟信号为数字信号0或1,然后读入I/O寄存器。图中的大三角形则为输出缓存,是三态门,用来放大输出信号。图4.1I/O结构图图4.2上拉电阻、下拉电阻示意图图4.3上拉、下拉输入方式结构图图4.4悬浮输入结构图图4.5带缓冲的同相输出端口结构图4.1.2I/O接口控制寄存器

SPCE061A单片机的I/O端口主要有4个控制寄存器:方向寄存器、属性寄存器、缓冲寄存器和数据寄存器。表4.1为I/O端口的寄存器功能说明表。

1.P_IOA_Dir(0x7002)

IOA的方向寄存器。用于设定IOA各I/O位的输入或者输出。当某一位为“1”时,对应的I/O位被设为输出;当某一位为“0”时,对应的I/O位被设为输入。

2.P_IOA_Attrib(0x7003)

IOA的属性寄存器。它同P_IOA_Dir和P_IOA_Buffer相互配合可以将I/O设为不同的输入输出属性,具体的设置可以参照表4.2。

3.P_IOA_Buffer(0x7001)

IOA的缓冲寄存器。用于配合P_IOA_Dir、P_IOA_Attrib寄存器完成端口配置,或者向端口发送数据。当某一位为“1”且对应的I/O位已被设置为同相输出时,该I/O位将会输出高电平,若对应的I/O位已被设置为反相输出,则该I/O位将会输出低电平,若对应的I/O位已被设置为非悬浮的输入,则该I/O位将会被设置为带上拉电阻输入;当某一位为“0”且对应的I/O位已被设置为同相输出时,该I/O位将会输出低电平,若对应的I/O位已被设置为反相输出,则该I/O位将会输出高电平,若对应的I/O位已被设置为非悬浮的输入,则该I/O位将会被设置为带下拉电阻输入。

4.P_IOA_Data(0x7000)

IOA的数据寄存器。该寄存器通常用于读取端口的电平状态。寄存器写:该寄存器写作用同P_IOA_Buffer寄存器写。寄存器读:读取结果为对应I/O管脚的电平状态(管脚电平为高则读回值为“1”,管脚电平为低则读回值为“0”)。

5.P_IOB_Dir(0x7007)

IOB的方向寄存器。该寄存器的功能同P_IOA_Dir。

6.P_IOB_Attrib(0x7008)

IOB的属性寄存器。该寄存器的功能同P_IOA_Attrib。

7.P_IOB_Buffer(0x7006)

IOB的缓冲寄存器。该寄存器的功能同P_IOA_Buffer。

8.P_IOB_Data(0x7005)

IOB的数据寄存器。该寄存器的功能同P_IOA_Buffer。4.1.3I/O接口操作

SPCE061A单片机I/O端口的每一位都可以通过编程独立地设置为上拉输入、下拉输入、悬浮输入、同相输出或反相输出中的任一种。具体的设置参考表4.2。【例4.1】按以下要求设置端口A:IOA[15:12]下拉输入;IOA[11:8]悬浮输入;IOA[7:4]同相输出,且输出高电平;IOA[3:0]反相输出,且输出低电平。【例4.2】采用SPCE061A实现以下功能:IOA[7:0]外接8个按键,IOB[7:0]外接8个LED,当IOA口有键按下时在IOB对应位的LED显示,如图4.6所示。图4.6硬件原理图【例4.3】IOA0外接LED,每隔一定时间翻转IOA0的输出状态,使该LED秒闪烁。硬件电路原理图如图4.7所示。图4.7硬件电路原理图

1.IOA的复用功能

IOA端口主要具有的复用功能为按键唤醒和AD输入通道。具体复用情况如表4.3所示。

2.IOB的复用功能

IOB端口主要具有的复用功能为UART接口、SIO接口、Feedback接口和外部中断输入。具体复用情况如表4.4所示。4.1.4I/O接口应用注意事项

单片机的I/O接口的控制字很多,工作状态也很多。只有很好地理解这样设计I/O口的原因和I/O口芯片各个功能相互之间的影响,才能很好地使用I/O口。

4.2系统时钟

4.2.1时钟电路

单片机是按时钟一拍一拍工作的,因此CPU一定要有时钟电路。单片机内部结构中包括选频放大器及振荡电路,当外接晶体从输入端输入振荡信号时,就形成振荡。时钟电路由输入端和输出端引到芯片外部。当外接晶体时,外部还要接两个电容到地。当输出端产生与晶体一样频率的正弦波形,其峰峰值为1 V左右时,说明电路已经起振了。4.2.2锁相环振荡器

PLL 电路的作用是将系统提供的实时时钟的基频(32768 Hz)进行倍频,调整至49.152 MHz、40.96 MHz、32.768 MHz、24.576 MHz或20.48 MHz。系统默认的PLL自激振荡频率为24.576 MHz。PLL电路框图如图4.8

所示。图4.8PLL电路框图4.2.3系统时钟

SPCE061A时钟电路采用晶体振荡器。图4.9为SPCE061A时钟电路的接线图。外接晶振采用32 768 Hz。

PLL电路的作用是将系统提供的实时时钟的基频(32 768 Hz)进行倍频,输出系统时钟Fosc。SPCE061A片内集成了PLL电路,只需在外围接上简单的电路就可以使片内PLL电路正常工作了,如图4.10所示。图4.9SPCE061A时钟电路的接线图

图4.10PLL电路4.2.4时间基准信号

SPCE061A内嵌时间基准信号发生器,简称时基。该模块通过一个计数器对32 768 Hz时钟信号进行分频,一共产生12个可操作时基信号:4 kHz、2 kHz、1 kHz、512 Hz、256 Hz、128 Hz、64 Hz、32 Hz、16 Hz、8 Hz、4 Hz、2 Hz。该部分的结构如图4.11所示。图4.11时基模块结构图图4.122 Hz时基工作时序图

1.控制寄存器

1) P_Timebase_Setup(0x700E)

P_Timebase_Setup为TMB1和TMB2时基输出选择位。8~1024 Hz区间的时基信号(1024 Hz例外)没有像其他的时基信号一样独立对应中断,这8个时基信号只能通过多路开关选择性输出。其中8 Hz、16 Hz、32 Hz、64 Hz被分配在TMB1,可以通过TMB1SEL选择四者之一;128 Hz、256 Hz、512 Hz、1024 Hz被分配在TMB2,可以通过TMB2SEL选择四者之一。表4.8表示P_Timebase_

Setup单元。

2) P_Timebase_Clear(0x700F)

P_Timebase_Clear为时基清除控制寄存器。通过向该寄存器写入任意数值,将时基计数器清零,以保证产生的第一个时基信号准确(正常输出周期的1/2)。表4.9为P_Timebase_Clear单元。

2.操作

时基的使用一般采取中断形式,因为时基本身是作为中断源出现并通过中断标志位反映出来的。时基的使用包括时基的初始化操作和时基的中断服务。

1)时基的初始化

时基的初始化包括时基的选择、时基中断的允许和时基同步。图4.13时基初始化流程图

2)时基的中断服务

时基的中断服务包括中断现场保护、中断源识别、中断处理、清中断标志、恢复现场和中断服务函数的返回。

【例4.4】IOA0外接LED,利用2 Hz时基中断使该LED秒闪烁。硬件电路原理图如图4.14所示。图4.14硬件电路原理图

4.3定时器/计数器

4.3.1定时器/计数器的结构

SPCE061A内嵌两个16位定时器/计数器:TimerA和TimerB。图4.15TimerA结构图图4.16TimerB结构图4.3.2定时器/计数器的工作方式

1.控制寄存器

1) P_TimerA_Ctrl(0x700B)

TimerA控制寄存器P_TimerA_Ctrl用于TimerA的计数时钟源选择以及PWM输出控制。表4.10为P_TimerA_Ctrl单元。

2) P_TimerA_Data(0x700A)

P_TimerA_Data为TimerA的数据寄存器。写该寄存器用于对TimerA赋计数初值,读该寄存器的结果为当前的计数值。

3) P_TimerB_Ctrl(0x700D)

P_TimerB_Ctrl为TimerB控制寄存器。该寄存器用于TimerB的计数时钟源选择,以及TimerB的PWM输出控制。表4.11为P_TimerB_Ctrl单元。

4) P_TimerB_Data(0x700C)

P_TimerB_Data为TimerB的数据寄存器。写该寄存器用于对TimerB赋计数初值,读该寄存器的结果为TimerB内部计数器当前的计数值。

2.操作

TimerA/B用作定时操作,首先根据定时范围和定时公式确定时钟源和计数初值。然后将计数初值送入P_TimerA/B_Data寄存器,并通过P_TimerA/B_Ctrl寄存器选择对应的时钟源。图4.17TimerA/B定时/计数初始化流程【例4.5】利用TimerA实现0.5 s延时,并控制IOA0外接的LED,使该LED秒闪烁。其硬件电路原理图如图4.18所示。图4.18电路原理图要实现0.5 s延时可以通过多种时钟源实现,这里采用4096 Hz时钟源,由定时公式可得计数初值为【例4.6】利用TimerB进行外部计数,计数脉冲通过I

温馨提示

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

评论

0/150

提交评论