《2022年飞思卡尔单片机LED控制例程详解 .pdf》由会员分享,可在线阅读,更多相关《2022年飞思卡尔单片机LED控制例程详解 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、我的第一个LED程序准备工作:硬件: Freescale MC9S08JM60型单片机一块;软件:集成开发环境codewarrior IDE;开发板上有两个LED灯,如下图所示:实验步骤:1 首先,确保单片机集成开发环境及USBDM 驱动正确安装。其中USBDM 的安装步骤如下:假设之前安装过单片机的集成开发环境6.3 版本: CW_MCU_V6_3_SE;运行 USBDM_4_7_0i_Win ,这个程序会在c 盘的程序文件夹下增加一个目录C:Program FilespgoUSBDM 4.7.0,在这个目录下:1C:ProgramFilespgoUSBDM 4.7.0FlashImages
2、JMxx下的文件USBDM_JMxxCLD_V4.sx 是下载器的固件文件;2C:Program FilespgoUSBDM 4.7.0USBDM_DriversDrivers下有下载器的usb驱动所以在插入usb 下载器, 电脑提示发现新的usb 硬件的时候, 选择手动指定驱动安装位置到以上目录即可。运行 USBDM_4_7_0i_Win之后,还会在目录:C:Program FilesFreescaleCodeWarrior for Microcontrollers V6.3proggdi 下增加一些文件, 从修改时间上来看, 增加了 6 个文件,这些文件是为了在codewarrior集成开
3、发环境下对usb 下载器的调试、下载的支持。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 2 新建一个工程,工程建立过程如下:运行单片机集成开发环境codewarrior IDE 出现如下界面Create New Project :创建一个新项目工程Load Example Project :加载一个示例工程Load Previous Project :加载以前创建过的工程Run Getting started Tutori
4、al:运行 CodeWarrior 软件帮助文档Start Using CodeWarrior:立刻使用 CodeWarrior 点击 Create New project按钮,以创建一个新的工程,出现选择CPU的界面如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 可以选择最后一个开源下载器HCS08 Open Sour
5、ce BDM。注:由于本书配套使用MC9S08JM60 型单片机,因此选择CPU型号为 MC9S08JM60 ,若使用其他型号的单片机,请选择其它型号单片机,新建一个工程;并且,由于单片机的驱动为 USB接口,因此选择 HCS08 Open Source BDM 。若无硬件, 选择 Full Chip Simulation进行仿真,也可进行实验;本实验仅讨论有硬件情况下的程序编写和烧录;下一步后出现编程语言选择和指定项目名称以及存放位置界面选择 C语言,项目名称自己决定, 该实验暂时命名 “LED闪烁”, 选择保存位置,后面的选项暂时跳过,点击“完成”,文件展开如下:名师资料总结 - - -精
6、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - 点击“make”快捷按钮正确编译后,左边的钩钩全部消失,同时在 Code 和 Data列出现了相关的代码和数据量。至此,一个工程新建完毕, 我们注意到左边的File 下有 Sources,Includes, Libs, Project Settings等文件夹,这里我们需要了解前面两个文件夹即可。首先:源文件Sources下有一个 main.c 文件,这个 C文件是我们将要写代码的位置,这是程序编译的起点
7、;其次: Includes 下有两个头文件,这里对我们将编写的基本语句进行定义,使我们的语言能够被计算机识别。就像我们在学C 语言时,涉及到输入流cout 和输出流 cin 如何被计算机识别时,需要包含头文件“iostream.h ” 的作用相同,这些头文件用于定义这些符号的作用,使计算机识别转换为二进制符号;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 3 既然工程新建完毕,现在可以开始第一个程序的编写。但是在程序编写之前
8、,我们需要了解硬件电路的连接方式,使自己的意愿通过软件正确的传达给硬件;如上图所示, PTB0 , PTB1是单片机的两个端口,外部电路分别接一个电阻和一个LED灯,再接到5V 电源上。由于单片机输出电平为数字电平0 或 1,即我们所说的5V 高电平和地电平,根据所学电路基本知识,我们知道,要想使LED灯亮,我们的端口PTB0和 PTB1只能为低电平,即输出为0。注:尽管不同型号的单片机的端口数量不同,各自功能也不尽相同,但核心思想都是通过设置或者检测端口上的高低电平,达到测试和控制信号的目的。在这节中,我们介绍端口最基本也最重要的Input/Output输入 /输出功能。至此,我们现在还需要
9、知道的事情是如何告知单片机输出地电平点亮LED灯,这将涉及到如何对单片机进行控制。我们需要了解两个概念:数据寄存器和数据方向寄存器;它们的关系如下图所示:以 B 端口为例, 其输入输出方向和数据高低电平由两个寄存器控制,PTBD (端口 B 数据寄存器 PORT B DATA REGISTER) 和 PTBDD(端口 B数据方向寄存器PORT B DATA DIRECTION REGISTER ) ,每个寄存器由8 位组成,因此可以控制8 个端口 B0-B7,上图仅表示了一个端口 B0的控制情况,其它7 个端口相同。若 PTBDD的最低位设置为1,下方 Output 导通,而 Input 功能
10、被屏蔽, 再通过 PTBD名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - 的最低位设置为0 或 1 决定 PTB0输出电平状态,其它7 位设置方式相同;写成 C 语言为: PTBDD_PTBDD0=1; PTBD_PTBD0=1 或者 0;这里表示对寄存器的某一位进行单独设置;若同时设置8 个端口为输出,低电平时:PTBDD=0XFF;PTBD=0X00;注:这里方向每位都设置为1,每位输出低电平;若 PTBDD最低位设置为0
11、,上方 Input 导通, Output 被屏蔽,此时PTBD的值将由端口接入电平决定,而此时我们只需读取PTBD的值,可知外部输入电平的状态;4 经过上述对软件和硬件的分析,可以开始编写程序:双击 main.c 打开文件如图所示:这些语句是系统自动生成的基本程序框架:开头包含两个头文件语句,我们简单知道它是对我们下面将要编写的基本语句进行定义,帮助计算机识别的作用即可;从主函数 void main(void ) 可知:第一个 void 表示该函数的返回值为空,main函数标志计算机编译入口,一个工程文件里只允许有一个main 函数,括号内的 void 表示参数为空,可省略;第一句表示使能中断
12、,这里我们忽略删掉,为避免不必要的麻烦,将其改为DisableInterrupts; 表示禁止中断。单片机函数有一个特点,最后必须以一个无限循环结尾,否则程序不能正确运行,因此,这个for 循环不可删除;里面那句喂狗语句暂时忽略不动;在 main 中输入如下语句:void main(void) DisableInterrupts; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - PTBDD_PTBDD0=1; / 将 B0 和
13、 B1 口定义为输出端口PTBDD_PTBDD1=1; PTBD_PTBD0=0; /B0 口和 B1 口设置为地电平,表示灯亮PTBD_PTBD1=0; for(;) _RESET_WATCHDOG(); /* feeds the dog */ /* loop forever */ /* please make sure that you never leave main */ 点击 make:用于检查程序语法错误;注:检查语法错误并不意味着可以检查逻辑错误,如将端口输出数据设置错误,这种错误在编写程序的时候需要考虑清楚;若没有显示错误,则可点击debug,出现下载器配置界面,如果没出现说明
14、下载器没有正确安装。选择“5V”是打算让下载器给目标板供电5V。确保其它选项都对后,选择“ok”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - 继续“ ok”后程序下载到单片机中。在调试界面里点击运行按钮,让程序全速运行后应该看到两个LED同时点亮。现在,我们的第一个程序编写并运行成功,由这个程序,我们对单片机的输入输出有了名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
15、 - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - 初步的认识,并知道如何新建一个工程文件,并烧录至单片机中运行;LED闪烁程序在上一个程序中, 我们实现了点亮两个LED灯,为加强程序功能,我们将编写一个LED闪烁程序;准备硬件和软件以及新建工程的过程和上一程序相同,故不赘述; 在这节, 我们只介绍如何编程;程序思路如下:每间隔一段时间,使两个LED灯重复点亮,熄灭,点亮,熄灭的过程;那么这里会用到一个延时函数,否则单纯的设置LED的点亮熄灭状态,频率太高,人眼将无法分辨,会误以为始终处于点亮状态, 这点读者可以自行证明,在此不详细
16、说明。 因此,我们需要用到一个延时,然后点亮 LED ,再延时,熄灭LED如此循环,实现闪烁。这个程序如下图所示,为便于理解,我们将简单介绍几个概念:可以注意到,这个程序的第一句是SOPT1=0X00 ,这个语句也是对某一个寄存器进行设置,在这里我们只要知道,这是一句是关看门狗动作。简单来说,看门狗是一个计数器, 在程序运行时, 会自动启动一个计数器,并且这个计数器会按照一定频率向上进行计数,所以为了防止计数值溢出,我们的for 循环中默认加上一句喂狗语句_RESET_WATCHDOG();其作用是每隔一段时间对计数器进行清零,否则当看门狗加到上限值溢出后,程序将不会按照原本意愿运行。在这个程
17、序中我们的_RESET_WATCHDOG();由于 delay 的两次长时间延时,这句话以秒级的频率被执行,此时看门狗已经溢出,因此若不将看门狗关闭,灯不会一直闪烁,这一现象读者可自行检验。因此,若将看门狗关闭,for 循环中的喂狗语句可注释掉。前面一节介绍过,main 函数是程序执行入口,而这个程序中,我们在main 函数前编写了delay 空循环函数, 是单片机编程最常用的子函数之一,为的是让 CPU进行等待, 什么都不做。 Delay 在这里被称为一个子函数,可写在 main 函数的前面, 也可写在后面。但是写在main 函数的后面时,前面需要进行声明,让CPU预先知道函数的存在。#in
18、clude /* for EnableInterrupts macro */ #include derivative.h /* include peripheral declarations */ void delay() int i,j; for(i=0;i500;i+) for(j=0;j500;j+) ; void main(void) SOPT1=0X00; / 关看门狗DisableInterrupts; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页
19、 - - - - - - - - - PTBDD_PTBDD0=1; / 将 B0 和 B1 口定义为输出端口PTBDD_PTBDD1=1; for(;) PTBD_PTBD0=0; / 点亮 LED PTBD_PTBD1=0; delay(); / 等待PTBD_PTBD0=1; / 熄灭 LED PTBD_PTBD1=1; delay(); / 等待/ _RESET_WATCHDOG(); 为使上述程序更加简洁,我们可以将for 循环中语句改成如下形式:for(;) delay(); / 等待PTBD_PTBD0=PTBD_PTBD0; / LED 状态取反PTBD_PTBD1=PTBD_PTBD1; 这样 LED闪烁一次,意味着for 循环被执行了两次,有利于减少每一次for 循环的时间,在执行多个任务时,有利于保证系统响应的实时性。在本次实验中:我们了解了看门狗的作用,以及使用delay 函数进行编程的基本方法,这是以后经常会用到的使用语句;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -