飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx

上传人:b****5 文档编号:28310380 上传时间:2023-07-10 格式:DOCX 页数:73 大小:1.10MB
下载 相关 举报
飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx_第1页
第1页 / 共73页
飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx_第2页
第2页 / 共73页
飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx_第3页
第3页 / 共73页
飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx_第4页
第4页 / 共73页
飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx_第5页
第5页 / 共73页
点击查看更多>>
下载资源
资源描述

飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx

《飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx》由会员分享,可在线阅读,更多相关《飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx(73页珍藏版)》请在冰豆网上搜索。

飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料.docx

飞思卡尔8位单片机MC9S08JM60开发板实践教程共40页word资料

第一章搭建实验环境

其实,任何一门学科都离不开死记硬背,关键是记忆有技巧,“死记”之后会“活用”。

不记住那些基础知识,怎么会向高层次进军?

尤其是语文学科涉猎的范围很广,要真正提高学生的写作水平,单靠分析文章的写作技巧是远远不够的,必须从基础知识抓起,每天挤一点时间让学生“死记”名篇佳句、名言警句,以及丰富的词语、新颖的材料等。

这样,就会在有限的时间、空间里给学生的脑海里注入无限的内容。

日积月累,积少成多,从而收到水滴石穿,绳锯木断的功效。

系统时钟设置

这个工作可让学生分组负责收集整理,登在小黑板上,每周一换。

要求学生抽空抄录并且阅读成诵。

其目的在于扩大学生的知识面,引导学生关注社会,热爱生活,所以内容要尽量广泛一些,可以分为人生、价值、理想、学习、成长、责任、友谊、爱心、探索、环保等多方面。

如此下去,除假期外,一年便可以积累40多则材料。

如果学生的脑海里有了众多的鲜活生动的材料,写起文章来还用乱翻参考书吗?

#include"App\Include\App.h"

单靠“死”记还不行,还得“活”用,姑且称之为“先死后活”吧。

让学生把一周看到或听到的新鲜事记下来,摒弃那些假话套话空话,写出自己的真情实感,篇幅可长可短,并要求运用积累的成语、名言警句等,定期检查点评,选择优秀篇目在班里朗读或展出。

这样,即巩固了所学的材料,又锻炼了学生的写作能力,同时还培养了学生的观察能力、思维能力等等,达到“一石多鸟”的效果。

#ifndef_MCG_C

#define_MCG_C

//oscillator12MHZ倍频为24MHZ()先8分频后16倍频

voidS_MCGInit(void)

/*theMCGisdefaultsettoFEImode,itshouldbechangetoFBEmode*/

MCGC2

[7:

6]BDIV

总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。

这控制总线频率。

00编码0–时钟1分频

01编码1–时钟2分频(复位后默认)

10编码2–时钟4分频

11编码3–时钟8分频

[5]RANGE

频率范围选择–选择外部振荡器或者外部时钟源的频率范围。

1选择1MHz到16MHz外部振荡器的频率范围。

(1MHz到40MHz的外部时钟电源)的高频率范围

0选择32kHz到100kHz外部振荡器的频率范围。

(32kHz到1MHz的外部时钟电源)的低频率范围

[4]HGO

高增益振荡器选择–控制外部振荡器操作模式。

1配置外部振荡器为高增益运行

0配置外部振荡器为低功耗运行

[3]LP

低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效

1FLL(或PLL)在忽略模式(低功耗)中为无效的。

0FLL(或PLL)在忽略模式中为无效的。

[2]EREFS

外部参考时钟选择–为外部参考选择时钟源

1选择振荡器

0选择外部时钟源

[1]ERCLKEN

外部参考时钟使能–使能外部参考时钟作为MCGERCLK

1MCGERCLK激活

0MCGERCLK无效

[0]EREFSTEN

外部参考时钟停止使能

MCGC20b00110110激发外部时钟(晶振)(没有使能)

MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLKEN_MASK;

while(!

MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。

MCGC1

[7:

6]

6:

CLKS0

7:

CLKS1

时钟源选择–选择系统时钟源

00编码0–FLL或者PLL被选择

01编码1–内部参考时钟被选择

10编码2–外部参考时钟被选择

11编码3–保留,默认为00

[5:

3]

3;RDIV0:

1;

4;RDIV1:

1;

5;RDIV2:

1;

参考分频因子–选择由IREFS位确定的参考时钟的分频因子。

如果FLL被选择,结果频率必须在31.25kHz到39.0625kHz范围之内内.

如果PLL被选择,结果频率必须在1MHz到2MHz之间。

000编码0–参考时钟1分频(复位默认)

001编码1–参考时钟2分频

010编码2–参考时钟4分频

011编码3–参考时钟8分频

100编码4–参考时钟16分频

101编码5–参考时钟32分频

110编码6–参考时钟64分频

111编码6–参考时钟128分频

[2]

IREFS

内部参考电源选择

1选择内部参考时钟

0选择外部参考时钟

[1]IRCLKEN

内部参考时钟使能–使能内部参考时钟用作MCGIRCLK

1MCGIRCLK激活

0MCGIRCLK禁止

[0]IREFSTEN

内部参考停止使能–控制当MCG进入停止模式的时候是否选择内部参考时钟保持使能。

1如果在进入停止模式之前IRCLKEN被设置或者是MCG在FEI,FBI,或者是BLPI模式,

在停止模式中内部参考时钟保持使能,

0内部参考时钟在停止模式中无效

MCGC1外部参考时钟;8分频;外部时钟激活;

MCGC1=MCGC1_CLKS1_MASK|MCGC1_RDIV1_MASK|MCGC1_RDIV0_MASK|

MCGC1_IRCLKEN_MASK|MCGC1_IREFSTEN_MASK;//enableexternalOscollator;8分频

[7]LOLS

锁定丢失状态–此位标志了FLL或者是PLL的锁定状态。

当在要求锁定之后,锁定使能时LOLS被置位,

FLL或者PLL输出频率降低解锁超出了频率范围

DunlLOLIE决定当通过复位或者是写逻辑以到LOLS将LOLS清除时是否中断响应。

想LOLS写0没有影响。

[6]LOCK

锁定状态–指示FLL或者是PLL要求锁定。

当FLL和PLL无效时锁定检测无效。

当改变以下任何位时锁定状态位被置位:

IREFS,PLLS,RDIV[2:

0],TRIM[7:

0(如果处于FEI或者FBI模式中),

或者是VDIV[3:

0](如果处于PBE或者PEE模式中),

将引起锁定状态为清除并且保持直到FLL或者PLL要求锁定。

进入停止模式同样能引起BCK状态位清除并保持到FLL或者PLL要求锁定。

进入BLPI或者BLPE模式将同样导致锁定位清除并保持直到MCG退出这些模式并且FLL或者PLL要求锁定。

0FLL或者PLL当前未锁定

1FLL或者PLL当前锁定

[5]PLLST

PLL选择状态–PLLST位指示了PLLS时钟的当前时钟源。

当向PLLS位写操作时PLLST位不会立即更新。

0FLL时钟作为PLLS的时钟源

1PLL时钟作为PLLS的时钟源

[4]REFST

内部参考状态–IREFST位指示了参考时钟的当前时钟源。

在向IREFS位写后,IREFST不会立即更新。

0参考时钟源是外部参考时钟(由MCGC2寄存器中EREFS位决定的振荡器或者是外部时钟源)

1参考时钟源是内部参考时钟

[3:

2]CLKST

时钟模式状态–CLKST位指示了当前时钟模式。

在想CLKS位写入后,CLKST位不会立即更新。

00编码0–FLL的输出被选择

01编码1–内部参考时钟被选择

10编码2–外部参考时钟被选择

11编码3–PLL的输出被选择

[1]SCINIT

OSC初始化–如果外部参考时钟被选择(通过置位ERCLKEN或者通过MCG处于FEE,FBE,PEE,PBE,BLPE模式中),

如果EREFS被置位,在外部振荡器时钟完成的初始化周期EREFS将被置位。

此位只有当EREFS被清除或者是当MCG在FEI,FBI,BLPI模式中并且ERCLKEN被清除的时候才会被清除。

[0]FTRIM

MCG精密校正–控制内部参考时钟频率的最小的校正。

设置FTRIM将增加周期,清除FTRIM将会降低周期。

如果FTRIM值被存储在非易失性的存储器中,用户应该将其拷贝到寄存器的FTRIM位。

MCGSC0b000111000b00001000判断是否外部时钟被选择了,没选择才选择

while((MCGSC&0x1C)!

=0x08);//0b00011100checktheexternalreferenceclockisselectedornot

/*SwitchtoPBEmodefromFBE*/

MCGC3

[7]LOLIE

锁定丢失中断使能–决定当出现丢失锁定时是否产生一个中断。

LOLIE位只有当LOLS被设置时才有作用

0不响应丢失锁定中断

1产生丢失响应中断

[6]PLLS

PPL选择–控制PLL还是FLL被选择。

如果PLLS位清除,PLL在所有模式中无效。

如果PLLS被设置,FLL在所有模式中无效。

1PLL被选择

0FLL被选择

[5]CME

时钟监视器使能|决定当丢失外部时钟出现时是否产生复位请求。

无论当MCG使用外部时钟并处于操作模式(FEE,FBE,PEE,PBE或者BLPE)

还是外部参考时钟有效(ERCLKEN=1在MCGC2寄存器中),MCE位只能被设置为逻辑1.

无论什么时候CME位被设置为逻辑1,MCGC2寄存器中RANGE位的值不应该被改变。

0时钟监视器被禁止

1当丢失外部时钟时产生一个复位请求

[3:

0]VDIV

VCO分频因子–选择PLL的输出VCO的分频因子?

DIV位确定参考时钟频率的倍频因子(M)

0000编码0-保留

0001编码1-4倍频

0010编码2–8倍频

0011编码3-12倍频

0100编码4-16倍频

0101编码5–20倍频

0110编码6–24倍频

0111编码7–28倍频

1000编码8–32倍频

1001编码9–36倍频

1010编码10–40倍频

1011编码11–保留(默认M=40)

11xx编码12-15–保留(默认M=40)

MCGC3选择PLLS16倍频0b01000100

MCGC3=MCGC3_PLLS_MASK|MCGC3_VDIV3_MASK;

while((MCGSC&0x48)!

=0x48);//waitforthePLLislocked&

//0b01001000锁定外部时钟

/*SwitchtoPEEmodefromPBEmode*/

MCGC1&=MCGC1_RDIV2_MASK|MCGC1_RDIV1_MASK|MCGC1_RDIV0_MASK|

MCGC1_IREFS_MASK|MCGC1_IRCLKEN_MASK|MCGC1_IREFSTEN_MASK;

//选定

while((MCGSC&0x6C)!

=0x6C);//0b01101100

#endif

1、实验电路图

本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。

CPU采用飞思卡尔8位单片机MC9S08JM60CLD,(电路图介绍)

图1-3

实验资源部分电路

图1-4

LCD串口1602液晶电路

图1-5

RS232接口电路

图1-6

数码管显示电路

图1-7

发光管、ad转换以及按键电路

图1-8

2、集成开发软件环境的建立

1〉运行文件CW_MCU_V6_3_SE.EXE,在电脑C盘安装飞思卡尔8位(及简化32位)单片机集成开发环境codewarrior6.3版本

2〉运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:

\ProgramFiles\pgo\USBDM4.7.0,在这个目录下

a>C:

\ProgramFiles\pgo\USBDM4.7.0\FlashImages\JMxx下的文件USBDM_JMxxCLD_V4.sx是下载器的固件文件;

b>C:

\ProgramFiles\pgo\USBDM4.7.0\USBDM_Drivers\Drivers下有下载器的usb驱动.因此在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动安装位置到以上目录即可。

3〉运行USBDM_4_7_0i_Win之后,还会在目录:

C:

\ProgramFiles\Freescale\CodeWarriorforMicrocontrollersV6.3\prog\gdi下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior集成开发环境下对usb下载器的调试、下载的支持。

3、C语言编程基础

第二章LED闪烁程序编写过程

1、新建工程

运行单片机集成开发环境codewarriorIDE

出现如下界面

●CreateNewProject:

创建一个新项目工程

●LoadExampleProject:

加载一个示例工程

●LoadPreviousProject:

加载以前创建过的工程

●RunGettingstartedTutorial:

运行CodeWarrior软件帮助文档

●StartUsingCodeWarrior:

立刻使用CodeWarrior

点击CreateNewproject按钮,以创建一个新的工程,出现选择CPU的界面如下,请选择HCS08/HCS08JMFamily/MC9S08JM60,在右边的Connection窗口可以选择最后一个开源下载器HCS08OpenSourceBDM。

下一步后出现编程语言选择和指定项目名称以及存放位置界面

选择C语言,项目名称就写“LED闪烁”,保存位置自己决定,但要记住。

后面有些选项就暂时跳过,选择“完成”后,并将文件夹展开的样子如下:

点击“make”快捷按钮正确编译后,左边的钩钩全部消失,同时在Code和Data列出现了相关的代码和数据量。

2、修改主文件并下载运行

在左侧双击mian.c文件,打开该文件的编辑界面,修改文件直到下面模样:

#include/*forEnableInterruptsmacro*/

#include"derivative.h"/*includeperipheraldeclarations*/

voidmain(void){

//EnableInterrupts;//不开中断,因此将此句去掉了

wordi,j;//定义两个word(int)型的变量i和j

SOPT1=0;//关闭看门狗

PTBDD_PTBDD0=1;//设置B0为输出

PTBDD_PTBDD1=1;//设置B1为输出

for(;;){//死循环,类似while

(1)

PTBD_PTBD0=0;//B0输出“0”,点亮D1,见图1-8

PTBD_PTBD1=1;//B1输出“1”,D2灭

for(i=0;i<2000;i++){//2个for循环嵌套,延时大约半秒

for(j=0;j<100;j++){}

}

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按钮。

出现下载器配置界面,如果没出现说明下载器没有正确安装。

选择“5V”是打算让下载器给目标板供电5V。

确保其它选项都对后,选择“ok”

出现装载警告

继续“ok”后程序下载到单片机中。

在调试界面里点击运行按钮,让程序全速运行后应该看到两个LED交替点亮。

3、延伸讨论

1〉在修改主程序main.c的过程中,对寄存器SOPT1、PTBDD_PTBDD0、PTBD_PTBD0的名称问题,对于刚入手者确实有一定难度。

由于包含了文件"derivative.h",该文件又包含了“MC9S08JM60.h”,这是与选用的cpu相关的,建议打开这个cpu相关的头文件仔细阅读,对于B口数据寄存器的定义如下,如果看不懂建议要搞懂C语言的数据结构和联合的用法。

关于方向寄存器的定义与此相似。

/***PTBD-PortBDataRegister;0x00000002***/

typedefunion{

byteByte;

struct{

bytePTBD0:

1;/*PortBDataRegisterBit0*/

bytePTBD1:

1;/*PortBDataRegisterBit1*/

bytePTBD2:

1;/*PortBDataRegisterBit2*/

bytePTBD3:

1;/*PortBDataRegisterBit3*/

bytePTBD4:

1;/*PortBDataRegisterBit4*/

bytePTBD5:

1;/*PortBDataRegisterBit5*/

bytePTBD6:

1;/*PortBDataRegisterBit6*/

bytePTBD7:

1;/*PortBDataRegisterBit7*/

}Bits;

}PTBDSTR;

externvolatilePTBDSTR_PTBD@0x00000002;

#definePTBD_PTBD.Byte

#definePTBD_PTBD0_PTBD.Bits.PTBD0

#definePTBD_PTBD1_PTBD.Bits.PTBD1

#definePTBD_PTBD2_PTBD.Bits.PTBD2

#definePTBD_PTBD3_PTBD.Bits.PTBD3

#definePTBD_PTBD4_PTBD.Bits.PTBD4

#definePTBD_PTBD5_PTBD.Bits.PTBD5

#definePTBD_PTBD6_PTBD.Bits.PTBD6

#definePTBD_PTBD7_PTBD.Bits.PTBD7

2〉关于采用for循环进行延时的问题。

首先这种方法很难做到精确的延时,而且对于首次使用这款单片机的人来说,粗略延时都很难估算,这是因为for循环的延时跟系统的总线时钟有关。

虽然电路板上焊接了4MHz晶振,但上面的例子并没有用到,用的是内部缺省时钟。

内部缺省时钟在不修改参数的情况下,总线时钟是8MHz。

如果在主函数死循环前面添加修改时钟的代码,将时钟切换到外部晶振,同时启用内部的PLL锁频环,将下面的代码放在for(;;)死循环之前,将会产生24MHz的总线时钟,重新下载运行后发现LED闪烁的速度明显加快。

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;//切换到PLL0x10;

while(MCGSC_CLKST!

=3);

3〉如果没有硬件,也可以完全采用软件仿真的方法进行程序设计,改动过程如下:

a〉首先确保在工程硬件连接下拉中选择第一项“FullChipSimulation”,如果有硬件,对于自制的开源下载器则应该选择“HCS08OpenSourceBDM”

b〉点击“debug”按钮后不会出现下载器配置界面,而是直接进入调试界面,在调试界面选择“Component/Open…”菜单。

在弹出的界面里,双击虚拟可视工具。

在虚拟可视工具编辑界面被打开后,就可以从主菜单栏选择“VisualizationTool/AddNewInstrument/LED”

在放好LED,并调节大小合适后,在LED上右击鼠标,选择第一项打开LED的属性页

在属性页中修改该LED对应的内存memory的地址为0x02(从讨论1中已经知道B口的数据寄存器的地址就是0x02),同时修改“Bitnumbertodisplay”为“0”,也就是该LED对应PTBD_PTBD0。

采用相同的方法放另一个LED,修改属性页使得对应PTBD_PTBD1。

放好两个LED后,在空白的地方右键鼠标并选择属性,打开属性页

在属性页的最下面选择刷新模式为周期性“Periodical”,刷新间隔可以用缺省的10ms。

全部修改完成后选择保存成文件以备后用。

既然是采用没有硬件的完全仿真模式,一定要去掉跟硬件相关的代码,比如讨论2中添加的将时钟切换到外部晶振的代码一定要去掉。

然后就可以全速运行了。

在完全仿真模式下,LED闪烁的速度跟实际硬件相比还是不一样的,只能是功能仿真。

第三章按键程序设计过程

1、按键与cpu的连接,从图1-3可以看出,按键4、按键5分别与PTB4和PTB5相连。

该款单片机MC9S08JM60一共有8个键盘输入口,从数据手册可以看出非常分散。

键盘中断输入

对应管脚

所属端口

KBIP0

PTG0

PTG

KBIP1

PTG1

KBIP2

PTD2

PTD

KBIP3

PTD3

KBIP4

PTB4

PTB

KBIP5

PTB5

KBIP6

PTG2

PTG

KBIP7

PTG3

总体来说,该款单片机的八个键盘中断输入特点如下:

1〉可以单独允许某一个中断输入脚,其他不用的做一般I/O;

2〉每个中断输入脚都可以单独编程设置为下降沿触发、上升沿触发、下降沿和低电平触发、上升沿和高电平触发;

3〉所有中断输入口公用一个中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1