第六章-通用IO与第一个汇编程序课件_第1页
第六章-通用IO与第一个汇编程序课件_第2页
第六章-通用IO与第一个汇编程序课件_第3页
第六章-通用IO与第一个汇编程序课件_第4页
第六章-通用IO与第一个汇编程序课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

第六章

通用I/O与第一个汇编程序主要内容

MC68HC908GP32的普通I/O

汇编程序编程框架

08汇编语言编译过程所涉及的文件

SD-HC08嵌入式MCU在线编程集成开发系统《嵌入式应用技术基础教程》课件第六章

通用I/O与第一个汇编程序主要内容《嵌入式应用技16.1MC68HC908GP32的普通I/O

所谓普通I/O,即基本的输入/输出,有时也称为并行I/O。作为普通输入引脚,MCU内部程序可以读取该引脚,知道该引脚是“1”(高电平)或“0”(低电平),即开关量输入。作为普通输出引脚,MCU内部程序向该引脚输出“1”(高电平)或“0”(低电平),即开关量输出。MC68HC908GP32单片机有5个普通I/O口,分别是A口、B口、C口、D口、E口。它们中的大部分具有双功能,本节仅讨论它们作为普通I/O功能时的编程方法。《嵌入式应用技术基础教程》课件6.1MC68HC908GP32的普通I/O6.1MC68HC908GP32的普通I/O所谓普2A口的8根引脚与键盘中断模块的引脚复用,这里只讨论A口作为普通I/O口的功能。(1)A口的寄存器

A口作为普通I/O口时,具有三个寄存器,它们是:A口数据方向寄存器(DDRA)、A口数据寄存器(PTA)、A口上拉电阻允许寄存器(PTAPUE)。

①A口数据方向寄存器(DataDirectionRegisterA,DDRA)

A口数据方向寄存器(DDRA)的地址是:$0004,DDRA的第7~0位分别记为DDRA7~DDRA0,这些位分别控制着A口引脚PTA7~PTA0是输入还是输出,若DDRAx=0,则引脚PTAx为输入,若DDRAx=1,则引脚PTAx为输出。复位时DDRA为$00。记忆要点:数据方向寄存器的一位:0—定义输入,1—定义输出

6.1.1A口《嵌入式应用技术基础教程》课件6.1MC68HC908GP32的普通I/OA口的8根引脚与键盘中断模块的引脚复用,这里只3A口数据寄存器(PTA)的地址是:$0000,PTA的第7~0位分别记为PTA7~PTA0。若A口的某一引脚PTAx被定义成输出,程序使A口数据寄存器PTA的相应位PTAx=0,则引脚PTAx输出“低电平”;程序使PTAx=1,则引脚PTAx输出“高电平”。若A口的某一引脚PTAx被定义成输入,程序通过读取A口数据寄存器PTA,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。记忆要点:输出时:数据寄存器的一位:0—输出低电平1—输出高电平输入时:数据寄存器的一位:0—代表外部输入低电平

1—代表外部输入高电平

《嵌入式应用技术基础教程》课件②A口数据寄存器(PortADataRegister,PTA)6.1MC68HC908GP32的普通I/OA口数据寄存器(PTA)的地址是:$0000,PTA的第7~4A口上拉电阻允许寄存器(PTAPUE)的地址是:$000D。PTAPUE的第7~0位分别记为PTAPUE7~PTAPUE0。若A口的某一引脚PTAx被定义成输入,则可通过置PTAPUE的相应位PTAPUEx为1来定义其内接上拉电阻,即引脚PTAx已经通过内部电阻与电源VDD相接,此时若引脚PTAx若通过开关接地,则开关闭合时为低电平。那么寄存器PTA的相应位PTAx=0,开关断开时为高电平,寄存器PTA的相应位PTAx=1,通过读取寄存器PTA获得开关状态。记忆要点:在引脚被定义成输入时,可通过上拉电阻允许寄存器定义有无内部上拉电阻:0—没有内部上拉电阻1—有内部上拉电阻

《嵌入式应用技术基础教程》课件③A口上拉电阻允许寄存器(PortAInputPullupEnableRegister,PTAPUE)6.1MC68HC908GP32的普通I/OA口上拉电阻允许寄存器(PTAPUE)的地址是:$000D。5下图给出了A口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。当DDRAx=1时,读地址$0000就是读PTAx。当DDRAx=0时,读地址$0000就是读引脚PTAx电平。《嵌入式应用技术基础教程》课件读DDRA($0004)写DDRA($0004)复位写PTA($0000)引脚PTAx

VDDPTAPUEx

内部上拉电阻读PTA($0000)A口的一个引脚内部逻辑电路框图A口数据方向寄存器DDRAx位A口数据寄存器PTAx位内部数据总线(2)A口逻辑电路框图6.1MC68HC908GP32的普通I/O下图给出了A口作为普通I/O使用时,一个外部引6B口的8根引脚与8路A/D转换模块的引脚复用,这里只讨论B口作为普通I/O口的功能。(1)B口的寄存器

B口作为普通I/O口时,具有二个寄存器,它们是:B口数据方向寄存器(DDRB)和B口数据寄存器(PTB)。

①B口数据方向寄存器(DataDirectionRegisterB,DDRB)B口数据方向寄存器(DDRB)的地址是:$0005,DDRB的第7~0位分别记为DDRB7~DDRB0,这些位分别控制着B口引脚PTB7~PTB0是输入还是输出,若DDRBx=0,则引脚PTBx为输入,若DDRBx=1,则引脚PTBx为输出。复位时DDRB为$00。记忆要点:数据方向寄存器的一位:0—定义输入,1—定义输出

6.1.2B口《嵌入式应用技术基础教程》课件6.1MC68HC908GP32的普通I/OB口的8根引脚与8路A/D转换模块的引脚复用7B口数据寄存器(PTB)的地址是:$0001,PTB的第7~0位分别记为PTB7~PTB0。若B口的某一引脚PTBx被定义成输出,程序使B口数据寄存器PTB的相应位PTBx=0,则引脚PTBx输出“低电平”,程序使PTBx=1,则引脚PTBx输出“高电平”。若B口的某一引脚PTBx被定义成输入,程序通过读取B口数据寄存器PTB,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。注意:B口被定义成输入时,没有内部上拉电阻《嵌入式应用技术基础教程》课件②B口数据寄存器(PortBDataRegister,PTB)6.1MC68HC908GP32的普通I/OB口数据寄存器(PTB)的地址是:$0001,PTB的第7~8下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。《嵌入式应用技术基础教程》课件读DDRB($0005)写DDRB($0005)复位

写PTB($0001)引脚PTBx

读PTB($0001)B口的一个引脚内部逻辑电路框图B口数据方向寄存器DDRBx位B口数据寄存器PTBx位内部数据总线(2)B口逻辑电路框图6.1MC68HC908GP32的普通I/O下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻96.1.3C口、D口和E口(1)C口对44引脚的MC68HC908GP32芯片的C口只有7根引脚:PTC6pin~PTC0pin,而40及42引脚的MC68HC908GP32芯片的C口只有5根引脚:PTC4pin~PTC0pin。下面以44引脚的MC68HC908GP32芯片进行说明。C口只有普通I/O功能,它的内部逻辑结构框图与A口逻辑结构框图相同,只是其中的有关字母“A”改为字母“C”,地址作相应改变即可。它也具有三个寄存器,它们是:C口数据方向寄存器(DDRC)、C口数据寄存器(PTC)、C口上拉电阻允许寄存器(PTCPUE)。《嵌入式应用技术基础教程》课件6.1MC68HC908GP32的普通I/O6.1.3C口、D口和E口(1)C口《嵌入10

C口数据方向寄存器(DDRC)的地址是:$0006,由于对应引脚只有7根,最高位没有意义。DDRC的第6~0位分别记为DDRC6~DDRC0,这些位分别控制着C口引脚PTC6~PTC0是输入还是输出,含义参考A口说明。复位时DDRC为$00。②C口数据寄存器(PortCDataRegister,PTC)C口数据寄存器(PTC)的地址是:$0002,PTC的第6~0位分别记为PTC6~PTC0。含义请类比A口、B口的相应说明。③

C口上拉电阻允许寄存器(PortCInputPullupEnableRegister,PTCPUE)C口上拉电阻允许寄存器(PTCPUE)的地址是:$000E。PTCPUE的第6~0位分别记为PTCPUE6~PTAPUE0。含义请类比A口的相应说明。《嵌入式应用技术基础教程》课件①C口数据方向寄存器(DataDirectionRegisterC,DDRC)6.1MC68HC908GP32的普通I/O

C口数据方向寄存器(DDRC)的地址是:$0006,由于11对于40引脚的MC68HC908GP32芯片的D口只有6根引脚:PTD5~PTD0。而42及44引脚的MC68HC908GP32芯片的D口有8根引脚:PTD7~PTD0。下面以42及44引脚的MC68HC908GP32芯片进行说明。D口是I/O功能与其它特殊功能(SPI,TIM)复用口,这里只讨论它作为普通I/O口的功能。它的内部逻辑结构框图与A口逻辑结构框图相同,只是其中的有关字母“A”改为字母“D”,地址作相应改变即可。它也具有三个寄存器,它们是:D口数据方向寄存器(DDRD)、D口数据寄存器(PTD)、D口上拉电阻允许寄存器(PTDPUE)。《嵌入式应用技术基础教程》课件(2)D口6.1MC68HC908GP32的普通I/O对于40引脚的MC68HC908GP32芯片的D口只有6根引12

D口数据方向寄存器(DDRD)的地址是:$0007。DDRD的第7~0位分别记为DDRD7~DDRD0,这些位分别控制着D口引脚PTD7~PTD0是输入还是输出,含义参考A口说明。复位时DDRD为$00。②D口数据寄存器(PortDDataRegister,PTD)

D口数据寄存器(PTD)的地址是:$0003,PTD的第7~0位分别记为PTD7~PTD0。含义请类比A口、B口的相应说明。③

D口上拉电阻允许寄存器(PortDInputPullupEnableRegister,PTDPUE)D口上拉电阻允许寄存器(PTDPUE)的地址是:$000F。PTDPUE的第7~0位分别记为PTDPUE7~PTDPUE0。含义请类比A口的相应说明。《嵌入式应用技术基础教程》课件①D口数据方向寄存器(DataDirectionRegisterD,DDRD)6.1MC68HC908GP32的普通I/O

D口数据方向寄存器(DDRD)的地址是:$0007。DD13E口只有PTE1、PTE0引脚。它是I/O功能与串行通讯接口(SCI)复用口,这里只讨论它的普通I/O口功能。其内部逻辑结构框图与B口相同,只需将其中的有关字母“B”改为字母“E”,地址作相应改变即可。它有两个寄存器:①E口数据方向寄存器(DataDirectionRegisterE,DDRE)E口数据方向寄存器(DDRE)的地址是:$000C。DDRE只有低两位有用。DDRE的第1、0位分别记为DDRE1、DDRD0,这两位分别控制着E口引脚PTE1、PTE0是输入还是输出,含义参考B口说明。复位时DDRE为$00。②E口数据寄存器(PortEDataRegister,PTE)E口数据寄存器(PTE)的地址是:$0008,PTE的第1~0位分别记为PTE1~PTE0。含义请类比B口的相应说明。《嵌入式应用技术基础教程》课件(3)E口返回6.1MC68HC908GP32的普通I/OE口只有PTE1、PTE0引脚。它是I/O功能与串行通讯接口146.2.1C口、D口和E口(1)程序描述

给出程序名、硬件连接以及基本功能等描述,还可以给出编制者、编制时间等,若调试过程有新的体会,也可在此添加。(2)头文件与有关常量命名

汇编语言也借用C语言中“头文件”的概念,将映像寄存器的地址定义在“头文件”中,程序直接使用寄存器地址所对应的“名称”。例如,有了“头文件”,对“D口数据寄存器”读出操作,可用“LDAPTD”取代“LDA$0003”,更容易理解。

《嵌入式应用技术基础教程》课件

6.2汇编程序编程框架6.2汇编程序编程框架6.2.1C口、D口和E口(1)程序描述《嵌15如果程序中使用到内存变量,需在此定义。实际上,这里是对内存变量的声明,通常称为“开辟内存变量”,内存变量的初始化在主程序开始部分完成。第一个内存变量需用“ORG”语句定位,随后,按地址从小到大顺序存放。每个内存变量都有固定的内存地址。借用C语言术语,这里所开辟的所有内存变量都是“全局变量”。对应于C语言中的“局部变量”将在讲解子程序规范时说明。(4)主程序

主程序一般包括初始化与主循环两大部分。初始化包括堆栈初始化、系统初始化、内存变量初始化、I/O端口初始化、中断初始化等。主循环是程序的工作循环,根据实际需要安排程序段,但一般不宜过长,建议不要超过200行,具体功能可通过调用子程序来实现,或由中断程序实现。不带操作系统的MCU程序总有一个主循环,表示程序周而复始地执行。《嵌入式应用技术基础教程》课件(3)内存变量6.2汇编程序编程框架如果程序中使用到内存变量,需在此定义。实际上,16若有不单独存盘的子程序,建议放在此处。这样在主程序总循环的最后一个语句就可以看到这些子程序。建议不要超过3个,每个子程序不要超过200行。若有更多的子程序请单独存盘,单独测试。(6)外部子程序若程序使用独立存盘的子程序,可在此处使用“$include子程序名”将其包含。注意,独立存盘的子程序必须与主程序在同一个目录中。(7)中断向量中断向量一般放在最后。复位向量地址内容为MCU上电后执行的程序地址,即主程序的第一个语句地址。《嵌入式应用技术基础教程》课件(5)内部直接调用子程序6.2汇编程序编程框架若有不单独存盘的子程序,建议放在此处。这样在主17

第一个程序《嵌入式应用技术基础教程》课件

6.2.2第一个可执行的08汇编程序返回6.2汇编程序编程框架第一个程序《嵌入式应用技术基础教程》课件6.2.2第186.308汇编语言编译过程所涉及的文件

(1)头源文件(.H)

这是借用C语言中的概念,利用.H文件,存放MCU的映像寄存器地址、定义常量等。GP32ASM.H是包含MC68HC908GP32的映像寄存器地址的汇编语言头文件。使用08系列MCU的任何一种型号,均可拷贝此文件,并参考用户手册进行少量修改,获得相应芯片的映像寄存器地址的头文件。在嵌入式应用系统的实际开发中,建议采用面向“实际对象”的编程方式,可以使程序结构更清晰,移植性更强。例如,上一节给出的实例程序是使一盏小灯闪烁,小灯是接在PTA口的第1脚,程序中包含定义(见下页)

《嵌入式应用技术基础教程》课件6.308汇编语言编译过程所涉及的文件6.308汇编语言编译过程所涉及的文件(1)头源19*[指示灯所接引脚定义]Light_PequPTA;灯(Light)接在PTA口Light_DequDDRA;相应的方向寄存器Light_Pinequ1;所在的引脚这样,点亮小灯的程序是:BCLRLight_Pin,Light_P熄灭小灯的程序是:BSETLight_Pin,Light_P若把小灯接在PTB口的第2脚,只要作如下变动:*[指示灯所接引脚定义]Light_PequPTB;灯(Light)接在PTB口Light_DequDDRB;相应的方向寄存器Light_Pinequ2;所在的引脚而小灯闪烁的主程序无需改变。实际对象所在引脚的定义,可集中或分类放在相应的头文件(.H)中,硬件变动,只要更改头文件中引脚定义就可以了,增强了程序的通用性。《嵌入式应用技术基础教程》课件6.308汇编语言编译过程所涉及的文件*[指示灯所接引脚定义]《嵌入式应用技术基础20

源程序文件,后缀名为ASM。可以使用一般的文本编辑软件编辑,以ASCII形式存盘。5.5.1节已经对08汇编源程序格式作了说明,上一节给出了实例,关键是注意程序的书写规范。(3)目标代码文件(.S19)

源程序文件经08编译器编译后可以获得目标代码文件(.S19),它是MotorolaMCU的机器码文件,将其下载到MCU内部Flash存储器之后,MCU执行这些机器码。目标代码文件(.S19)是以S记录格式表示的机器码文件。S记录格式是Motorola公司的十六进制目标代码文件,它将目标程序和数据以可打印的ASCII码格式表示,可直接显示和打印。目标文件由若干行S记录构成,每行S记录可以用CR/LF/NUL结尾。一行S记录由下列五部分组成:类

记录长度

编码/数据

校验和2字节2字节2、3或4字节0~n字节1字节《嵌入式应用技术基础教程》课件(2)源程序文件(.ASM)6.308汇编语言编译过程所涉及的文件源程序文件,后缀名为ASM。可以使用一般的文本21表示S记录的类型。共有8种记录类型S0、S1、S2、S3、S5、S6、S8、S9。它们是为了满足不同的编码、传送方式以及解码的需求。ASM08编译器只使用S1、S9两种类型构成目标文件。S1—该记录包含程序/数据以及2字节存储其程序/数据的存储器首地址。S9—S1记录的结束记录。该记录没有程序/数据部分。地址部分可包含控制将转向的2字节地址,如果不指定,则为第一次使用的入口地址。②记录长度表示该记录行中字符对的数目,不包括类型和记录长度。③地址它可以是2个字节、3个字节或4个字节,取决于记录类型。S1记录、S9记录均是2个字节。它表示其后的编码/数据部分将要装入的存储器起始地址。④编码/数据就是实际的目标程序或数据,这一部分将被下载到单片机的程序存储器并运行。其字节数由“记录长度”域的实际数值决定。⑤校验和为1个字节,它是“记录长度”、“地址”、“编码/数据”三个部分所有字符之和的反码的低8位。供装入单片机时校验之用。《嵌入式应用技术基础教程》课件①类型6.308汇编语言编译过程所涉及的文件表示S记录的类型。共有8种记录类型S0、S1、S2、S3、S22S11380009B45023F94CD802E1204120013006EFA99S113801040CD80253B40FA12006EFA40CD80253BCES113802040FACC800C87A6C89D9D4BFC868187A610S113803001B71EA63DB71F3F366E01366E01386E7ES11380402C396E803A6E013B1A361E3718368681FBS105FFFE80007DS9030000FC第一行S11380009B45023F94CD802E1204120013006EFA99的前两个符号S1表示这一行是S1记录,其后的“13”是十六进制数$13,等于十进制数的19,表示在这一行中其后有19个字节的数据,包括2个字节的地址8000、16个字节的编码/数据:9B45023F94CD802E1204120013006EFA,最后一个字节99为校验和,大家可验证。《嵌入式应用技术基础教程》课件范例程序经编译后得到的目标文件:6.308汇编语言编译过程所涉及的文件S11380009B45023F94CD802E12041223编译过程还将产生列表文件(.LST)。列表文件包含地址、目标代码、行号、源程序等信息,该文件对用户很有帮助,它可以使用户清晰地看到程序代码的编译情况。列表文件的文件名与源程序的文件名相同,只是扩展名不同。下图给出了上节实例程序的.LST文件的片段。121*[主程序]8000122ORGFlashStartAddr;程序起始地址123MainInit:;复位后程序从此开始执行124;[系统初始化]80009B125SEI;禁止所有中断800145023F126LDHX#$023F;堆栈初始化为RAM最高端800494127TXS8005CD802E128JSRGP32Init;系统初始化,初学时跳过此处地址目标代码行号源程序《嵌入式应用技术基础教程》课件(4)列表文件(.LST)返回6.308汇编语言编译过程所涉及的文件编译过程还将产生列表文件(.LST)。列表文件包含地址、目标246.4SD-HC08嵌入式MCU在线编程

集成开发系统6.4.1硬件系统说明(1)总体结构布局

实验板硬件部分主要由MC68HC908GP32芯片及外围电路、LCD、键盘、模块化电源、串行口驱动电路、IC插线及其它元件扩展槽、输出开关量接线排、输入开关量接线排等部分组成,其主要作用是通过MC68HC908GP32芯片的监控程序和PC机进行通信,完成芯片程序的写入、运行、断点调试。《嵌入式应用技术基础教程》课件6.4SD-HC08嵌入式MCU在线编程集成开发系统6.4SD-HC08嵌入式MCU在线编程

集成开发系统625系统的硬件布局框图:

《嵌入式应用技术基础教程》课件电源指示灯LCD插孔键盘电位器2电位器1电源开关IC插线及其它元件扩展槽AIC插线及其它元件扩展槽B8位拨线开关PTAMC68HC908GP32芯片写入器引线键盘接线区MAX232发送指示灯键盘插孔串行口FUSE8个输出指示灯PTBPTCPTD蜂鸣器LCD自行接线区RSTSD-HC08(GP32)实验板布局6.4SD-HC08嵌入式MCU在线编程集成开发系统系统的硬件布局框图:《嵌入式应用技术基础教程》课26①将实验开发板的串行口通过串行通信线与PC机的串行口1或2连接。②接通实验开发板电源,电源指示灯亮。③连接实验所需线路

。④按实验板上的复位按钮。⑤执行PC机的配套软件,硬件系统等待SD-1软件系统的握手信号。(2)连接方法《嵌入式应用技术基础教程》课件6.4SD-HC08嵌入式MCU在线编程集成开发系统①将实验开发板的串行口通过串行通信线与PC机的串行口1或227实验开发板用拨线开关提供8位数字量的输入。拨线开关状态为OFF时是高电平,拨线开关状态为ON时是低电平。(4)开关量输出①实验开发板用LED提供8位开关量的输出。导线接插点为高电平时LED是暗的,低电平时LED是亮的。②实验开发板含有蜂鸣器输出,(5)模拟量输入MCU电位器电路实验开发板利用电位器提供两路模拟量输入,供进行A/D转换实验使用。(6)元件扩展口实验开发板提供元件扩展口,使用者可以进行IC扩展。液晶显示接口、键盘接口、串行口分别见后面的相应章节。《嵌入式应用技术基础教程》课件(3)开关量输入6.4SD-HC08嵌入式MCU在线编程集成开发系统实验开发板用拨线开关提供8位数字量的输入。拨线286.4.2软件使用说明系统软件功能的主要结构,如下图所示。《嵌入式应用技术基础教程》课件在线编程开发系统文件处理源文件编辑源文件编译帮助断点调试目标代码写打印S19文件分解建立通信线路数据传输汇编代码编译编译出错处理设置断点建立通信线路数据传输分解显示数据C代码编译6.4SD-HC08嵌入式MCU在线编程集成开发系统6.4.2软件使用说明系统软件功能的主要结构,如下图所示29①工程管理。②源文件编辑。③源文件编译。④目标代码写入芯片。⑤断点调试。(1)软件系统基本功能6.4SD-HC08嵌入式MCU在线编程集成开发系统①工程管理。(1)软件系统基本功能6.4SD-HC030SD-1V20型MC68HC908GP32MCU在线实验开发系统采用了WIN32的MDI风格,操作方便,直接支持Motorola的.S19文件格式,不改变用户中断向量,写入后直接转入用户程序执行。①新建工程。②源文件编辑。③编译设置。④编译工程。⑤下载程序。

(2)软件系统使用《嵌入式应用技术基础教程》课件返回6.4SD-HC08嵌入式MCU在线编程集成开发系统SD-1V20型MC68HC908GP32MCU在线实验开31本章小结通过6.1节普通I/O的学习,理解MCU编程的基本原理,掌握寄存器的使用方法。必须认真仔细阅读6.2节、6.3节给出的08汇编与08C语言的编程框架,参考实例进行体会,一开始就形成良好的编程规范。在学习范例的基础上,动手编制I/O程序,进行实际的编程及调试训练,由此入门。返回本章小结通过6.1节普通I/O的学习,理解MCU编程的基本原32第六章

通用I/O与第一个汇编程序主要内容

MC68HC908GP32的普通I/O

汇编程序编程框架

08汇编语言编译过程所涉及的文件

SD-HC08嵌入式MCU在线编程集成开发系统《嵌入式应用技术基础教程》课件第六章

通用I/O与第一个汇编程序主要内容《嵌入式应用技336.1MC68HC908GP32的普通I/O

所谓普通I/O,即基本的输入/输出,有时也称为并行I/O。作为普通输入引脚,MCU内部程序可以读取该引脚,知道该引脚是“1”(高电平)或“0”(低电平),即开关量输入。作为普通输出引脚,MCU内部程序向该引脚输出“1”(高电平)或“0”(低电平),即开关量输出。MC68HC908GP32单片机有5个普通I/O口,分别是A口、B口、C口、D口、E口。它们中的大部分具有双功能,本节仅讨论它们作为普通I/O功能时的编程方法。《嵌入式应用技术基础教程》课件6.1MC68HC908GP32的普通I/O6.1MC68HC908GP32的普通I/O所谓普34A口的8根引脚与键盘中断模块的引脚复用,这里只讨论A口作为普通I/O口的功能。(1)A口的寄存器

A口作为普通I/O口时,具有三个寄存器,它们是:A口数据方向寄存器(DDRA)、A口数据寄存器(PTA)、A口上拉电阻允许寄存器(PTAPUE)。

①A口数据方向寄存器(DataDirectionRegisterA,DDRA)

A口数据方向寄存器(DDRA)的地址是:$0004,DDRA的第7~0位分别记为DDRA7~DDRA0,这些位分别控制着A口引脚PTA7~PTA0是输入还是输出,若DDRAx=0,则引脚PTAx为输入,若DDRAx=1,则引脚PTAx为输出。复位时DDRA为$00。记忆要点:数据方向寄存器的一位:0—定义输入,1—定义输出

6.1.1A口《嵌入式应用技术基础教程》课件6.1MC68HC908GP32的普通I/OA口的8根引脚与键盘中断模块的引脚复用,这里只35A口数据寄存器(PTA)的地址是:$0000,PTA的第7~0位分别记为PTA7~PTA0。若A口的某一引脚PTAx被定义成输出,程序使A口数据寄存器PTA的相应位PTAx=0,则引脚PTAx输出“低电平”;程序使PTAx=1,则引脚PTAx输出“高电平”。若A口的某一引脚PTAx被定义成输入,程序通过读取A口数据寄存器PTA,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。记忆要点:输出时:数据寄存器的一位:0—输出低电平1—输出高电平输入时:数据寄存器的一位:0—代表外部输入低电平

1—代表外部输入高电平

《嵌入式应用技术基础教程》课件②A口数据寄存器(PortADataRegister,PTA)6.1MC68HC908GP32的普通I/OA口数据寄存器(PTA)的地址是:$0000,PTA的第7~36A口上拉电阻允许寄存器(PTAPUE)的地址是:$000D。PTAPUE的第7~0位分别记为PTAPUE7~PTAPUE0。若A口的某一引脚PTAx被定义成输入,则可通过置PTAPUE的相应位PTAPUEx为1来定义其内接上拉电阻,即引脚PTAx已经通过内部电阻与电源VDD相接,此时若引脚PTAx若通过开关接地,则开关闭合时为低电平。那么寄存器PTA的相应位PTAx=0,开关断开时为高电平,寄存器PTA的相应位PTAx=1,通过读取寄存器PTA获得开关状态。记忆要点:在引脚被定义成输入时,可通过上拉电阻允许寄存器定义有无内部上拉电阻:0—没有内部上拉电阻1—有内部上拉电阻

《嵌入式应用技术基础教程》课件③A口上拉电阻允许寄存器(PortAInputPullupEnableRegister,PTAPUE)6.1MC68HC908GP32的普通I/OA口上拉电阻允许寄存器(PTAPUE)的地址是:$000D。37下图给出了A口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。当DDRAx=1时,读地址$0000就是读PTAx。当DDRAx=0时,读地址$0000就是读引脚PTAx电平。《嵌入式应用技术基础教程》课件读DDRA($0004)写DDRA($0004)复位写PTA($0000)引脚PTAx

VDDPTAPUEx

内部上拉电阻读PTA($0000)A口的一个引脚内部逻辑电路框图A口数据方向寄存器DDRAx位A口数据寄存器PTAx位内部数据总线(2)A口逻辑电路框图6.1MC68HC908GP32的普通I/O下图给出了A口作为普通I/O使用时,一个外部引38B口的8根引脚与8路A/D转换模块的引脚复用,这里只讨论B口作为普通I/O口的功能。(1)B口的寄存器

B口作为普通I/O口时,具有二个寄存器,它们是:B口数据方向寄存器(DDRB)和B口数据寄存器(PTB)。

①B口数据方向寄存器(DataDirectionRegisterB,DDRB)B口数据方向寄存器(DDRB)的地址是:$0005,DDRB的第7~0位分别记为DDRB7~DDRB0,这些位分别控制着B口引脚PTB7~PTB0是输入还是输出,若DDRBx=0,则引脚PTBx为输入,若DDRBx=1,则引脚PTBx为输出。复位时DDRB为$00。记忆要点:数据方向寄存器的一位:0—定义输入,1—定义输出

6.1.2B口《嵌入式应用技术基础教程》课件6.1MC68HC908GP32的普通I/OB口的8根引脚与8路A/D转换模块的引脚复用39B口数据寄存器(PTB)的地址是:$0001,PTB的第7~0位分别记为PTB7~PTB0。若B口的某一引脚PTBx被定义成输出,程序使B口数据寄存器PTB的相应位PTBx=0,则引脚PTBx输出“低电平”,程序使PTBx=1,则引脚PTBx输出“高电平”。若B口的某一引脚PTBx被定义成输入,程序通过读取B口数据寄存器PTB,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。注意:B口被定义成输入时,没有内部上拉电阻《嵌入式应用技术基础教程》课件②B口数据寄存器(PortBDataRegister,PTB)6.1MC68HC908GP32的普通I/OB口数据寄存器(PTB)的地址是:$0001,PTB的第7~40下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。《嵌入式应用技术基础教程》课件读DDRB($0005)写DDRB($0005)复位

写PTB($0001)引脚PTBx

读PTB($0001)B口的一个引脚内部逻辑电路框图B口数据方向寄存器DDRBx位B口数据寄存器PTBx位内部数据总线(2)B口逻辑电路框图6.1MC68HC908GP32的普通I/O下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻416.1.3C口、D口和E口(1)C口对44引脚的MC68HC908GP32芯片的C口只有7根引脚:PTC6pin~PTC0pin,而40及42引脚的MC68HC908GP32芯片的C口只有5根引脚:PTC4pin~PTC0pin。下面以44引脚的MC68HC908GP32芯片进行说明。C口只有普通I/O功能,它的内部逻辑结构框图与A口逻辑结构框图相同,只是其中的有关字母“A”改为字母“C”,地址作相应改变即可。它也具有三个寄存器,它们是:C口数据方向寄存器(DDRC)、C口数据寄存器(PTC)、C口上拉电阻允许寄存器(PTCPUE)。《嵌入式应用技术基础教程》课件6.1MC68HC908GP32的普通I/O6.1.3C口、D口和E口(1)C口《嵌入42

C口数据方向寄存器(DDRC)的地址是:$0006,由于对应引脚只有7根,最高位没有意义。DDRC的第6~0位分别记为DDRC6~DDRC0,这些位分别控制着C口引脚PTC6~PTC0是输入还是输出,含义参考A口说明。复位时DDRC为$00。②C口数据寄存器(PortCDataRegister,PTC)C口数据寄存器(PTC)的地址是:$0002,PTC的第6~0位分别记为PTC6~PTC0。含义请类比A口、B口的相应说明。③

C口上拉电阻允许寄存器(PortCInputPullupEnableRegister,PTCPUE)C口上拉电阻允许寄存器(PTCPUE)的地址是:$000E。PTCPUE的第6~0位分别记为PTCPUE6~PTAPUE0。含义请类比A口的相应说明。《嵌入式应用技术基础教程》课件①C口数据方向寄存器(DataDirectionRegisterC,DDRC)6.1MC68HC908GP32的普通I/O

C口数据方向寄存器(DDRC)的地址是:$0006,由于43对于40引脚的MC68HC908GP32芯片的D口只有6根引脚:PTD5~PTD0。而42及44引脚的MC68HC908GP32芯片的D口有8根引脚:PTD7~PTD0。下面以42及44引脚的MC68HC908GP32芯片进行说明。D口是I/O功能与其它特殊功能(SPI,TIM)复用口,这里只讨论它作为普通I/O口的功能。它的内部逻辑结构框图与A口逻辑结构框图相同,只是其中的有关字母“A”改为字母“D”,地址作相应改变即可。它也具有三个寄存器,它们是:D口数据方向寄存器(DDRD)、D口数据寄存器(PTD)、D口上拉电阻允许寄存器(PTDPUE)。《嵌入式应用技术基础教程》课件(2)D口6.1MC68HC908GP32的普通I/O对于40引脚的MC68HC908GP32芯片的D口只有6根引44

D口数据方向寄存器(DDRD)的地址是:$0007。DDRD的第7~0位分别记为DDRD7~DDRD0,这些位分别控制着D口引脚PTD7~PTD0是输入还是输出,含义参考A口说明。复位时DDRD为$00。②D口数据寄存器(PortDDataRegister,PTD)

D口数据寄存器(PTD)的地址是:$0003,PTD的第7~0位分别记为PTD7~PTD0。含义请类比A口、B口的相应说明。③

D口上拉电阻允许寄存器(PortDInputPullupEnableRegister,PTDPUE)D口上拉电阻允许寄存器(PTDPUE)的地址是:$000F。PTDPUE的第7~0位分别记为PTDPUE7~PTDPUE0。含义请类比A口的相应说明。《嵌入式应用技术基础教程》课件①D口数据方向寄存器(DataDirectionRegisterD,DDRD)6.1MC68HC908GP32的普通I/O

D口数据方向寄存器(DDRD)的地址是:$0007。DD45E口只有PTE1、PTE0引脚。它是I/O功能与串行通讯接口(SCI)复用口,这里只讨论它的普通I/O口功能。其内部逻辑结构框图与B口相同,只需将其中的有关字母“B”改为字母“E”,地址作相应改变即可。它有两个寄存器:①E口数据方向寄存器(DataDirectionRegisterE,DDRE)E口数据方向寄存器(DDRE)的地址是:$000C。DDRE只有低两位有用。DDRE的第1、0位分别记为DDRE1、DDRD0,这两位分别控制着E口引脚PTE1、PTE0是输入还是输出,含义参考B口说明。复位时DDRE为$00。②E口数据寄存器(PortEDataRegister,PTE)E口数据寄存器(PTE)的地址是:$0008,PTE的第1~0位分别记为PTE1~PTE0。含义请类比B口的相应说明。《嵌入式应用技术基础教程》课件(3)E口返回6.1MC68HC908GP32的普通I/OE口只有PTE1、PTE0引脚。它是I/O功能与串行通讯接口466.2.1C口、D口和E口(1)程序描述

给出程序名、硬件连接以及基本功能等描述,还可以给出编制者、编制时间等,若调试过程有新的体会,也可在此添加。(2)头文件与有关常量命名

汇编语言也借用C语言中“头文件”的概念,将映像寄存器的地址定义在“头文件”中,程序直接使用寄存器地址所对应的“名称”。例如,有了“头文件”,对“D口数据寄存器”读出操作,可用“LDAPTD”取代“LDA$0003”,更容易理解。

《嵌入式应用技术基础教程》课件

6.2汇编程序编程框架6.2汇编程序编程框架6.2.1C口、D口和E口(1)程序描述《嵌47如果程序中使用到内存变量,需在此定义。实际上,这里是对内存变量的声明,通常称为“开辟内存变量”,内存变量的初始化在主程序开始部分完成。第一个内存变量需用“ORG”语句定位,随后,按地址从小到大顺序存放。每个内存变量都有固定的内存地址。借用C语言术语,这里所开辟的所有内存变量都是“全局变量”。对应于C语言中的“局部变量”将在讲解子程序规范时说明。(4)主程序

主程序一般包括初始化与主循环两大部分。初始化包括堆栈初始化、系统初始化、内存变量初始化、I/O端口初始化、中断初始化等。主循环是程序的工作循环,根据实际需要安排程序段,但一般不宜过长,建议不要超过200行,具体功能可通过调用子程序来实现,或由中断程序实现。不带操作系统的MCU程序总有一个主循环,表示程序周而复始地执行。《嵌入式应用技术基础教程》课件(3)内存变量6.2汇编程序编程框架如果程序中使用到内存变量,需在此定义。实际上,48若有不单独存盘的子程序,建议放在此处。这样在主程序总循环的最后一个语句就可以看到这些子程序。建议不要超过3个,每个子程序不要超过200行。若有更多的子程序请单独存盘,单独测试。(6)外部子程序若程序使用独立存盘的子程序,可在此处使用“$include子程序名”将其包含。注意,独立存盘的子程序必须与主程序在同一个目录中。(7)中断向量中断向量一般放在最后。复位向量地址内容为MCU上电后执行的程序地址,即主程序的第一个语句地址。《嵌入式应用技术基础教程》课件(5)内部直接调用子程序6.2汇编程序编程框架若有不单独存盘的子程序,建议放在此处。这样在主49

第一个程序《嵌入式应用技术基础教程》课件

6.2.2第一个可执行的08汇编程序返回6.2汇编程序编程框架第一个程序《嵌入式应用技术基础教程》课件6.2.2第506.308汇编语言编译过程所涉及的文件

(1)头源文件(.H)

这是借用C语言中的概念,利用.H文件,存放MCU的映像寄存器地址、定义常量等。GP32ASM.H是包含MC68HC908GP32的映像寄存器地址的汇编语言头文件。使用08系列MCU的任何一种型号,均可拷贝此文件,并参考用户手册进行少量修改,获得相应芯片的映像寄存器地址的头文件。在嵌入式应用系统的实际开发中,建议采用面向“实际对象”的编程方式,可以使程序结构更清晰,移植性更强。例如,上一节给出的实例程序是使一盏小灯闪烁,小灯是接在PTA口的第1脚,程序中包含定义(见下页)

《嵌入式应用技术基础教程》课件6.308汇编语言编译过程所涉及的文件6.308汇编语言编译过程所涉及的文件(1)头源51*[指示灯所接引脚定义]Light_PequPTA;灯(Light)接在PTA口Light_DequDDRA;相应的方向寄存器Light_Pinequ1;所在的引脚这样,点亮小灯的程序是:BCLRLight_Pin,Light_P熄灭小灯的程序是:BSETLight_Pin,Light_P若把小灯接在PTB口的第2脚,只要作如下变动:*[指示灯所接引脚定义]Light_PequPTB;灯(Light)接在PTB口Light_DequDDRB;相应的方向寄存器Light_Pinequ2;所在的引脚而小灯闪烁的主程序无需改变。实际对象所在引脚的定义,可集中或分类放在相应的头文件(.H)中,硬件变动,只要更改头文件中引脚定义就可以了,增强了程序的通用性。《嵌入式应用技术基础教程》课件6.308汇编语言编译过程所涉及的文件*[指示灯所接引脚定义]《嵌入式应用技术基础52

源程序文件,后缀名为ASM。可以使用一般的文本编辑软件编辑,以ASCII形式存盘。5.5.1节已经对08汇编源程序格式作了说明,上一节给出了实例,关键是注意程序的书写规范。(3)目标代码文件(.S19)

源程序文件经08编译器编译后可以获得目标代码文件(.S19),它是MotorolaMCU的机器码文件,将其下载到MCU内部Flash存储器之后,MCU执行这些机器码。目标代码文件(.S19)是以S记录格式表示的机器码文件。S记录格式是Motorola公司的十六进制目标代码文件,它将目标程序和数据以可打印的ASCII码格式表示,可直接显示和打印。目标文件由若干行S记录构成,每行S记录可以用CR/LF/NUL结尾。一行S记录由下列五部分组成:类

记录长度

编码/数据

校验和2字节2字节2、3或4字节0~n字节1字节《嵌入式应用技术基础教程》课件(2)源程序文件(.ASM)6.308汇编语言编译过程所涉及的文件源程序文件,后缀名为ASM。可以使用一般的文本53表示S记录的类型。共有8种记录类型S0、S1、S2、S3、S5、S6、S8、S9。它们是为了满足不同的编码、传送方式以及解码的需求。ASM08编译器只使用S1、S9两种类型构成目标文件。S1—该记录包含程序/数据以及2字节存储其程序/数据的存储器首地址。S9—S1记录的结束记录。该记录没有程序/数据部分。地址部分可包含控制将转向的2字节地址,如果不指定,则为第一次使用的入口地址。②记录长度表示该记录行中字符对的数目,不包括类型和记录长度。③地址它可以是2个字节、3个字节或4个字节,取决于记录类型。S1记录、S9记录均是2个字节。它表示其后的编码/数据部分将要装入的存储器起始地址。④编码/数据就是实际的目标程序或数据,这一部分将被下载到单片机的程序存储器并运行。其字节数由“记录长度”域的实际数值决定。⑤校验和为1个字节,它是“记录长度”、“地址”、“编码/数据”三个部分所有字符之和的反码的低8位。供装入单片机时校验之用。《嵌入式应用技术基础教程》课件①类型6.308汇编语言编译过程所涉及的文件表示S记录的类型。共有8种记录类型S0、S1、S2、S3、S54S11380009B45023F94CD802E1204120013006EFA99S113801040CD80253B40FA12006EFA40CD80253BCES113802040FACC800C87A6C89D9D4BFC868187A610S113803001B71EA63DB71F3F366E01366E01386E7ES11380402C396E803A6E013B1A361E3718368681FBS105FFFE80007DS9030000FC第一行S11380009B45023F94CD802E1204120013006EFA99的前两个符号S1表示这一行是S1记录,其后的“13”是十六进制数$13,等于十进制数的19,表示在这一行中其后有19个字节的数据,包括2个字节的地址8000、16个字节的编码/数据:9B45023F94CD802E1204120013006EFA,最后一个字节99为校验和,大家可验证。《嵌入式应用技术基础教程》课件范例程序经编译后得到的目标文件:6.308汇编语言编译过程所涉及的文件S11380009B45023F94CD802E12041255编译过程还将产生列表文件(.LST)。列表文件包含地址、目标代码、行号、源程序等信息,该文件对用户很有帮助,它可以使用户清晰地看到程序代码的编译情况。列表文件的文件名与源程序的文件名相同,只是扩展名不同。下图给出了上节实例程序的.LST

温馨提示

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

评论

0/150

提交评论