Freescale单片机原理与设计(TPM模块应用编程)

合集下载

freescale单片机程序设计

freescale单片机程序设计

(5)FDB 双字节常数定义命令 格式:(标号)FDB表达式(,表达式,…表达式) FDB命令可以有一个或多个操作数,由“,”隔开。与FCB命令不 同的是,FDB命令中每一个操作数是16位的,将16位操作数存入目 标地址,高位字节在前,低字节在后(这一点与Intel系列单片机 的存放顺序恰好相反)。标号被赋予第1个操作数的首地址值。其 中操作数可以是数字常数,字符常数,符号或表达式。若有多个 操作数,且两分隔符中有空操作数,则系统则默认为2个字节的0。 例如:LED FDB $1000,,$2000 表示将值$1000,$0000,$2000存入标号为LED开始的存储单元中
软件编译和仿真调试。采用各种显示手段,尽量对程序进行比较完整 的测试,不把问题遗留到硬件仿真和脱机验证阶段阶段。
开始编程?
一. 分析问题:任务是什么?工作过程(顺序)?现有条件(硬件结构)、已知数据、 运算精度、处理速度等。
二. 确定算法:将实际问题转化为程序处理模块。 三 . 画程序流程图:
操作数形式 无
<表达式> #<表达式> <表达式>,X <表达式>,<表达式> <表达式>,<表达式>,<表
达式>
寻址方式 累加器或隐含寻址 直接,扩展或相对寻址
立即数寻址 变址寻址
位置1或清零 位测试并转移
S08允许使用的运算符及其含义如下图:
符号 + — * / % | ^ &
含义 加 减 乖 除
计算机只能识别机器码——二进制数据,指令助记符和 十六进制编码,是为了便于人们理解和记忆。 汇编程序:用助记符以及符号地址或标号书写的程序 , 就称为“汇编源程序”,只有经过汇编程序翻译成机器 码才能执行,这个翻译过程就称之为“汇编”。

freescale hcs08单片机原理及应用

freescale hcs08单片机原理及应用

freescale hcs08单片机原理及应用单片机作为计算机科学领域重要的嵌入式系统组成部分,广泛应用于各个领域,其中Freescale HCS08单片机以其高性能、低功耗和易于开发等特点备受关注。

本文将介绍Freescale HCS08单片机的原理以及其应用。

一、Freescale HCS08单片机原理Freescale HCS08单片机采用基于哈佛结构的8位微处理器单元,具有高速运算能力和丰富的外设接口,能够满足不同领域的需求。

其核心原理包括指令集、片内存储器、时钟系统和外设接口等。

1. 指令集Freescale HCS08单片机的指令集丰富多样,包括数据传送、算术逻辑、位操作、条件转移和中断等多种类型的指令。

指令执行的速度快,能够满足实时性要求高的应用场景。

2. 片内存储器HCS08单片机内部集成了存储器单元,包括程序存储器ROM和数据存储器RAM。

ROM用于存储程序和常量,RAM用于存储变量和中间结果。

片内存储器的设计使得单片机具有较高的存储容量和读写速度。

3. 时钟系统Freescale HCS08单片机的时钟系统采用晶体振荡器作为基准时钟源,通过分频和锁相环等技术生成系统时钟。

时钟系统的设计能够提供稳定的时钟信号,确保单片机的正常运行。

4. 外设接口HCS08单片机提供了多种外设接口,包括通用输入输出引脚、定时器/计数器、串行通信接口等。

通过这些外设接口,单片机可以与外部设备进行数据交换和通信,实现各种功能。

二、Freescale HCS08单片机应用Freescale HCS08单片机在各个领域都有广泛的应用,如工业控制、汽车电子、家电控制、医疗设备等。

以下将介绍几个常见的应用案例。

1. 工业控制Freescale HCS08单片机在工业控制中扮演重要角色。

它能够实现对温度、压力、流量等参数的监测和控制,实现自动化生产线的稳定运行。

同时,单片机的高可靠性和抗干扰能力,使得它能够适应各种恶劣的工业环境。

S08_06_Freescale HCS08单片机ADC编程应用【freescale 单片机原理及应用】

S08_06_Freescale HCS08单片机ADC编程应用【freescale 单片机原理及应用】

6.2 功能描述
• ADC时钟选择和分频控制
无论选定哪一个时钟源,其频率必须处在ADCK的许可频率范围之内: > ADLPC = 0 时,0.4MHz < fADCK < 4MHz > ADLPC = 1 时,0.4MHz < fADCK < 8MHz
Slide 15
Copyright © Yang Ming. 2010. Electronics and Information Engineering Department of Huazhong University of Science and Technology Wuhan, Hubei 430074, P.R. China
Slide 10
Copyright © Yang Ming. 2010. Electronics and Information Engineering Department of Huazhong University of Science and Technology Wuhan, Hubei 430074, P.R. China
进一步认识“对MCU外部管脚/内部模块的控制正是 通过Regs的控制来实现”
Slide 1
Copyright © Yang Ming. 2010. Electronics and Information Engineering Department of Huazhong University of Science and Technology Wuhan, Hubei 430074, P.R. China
6.2 功能描述
• ADC管脚允许
3个8位管脚控制寄存器APCTL1、APCTL2、APCTL3(Pin Control Registers) 用于禁止被用作模拟输入的I/O管脚的端口控制。 > 当ADPCx=0时,允许相应管脚的I/O控制,即管脚不作为ADC通道; > 当ADPCx=1时,禁止相应管脚的I/O控制,即管脚作为ADC通道; 。

S08_08_Freescale HCS08单片机键盘模块编程应用

S08_08_Freescale HCS08单片机键盘模块编程应用

6.2 内部结构及功能
• 在任何KBI输入管脚上检测到边沿/电平事件时,KBF状态位变为1。如果此
时KBIE位为1,将产生一个硬件中断。
KBIE = 0,禁止KBI中断; KBIE = 1,允许KBI中断
tIHIL IRQ/KBIP7-KBIP4 管脚
IRQ/KBIPx 管脚 tILIH
Slide 8
33 32 31 30 29 28 27 26 41 40 39 38 37 36 35 34 9 64 1 63 62 61 60 53 52 51 50 47 46 43 42 20 19 18 17 16 15 14 13
PTA7 PTA6 PTA5 PTA4 PTA3 PTA2 PTA1 PTA0 PTB7 PTB6 PTB5 PTB4 PTB3 PTB2 PTB1 PTB0 PTC6 PTC5 PTC4 PTC3 PTC2 PTC1 PTC0 PTD7 PTD6 PTD5 PTD4 PTD3 PTD2 PTD1 PTD0 PTE7 PTE6 PTE5 PTE4 PTE3 PTE2 PTE1 PTE0
6.2 内部结构及功能
• •
KBIP3~KBIP0结构相同 KBIP7~KBIP4结构相同
Slide 4
Copyright © Yang Ming. 2011. Electronics and Information Engineering Department of Huazhong University of Science and Technology Wuhan, Hubei 430074, P.R. China
6.2 内部结构及功能

KBI1PE寄存器中的KBIPEn控制位允许用户通过设定来选定相应的管脚作为KBI功能 ,当允许KBI功能(KBIPEn=1)时,同步逻辑监测KBI1Pn管脚上的边沿事件或边 沿和电平事件,一旦KBI1Pn管脚出现脉冲事件则KBI模块会产生一个KBI中断请求。

Freescale MC9S08单片机原理与应用(第03章)

Freescale MC9S08单片机原理与应用(第03章)

第3章MC9S08AW60单片机概述Freescale的08系列单片机由于其稳定性高、开发周期短、成本低、型号多种多样、兼容性好而被广泛应用。

本章概要介绍08系列单片机的类型、基本结构,并从总体上阐述其性能特点。

主要内容有:在介绍08系列单片机的命名规则和资源状况的基础上,以MC9S08AW60为例讲述HCS08系列单片机的基本结构和特点。

3.1 08系列单片机简介目前,Freescale的08系列单片机主要有HC08、HCS08 和RS08共3种类型。

HC08是1999年开始推出的产品,种类也比较多,针对不同场合的应用都可以选到合适的型号。

HCS08是2004年左右推出的8位MCU,资源丰富、功耗低、性价比很高,是08系列单片机的发展趋势。

HC08与HCS08的最大区别是调试方法不同与最高频率的变化。

RS08是HCS08构架的简化版本,于2006年推出,其内核体积比传统的内核小30%,带有精简指令集,满足用户对体积更小、更加经济高效的解决方案的需求。

RAM及Flash空间大小差异、封装形式不同、温度范围不同、频率不同、I/O资源差异等形成了不同型号,为嵌入式应用产品的开发提供了丰富的选型。

3.1.1Freescale单片机的命名规则Freescale单片机的型号庞大,但同一系列的CPU是相同的,也就是说具有相同的指令系统,多种型号只是为了适用于不同的场合。

为了方便实际应用时的选型,需要了解Freescale 单片机的命名方法,其基本命名规则如下:XX X XX XX X XXXX①②③④⑤⑥⑦①产品状态。

M C—Fully Qualified(合格);PC—Product Engineering(测试品)。

在实际应用中,通常都是选用MC类型的产品。

如MC908GP32、MC9S08GB60、MC9RS08KA2等。

②存储器类型标志。

“无”表示片内带ROM或片内没有程序存储器;7表示片内带EPROM或一次可编程ROM(one time programmable ROM,OTPROM);8表示片内带EEPROM;9表示片内带闪存Flash EEPROM。

freescale单片机设计

freescale单片机设计

PRS[4:0]为atd时钟预分频器 PRS[4:0]为atd时钟预分频器 fATDCLK=fBUS/(2 × (PRS + 1) );这 部分时钟设置要根据实际情况具体设置.
(4)ATD0CTL5各个位设置详解. ATD0CTL5各个位设置详解.
SCAN为单次/连续AD转换模式选择控制 SCAN为单次/连续AD转换模式选择控制 位.0为单次,1 位.0为单次,1为连续. MULT单 多通道AD转换选择控制位.为0 MULT单/多通道AD转换选择控制位.为0 时,单通道转换,无论用哪个通道进行ad 时,单通道转换,无论用哪个通道进行ad 转换,结果都存放在ATD0DR0中,1 转换,结果都存放在ATD0DR0中,1为 多通道转换.
智能车(A 智能车(A)
freescale单片机设计 freescale单片机设计
在智能车竞赛中所用MCU 在智能车竞赛中所用MCU
MC9S12XS128 MC9S12DG128
编程开发环境
Codewarrior 在下一讲中将详细说明Codewarrior使用 在下一讲中将详细说明Codewarrior使用 方法和软件设计技巧
ቤተ መጻሕፍቲ ባይዱ
(6)ATDSTAT2各个位设置详解. ATDSTAT2各个位设置详解. 此寄存器为16位,每个位对应了相应通道转换 此寄存器为16位,每个位对应了相应通道转换 完成的标志,当读出为0时表示转换未完成,1 完成的标志,当读出为0时表示转换未完成,1 为转换完成. (7)ATDDIEN为数字信号输入使能控制位. ATDDIEN为数字信号输入使能控制位. 此寄存器为16位.为0 此寄存器为16位.为0时,相应位的数字信号禁 止输入,1为数字信号允许输入.同时MCU禁止 止输入,1为数字信号允许输入.同时MCU禁止 这16通道数字输出,所以没有相应的方向控制 16通道数字输出,所以没有相应的方向控制 寄存器. (8)ATDDRn为结果寄存器,ad转换的结果 ATDDRn为结果寄存器,ad转换的结果 都放在这些寄存器里面.

Freescale单片机实验指导书2【2024版】

Freescale单片机实验指导书2【2024版】

一般性实验实验一普通I/O口操作实验实验目的:1、熟悉SDIDE开发环境,熟悉GP32基本程序结构2、理解Freescale MCU的编程框架3、熟悉编程调试环境,编译、调试、下载运行第一个程序4、掌握I/O的基本编程方法范例程序:① A01_简单IO及程序框架\ FrmMain.ASM② C01_简单IO及程序框架\纯C\prgframe.prj③ C01_简单IO及程序框架\C&ASM混编\prgframe.prj实验要求:1、参看教材6.4节,熟悉实验板结构2、运行并读懂教材第7章的关于I/O口操作的LED灯控制程序3、按下列要求新建一程序:根据PB口低2位(PTB1和PTB0)的状态输出四种不同的LED显示效果,要求用最简洁的语句实现以下各效果。

(1)PTB1=0,PTB0=0时,效果为:8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。

(效果1)(2)PTB1=0,PTB0=1时,效果为:8个LED中只有两个连在一起的灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。

(效果2)(3)PTB1=1,PTB0=0时,效果为:8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。

(效果3)(4)PTB1=1,PTB0=1时,效果自定。

(效果4)实验二串行通信实验实验目的:1、理解串行通信基本原理,掌握MCU串行通信基本编程方法2、理解串行通信的查询方式和中断方式原理及其编程范例程序:1、C02_1串行通信查询方式\ H08SCI_1.prj2、C02_2串行通信中断方式\ H08SCI_2.prj3、A02_1串行通信查询方式\ SCIMain1.asm4、A02_2串行通信中断方式\ SCIMain2.asm5、以上四目录都有VB_SCI目录,该目录是对应Visual Basic6.0程序,运行在PC方,用来接收和发送数据。

Freescale MC9S08单片机原理与应用(第01章)

Freescale MC9S08单片机原理与应用(第01章)

第1章 绪 论1.1 微型计算机概述1.1.1 微型计算机的组成一个典型的微型计算机包括:运算器、控制器、存储器和输入/输出接口四部分。

如果把运算器与控制器集成在一个硅片上,则该芯片为中央处理器CPU (Central Processing Unit )。

存储器包括程序存储器和数据存储器两类。

输入/输出接口包括模拟量输入/输出和开关量输入/输出。

软件部分包括系统软件(如操作系统)和应用软件(如字处理软件)。

典型微型计算机的组成如图1-1所示。

⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧⎪⎩⎪⎨⎧⎪⎩⎪⎨⎧⎪⎩⎪⎨⎧)DO /DI (/AO /AI (//CPU 输出开关量输入)输出模拟量输入输出接口输入数据存储器程序存储器存储器控制器运算器)中央处理器(微型计算机 图1-1 典型微型计算机的组成1.1.2 微型计算机的分类微型计算机种类繁多,型号各异。

因此,可以从不同角度对其进行分类。

最常见的是按微处理器的字长和按微型机的构成形式进行分类。

微处理器是微型计算机的核心部件,微处理器的性能(特别是字长)在很大程度上决定了微型机的性能。

1.按微处理器(CPU )字长分类按微处理器字长来分,微型计算机一般分为4位、8位、16位、32位和64位机几种。

(1)4位微型计算机用4位字长的微处理器作CPU ,其数据总线宽度为4位,一个字节数据要分两次来传送或处理。

4位机的指令系统简单、运算功能单一,主要用于袖珍或台式计算器、家电、娱乐产品和简单的过程控制,是微型机的低级阶段。

(2)8位微型计算机用8位字长的微处理器作CPU ,其数据总线宽度为8位。

8位机中字长和字节是同一个概念。

8位微处理器推出时,微型机在硬件和软件技术方面都已比较成熟,所以8位机的指令系统比较完善,寻址能力强,外围配套电路齐全,因而使8位机通用性强,应用宽广,广泛应用于事务管理、工业生产过程的自动检测和控制、通信、智能终端、教育以及家用电器控制等领域。

(3)16位微型计算机用高性能的16位微处理器作CPU,数据总线宽度为16位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XX科技大学Freescale单片机原理与设计实验报告实验项目TPM编程应用【实验目的】1、理解HCS08的定时器/PWM模块TPM(Timer/Pulse-Width Modulator)模块原理2、学会TPM模块设计3、进一步认识“对MCU外部管脚/内部模块的控制正是通过Regs的控制来实现”【实验原理】MC9S08AW60系列中的定时器系统包括两个独立的TPM:一个6通道的TPM1和一个2通道的TPM2。

TPM模块管脚和I/O 管脚复用。

定时器系统总共8个通道,每一个通道都可作为输入捕捉、输出比较、或带缓冲的边缘对齐PWM。

每一个TPM的所有通道都可以配置成为带缓冲的中心对齐脉宽调制CPWM (buffered, center-aligned pulse-width modulation)。

每一个TPM预分频器的时钟源都可以独立选择总线时钟、固定系统时钟或外部管脚对每个TPM,每个通道一个中断,还有一个计数中止中断。

定时器系统的内部结构为:两个独立的TPM每个TPM都由1个16位的计数器与n(n=6 or 2)个输入/输出通道组成;每一个通道都可作为输入捕捉、输出比较、或带缓冲的边缘对齐PWM。

TPM模块自由计数定时核心是一个16位的计数器。

三种时钟源之一经过分频之后的脉冲即作为定时器的计数脉冲;每过一个计数脉冲,Counter便自动+1,Counter加到FFFF后翻转到$0000,同时置溢出标志位TOF为1,然后重新开始计数;溢出时若TOIE为1,还会产生中断请求。

Fbus和分频比的不同可以产生不同的溢出时间间隔;但是这种自由计数定时方式定时有限。

只读的16位TPM计数寄存器由两个字节寄存器TPMxCNTH和TPMxCNTL构成。

TPM预置计数定时:向16位模数计数寄存器TPMxMODH:TPMxMODL写入一个确定的数值,则计数器每进行一次计数都会将计数和模数计数寄存器的值进行比较,如果相同就产生溢出,同时置溢出标志位TOF为1,然后重新开始计数,溢出时若TOIE为1,还会产生中断请求。

TPM每个自由计数器包含三个寄存器:一个8位状态控制寄存器(TPMxSC),一个16位计数器(TPMxCNTH:TPMxCNTL,一个16位模数寄存器(TPMxMODH:TPMxMODL)。

其中,x=1/2 (1)定时器x状态控制寄存器(TPMxSC)如下图:其中,TOF为溢出标志位,为0则没有达到预置计数寄存器中的值没有溢出,为1则达到了预置计数寄存器中的值溢出。

TOIE 为定时溢出中断允许位,可读/可写位用来允许定时器的溢出中断。

TOIE为1,TOF为1时允许中断,复位清TOIE。

定时器x状态控制寄存器(TPMxSC)CLKS[B:A]与PS[2:0]功能如下图:(2)定时器x计数寄存器(TPMxCNTH:TPMxCNTL)只读的16位TPM计数寄存器由两个字节寄存器TPMxCNTH和TPMxCNTL构成。

读两个字节中的任何一个字节都会把两个字节内容锁存进内部缓冲器,直到另外一个字节也被读取为止。

这允许以任何顺序读取连贯的16位寄存器。

如下图:(3)定时器x模数寄存器(TPMxMODH:TPMxMODL)。

可读/写的TPM模数寄存器中包含TPM计数器的模数值。

当TPM计数器到达这个模数值后,TPM计数器在下一个时钟要么重新从0x0000开始计数(CPWMS=0),要么从这个模数值往下减1计数(CPWMS=1),同时溢出标志TOF(Timer Overflow Flag)变为1。

只写TPMxMODH或者TPMxMODL其中的一个会抑制住TOF和溢出中断直到些另外一个字节也被写为止,因此两个寄存器一定都要写,不能只写一个而不管另一个。

复位会使TPM模数寄存器为0x0000,相当处于自由运行定时器计数模式(模数禁止)。

如下图:【实验装置】Freescale HC08单片机,CodeWarrior开发环境【实验内容】⑴利用TPM,编程实现下列功能:利用两个七段数码管,实现00-59秒显示:自动从00开始,每一秒钟,数字加1;加到59之后,自动回到00,重复开始;⑵外接IRQ按键,平时00-59自动加数显示,按IRQ按键一次后,加数显示停止,再按一次IRQ按键,继续加数显示。

【结果分析】实验(1)最终实现了用TPM2模块精确定时半秒,再利用半秒产生秒的各位和十位,并把秒的各位和十位送到两位数码管上显示。

数码管采用动态扫描的方式显示。

TPM2_ISR每隔500ms 清零一次,对秒钟的高地位进行加处理。

对TPM2溢出标志清零首先读标志位,然后写0到标志位。

实验结果显示正确。

实验(2)在(1)的基础上,增加了IRQ中断模块。

每按一次IRQ按键FLAG计数加1,然后取FLAG的最低位。

若最低位为0,则停止秒计时,数码管显示时间保持不变;若最低位为1,则正常计时、显示。

这样就实现了按IRQ按键一次后,加数显示停止,再按一次IRQ按键,继续加数显示。

【实验代码】(1)INCLUDE MC9S08AW60.INC; 包含头文件ORG $0070Half_Sec DS 1;半秒时间变量SEG_Select DS 1;数码管位选变量Second_L DS 1;秒钟低位Second_H DS 1;秒钟高位NUM DS 1COUNT DS 1ORG $1860LED_Table: DC.B $c0,$f9,$a4,$b0,$99,$92,$82,$f8 ;LED 字形码表DC.B $80,$90recycle: MOV #70t,NUM ;软件延时5msDBNZ NUM,*RTSDelay_5ms:MOV #38t,COUNTrecall:BSR recycleDBNZ COUNT,recallMOV #07t,COUNTDBNZ COUNT,*RTSIO_Init: ;IO初始化模块MOV #$FF, PTGD ; 初始化输出端口的数据寄存器MOV #$FF, PTDD ; 初始化输出端口的数据寄存器MOV #$FF, PTAD ; 初始化输出端口的数据寄存器LDA #%11111111STA PTADD ; 初始化PTA口的八个管脚作为输出STA PTDDD ; 初始化PTD口的八个管脚作为输出STA PTGDD ; 初始化PTG口的八个管脚作为输出RTS ;子程序返回TPM2_Init: ;TPM2模块中断方式初始化子程序MOV #$4E,TPM2SC ;BUSCLK为TPM2时钟源,64分频,允许TPM2中断MOV #$7A,TPM2MODHMOV #$12,TPM2MODL ;500ms对应模数值CLI ; 开总中断RTSTPM2_ISR: ;TPM2溢出中断服务子程序LDA TPM2SC ;先读标志位TEF BCLR 7,TPM2SC ;写0到TEF清TEF 标志位INC Half_SecLDA Half_SecCMP #2T ;是否到了1S BNE TPM2_ENDMOV #$00,Half_Sec ;到则秒钟加一,半秒清零INC Second_LLDA Second_LCMP #10T ;秒钟是否加到10BNE TPM2_ENDMOV #$00,Second_L :到则秒钟各位清零,十位加1INC Second_HLDA Second_HCMP #6T ;秒钟十位是否到6 BNE TPM2_ENDMOV #$00,Second_H ;到则秒钟10位清零TPM2_END:RTIMain:CLRXCLRACLRHSTA $1802 ;禁止COPMOV #$00,Half_SecMOV #$00,Second_H ;秒高位初始化MOV #$00,Second_L ;秒低位初始化JSR IO_Init ;对PTD,PTG,PTA 端口初始化JSR TPM2_Init ;TPM2初始化AGAIN:CLRHMOV #%11111110,PTAD ;位选低位LDA Second_L ;读秒低位CLRHTAXLDA LED_Table,X ;查字形码表STA PTGD ;输出秒低位NSASTA PTDDJSR Delay_5ms ;延时5msMOV #$FF,PTDD ;熄灭数码管,避免宇辉MOV #%11111101,PTAD ;位选数码管高位LDA Second_H ;读秒高位CLRHTAXLDA LED_Table,XSTA PTGDNSASTA PTDD ;显示秒高位JSR Delay_5msMOV #$FF,PTGDJMP AGAINORG $FFE2DC.W TPM2_ISRORG $FFFEDC.W Main INCLUDE MC9S08AW60.inc ; 包含头文件(2)INCLUDE MC9S08AW60.INC; 包含头文件ORG $0070Half_Sec DS 1;半秒时间变量SEG_Select DS 1;数码管位选变量Second_L DS 1;秒钟低位Second_H DS 1;秒钟高位FLAG DS 1 ;IRQ中断计数标志NUM DS 1COUNT DS 1ORG $1860LED_Table: DC.B $c0,$f9,$a4,$b0,$99,$92,$82,$f8 ;LED 字形码表DC.B $80,$90recycle: MOV #70t,NUM ;软件延时5msDBNZ NUM,*RTSDelay_5ms:MOV #38t,COUNTrecall:BSR recycleDBNZ COUNT,recallMOV #07t,COUNTDBNZ COUNT,*RTSIO_Init: ;IO初始化模块MOV #$FF, PTGD ; 初始化输出端口的数据寄存器MOV #$FF, PTDD ; 初始化输出端口的数据寄存器MOV #$FF, PTAD ; 初始化输出端口的数据寄存器LDA #%11111111STA PTADD ; 初始化PTA口的八个管脚作为输出STA PTDDD ; 初始化PTD口的八个管脚作为输出STA PTGDD ; 初始化PTG口的八个管脚作为输出RTS ;子程序返回IRQ_Init: ;IRQ中断初始化模块MOV #$00, FLAG ;FLAG清零LDA #%00010010STA IRQSC ; IRQ功能允许,仅下降沿触发,允许中断RTSIRQ_ISR:INC FLAGI ;计数加一LDA FLAGAND #%00000001 ;取最低位STA FLAGBSET 2, IRQSC ;向IRQACK位写1以清零IRQFRTITPM2_Init: ;TPM2模块中断方式初始化子程序MOV #$4E,TPM2SC ;BUSCLK为TPM2时钟源,64分频,允许TPM2中断MOV #$7A,TPM2MODHMOV #$12,TPM2MODL ;500ms对应模数值CLI ; 开总中断RTSTPM2_ISR: ;TPM2溢出中断服务子程序LDA TPM2SC ;先读标志位TEF BCLR 7,TPM2SC ;写0到TEF清TEF 标志位INC Half_SecLDA Half_SecCMP #2T ;是否到了1S BNE TPM2_ENDMOV #$00,Half_Sec ;到则秒钟加一,半秒清零LDA FLAGLDA FLAGCMP #0T ;FLAG不为0,则停止计数BNE TPM2_ENDINC Second_LLDA Second_LCMP #10T ;秒钟是否加到10 BNE TPM2_ENDMOV #$00,Second_L :到则秒钟各位清零,十位加1INC Second_HLDA Second_HCMP #6T ;秒钟十位是否到6 BNE TPM2_ENDMOV #$00,Second_H ;到则秒钟10位清零TPM2_END:RTIMain:CLRXCLRACLRHSTA $1802 ;禁止COPMOV #$00,Half_SecMOV #$00,Second_H ;秒高位初始化MOV #$00,Second_L ;秒低位初始化JSR IO_Init ;对PTD,PTG,PTA 端口初始化JSR TPM2_Init ;TPM2初始化JSR IRQ_Init ;IRQ初始化AGAIN:CLRHMOV #%11111110,PTAD ;位选低位LDA Second_L ;读秒低位CLRHTAXLDA LED_Table,X ;查字形码表STA PTGD ;输出秒低位NSASTA PTDDJSR Delay_5ms ;延时5msMOV #$FF,PTDD ;熄灭数码管,避免宇辉MOV #%11111101,PTAD ;位选数码管高位 LDA Second_H ;读秒高位CLRHTAXLDA LED_Table,XSTA PTGDNSASTA PTDD ;显示秒高位JSR Delay_5msMOV #$FF,PTGDJMP AGAINORG $FFFADC.W IRQ_ISRORG $FFE2DC.W TPM2_ISRORG $FFFEDC.WMain。

相关文档
最新文档