资源描述
实例编号:A01 路径:\ASM\ A01_简单IO及程序框架
*--------------------------------------------------------*
*文 件 名:PrgFrame.ASM *
*硬件连接:PTA.1接指示灯 *
*程序描述:指示灯PTA.1闪烁 *
*目 的:第一个freescale(Motorola) HC08系列MCU程序框架 *
*说 明:提供Motorola MCU的编程框架,供教学入门使用 *
*注 意:如果延时不够长的话,会发觉灯不会闪烁,而是一 *
* 直亮,这是由于人的视觉引起的。 *
*----------《嵌入式应用技术基础教程》教学实例--------------*
*[头文件]
$include "GP32ASM.H" ;包含GP32的头文件
*[两个起始地址名]
RAMstartAddr equ $0040 ;RAM的起始地址(因芯片而不同)
FlashStartAddr equ $8000 ;程序开始地址(因芯片而不同)
*[指示灯所接引脚定义]
Light_P equ PTA ;灯(Light)接在PTA口
Light_D equ DDRA ;相应的方向寄存器
Light_Pin equ 1 ;所在的引脚
*[内存变量]
ORG RAMstartAddr ;RAM的起始地址
I1 RMB 1 ;变量I1的声明(字节型变量)
*=======================================================
*[主程序]
ORG FlashStartAddr ;程序起始地址
MainInit: ;复位后程序从此开始执行
;[系统初始化]
SEI ;禁止所有中断
LDHX #$023F ;堆栈初始化为RAM最高端
TXS
JSR GP32Init ;系统初始化,初学时跳过此处
;[I/O初始化]
BSET Light_Pin,Light_D ;令指示灯引脚为输出
BSET Light_Pin,Light_P ;初始时,指示灯"暗"
;[程序总循环入口]
MainLoop:
BCLR Light_Pin,Light_P ;指示灯(Light)“亮”
;[延时] 若要改变闪烁的快慢,可以改变循环次数
MOV #!250,I1 ;循环次数
Main1:
JSR Delay1000 ;调用延时子程序
DBNZ I1,Main1
;[指示灯(Light)"暗"]
BSET Light_Pin,Light_P
;[延时]
MOV #!250,I1 ;循环次数
Main2:
JSR Delay1000 ;调用延时子程序
DBNZ I1,Main2
;[转总循环入口处]
JMP MainLoop
*[内部直接调用子程序存放处]
*Delay1000:延时1000个时钟周期--------------------------*
*功能:用程序方法延时,延时长度为200*5=1000个时钟周期 *
*入口:无 *
*出口: 无 *
*------------------------------------------------------*
Delay1000:
PSHA ;A进栈(保护寄存器A)
;延时200*5=1000个时钟周期
LDA #!200 ;循环次数
Delay1000_1:
NOP ;1个时钟周期
NOP ;1个时钟周期
DBNZA Delay1000_1 ;3个时钟周期
PULA ;A出栈(恢复A寄存器)
RTS
*[外部子程序存放处]
$include "GP32Init.ASM"
*[中断向量]
ORG $FFFE ;复位向量
DW MainInit
特别说明:程序中包含了独立存盘的"GP32Init.ASM"文件,是GP32系统初始化程序,它将对CONFIG1、CONFIG2进行设置,并对PLL进行编程,由外部晶振f=32.768KHz,得到内部总线时钟fBUS=2.4576MHz。
展开阅读全文