《单片机原理》课程实验指导书
实验一 实验开发装置的使用
[实验目的]
1. 巩固和加深理解所学的基本概念,了解 MC9S12 单片机的结构特点和工作原理。
2. 熟悉开发环境、指令集和汇编语言编辑、调试方法,为下一步用好 MC9S12 单片机奠定
坚实的基础。
3. 通过汇编语言源程序的编辑、汇编、调试及输出结果的
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
等过程,熟悉 MC9S12 编程
开发工具的使用方法。
4.通过使用各种监控命令,体验通过监控程序实现用户与单片机的对话过程。
[实验设备]
1. MC9S12DP256/DG128 开发板
2. CodeWarrior 编译器
3. 微型计算机
[实验内容]
1. 连接开发板与 PC 机,配置超级终端,设置串行口及其通信协议。
2. 使用不同监控命令,对开发板进行各种操作。如查看内存的内容,修改 RAM 中的内容,
显示堆栈指针和 CPU 寄存器的内容,改变页面寄存器的内容,擦除 Flash 中的内容,下载
数据文件到 RAM 中,下载程序文件到 Flash 中,设置硬件断点,运行程序等。
3.使用 CodeWarrior C 编译器,建立工程文件,编写 C 语言应用程序,定义存储空间分配,
编译应用程序,向开发板下载*.S19 文件,运行应用程序。
4.尝试使用 ASM 汇编器,编写汇编语言源程序,并进行汇编、下载和运行。
[实验预习要求]
1.认真领会本实验的实验目的和实验内容。
2.复习教材中的有关内容。
3. 预习 MC9S12DP256/DG128 开发板的使用方法和各种监控命令的作用。
[实验步骤]
1. 将开发板与 PC 机用普通串口线相连,插上 5V 电源。
2. 配置超级终端
首先打开超级终端,按下列顺序操作:
开始-→程序-→附件-→通讯-→超级终端,操作界面如图 1-1 所示。
3. 选择 Hypertrm,填入名称,这里用 MC9S12DP256,选择“确定”。操作界面如图 1-2 和
图 1-3 所示。
4. 串行口设置
如果开发板是连接到串口 1,就选“直接连接到串口 1”,如果开发板连接到串口 2,
就选“直接连接到串口 2”。选择“确定”,串口设置如图 1-4 所示。
1
《单片机原理》课程实验指导书
5. 串行口通信协议设置
所使用的串行口通信协议如图 1-5 所示。使用 9600 波特率,8 位传送,无奇偶校验,
一个停止位,无流量控制或使用 Xon/Xoff 协议,然后选择“确定”。
6. 按开发板的 S1 复位键,即可看到如图 1-6 所示的用户界面。
此时应在 3秒内敲击 PC 键盘上的任意键。PC 显示屏上出现监控程序的额命令提示符:
>
如果在 3 秒内开发板没能收到来自串行口的响应,单片机将自动执行用户应用程序。
随监控一起下载到开发板上的应用程序是使开发板上的小灯闪烁。按复位按钮,并敲击任
意键,可进入监控程序。
7. 使用不同监控命令,即可对开发板进行各种操作。
图 1-1 打开超级终端
图 1-2 Hypertrm 窗口 图 1-3 通信协议文件命名
2
《单片机原理》课程实验指导书
图 1-4 串行口设置 图 1-5 设置串行通信协议
图 1-6 用户界面
若键入:
D 2000 20FF
该命令显示单片机 RAM 区从$2000 开始,到$20FF 这 256 个储存单元的内容:
>D 2000-20FF
- 2000 DA B1 5E B0 75 B0 73 D9 4E 6D 19 1C 51 A9 52 54 ..^.u.s.Nm..Q.RT
- 2010 DC 80 15 F8 21 9E 96 70 F4 6A E0 B6 AA FE 79 E6 ….!..p.j….y.
- 2020 DE AC CC 90 B4 AA 2F 64 CE 3C A9 48 CA F6 E1 BD ……/d.<.H….
- 2030 DF 4A 05 77 A5 BE 53 7F 91 8E A2 82 0E 03 34 50 .J.w..S…….4p
- 2040 D2 99 87 39 9A F2 20 C6 58 38 58 DA 70 9A 05 6E …9.. .X8X.p..n
- 2050 08 14 5E 27 2A 75 C4 6E FA C7 2D C3 99 9A 43 F2 ..^’*u.n..-…C.
- 2060 94 AB FC C1 4E 92 07 20 83 95 66 B8 9B C0 B6 B4 ….N.. ..f…..
- 2070 5A 16 B1 75 EA 05 C0 D8 44 6B E2 6B A0 C9 F4 72 Z..u….Dk.k…r
- 2080 C2 63 01 E7 39 55 D3 43 77 0F E2 51 D3 7F E6 3E .c..9U.Cw..Q…>
3
《单片机原理》课程实验指导书
- 2090 FA A5 6A EF 07 B9 DC AE 7F 2F 51 12 03 D9 CA 94 ..j……./Q…..
- 20A0 BD D4 86 DD 44 BC 0C B3 E0 29 F0 2B 93 74 CE 10 ….D….).+.t..
- 20B0 C1 D5 A4 6D 9C 80 05 A4 CB 2D B9 59 69 51 AD 94 ..m……-.YiQ..
- 20C0 53 5E 42 FC 98 73 B7 C3 81 22 40 63 2A 98 35 72 S^B..s…”@c*.5r
- 20D0 0E E1 CC 26 16 5E BE E0 F5 D3 B8 FF F0 4B 6C 00 …&.^…….KL.
- 20E0 0D 49 9D B9 B6 C2 0C 62 9F 59 A0 B8 BB 4E 3E 3C .I…..b.Y…N><
- 20F0 8D 5E 1A 59 7E BC BC A6 49 26 9A EA D1 56 41 12 .^.YY~..I&…VA.
>
可以用 M 命令修改 RAM 存储器的内容。键入 M,然后是要修改 RAM 单元的地址,
如 2000,修改后按回车键回到监控程序:
>M 2000
- 2000 11 12
- 2001 22 34
- 2002 33 56
- 2003 44 78
- 2004 55 9a
- 2005 B0 bc
- 2006 73
>
用 D 命令看修改后的结果,看到$2000 到$2005 单元的内容已经被修改:
>D 2000-200f
- 2000 12 34 56 78 9A BC 73 D9 4E 6D 19 1C 51 A9 52 54 .4Vx..s.Nm..Q.RT
>
开发板上的 8 个 LED 小灯接在单片机并行口 B(PORTB)上,PORTB 的硬件地址是$01,
PORPT 可以作输入口,也可以作输出口,写 PORTB 的方向寄存器可以控制 B 口作输入还
是输出用。单片机复位时,各 I/O 接口默认为输入口,方向寄存器被清零,其值应为 0。PORTB
方向寄存器的硬件地址是$03,用 M 命令可查看它们的值:
>M 0000
- 0000 00
- 0001 AA
- 0002 00
- 0003 FF
>
可以看到,方向寄存器($0003)的值是$FF,说明监控程序对 PORTB 做了初始化,已
经定义 B 口为输出口。B 口数据寄存器($0001)的值为$AA,即二进制树 10101010,因此
开发板上的小灯隔一个亮一个。
用 M 命令将存储单元$0001 的值改为 00。8 个小灯会同时点亮,将存储单元$0001 的值
改成$FF,8 个小灯会同时熄灭:
>M 0001
- 0001 AA 00
4
《单片机原理》课程实验指导书
- 0002 00 ^
- 0001 00 ff
- 0002 00
>
当修改了某一内存是值后,监控程序会指向下一个存储单元,这里的“^”键使要修改
的单元指向上一个单元。空格键
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示当前单元不需要修改,回车键表示回监控程序。这些功
能由监控程序提供。
通过监控程序,用户可以通过 PC 的串行口与单片机对话;可以通过监控程序“看到”
单片机里面的东西;也可以通过监控程序,控制 I/O 口,调试 I/O 口。
借助监控程序,可体验一下什么是汇编语言写的程序?什么是机器码?什么是编译?
下面的程序向 SCI 口输出无限多个 ASCII 字符“A”:
ORG $2000
LDAA #$41 ;ASCII code value for Character ‘A’
JSR $fe83 ;System Call for OUTCH
JMP $2000 ;Jump to
这是一个无限循环程序,将十六进制数$41 写入 SCI 口的输出缓冲寄存器。
LDAA #…是 LoaD Accumulator A 的立即数寻址,其机器码是$86,故这一行汇编代码
应产生两个机器码:
86 41
同样 JSR $FE83 是 Jump Sub-Routine,即调用$FE83 处的子程序,FE83 是监控程序给
出的系统调用,将 A 寄存器的值输出到串行口,故这一行产生 3 个机器码:FE 83
指令 JMP $2000 产生 3 个机器码:06 20 00。将以上代码输入$2000 开始的存储单
元,用监控程序提供的指令 Ctrl P 将程序计数器 PC 的值改为$2000,按 G 命令执行程序,
PC 屏幕上会出现无穷多个“A”,按复位才能回到监控程序。
也可以直接使用输出一个字符的程序代替 JSR $FE83:
4F CC 80 FC OUTCH BRCLR $CC,#80,*
5A CF STAA $CF
这两句程序检查 SCI 输出状态寄存器是否为空,若不为空,在当前行死循环,等待其空;
若为空,则将 A 寄存器的值写到 SCI 口输出缓冲寄存器输出,这里:
$4F 是指令 BRCLR 的机器码;
$CC 是 SCI 口状态寄存器的地址;
$80 表示 BRCLR 指令看 SCI 口状态寄存器的 b7 位是 1 还是 0;
$FC 是-4,表示若该位为 0,PC 不执行下一条命令,回跳 4 步到“*”表示的当前行;
$5A 是 STAA 指令的机器码;
$CF 是 SCI 口输出缓冲寄存器的地址。
生成汇编代码的工作一般由 PC 来完成,汇编的过程就是查表,查出助记符代表的机器
码值。通过上面的例子可以认识到,程序是一连串的十六进制机器码,将机器码装入内存,
让程序计数器 PC 的值为程序其始地址,并让 CPU 运行,就可以执行程序了。$FE83 处的子
程序是监控程序提供的,修改 PC 的值及让程序运行,都是借助监控程序完成的。
监控程序还有许多其他命令,如:
5
《单片机原理》课程实验指导书
(1) 显示和修改 CPU 寄存器;
(2) 显示堆栈指针和栈空间;
(3) 向 RAM 下载程序;
(4) 擦除 Flash 存储器;
(5) 让程序运行;
(6) 在程序中设置断点。
利用这些功能可以在线调节应用程序,不妨先将这些命令用得很熟,体会为什么要有
这些命令,这些功能是怎么实现的。
监控命令详见附录一。
[实验报告]
1. 说明你在连接开发板与 PC 机,配置超级终端,设置串行口及其通信协议以及使用不同
监控命令,对开发板进行各种操作过程中,遇到些什么问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,如何解决的?
2. 说明你在使用 CodeWarrior 编译器,建立工程文件,编写 C 语言应用程序,定义存储
空间分配,编译应用程序,向开发板下载*.S19 文件,运行应用程序过程中,遇到些什么
问题,如何解决的?。
3.比较使用 CodeWarrior 软件中 C 编译器和 ASM 汇编器进行编程、汇编、程序下载和运行
的优缺点。
6
《单片机原理》课程实验指导书
实验二 汇编语言程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
自行在下列实验项目中任意选择一个项目,按实验要求完成实验,并写出实验报告。
[实验目的]
1.熟悉单片机的串行通讯功能和应用特点,掌握异步串行数据通讯格式和协议,了解
Freescale 单片机 SCI 模块对应各寄存器的设置。
2. 熟悉 Freescale 单片机内部资源,了解 I/O 口的使用方法,学习编程方法及调试技巧。
3. 掌握单片机中 A/D 转换的基本原理,了解 Freescale 单片机 ATD 端口集成模块的使用
方法及相应寄存器的设置,学会利用根据采集的模拟量大小,完成相应的控制功能。
4. 掌握键盘查询、键盘中断、键值识别和键盘编码的方法,进一步掌握汇编语言源程序
的编程方法、设计原则,提高程序设计技能。
5. 了解 LED 8 段数码管的工作原理,掌握单片机对 LED 数码管的操作方法,熟悉显示字
形的转换原则。
6. 掌握 Freescale 单片机中的定时器模块功能和使用用法,学会利用定时中断完成某项
控制功能。
[实验设备]
1.MC9S12DP256/DG128 开发板
2.CodeWarrior 编译器
3.微型计算机
[实验内容]
1. 串行通讯实验
使用两台具有
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
RS-232 接口的单片机实验板,实现两者之间的串行口通讯功能或
通过 PC 计算机实现与单片机实验板之间的串行口通讯功能。
2. 转弯方向灯控制实验
使用单片机中的 I/O 口实现转弯方向灯控制,方向灯使用 LED 发光二极管指示。PTB0
开关接 5V,右转弯灯闪亮,PTB1 开关接 5V 时左转弯灯闪亮,PTB0,PTB1 开关同时接 5V
或接地时,转弯灯均不闪亮。
3. A/D 转换实验
利用单片机内部 A/D 功能,设置 PTB 口作为模拟量输入口,PTA 口作为输出口控制 LED
指示灯,将 A/D 转换后得到的数字量送到 PTA 口,点亮 LED 指示灯,调节模拟量输入大小,
观察 LED 指示灯的变化。
4. 键盘实验
将 PTA0-PTA7 连接为矩阵键盘,PTB0 接 LED 指示灯。开始运行时,LED 指示灯亮,等
待键盘按键。按下键盘上某个按键后进入运行状态,指示灯闪烁。在指示灯闪烁状态,按
“0-9”任意一键,指示灯 3-0 显示对应的二进制值(0 为灯亮,1 为灯暗,如 1 的二进制
为 0001,显示应为“亮亮亮暗”),按“A-F”任意一键,指示灯 3-0 全暗。
7
《单片机原理》课程实验指导书
5. LED 数码管显示实验
在单片机上编程实现对数码管的显示控制。将 PTB0-PTB7 作为数码管段显示控制位,
PTC0-PTC3 作为数码管位选控制。
6. 定时器定时实验
在 I/O 口连接 LED 指示灯。利用单片机内部定时器实现一定时间的定时功能,当定时
时间到,产生定时溢出中断,控制 LED 指示灯闪烁。
部分 IO 拨码开关
Freescale
单片机
LCD 显示
键盘输入 RS232
LED 指示灯
LED 数码管
显示
PC 机
图 2.1 实验系统总体结构简图
[实验预习要求]
1.认真领会本实验的实验目的和实验内容。
2.复习教材中的有关内容。
3.制订实验步骤,根据实验内容编写好源程序。
[实验报告]
1. 画出系统连接图和程序流程图,说明程序完成何种功能。
2. 写出所编程序的程序清单,并作注释。
3. 给出程序的运行结果。
4.调试分析和体会,对本实验的改进意见。
8
《单片机原理》课程实验指导书
附录一 MC9S12DP256/DG128 开发板监控命令详解
一、监控程序简介
监控程序代码小于 4K,放在地址$F000 处。用户可以使用 EF80 处的中断向量表,此
中断向量表和 MC9S12DP256 手册上的中断向量表顺序相同,只是将原处于 FF80 的中断向
量表移到 EF80 处,顺序不变。监控程序运行时,如果串口在 4 秒内没有收到数据,就会
检查 EFFE-EFFF(用户复位向量表)是否为 FFFF,如果不是,说明 FLASH 中有用户程序。
程序自动调转到 EFFE-EFFF 所指向的用户程序。如果程序运行 4 秒内串口接到数据或者
EFFE-EFFF为FFFF,则进入DEBUG监控程序。DEBUG监控程序在等待命令时,PORTB0-PORTB7
的 8 个小灯间隔点亮,但不闪烁。
二、监控命令
H命令:
帮助命令,显示各种命令信息。按“H”按钮,可看到如图 A1-1 所示的内容。
图 A1-1 键入 H 命令后,显示监控命令表
^A,^B,^X,^Y,^C,^P:
分别为改变 A 寄存器、B寄存器、X 寄存器、Y 寄存器、CC 寄存器或者 PC 寄存器的值。
D 命令:
显示一段内存的内容。按下 D 后,要填入需要显示的内存的起始地址和终止地址,然
后回车,就会显示这一段地址的内容,如图 A1-2 所示。
9
《单片机原理》课程实验指导书
M 命令:
改变内存的内容。按“M”后,填入要改变的内存地址,便会显示该内存地址的内容,
如图 A1-3 所示。然后用户可以填入希望改成的内容。如果修改成功,用户可以修改下一
个地址的内容;如果修改失败,显示“?”。如果需要停止修改,直接输入回车即可。
图 A1-2 键入 D 命令后,显示内存中某段地址中的内容
图 A1-3 用 M 命令显示和修改 RAM 中内容
C 命令:
改变 PPAGE 寄存器的值。如图 A1-4 所示,按“C”后显示 PPAGE 寄存器的值,用户可
以填入希望改成的值,然后回车。
F 命令:
下载程序到 FLASH 中,可识别 S1、S2 格式的 S19 文件。如图 A1-5 所示,按下“F”
键后,选择“发送” -→“发送文本文件”,然后找到要下载的*.S19 文件,按“打开(O)”,
这样,便可把文件下载到 FLASH 中。注意,文件类型应选“所有文件”。
E 命令:
擦除 FLASH 的$4000-$7FFF 和$C000-$DFFF 两处,而 FLASH $F000-$FFFF 处有监控程
10
《单片机原理》课程实验指导书
序,受保护。
图 A1-4 P 命令修改 PPAGE 寄存器的内容
图 A1-5 用 F 命令将应用程序下载到 FLASH 中
K 命令:
首先要用“C”命令选择你想下载的 FLASH 页,然后“K”命令把程序下载到这一页中。
S19 文件中地址为$8000-$BFFF,PPAGE 页由“C”命令选择。
Q 命令:
首先要用“C”命令选择你想擦除的 FLASH 页,然后“Q”命令擦除这一页。
G 命令:
从 PC 寄存器的地址处,运行程序。
L 命令:
把程序下载到片内 RAM 运行,即$1000-$3FFF 处。
S 命令:
如图 A1-6 所示,S 命令用来显示 SP 寄存器的值,并附带显示 SP 地址附近的内容。
R 命令:
如图 A1-7 所示,R 命令用来显示 CPU 所有寄存器中的内容。
11
《单片机原理》课程实验指导书
图 A1-6 用 S 命令查看堆栈指针 SP 和堆栈中的内容
图 A1-7 用 R 命令查看 CPU 寄存器中的内容
B 命令:
可以设置两个硬件断点。如图 A1-8 所示,设置断点首先要设断点的 PPAGE,然后设断
点的地址。如果是 3E、3F 页,地址可以是$4000-$7FFF 和$C000-$FFFF 之间。遇到断点时
程序停止,显示寄存器内容,同时两个断点清除,断点模块禁止。
图 A1-8 用 B 命令设置两个硬件断点
12
《单片机原理》课程实验指导书
注意:在 CPU 标准 64KB 寻址空间中,地址为$4000~$7FFF 的 Flash 存储器页面地址
是$3E,地址为$C000~$FFFF 的存储器页面地址是$3F。对于 MC9S12DP256 单片机,地址为
$8000~$BFFF 的 Flash 存储器页面地址可以是$30~$3F,而对于 MC9S12DG128 单片机,则
可以是$30~$37。因此,在设置断点时,一定要正确设置 PPAGE 的地址。
当 CPU 运行至某一断点停下时,两个断点同时被清除,需要的话,下次运行时的两个
断点要重新设置。设置两个断点的意图在于,当用户不知道所设置的断点是否是指令的操
作码时,可以设两个连续的地址,或者在用户不知道程序可能走向哪个分支时,将断点设
定在两个不同的分支。
Z 命令:
清除断点。Z命令让断点模块禁止,断点清除。
内存 0028~002F 是硬件断点寄存器。从图 A1-9 可以看出,执行 Z 命令后,断点寄存
器均被清零。
图 A1-9 用 Z 命令使断点寄存器清零
三、改变波特率
用户可以直接改变波特率寄存器的值选择通讯的波特率。波特率的寄存器地址为
$00C9。默认的值为$9C,对应的波特率为 9600。以下是波特率寄存器的值和波特率的对应
关系。
波特率寄存器的值 波特率
$9c 9600
$4e 19200
$27 38400
$1a 57600
$d 115200
改变方法如下:
如图 A1-10 所示,使用 M 命令修改地址为$00C9 寄存器的内容。
13
《单片机原理》课程实验指导书
图 A1-10 将开发板波特率修改为 19200
以上是把波特率寄存器$00C9 的值从 9C 改为 4E。由于波特率改变,E 没有显示出来。
因此,用户要断开超级终端的连接,把波特率改为 19200,然后连接即可。修改 PC 的 COM1
的波特率如图 A1-11 所示,重新显示波特率寄存器的内容见图 A1-12,可以看到更新后的
值$4E。
图 A1-11 修改 PC 的 COM1 的波特率
图 A1-12 重新显示波特率寄存器的内容$4E
14
《单片机原理》课程实验指导书
附录二 编译器 Codewarrior for HCS12 操作说明
1.安装 CodeWarrior。
2.打开 CodeWarrior 窗口,如图 A2-1 所示,点击 file,选 new。
3.如图 A2-2 所示,选择 HC12 Stationary,输入工程的名字,如 LED。在“Location”对话
框中指定该过程目录所在硬盘的位置,点击“OK”。
图 A2-1 建立工程
图 A2-2 进入单片机系列库
15
《单片机原理》课程实验指导书
4. 使用 C 编译器
如图 A2-3、A2-4、A2-5 所示,选择\legacy\simulator\C Generic,然后点击 OK 按
钮,则建成一个新的工程。CodeWarrior 软件包的工程项目管理器会自动生成相应的文件
系统,如图 A2-6 所示。
图 A2-3 HC12/S12 单片机各系列选项 图 A2-4 选择仿真选项 Simulator
图 A2-5 选择 C 编译器 图 A2-6 工程目录与文件结构
其中,default.prm 文件决定了程序的代码区和数据区。
5. 编写应用程序
双击 main.c 文件,敲入以下代码:
/* LEDS.C example file for Motorola MC9S12DP256 Evaluation Board */
#include
/* port B definitions */
#define PORTB (*((volatile unsigned char*)(0x0001)))
#define DDRB (*((volatile unsigned char*)(0x0003)))
16
《单片机原理》课程实验指导书
/* Timer TCNT definitions */
#define TSCR1 (*((volatile unsigned char*)(0x0046)))
#define TSCR2 (*((volatile unsigned char*)(0x004D)))
#define TFLG2 (*((volatile unsigned char*)(0x004F)))
#define TCNT (*((volatile unsigned short*)(0x0044)))
int counter;
void TimerOverflow(void) {
/* This function waits for th timer overflow.
Then it changes the LEDs bargraph display */
while (TCNT != 0x0000);
while (TCNT == 0x0000);
counter++;
if (counter == 8) PORTB = 0x7e; /* LEDs' lightshow */
if (counter == 7) PORTB = 0xbd;
if (counter == 6) PORTB = 0xdb;
if (counter == 5) PORTB = 0xe7;
if (counter == 4) PORTB = 0xe7;
if (counter == 3) PORTB = 0xdb;
if (counter == 2) PORTB = 0xbd;
if (counter == 1) PORTB = 0x7e;
}
void main(void)
{
TSCR1 = 0x80; /* enable timer TCNT */
TSCR2 = 0x03; /* TCNT prescaler setup */
counter = 0;
DDRB=0xff; /* PTB as output */
PORTB=0xff; /* LEDs off */
for (;;)
{
TimerOverflow();
if (counter >= 8) {
counter = 0;
TSCR2 = 0x05; /* TCNT prescaler switch */
}
}
}
17
《单片机原理》课程实验指导书
6. 如图 A2-7 所示,点击 SAVE 按钮,完成 main.c 文件的编写。
图 A2-7 保存应用程序 main.c
7.定义装载地址
双击 default.prm 文件,会看到如图 A2-8 所示代码。
图 A2-8 用于定义目标代码装载地址的 default.prm 文件
18
《单片机原理》课程实验指导书
MY_RAM 是程序的数据区,MY_ROM 是程序的代码区,VECTOR 0 _Startup 表示把单片机
的 0xFFFE 处的复位向量设为这个程序的入口地址。注意,如果使用监控程序调试,0xF000
到 0xFFFF 受保护,不能擦写,因为这里是监控程序所在的地方。这里可以不作改动。
8. 如图 A2-9 所示,点击 MAKE 按钮,实现 C 语言应用程序的编译与链接。
图 A2-9 应用程序的编译与链接
9.编译完成后,在如图 A2-10 所示的该工程所在的文件夹中,打开 bin 文件夹,可以看见
如图 A2-10 所示的 CGeneric.abs.s19 文件,这就是编译的结果。
图 A2-10 工程文件夹
19
《单片机原理》课程实验指导书
图 A2-11 编译的结果
10.向目标机下载程序
用监控程序的 F 命令把该文件下载到单片机中。如图 A2-12 所示,在超级终端窗口下
实现 PC 机与目标机通信以后,在监控程序提示符下,先键入 F,然后按“传送”,选“发
送文本文件”。
如图 A2-13 所示,找到刚才的 CGeneric.abs.s19,按“打开(O)”,注意文件类型
选“所有文件(*.*)”,程序便自动下载到单片机中。监控程序每收到一行并成功写入 Flash
后,便会向 PC 机回送一个“*”。屏幕上将显示如图 A2-14 所示的程序下载过程。
图 A2-12 向目标机下载 S 格式程序
11.运行程序
如图A2-15所示,用CTRL+P命令输入程序起始地址C029,将程序指针PC修改成$C029,
键入 G 命令,运行程序。
20
《单片机原理》课程实验指导书
图 A2-13 将 S19 格式文件通过 PC 机串行口发送到目标机
图 A2-14 PC 机显示 S19 格式文件的下载过程
图 A2-15 键入 G 命令运行程序
21
《单片机原理》课程实验指导书
22
注意
程序的入口地址是 C029 而不是 C000,这是因为工程是从 START12.C 开始执行,然后
再执行用户的 main.c。这是 codewarrior 内部规定的,用户只需知道就可。用户程序的入
口地址是用户在 default.prm 文件中定义的代码地址加上 29。例如 default.prm 文件定义
如下:
/* This is a generic Prm File
If it does not fit your needs, you may adapt it or choose an another one
in the linker preference panel */
NAMES END
SECTIONS
MY_RAM = READ_WRITE 0x1000 TO 0x1FFF;
MY_ROM = READ_ONLY 0x4000 TO 0x7FFF;
PLACEMENT
DEFAULT_ROM INTO MY_ROM;
DEFAULT_RAM INTO MY_RAM;
END
STACKSIZE 0x600
VECTOR 0 _Startup /* set reset vector on _Startup */
则用户入口地址是 4029
用户可以简化和修改 Startup 文件,重新定义程序的起始地址。