飞思卡尔8位单片机MC9S08JM60开发板实践教程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MCGC2= 0x36; while(!MCGSC_OSCINIT) ; MCGC1 = 0xB8; while(MCGSC_IREFST); while(MCGSC_CLKST!=2); MCGC1 = 0x88; // RDIV = 2; //0x90; //RDIV = 4 MCGC3 = 0x46; // 24 倍频; //0x44;//16 倍频 while(!MCGSC_PLLST); while(!MCGSC_LOCK); MCGC1 = 0x08; //切换到 PLL 0x10; while(MCGSC_CLKST!=3);
2〉
关于采用 for 循环进行延时的问题。 首先这种方法很难做到精确的 延时,而且对于首次使用这款单片机的人来说,粗略延时都很难 估算,这是因为 for 循环的延时跟系统的总线时钟有关。虽然电路 板上焊接了 4MHz 晶振,但上面的例子并没有用到,用的是内部 缺省时钟。内部缺省时钟在不修改参数的情况下,总线时钟是 8MHz。如果在主函数死循环前面添加修改时钟的代码,将时钟切 换到外部晶振,同时启用内部的 PLL 锁频环,将下面的代码放在 for(;;)死循环之前,将会产生 24MHz 的总线时钟,重新下载运行后 发现 LED 闪烁的速度明显加快。
/*** PTBD - Port B Data Register; 0x00000002 ***/ typedef union { byte Byte; struct { byte PTBD0 :1; /* Port B Data Register Bit 0 */ byte PTBD1 :1; /* Port B Data Register Bit 1 */ byte PTBD2 :1; /* Port B Data Register Bit 2 */ byte PTBD3 :1; /* Port B Data Register Bit 3 */ byte PTBD4 :1; /* Port B Data Register Bit 4 */ byte PTBD5 :1; /* Port B Data Register Bit 5 */ byte PTBD6 :1; /* Port B Data Register Bit 6 */ byte PTBD7 :1; /* Port B Data Register Bit 7 */ } Bits; } PTBDSTR; extern volatile PTBDSTR _PTBD @0x00000002; #define PTBD _PTBD.Byte #define PTBD_PTBD0 _PTBD.Bits.PTBD0 #define PTBD_PTBD1 _PTBD.Bits.PTBD1 #define PTBD_PTBD2 _PTBD.Bits.PTBD2 #define PTBD_PTBD3 _PTBD.Bits.PTBD3 #define PTBD_PTBD4 _PTBD.Bits.PTBD4 #define PTBD_PTBD5 _PTBD.Bits.PTBD5 #define PTBD_PTBD6 _PTBD.Bits.PTBD6 #define PTBD_PTBD7 _PTBD.Bits.PTBD7
4、 C语言编程基础
第二章 LED 闪烁程序编写过程
1、 新建工程
运行单片机集成开发环境 codewarrior IDE
出现如下界面
Create New Project :创建一个新项目工程 Load Example Project :加载一个示例工程 Load Previous Project :加载以前创建过的工程 Run Getting started Tutorial:运行 CodeWarrior 软件帮助文档 Start Using CodeWarrior: 立刻使用 CodeWarrior
总体来说,该款单片机的八个键盘中断输入特点如下: 1〉 可以单独允许某一个中断输入脚,其他不用的做一般I/O; 2〉 每个中断输入脚都可以单独编程设置为下降沿触发、上升沿触发、 下降沿和低电平触发、上升沿和高电平触发; 3〉 所有中断输入口公用一个中断向量,可允许或者禁止中断; 4〉 键盘中断可以将芯片从低功耗中唤醒到正常工作模式。
2、 跟键盘中断相关的三个寄存器,分别为状态与控制、管脚允许、中断触发沿模式选 择。
1〉 KBI Status and Control Register (KBISC)
3 KBF 2 KBACK 1 KBIE 0 KBMOD
图 1-6
数码管显示电路
图 1-7
发光管、ad转换以及按键电路
图 1-8
3、 集成开发软件环境的建立
1〉运行文件 CW_MCU_V6_3_SE.EXE,在电脑C盘安装飞思卡尔8位(及 简化32位)单片机集成开发环境codewarrior6.3版本 2〉运行
USBDM_4_7_0i_Win,这个程序会在 c 盘的程序文
件夹下增加一个目录 C:\Program Files\pgo\USBDM 4.7.0, 在这个目录下 a>C:\Program Files\pgo\USBDM 4.7.0\FlashImages\JMxx 下的文
件 USBDM_JMxxCLD_V4.sx 是下载器的固件文件; b>C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers 下 有下载器的 usb 驱动.因此在插入 usb 下载器,电脑提示发现新 的 usb 硬件的时候, 选择手动指定驱动安装位置到以上目录即可。
第一章
搭建实验环境
1、 实验电路板及下载器实物图片
2、 实验电路图 本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。CPU 采用飞思卡尔8位单片机MC9S08JM60CLD, (电路图介绍)
图 1-3
实验资源部分电路
图 1-4 LCD串口1602液晶电路
图 1-5
RS232接口电路
PTBD_PTBD0 = 1; //B0 输出“1” ,D1 灭 PTBD_PTBD1 = 0; //B1 输出“0” ,D2 亮 for(i = 0;i<2000;i++){ //延时 for(j=0;j<100;j++){ } } //__RESET_WATCHDOG();//看门狗已经关闭,不需要喂狗了 } } 修改完 main.c 文件后,点击最右边的 debug 按钮。
如果没有硬件,也可以完全采用软件仿真的方法进行程序设计, 改动过程如下: a〉首先确保在工程硬件连接下拉中选择第一项“Full Chip Simulation” ,如 果有硬件,对于自制的开源下载器则应该选择“HCS08 Open Source BDM”
3〉
b〉点击“debug”按钮后不会出现下载器配置界面,而是直接进入调试界 面,在调试界面选择“Component/Open…”菜单。
在属性页的最下面选择刷新模式为周期性“ Periodical” ,刷新间隔可以用 缺省的 10ms。 全部修改完成后选择保存成文件以备后用。
既然是采用没有硬件的完全仿真模式,一定要去掉跟硬件相关的代码,比 如讨论 2 中添加的将时钟切换到外部晶振的代码一定要去掉。然后就可以全速 运行了。在完全仿真模式下,LED 闪烁的速度跟实际硬件相比还是不一样的, 只能是功能仿真。
3〉运行
USBDM_4_7_0i_Win 之后,还会在目录: for Microcontrollers
C:\Program
Files\Freescale\CodeWarrior
V6.3\prog\gdi 下增加一些文件,从修改时间上来看,增加了 6 个 文件,这些文件是为了在 codewarrior 集成开发环境下对 usb 下载 器的调试、下载的支持。
选择 C 语言,项目名称就写“LED 闪烁” ,保存位置自己决定,但要记住。 后面有些选项就暂时跳过,选择“完成”后,并将文件夹展开的样子如下:
点击 “make” 快捷按钮正确编译后, 左边的钩钩全部消失, 同时在 Code 和 Data 列出现了相关的代码和数据量。
2、
Biblioteka Baidu
修改主文件并下载运行
在左侧双击 mian.c 文件, 打开该文件的编辑界面, 修改文件直到下面模样:
#include <hidef.h> /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ void main(void) { // EnableInterrupts; //不开中断,因此将此句去掉了 word i,j; //定义两个 word(int)型的变量 i 和 j SOPT1 = 0; //关闭看门狗 PTBDD_PTBDD0 = 1; //设置 B0 为输出 PTBDD_PTBDD1 = 1; //设置 B1 为输出 for(;;) { PTBD_PTBD0 = 0; PTBD_PTBD1 = 1; for(i = 0;i<2000;i++){ for(j=0;j<100;j++){ } } //死循环,类似 while(1) //B0 输出“0” ,点亮 D1,见图 1-8 //B1 输出“1” ,D2 灭 //2 个 for 循环嵌套,延时大约半秒
出现下载器配置界面,如果没出现说明下载器没有正确安装。选择“5V”是打 算让下载器给目标板供电 5V。确保其它选项都对后,选择“ok”
出现装载警告
继续“ok”后程序下载到单片机中。在调试界面里点击运行按钮,让程序全速 运行后应该看到两个 LED 交替点亮。
3、
延伸讨论
1〉
在修改主程序 main.c 的过程中, 对寄存器 SOPT1、 PTBDD_PTBDD0、 PTBD_PTBD0 的名称问题,对于刚入手者确实有一定难度。由于包 含了文件 "derivative.h",该文件又包含了“ MC9S08JM60.h” ,这 是与选用的 cpu 相关的,建议打开这个 cpu 相关的头文件仔细阅 读,对于 B 口数据寄存器的定义如下,如果看不懂建议要搞懂 C 语言的数据结构和联合的用法。关于方向寄存器的定义与此相似。
在弹出的界面里,双击虚拟可视工具。
在虚拟可视工具编辑界面被打开后,就可以从主菜单栏选择“Visualization Tool/Add New Instrument/LED”
在放好 LED, 并调节大小合适后, 在 LED 上右击鼠标, 选择第一项打开 LED 的属性页
在属性页中修改该 LED 对应的内存 memory 的地址为 0x02 (从讨论 1 中已 经知道 B 口的数据寄存器的地址就是 0x02) ,同时修改“Bitnumber to display” 为“0” ,也就是该 LED 对应 PTBD_PTBD0。采用相同的方法放另一个 LED,修 改属性页使得对应 PTBD_PTBD1。放好两个 LED 后,在空白的地方右键鼠标并 选择属性,打开属性页
点击 Create New project 按钮,以创建一个新的工程,出现选择 CPU 的界 面如下,请选择 HCS08/HCS08JM Family/MC9S08JM60,在右边的 Connection 窗口可以选择最后一个开源下载器 HCS08 Open Source BDM。
下一步后出现编程语言选择和指定项目名称以及存放位置界面
第三章 按键程序设计过程
1、 按键与 cpu 的连接,从图 1-3 可以看出,按键 4、按键 5 分别与 PTB4 和 PTB5 相连。 该款单片机 MC9S08JM60 一共有 8 个键盘输入口,从数据手册可以看出非常分散。 键盘中断输入 KBIP0 KBIP1 KBIP2 KBIP3 KBIP4 KBIP5 KBIP6 KBIP7 对应管脚 PTG0 PTG1 PTD2 PTD3 PTB4 PTB5 PTG2 PTG3 PTG PTB PTD 所属端口 PTG