通用io与第一个汇编程序【精选-ppt】_第1页
通用io与第一个汇编程序【精选-ppt】_第2页
通用io与第一个汇编程序【精选-ppt】_第3页
通用io与第一个汇编程序【精选-ppt】_第4页
通用io与第一个汇编程序【精选-ppt】_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章 通用I/O与第一个汇编程序,主要内容 MC68HC908GP32的普通I/O 汇编程序编程框架 08汇编语言编译过程所涉及的文件 SD-HC08嵌入式MCU在线编程集成开发系统,嵌入式应用技术基础教程课件,6.1 MC68HC908GP32的普通I/O,6.1 MC68HC908GP32的普通I/O,所谓普通I/O,即基本的输入/输出,有时也称为并行I/O。作为普通输入引脚,MCU内部程序可以读取该引脚,知道该引脚是“1”(高电平)或“0”(低电平),即开关量输入。作为普通输出引脚,MCU内部程序向该引脚输出“1”(高电平)或“0”(低电平),即开关量输出。MC68HC908GP32单片机有5个普通I/O口,分别是A口、B口、C口、D口、E口。它们中的大部分具有双功能,本节仅讨论它们作为普通I/O功能时的编程方法。,嵌入式应用技术基础教程课件,6.1 MC68HC908GP32的普通I/O,A口的8根引脚与键盘中断模块的引脚复用,这里只讨论A口作为普通I/O口的功能。 (1)A口的寄存器 A口作为普通I/O口时,具有三个寄存器,它们是:A口数据方向寄存器(DDRA)、A口数据寄存器(PTA)、A口上拉电阻允许寄存器(PTAPUE)。 A口数据方向寄存器(Data Direction Register A,DDRA) A口数据方向寄存器(DDRA)的地址是:$0004,DDRA的第70位分别记为DDRA7DDRA0,这些位分别控制着A口引脚PTA7 PTA0是输入还是输出,若DDRAx=0,则引脚PTAx为输入,若DDRAx=1,则引脚PTAx为输出。复位时DDRA为$00。 记忆要点:数据方向寄存器的一位:0定义输入,1定义输出,6.1.1 A口,嵌入式应用技术基础教程课件,6.1 MC68HC908GP32的普通I/O,A口数据寄存器(PTA)的地址是:$0000,PTA的第70位分别记为PTA7PTA0。若A口的某一引脚PTAx被定义成输出,程序使A口数据寄存器PTA的相应位PTAx0,则引脚PTAx输出“低电平”;程序使PTAx1,则引脚PTAx输出“高电平”。若A口的某一引脚PTAx被定义成输入,程序通过读取A口数据寄存器PTA,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。记忆要点: 输出时:数据寄存器的一位:0输出低电平 1输出高电平输入时:数据寄存器的一位:0代表外部输入低电平 1代表外部输入高电平,嵌入式应用技术基础教程课件, A口数据寄存器(Port A Data Register,PTA),6.1 MC68HC908GP32的普通I/O,A口上拉电阻允许寄存器(PTAPUE)的地址是:$000D。PTAPUE的第70位分别记为PTAPUE7PTAPUE0。若A口的某一引脚PTAx 被定义成输入,则可通过置PTAPUE的相应位PTAPUEx为1来定义其内接上拉电阻,即引脚PTAx已经通过内部电阻与电源VDD相接,此时若引脚PTAx若通过开关接地,则开关闭合时为低电平。那么寄存器PTA的相应位PTAx=0,开关断开时为高电平,寄存器PTA的相应位PTAx=1,通过读取寄存器PTA获得开关状态。记忆要点: 在引脚被定义成输入时,可通过上拉电阻允许寄存器定义有无内部上拉电阻:0没有内部上拉电阻1有内部上拉电阻,嵌入式应用技术基础教程课件, A口上拉电阻允许寄存器(Port A Input Pullup Enable Register,PTAPUE),6.1 MC68HC908GP32的普通I/O,下图给出了A口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。当DDRAx=1时,读地址$0000就是读PTAx。当DDRAx=0时,读地址$0000就是读引脚PTAx 电平。,嵌入式应用技术基础教程课件,(2)A口逻辑电路框图,6.1 MC68HC908GP32的普通I/O,B口的8根引脚与8路A/D转换模块的引脚复用,这里只讨论B口作为普通I/O口的功能。 (1)B口的寄存器 B口作为普通I/O口时,具有二个寄存器,它们是:B口数据方向寄存器(DDRB)和B口数据寄存器(PTB)。 B口数据方向寄存器(Data Direction Register B,DDRB) B口数据方向寄存器(DDRB)的地址是:$0005,DDRB的第70位分别记为DDRB7DDRB0,这些位分别控制着B口引脚PTB7PTB0是输入还是输出,若DDRBx=0,则引脚PTBx为输入,若DDRBx=1,则引脚PTBx为输出。复位时DDRB为$00。记忆要点:数据方向寄存器的一位:0定义输入,1定义输出,6.1.2 B口,嵌入式应用技术基础教程课件,6.1 MC68HC908GP32的普通I/O,B口数据寄存器(PTB)的地址是:$0001,PTB的第70位分别记为PTB7PTB0。若B口的某一引脚PTBx被定义成输出,程序使B口数据寄存器PTB的相应位PTBx0,则引脚PTBx输出“低电平”,程序使PTBx1,则引脚PTBx输出“高电平”。若B口的某一引脚PTBx被定义成输入,程序通过读取B口数据寄存器PTB,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。注意:B口被定义成输入时,没有内部上拉电阻,嵌入式应用技术基础教程课件, B口数据寄存器(Port B Data Register,PTB),6.1 MC68HC908GP32的普通I/O,下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。,嵌入式应用技术基础教程课件,(2)B口逻辑电路框图,6.1 MC68HC908GP32的普通I/O,6.1.3 C口、D口和E口,(1)C口 对44引脚的MC68HC908GP32芯片的C口只有7根引脚:PTC6 pinPTC0 pin,而40及42引脚的MC68HC908GP32芯片的C口只有5根引脚:PTC4 pinPTC0 pin。下面以44引脚的MC68HC908GP32芯片进行说明。C口只有普通I/O功能,它的内部逻辑结构框图与A口逻辑结构框图相同,只是其中的有关字母“A”改为字母“C”,地址作相应改变即可。它也具有三个寄存器,它们是:C口数据方向寄存器(DDRC)、C口数据寄存器(PTC)、C口上拉电阻允许寄存器(PTCPUE)。,嵌入式应用技术基础教程课件,6.1 MC68HC908GP32的普通I/O,C口数据方向寄存器(DDRC)的地址是:$0006,由于对应引脚只有7根,最高位没有意义。DDRC的第60位分别记为DDRC6DDRC0,这些位分别控制着C口引脚PTC6PTC0是输入还是输出,含义参考A口说明。复位时DDRC为$00。 C口数据寄存器(Port C Data Register,PTC)C口数据寄存器(PTC)的地址是:$0002,PTC的第60位分别记为PTC6PTC0。含义请类比A口、B口的相应说明。C口上拉电阻允许寄存器(Port C Input Pullup Enable Register,PTCPUE)C口上拉电阻允许寄存器(PTCPUE)的地址是:$000E。PTCPUE的第60位分别记为PTCPUE6PTAPUE0。含义请类比A口的相应说明。,嵌入式应用技术基础教程课件, C口数据方向寄存器(Data Direction Register C,DDRC),6.1 MC68HC908GP32的普通I/O,对于40引脚的MC68HC908GP32芯片的D口只有6根引脚:PTD5PTD0。而42及44引脚的MC68HC908GP32芯片的D口有8根引脚:PTD7PTD0。下面以42及44引脚的MC68HC908GP32芯片进行说明。D口是I/O功能与其它特殊功能(SPI,TIM)复用口,这里只讨论它作为普通I/O口的功能。它的内部逻辑结构框图与A口逻辑结构框图相同,只是其中的有关字母“A”改为字母“D”,地址作相应改变即可。它也具有三个寄存器,它们是:D口数据方向寄存器(DDRD)、D口数据寄存器(PTD)、D口上拉电阻允许寄存器(PTDPUE)。,嵌入式应用技术基础教程课件,(2)D口,6.1 MC68HC908GP32的普通I/O,D口数据方向寄存器(DDRD)的地址是:$0007。DDRD的第70位分别记为DDRD7DDRD0,这些位分别控制着D口引脚PTD7PTD0是输入还是输出,含义参考A口说明。复位时DDRD为$00。 D口数据寄存器(Port D Data Register,PTD) D口数据寄存器(PTD)的地址是:$0003,PTD的第70位分别记为PTD7PTD0。含义请类比A口、B口的相应说明。D口上拉电阻允许寄存器(Port D Input Pullup Enable Register,PTDPUE) D口上拉电阻允许寄存器(PTDPUE)的地址是:$000F。PTDPUE的第70位分别记为PTDPUE7PTDPUE0。含义请类比A口的相应说明。,嵌入式应用技术基础教程课件, D口数据方向寄存器(Data Direction Register D,DDRD),6.1 MC68HC908GP32的普通I/O,E口只有PTE1、PTE0引脚。它是I/O功能与串行通讯接口(SCI)复用口,这里只讨论它的普通I/O口功能。其内部逻辑结构框图与B口相同,只需将其中的有关字母“B”改为字母“E”,地址作相应改变即可。它有两个寄存器: E口数据方向寄存器(Data Direction Register E,DDRE)E口数据方向寄存器(DDRE)的地址是:$000C。DDRE只有低两位有用。DDRE的第1、0位分别记为DDRE1、DDRD0,这两位分别控制着E口引脚PTE1、PTE0是输入还是输出,含义参考B口说明。复位时DDRE为$00。 E口数据寄存器(Port E Data Register,PTE)E口数据寄存器(PTE)的地址是:$0008,PTE的第10位分别记为PTE1PTE0。含义请类比B口的相应说明。,嵌入式应用技术基础教程课件,(3)E口,返回,6.2 汇编程序编程框架,6.2.1 C口、D口和E口,(1)程序描述 给出程序名、硬件连接以及基本功能等描述,还可以给出编制者、编制时间等,若调试过程有新的体会,也可在此添加。 (2)头文件与有关常量命名 汇编语言也借用C语言中“头文件”的概念,将映像寄存器的地址定义在“头文件”中,程序直接使用寄存器地址所对应的“名称”。例如,有了“头文件”,对“D口数据寄存器”读出操作,可用“LDA PTD”取代“LDA $0003”,更容易理解。,嵌入式应用技术基础教程课件,6.2 汇编程序编程框架,6.2 汇编程序编程框架,如果程序中使用到内存变量,需在此定义。实际上,这里是对内存变量的声明,通常称为“开辟内存变量”,内存变量的初始化在主程序开始部分完成。第一个内存变量需用“ORG”语句定位,随后,按地址从小到大顺序存放。每个内存变量都有固定的内存地址。借用C语言术语,这里所开辟的所有内存变量都是“全局变量”。对应于C语言中的“局部变量”将在讲解子程序规范时说明。 (4)主程序 主程序一般包括初始化与主循环两大部分。初始化包括堆栈初始化、系统初始化、内存变量初始化、I/O端口初始化、中断初始化等。主循环是程序的工作循环,根据实际需要安排程序段,但一般不宜过长,建议不要超过200行,具体功能可通过调用子程序来实现,或由中断程序实现。不带操作系统的MCU程序总有一个主循环,表示程序周而复始地执行。,嵌入式应用技术基础教程课件,(3)内存变量,6.2 汇编程序编程框架,若有不单独存盘的子程序,建议放在此处。这样在主程序总循环的最后一个语句就可以看到这些子程序。建议不要超过3个,每个子程序不要超过200行。若有更多的子程序请单独存盘,单独测试。 (6)外部子程序 若程序使用独立存盘的子程序,可在此处使用“$include 子程序名”将其包含。注意,独立存盘的子程序必须与主程序在同一个目录中。 (7)中断向量 中断向量一般放在最后。复位向量地址内容为MCU上电后执行的程序地址,即主程序的第一个语句地址。,嵌入式应用技术基础教程课件,(5)内部直接调用子程序,6.2 汇编程序编程框架,第一个程序,嵌入式应用技术基础教程课件,6.2.2 第一个可执行的08汇编程序,返回,6.3 08汇编语言编译过程所涉及的文件,6.3 08汇编语言编译过程所涉及的文件,(1)头源文件(.H) 这是借用C语言中的概念,利用.H文件,存放 MCU的映像寄存器地址、定义常量等。GP32ASM.H是包含MC68HC908GP32的映像寄存器地址的汇编语言头文件。使用08系列MCU的任何一种型号,均可拷贝此文件,并参考用户手册进行少量修改,获得相应芯片的映像寄存器地址的头文件。 在嵌入式应用系统的实际开发中,建议采用面向“实际对象”的编程方式,可以使程序结构更清晰,移植性更强。例如,上一节给出的实例程序是使一盏小灯闪烁,小灯是接在PTA口的第1脚,程序中包含定义(见下页),嵌入式应用技术基础教程课件,6.3 08汇编语言编译过程所涉及的文件,*指示灯所接引脚定义 Light_P equ PTA ;灯(Light)接在PTA口 Light_D equ DDRA ;相应的方向寄存器 Light_Pin equ 1 ;所在的引脚 这样,点亮小灯的程序是: BCLR Light_Pin,Light_P 熄灭小灯的程序是: BSET Light_Pin,Light_P 若把小灯接在PTB口的第2脚,只要作如下变动: *指示灯所接引脚定义 Light_P equ PTB ;灯(Light)接在PTB口 Light_D equ DDRB ;相应的方向寄存器 Light_Pin equ 2 ;所在的引脚 而小灯闪烁的主程序无需改变。实际对象所在引脚的定义,可集中或分类放在相应的头文件(.H)中,硬件变动,只要更改头文件中引脚定义就可以了,增强了程序的通用性。,嵌入式应用技术基础教程课件,6.3 08汇编语言编译过程所涉及的文件,源程序文件,后缀名为ASM。可以使用一般的文本编辑软件编辑,以ASCII形式存盘。5.5.1节已经对08汇编源程序格式作了说明,上一节给出了实例,关键是注意程序的书写规范。 (3)目标代码文件(.S19) 源程序文件经08编译器编译后可以获得目标代码文件(.S19),它是Motorola MCU的机器码文件,将其下载到MCU内部Flash存储器之后,MCU执行这些机器码。 目标代码文件(.S19)是以S记录格式表示的机器码文件。S记录格式是Motorola公司的十六进制目标代码文件,它将目标程序和数据以可打印的ASCII码格式表示,可直接显示和打印。目标文件由若干行S记录构成,每行S记录可以用CR/LF/NUL结尾。一行S记录由下列五部分组成:,嵌入式应用技术基础教程课件,(2)源程序文件(.ASM),6.3 08汇编语言编译过程所涉及的文件,表示S记录的类型。共有8种记录类型S0、S1、S2、S3、S5、S6、S8、S9。它们是为了满足不同的编码、传送方式以及解码的需求。ASM08编译器只使用S1、S9两种类型构成目标文件。S1该记录包含程序/数据以及2字节存储其程序/数据的存储器首地址。S9S1记录的结束记录。该记录没有程序/数据部分。地址部分可包含控制将转向的2字节地址,如果不指定,则为第一次使用的入口地址。 记录长度表示该记录行中字符对的数目,不包括类型和记录长度。 地址它可以是2个字节、3个字节或4个字节,取决于记录类型。S1记录、S9记录均是2个字节。它表示其后的编码/数据部分将要装入的存储器起始地址。 编码/数据就是实际的目标程序或数据,这一部分将被下载到单片机的程序存储器并运行。其字节数由“记录长度”域的实际数值决定。 校验和为1个字节,它是“记录长度”、“地址”、“编码/数据”三个部分所有字符之和的反码的低8位。供装入单片机时校验之用。,嵌入式应用技术基础教程课件, 类型,6.3 08汇编语言编译过程所涉及的文件,S11380009B45023F94CD802E1204120013006EFA99S113801040CD80253B40FA12006EFA40CD80253BCES113802040FACC800C87A6C89D9D4BFC868187A610S113803001B71EA63DB71F3F366E01366E01386E7ES11380402C396E803A6E013B1A361E3718368681FBS105FFFE80007DS9030000FC第一行S11380009B45023F94CD802E1204120013006EFA99的前两个符号S1表示这一行是S1记录,其后的“13”是十六进制数$13,等于十进制数的19,表示在这一行中其后有19个字节的数据,包括2个字节的地址8000、16个字节的编码/数据:9B45023F94CD802E1204120013006EFA,最后一个字节99为校验和,大家可验证。,嵌入式应用技术基础教程课件,范例程序经编译后得到的目标文件:,6.3 08汇编语言编译过程所涉及的文件,编译过程还将产生列表文件(.LST)。列表文件包含地址、目标代码、行号、源程序等信息,该文件对用户很有帮助,它可以使用户清晰地看到程序代码的编译情况。列表文件的文件名与源程序的文件名相同,只是扩展名不同 。下图给出了上节实例程序的.LST文件的片段 。,嵌入式应用技术基础教程课件,(4)列表文件(.LST),返回,6.4 SD-HC08嵌入式MCU在线编程集成开发系统,6.4 SD-HC08嵌入式MCU在线编程集成开发系统,6.4.1 硬件系统说明 (1)总体结构布局 实验板硬件部分主要由MC68HC908GP32芯片及外围电路、LCD、键盘、模块化电源、串行口驱动电路、IC插线及其它元件扩展槽、输出开关量接线排、输入开关量接线排等部分组成,其主要作用是通过MC68HC908GP32芯片的监控程序和PC机进行通信,完成芯片程序的写入、运行、断点调试。,嵌入式应用技术基础教程课件,6.4 SD-HC08嵌入式MCU在线编程集成开发系统,系统的硬件布局框图:,嵌入式应用技术基础教程课件,6.4 SD-HC08嵌入式MCU在线编程集成开发系统, 将实验开发板的串行口通过串行通信线与PC机的串行口1或2连接。 接通实验开发

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论