,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,*,第,3,章 第一个样例程序及,CodeWarrior,工程组织,主要内容,3.1,通用,I/O,接口基本概念及连接,方法,3.2 AW60,的,GPIO,3.3,开发套件,CodeWarrior,开发,环境与,S08/S12/ColdFire,写入器,3.4 CW,环境,C,语言工程文件的组织,3.5,第一个,C,语言工程:控制小灯闪烁,3.6,第一个汇编语言工程:控制小灯,闪烁,3.1,通用,I/O,接口基本概念及连接方法,1.I/O,接口的概念,I/O,接口,即输入输出接口,是微控制器同外界进行交互的,重要通道。这里的接口英文是,port,,也可以翻译为,“,端口,”,,,另一个英文单词是,interface,,也翻译为接口。在嵌入式系统中,,接口千变万化,种类繁多,有显而易见的人机交互接口,如操,纵杆、键盘、显示器;也有无人介入的接口,如网络接口、机,器设备接口,2,通用,I/O,所谓通用,I/O,,也记为,GPIO,(,General Purpose I/O,),即基,本的输入,/,输出,有时也称并行,I/O,,或普通,I/O,,它是,I/O,的最,基本形式,通用,I/O,接口一般应具备,放置输入或输出控制字的寄存器,放置工作方式控制字的寄存器,放置要交换数据的寄存器,放置反映工作状态的寄存器,3,上拉下拉电阻与输入引脚的基本接法,输入引脚有三种不同的连接方式:带上拉电阻的连接、带下拉电阻的连接和,“,悬空,”,连接。,若,MCU,的某个引脚通过一个电阻接到电源(,Vcc,)上,这个电阻被称为,“,上拉电阻,”,。与之相对应,若,MCU,的某个引脚通过一个电阻接到地(,GND,)上,则相应的电阻被称为,“,下拉电阻,”,。悬空的芯片引脚被上拉电阻或下拉电阻初始化为高电平或低电平。,I/O,输入电路,4.,输出引脚的基本接法,作为通用输出引脚,,MCU,内部程序,向该引脚输出高电平或低电平来驱动,器件工作,即开关量输出。如图所示。,其中,O1,引脚是发光二极管,LED,的驱动引,脚,当,O1,引脚输出高电平时,,LED,不亮;,当,O1,引脚输出低电平时,,LED,点亮。,O2,引脚接蜂鸣器驱动电路,当,O2,脚输出高,电平时,蜂鸣器响;,O2,脚输出低电平时,,蜂鸣器不响,I/O,口输出电路,3.2 AW60,的,GPIO,3.2.1 AW60 GPIO,编程的基本原理与编程基本方法,AW60,的大部分引脚具有多,重功能,可以通过编程设定使,用其中一种功能。,AW60,有,7,个,GPIO,口,每个,GPIO,口的名称由,一位英文字母组成,分别是,A,、,B,、,C,、,D,、,E,、,F,、,G,。右图给出,了,AW60,的,7,个,GPIO,口的引脚分布,情况。,GPIO,模块框图,GPIO,的基本编程方法:,通过,“,数据方向寄存器,”,设置相应引脚为输入或输出,若是输出引脚,则设置,“,端口引脚数据寄存器,”,引脚输出高电平或低电平,若是输入引脚,则通过,“,端口引脚数据寄存器,”,获得引脚的状态,3.2.2,GPIO,模块寄存器,GPIO,模块的每个口最多对应,8,个,GPIO,引脚,但各个,GPIO,口,的编程寄存器均为,8,位,没有对应引脚的位无效。,GPIO,模块寄,存器的命名有一定的规范,所有寄存器都在,AW60,芯片寄存器及,相关位定义头文件,AW60.h,中定义。其中,“,端口数据寄存器,”,是,PT+,该端口的名称,+D,。,“,端口输出方向寄存器,”,是,PT+,该端口的,名称,+DD,。所有寄存器的位编号从,0,开始,且最低位编号为,0,。例如,一个,8,位寄存器的最低位编号为,0,,最高位编号为,7,。,1,操作,GPIO,的基本寄存器,端口数据方向寄存器,DDR,(,Port Data Direction Register,),这些位分别控制着端口引脚是输入还是输出,若为,0,,则引,脚为输入,若为,1,,则引脚为输出。复位时为,0 x00,端口数据寄存器,PORT,(,Port Data Register,),若引脚被配置为输出,,PORTn,寄存器中每一位数据决定了对,应引脚的输出电平。复位时,PORTn,寄存器的所有被使用的位为,1,2,GPIO,的基本编程方法举例,以,D,口第,3,脚的,GPIO,功能为例,为了程序通用性,对要设置的引脚进行宏定义,#define RUN_PORT PORT_D /,灯使用的端口,#define RUNpin 3 /,用,RUNpin,代替,“,3,”,当需要对寄存器的具体位进行设置,通常会使用位操作,RUN_PORT&=0b11110111 /,表示将,RUN_PORT,的第,3,位设置为,0,RUN_PORT|=0b00001000 /,表示将,RUN_PORT,的第,3,位设置为,1,为了程序通用性,以上两行代码需要写成:,RUN_PORT&=,(0 x01 RUNpin)/,将,RUN_PORT,的第,3,位设置为,0,RUN_PORT|=0 x01New Project,,弹出新建对话框,选择,“,S08 S08A Family AW60,”,,点击,“,下一步,”,,选中,“,C,”,的选项,如果程序中有汇编代码则应该选中,“,Relocatable assembly,”,,在右侧,Project name,中输入工程名,在,Location,中选择工程所在目录。单击确定即可,第二种方法是使用已存的工程来建立另一个工程。,当在已有工程的基础上,做另一个项目时,比如在,Light,工程的基础上编写,LCD,程序,需要进行如下设置,更改工程文件夹名为,LCD,更改,Light.mcp,为,LCD.mcp,文件夹,Light_Data,更改为,LCD_Data,将,bin,文件夹的所有内容删掉,3.5,第一个,C,语言工程:控制小灯闪烁,3.5.1 GPIO,构件,GPIO,构件的头文件,GPIO.h,GPIO,构件的程序文件,GPIO.c,3.5.2 Light,构件,Light,构件的头文件,Light.h,Light,构件的程序文件,Light.c,3.5.3 Light,测试工程主程序,3.5.4,理解第一个,C,工程的执行过程,系统上电,执行,Start08.c,文件中的,_Startup,函数,中断程序的执行,3.6,第一个汇编语言工程:控制小灯闪烁,基于汇编语言编程给人的第一感觉是难,相对于其它的高级语言编程,汇编语言在编程的直观性、编程效率等方面有所欠缺,但针对资源相对较少的单片机以及时序要求严格的硬件接口编程,掌握汇编语言还是必不可少的。使用汇编语言编程是基本功,学习和掌握汇编语言编程可以增加编程者的,“,内力,”,,为使用高级语言编程打下坚实的基础。,3.6.1,汇编工程文件的组织,小灯闪烁汇编工程相关源文件的树型结构,主函数文件,(main.asm),主程序文件,main.asm,,包含有:,工程描述:工程名、硬件连接索引、程序描述、目的、说明、注意、日期等,总头文件,主程序:主程序一般包括初始化与主循环两大部分。初始化包括堆栈初始化、系统初始化、内存变量初始化、,I/O,端口初始化、中断初始化等,内部直接调用子程序:若有不单独存盘的子程序,建议放在此处,外部子程序:若程序使用独立存盘的子程序,可在此处使用,“,INCLUDE,子程序文件名,”,将其包含。注意,独立存盘的子程序必须与主程序在同一个目录中,中断处理程序文件,(isr.asm,),框架程序文件,汇编软件构件文件,通用程序文件,3.6.2,Light,构件汇编程序,包含:,Light,构件的汇编头文件,Light.inc,Light,构件的汇编程序文件,Light.asm,3.6.3 Light,测试工程主程序,首先调用,LightInit,函数,初始化所需的每一盏指示灯。注意初始化时,要让每一盏灯初始状态为,“,暗,”,。随后,通过,Light_L_A,函数控制指示灯亮、暗。在指示灯亮暗之间增加适当的延时后,就能够在程序运行时,较明显的看到指示灯闪烁的现象,3.6.4,理解第一个汇编工程的执行过程,系统上电,系统在加电过后,芯片内的硬件机制会产生加电复位中断,这时系统到向量表中查找复位向量地址,并转向这个地址继续执行。在本书所有工程样例,到*,.prm,文件中都可以找到异常向量表,在该表的第一行是复位中断向量地址:,VECTOR 0 _Startup /,复位向量,堆栈指针初始化及芯片初始化,执行,main.asm,文件中的,_Startup,函数,对堆栈指针进行初始化,以及芯片及所用到的模块进行初始化,中断程序的执行,当某个中断发生后,,MCU,将转到中断向量表文件,isr.asm,所指定的中断入口地址处开始执行中断服务程序(,ISR,,,Interrupt Service Routine,)。在这个过程中,系统必然会保存,“,上下文,”,(,CPU,寄存器的内容),在中断处理结束前,必须恢复该,“,上下文,”,,以便继续执行原来的程序。中断的执行实际上是在抢夺主程序的执行时间,第,3,章 练习题,1,什么叫通用,I/O,口?,2,什么叫上拉电阻与下拉电阻?它们的作用是什么?如何选择上拉电阻与下拉电阻的,阻值?哪些情况下使用上拉电阻,?,哪些情况下使用下拉电阻,?,3,什么是,OC,输出?为什么,OC,输出的,I/O,口一定要上拉?,4,为什么在无操作系统的嵌入式系统软件主程序中使用无限循环?,5,找出样例子工程的机器码文件,解释,S19,文件的含义。,6,举例给出,CW,环境,C,语言工程文件的组织结构图。,7,分析,Project.prm,文件的功能。,8,如何查看一个文件,.LST,文件,举例分析一个,LST,文件。,9,如何能知道一段或一句,C,语言源程序的汇编代码与机器码,举例之。,10,给出一个,C,语言控制三盏小灯的程序,并调试,功能自定。,11,给出一个,S08,汇编语言控制三盏小灯的程序,并调试,功能自定。,12,分析一个,map,文件,简要说明,map,文件给了我们什么信息?,