单片机原理与应用技术
实验指导书 (Freescale)
机械工程学院机械电子工程教研室 王晓峰
第1页
实验一 飞思卡尔嵌入式实验系统入门—GPIO控制实验
一、实验目的:
熟悉CodeWarrior集成开发环境及飞思卡尔嵌入式实验开发系统 掌握AW60的GPIO结构及控制方法
掌握CodeWarrior工程结构及创建汇编工程 熟悉汇编指令及应用汇编语言编程方法
二、实验内容
1.运用CodeWarrior新建工程,进行工程程序编辑、编译、下载、调试; 2.利用飞思卡尔嵌入式实验开发系统根据实验需要进行硬件连接;
3. 观察示例工程项目,该工程功能为:根据连接在PTC0、PTC1口上的两个拨动开关的状态,控制接中PTB口上的八个LED处在以下二种不同状态:八个LED同时亮-灭循环;四个灯交替亮-灭;
4.设计一个比示例工程简单的工程项目,内容为控制PTB口上连接的八个LED灯同时亮-灭循环一次再四个灯交替亮-灭一次。
5.设计一个比示例工程更复杂一些的工程项目,根据连接在PTC口上的两个拨动开关的状态,控制接中PTB口上的八个LED处在以下四种不同状态:八个LED亮—灭循环;四个灯交替亮—灭;一个LED左移流水灯;两个LED右移流水灯。
三、实验步骤(注意:在调试过程中如需要进行连接线路时,要先将实验箱断电,待电路连接好后再接通电源!!!)
1.将飞思卡尔嵌入式实验开发系统实验箱接上电源,写入器BDM接头插接入核心卡BDM座,USB头接入PC机USB口。
2.PC机上启动CodeWarrior,新建工程LED.mcp(注意设置工程保存路径) 3.观察工程文件结构,查看相应文件。 4.在main.asm中编辑工程主文件 5.编辑相关子程序
6.编译,如果有错误修改,直至编译通过 7.链接、下载,调试观察LED灯现象
第2页
图1-1 LED及拨动开关原理图
导线接插点 Vcc 拨码开关
GN
四、参考程序
1.主汇编程序main.asm
该程序为根据PTD口的PTD0上接的拨动开关的状态控制连接在PTB口上的八个LED灯在四亮四暗状态或八个灯同时亮同时暗的状态
XDEF asm_main XREF MCUInit XREF DelayHX
INCLUDE 'derivative.inc' INCLUDE 'light.inc' INCLUDE 'switch.inc'
MyCode: SECTION
; this assembly routine is called the C/C++ application asm_main:
JSR MCUInit JSR Switch_Init JSR Light_Init M_Scan: JSR Switch_Read LDA $70 CMP #$01 BNE M01 LDA #0
JSR Light_On_Off LDHX #$0fff
第3页
JSR DelayHX LDA #1
JSR Light_On_Off LDHX #$0fff JSR DelayHX BRA M_Scan M01: CMP #$02 BNE M02
JSR Light_Half LDHX #$0fff JSR DelayHX M02: BRA M_Scan
RTS ; return to caller 2、LED灯构件程序light.asm
;[Light.asm]小灯驱动-----------------------------------------------------* ;本文件包含: * ; (1)Light_init:定义控制小灯的MCU的I/O引脚为输出 * ; (2)Light_On_Off:驱动小灯\亮\暗\ * ;--------------------------------------------------------------------------------*
;小灯驱动所需头文件
INCLUDE 'MC9S08AW60.inc' ;MCU映像寄存器名
;小灯控制引脚宏定义
Light_P: equ PTBD ;灯(Light)接在PTB口 Light_D: equ PTBDD ;相应的方向寄存器 Lon: equ $00 Loff: equ $ff Ldiff: equ $0f
;声明外部函数
XDEF Light_Init ;小灯初始化
XDEF Light_On_Off ;驱动小灯\亮\暗\ XDEF Light_Half ;驱动小灯\四亮\四灭\
;Lightinit:定义控制小灯的MCU引脚为输出---------------------------* ;功能:定义控制小灯的MCU引脚为输出,并使小灯初始为暗 * ;----------------------------------------------------------------------------------* Light_Init:
LDA #$FF
STA Light_P ;设置初始时八个LED灯全灭 LDA #$FF
STA Light_D ;设置LED所接PTB口为输出 RTS
第4页
;Light_On_Off:驱动小灯\亮\灭\;功能:根据A的值控制小灯的亮和暗 * ;---------------------------------------------------------------------------------* Light_On_Off: CMP #0
BNE Light_1 LDA #Lon STA Light_P BRA Light_Exit Light_1:
CMP #1
BNE Light_Exit ;入口非'L'/'A',程序无响应 LDA #Loff STA Light_P Light_Exit: RTS
;Light_Half:驱动小灯\四亮\四灭\;功能:根据A的值控制小灯的亮和暗 *
;---------------------------------------------------------------------------------*
Light_Half:
LDA Light_P CMP #Ldiff
BNE Light_half1 LDA #~Ldiff STA Light_P BRA L_exit Light_half1: LDA #Ldiff STA Light_P L_exit:
RTS
3、拨动开关控制程序Switch.asm
;[switch.asm]开关状态输入---------------------------------------------* ;本文件包含: * ; (1)Switch_init:定义连接开关的MCU的I/O引脚为输入 * ; (2)Switch_read:读取开关状态 * ; (3)RAM$70保存开关状态
;--------------------------------------------------------------------------------*
;小灯驱动所需头文件
INCLUDE 'MC9S08AW60.inc' ;MCU映像寄存器名 XDEF Switch_Init XDEF Switch_Read
第5页