飞思卡尔8位单片机MC9S0810程序定时溢出中断编程汇编程序例.doc
文本预览下载声明
10.2.2 定时溢出中断编程汇编程序例
为了理解定时器的基本功能,这里给出利用定时器溢出编写定时的例子,并把“时分秒”发送到PC机,以便比较。同时,在PC机方,用一个十分简明的程序,接收MCU发送来“时分秒”并显示,同时还可以将PC机的当前时间发送到MCU,作为时间基准值。通过这个例子,理解定时器溢出中断的编程方法和系统时间的产生方法。
(1)MCU方程序
实例编号:A05_1 路径:\ASM\A05_1定时器溢出中断 (T1main.asm) *------------------------------------------------------*
*文 件 名:T1main.asm *
*硬件连接:无 *
*程序描述:1.从串口接收表示时间的3字节数据 *
* 2.利用定时器溢出中断修改时间,并发送新时间 *
*目 的:学习定时器基本功能 *
*---------《嵌入式应用技术基础教程》教学实例-----------*
*[头文件]
$include GP32ASM.H ;包含GP32的头文件
*[两个起始地址名]
RAMstartAddr equ $0040 ;RAM的起始地址
FlashStartAddr equ $8000 ;程序开始地址
*[相应标志位定义]
TSTOPBit equ 5 ;定时器计数停止位
TOFBit equ 7 ;定时器溢出标志位
ORG RAMstartAddr ;RAM的起始地址
Time rmb 3 ;存放时分秒
*======================================================*
*[主程序]
ORG FlashStartAddr ;程序起始地址
MainInit:
SEI ;关总中断
LDHX #$023F ;堆栈初始化为RAM最高端
TXS
JSR GP32Init ;调系统初始化子程序GP32Init
JSR SCIInit ;调串口初始化子程序
JSR Timer1init ;调定时器1初始化子程序
BSET 5,SCC2 ;设置接收中断允许
CLI ;开总中断
;给Time[0-2]时分秒赋初值0、0、0
LDA #$0
STA Time
STA {Time+1}
STA {Time+2}
;[程序总循环入口]
;主程序功能:每秒发送一次时间单元
MainLoop:
CMP {Time+2} ;与秒单元比较
BEQ Main1 ;秒没有更新,转
;数据已经更新,发送时分秒
LDA #$3
LDHX #Time
JSR SCISendN
LDA {Time+2} ;A中值更新
Main1:
JMP MainLoop
*[内部直接调用子程序存放处]
*Timer1init:定时器1初始化子程序------------------------*
*功能:对定时器1初始化 *
*入口:无 *
*出口:无 *
*--------------------------
显示全部