第一章搭建实验环境1、实验电路板及下载器实物图片2、实验电路图本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。
CPU采用飞思卡尔8位单片机MC9S08JM60CLD,(电路图介绍)图1-3实验资源部分电路图1-4LCD串口1602液晶电路图1-5RS232接口电路图1-6数码管显示电路图1-7发光管、ad转换以及按键电路图1-83、集成开发软件环境的建立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\USBDM4.7.0\USBDM_Drivers\Drivers下有下载器的usb驱动.因此在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动安装位置到以上目录即可。
3〉运行USBDM_4_7_0i_Win之后,还会在目录:C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior集成开发环境下对usb下载器的调试、下载的支持。
4、C语言编程基础第二章 LED闪烁程序编写过程1、新建工程运行单片机集成开发环境codewarrior IDE出现如下界面●Create New Project :创建一个新项目工程●Load Example Project :加载一个示例工程●Load Previous Project :加载以前创建过的工程●Run Getting started Tutorial:运行CodeWarrior软件帮助文档●Start Using CodeWarrior:立刻使用CodeWarrior点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口可以选择最后一个开源下载器HCS08 Open Source BDM。
下一步后出现编程语言选择和指定项目名称以及存放位置界面选择C语言,项目名称就写“LED闪烁”,保存位置自己决定,但要记住。
后面有些选项就暂时跳过,选择“完成”后,并将文件夹展开的样子如下:点击“make”快捷按钮正确编译后,左边的钩钩全部消失,同时在Code和Data列出现了相关的代码和数据量。
2、修改主文件并下载运行在左侧双击mian.c文件,打开该文件的编辑界面,修改文件直到下面模样:修改完main.c文件后,点击最右边的debug按钮。
出现下载器配置界面,如果没出现说明下载器没有正确安装。
选择“5V”是打算让下载器给目标板供电5V。
确保其它选项都对后,选择“ok”出现装载警告继续“ok”后程序下载到单片机中。
在调试界面里点击运行按钮,让程序全速运行后应该看到两个LED交替点亮。
3、延伸讨论1〉在修改主程序main.c的过程中,对寄存器SOPT1、PTBDD_PTBDD0、PTBD_PTBD0的名称问题,对于刚入手者确实有一定难度。
由于包含了文件"derivative.h",该文件又包含了“MC9S08JM60.h”,这是与选用的cpu相关的,建议打开这个cpu相关的头文件仔细阅读,对于B口数据寄存器的定义如下,如果看不懂建议要搞懂C语言的数据结构和联合的用法。
关于方向寄存器的定义与此相似。
循环的PLLLEDMCGC2= 0x36;while(!MCGSC_OSCINIT) ;MCGC1 = 0xB8;while(MCGSC_IREFST);while(MCGSC_CLKST!=2);MCGC1 = 0x88; // RDIV = 2; //0x90;3〉如果没有硬件,也可以完全采用软件仿真的方法进行程序设计,改动过程如下:a〉首先确保在工程硬件连接下拉中选择第一项“Full Chip Simulation”,如果有硬件,对于自制的开源下载器则应该选择“HCS08 Open Source BDM”b〉点击“debug”按钮后不会出现下载器配置界面,而是直接进入调试界面,在调试界面选择“Component/Open…”菜单。
在弹出的界面里,双击虚拟可视工具。
在虚拟可视工具编辑界面被打开后,就可以从主菜单栏选择“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后,在空白的地方右键鼠标并选择属性,打开属性页在属性页的最下面选择刷新模式为周期性“Periodical”,刷新间隔可以用缺省的10ms。
全部修改完成后选择保存成文件以备后用。
既然是采用没有硬件的完全仿真模式,一定要去掉跟硬件相关的代码,比如讨论2中添加的将时钟切换到外部晶振的代码一定要去掉。
然后就可以全速运行了。
在完全仿真模式下,LED闪烁的速度跟实际硬件相比还是不一样的,只能是功能仿真。
第三章按键程序设计过程1、按键与cpu的连接,从图1-3可以看出,按键4、按键5分别与PTB4和PTB5相连。
该款单片机MC9S08JM60一共有8个键盘输入口,从数据手册可以看出非常分散。
总体来说,该款单片机的八个键盘中断输入特点如下:1〉可以单独允许某一个中断输入脚,其他不用的做一般I/O;2〉每个中断输入脚都可以单独编程设置为下降沿触发、上升沿触发、下降沿和低电平触发、上升沿和高电平触发;3〉所有中断输入口公用一个中断向量,可允许或者禁止中断;4〉键盘中断可以将芯片从低功耗中唤醒到正常工作模式。
2、跟键盘中断相关的三个寄存器,分别为状态与控制、管脚允许、中断触发沿模式选择。
1〉K BI Status and Control Register (KBISC)2〉KBI Pin Enable Register (KBIPE)3〉KBI Edge Select Register (KBIES)3、键盘中断使用的初始化过程;KBI首次使用时,为了不产生错误中断,建议初始化过程如下6步:1〉清除KBISC中的KBIE位,以屏蔽KBI中断;2〉设置KBIES寄存器中的KBEDGn位,选择使用管脚的中断触发极性;3〉如果需要内部上拉/下拉电阻,配置PTxPE(PTGPE、PTDPE、PTBPE)位;4〉设置KBIPE寄存器中的KBIPEn ,允许对应管脚的KBI功能;5〉给KBISC寄存器中的KBACK位写1,以清除所有KBI中断标志;6〉设置KBISC寄存器中的KBIE位,以允许KBI中断。
4、建立实验工程按照第二章的步骤,建立工程“按键控制LED”,该工程的最终目的是利用两个按键控制两个LED的亮灭,当按压key4时,D1的亮灭状态发生改变;按压key5时,D2的亮灭状态发生改变。
修改主文件直到如下模样:5、讨论1〉该键盘中断程序与上一章程序最大的区别就是使用了中断的方法进行程序设计,主文件中有两个函数:void main(void){ }interrupt VectorNumber_Vkeyboard voidkbi_isr( ){ }第二个函数中,interrupt为C语言保留字,表明后面的kbi_isr()是中断函数,中间的VectorNumber_Vkeyboard是该单片机键盘中断的中断号,来自于头文件MC9S08JM60.h,在该文件开头位置有语句#define VectorNumber_Vkeyboard 25关于中断的更多内容,参加后续章节。
2〉由于该单片机的8个键盘中断共用一个中断号,因此为了区别到底是哪个按键被按下,还需要在中断程序里读取管脚对应的数据寄存器的数值,根据数据寄存器的数值决定哪个键被按下。
比如,为了区别key4和key5,这两个管脚分别为PTB4和PTB5,因此需要读取B口的数据寄存器PTBD,根据PTBD_PTBD4和PTBD_PTBD5的值可以知道key4或者key5是否被按下。
3〉在读取相应的数据寄存器前,可以有小的延时,以便去除按键的机械抖动。
4〉在键盘中断程序的最后语句KBISC = 0x06; 是为了对KBACK写“1”以便清除中断标志。
第四章SCI串口通讯程序设计过程1、搞清楚SCI串口通讯的硬件连接,从图1-3和1-6中可以看出,实验板使用了第一个串口,对应管脚PTE0(发送)、PTE1(接收),经过RS232电平转换芯片ICL3232E之后,连接到9针接口COM0上。
2、SCI串口的初始化Sci串口初始化主要是设置波特率,jm60单片机的波特率设置寄存器有SCI1BDH和SCI1BDL波特率设置遵循公式:SCI 波特率 = BUSCLK/(16×BR),公式里的BR就是需要初始化设置给SCI1BDH、SCI1BDL的13位数值。
由于头文件的帮忙,对SCI1BDH、SCI1BDL的设置可以用一条语句整体赋值就是SCI1BD = BUSCLK/16/SCI波特率;比如要设置成9600的波特率,而且知道总线时钟为8MHz,则波特率设置语句为:SCI1BD = 8000000/16/9600;3、SCI寄存器设置SCIxC1SCIxC2SCIxS1SCIxS2SCIxC34、实用的串口通讯程序设计子程序由于JM60单片机有两路SCI串口,实验电路板上用到了第一路,因此下面针对第一路进行设计,读者只要稍微改动就可以用到第二路。
1〉发送一个字符2〉数字转换成对应的ASCII码3〉发送可以在文本文件中显示成十六进制的数据4〉发送字符串5〉接收一个字符5、与xp超级终端构建人机界面实验设计假设编写程序,在硬件连接正常的情况下,开机运行时超级终端显示菜单用户在超级终端激活状态下,敲击键盘数字1将使得D1的亮灭状态转换一次,敲击键盘数字2将使得D2的亮灭状态转换一次,敲击键盘数字3将使得D1和D2的亮灭状态同时转换一次。