收藏 分销(赏)

飞思卡尔8位单片机MC9S0810程序定时溢出中断编程汇编程序例.doc

上传人:xrp****65 文档编号:7725052 上传时间:2025-01-14 格式:DOC 页数:4 大小:1.16MB 下载积分:10 金币
下载 相关 举报
飞思卡尔8位单片机MC9S0810程序定时溢出中断编程汇编程序例.doc_第1页
第1页 / 共4页
飞思卡尔8位单片机MC9S0810程序定时溢出中断编程汇编程序例.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
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初始化 * *入口:无 * *出口:无 * *------------------------------------------------------* Timer1init: PSHH ;保护HX、A PSHX PSHA ;允许溢出中断、不启动计数、分频因子=64 LDA #%01100110 STA T1SC ;计数寄存器初值=$0000 LDHX #$0000 STHX T1CNTH ;1产生1次溢出中断,预置寄存器设定值=$9600 LDHX #$9600 STHX T1MODH ;允许定时器1计数寄存器计数 BCLR TSTOPBit,T1SC PULA ;恢复HX、A PULX PULH RTS *Timer1Int:定时器1溢出中断子程序-----------------------* *功能:给内存单元Time[0-2](时分秒)赋值 * *------------------------------------------------------* Timer1Int: SEI ;关总中断 PSHH ;保护H INC {Time+2} ;秒数加1 LDA {Time+2} CMP #!60 BNE Timer1Int_1 ;秒数未增加到60,转 LDA #!0 ;秒数增加到60,清0 STA {Time+2} INC {Time+1} ;分钟数加1 LDA {Time+1} CMP #!60 BNE Timer1Int_1 ;分钟数未增加到60,转 LDA #!0 ;分钟数增加到60,清0 STA {Time+1} INC Time ;小时数加1 LDA Time CMP #!24 BNE Timer1Int_1 ;小时数未增加到24,转 LDA #!0 ;小时数增加到24,清0 STA Time Timer1Int_1: LDA T1SC BCLR TOFBit,T1SC ;清除定时器溢出标志位 PULH ;恢复H CLI ;开总中断 RTI *SCIRecINT:SCI接收中断子程序---------------------------* *功能:接收3字节基准时分秒放入内存单元Time[0-2] * *------------------------------------------------------* SCIRecINT: SEI ;关总中断 PSHH ;保护H LDA #$3 LDHX #Time JSR SCIReN ;接收3字节数据 PULH ;恢复H CLI ;开总中断 RTI ;中断返回 *[外部子程序存放处] $include "GP32Init.ASM" $include "H08SCI.ASM" $include "SCIInit.ASM" *[中断向量] ORG $FFF2 ;定时器1溢出中断向量 DW Timer1Int ORG $FFE4 ;SCI接收中断向量 DW SCIRecINT ORG $FFFE ;复位向量 DW MainInit (2)PC方VB程序 PC机方的界面见图10-2。程序主要功能是:接收MCU发送来“时分秒”并显示,也可以单击“发送”按钮,发送PC机的当前时间。 图10-2 定时器溢出中断实验PC机方VB程序 实例编号:A05_1 路径:\ASM\A05_1定时器溢出中断\ VB_Timer1 '程序描述: ' (1)把当前系统时间从COM1发送出去 ' (2)把接收到的数据显示在接收窗口中 '------------------------------------------------------- Option Explicit '检查未经声明的变量 Dim TimData() As Byte '原始时间数组 Dim SendData(2) As Byte '发送数据数组 Dim RecvData() As Byte '接收数据数组 Private Sub Form_Load() '串行口初始化 Call SCIinit(MSComm1, 1, "9600,N,8,1") '清空有关文本框 TxtSEND.Text = "" TxtRECV.Text = "" '开放串行中断 MSComm1.RThreshold = 1 '计时器开始计时 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() TxtSEND.Text = Format$(Time(), "HH:MM:SS") End Sub Private Sub CmdSEND_Click() '单击"发送"按钮 SendData(0) = Val(Mid$(TxtSEND.Text, 1, 2)) SendData(1) = Val(Mid$(TxtSEND.Text, 4, 2)) SendData(2) = Val(Mid$(TxtSEND.Text, 7, 2)) MSComm1.Output = SendData End Sub Private Sub ComStop_Click() '单击"暂停/继续"按钮 If ComStop.Caption = "暂停" Then ComStop.Caption = "继续" Timer1.Enabled = False Else ComStop.Caption = "暂停" Timer1.Enabled = True End If End Sub Public Sub MSComm1_OnComm() '串行接收中断 Dim i As Integer Dim S1 As String MSComm1.RThreshold = 0 '关闭串行中断 Do DoEvents Loop Until MSComm1.InBufferCount >= 3 RecvData = MSComm1.Input For i = LBound(RecvData) To UBound(RecvData) S1 = S1 & Format$(RecvData(i), "00") & ":" Next i S1 = Mid$(S1, 1, 8) TxtRECV.Text = S1 MSComm1.RThreshold = 1 '开放串行中断 End Sub Private Sub CmdEXIT_Click() '单击"退出"按钮 If MSComm1.PortOpen = True Then MSComm1.PortOpen = False Timer1.Enabled = False End End Sub
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服