1 / 32

第六章 通用 I/O 与第一个汇编程序

《 嵌入式应用技术基础教程 》 课件. 第六章 通用 I/O 与第一个汇编程序. 主要内容 MC68HC908GP32 的普通 I/O 汇编程序编程框架 08 汇编语言编译过程所涉及的文件 SD-HC08 嵌入式 MCU 在线编程集成开发系统. 《 嵌入式应用技术基础教程 》 课件. 6.1 MC68HC908GP32 的普通 I/O.

vivien
Download Presentation

第六章 通用 I/O 与第一个汇编程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 《嵌入式应用技术基础教程》课件 第六章 通用I/O与第一个汇编程序 主要内容 • MC68HC908GP32的普通I/O • 汇编程序编程框架 • 08汇编语言编译过程所涉及的文件 • SD-HC08嵌入式MCU在线编程集成开发系统

  2. 《嵌入式应用技术基础教程》课件 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

  3. 《嵌入式应用技术基础教程》课件 6.1.1 A口 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的第7~0位分别记为DDRA7~DDRA0,这些位分别控制着A口引脚PTA7 ~PTA0是输入还是输出,若DDRAx=0,则引脚PTAx为输入,若DDRAx=1,则引脚PTAx为输出。复位时DDRA为$00。 记忆要点:数据方向寄存器的一位:0—定义输入,1—定义输出 6.1 MC68HC908GP32的普通I/O

  4. 《嵌入式应用技术基础教程》课件 ② A口数据寄存器(Port A Data Register,PTA) A口数据寄存器(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—代表外部输入高电平 6.1 MC68HC908GP32的普通I/O

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

  6. 读DDRA($0004) 写DDRA($0004) 复位 写PTA($0000) 引脚 PTAx VDD PTAPUEx 内部上拉电阻 读PTA($0000) A口的一个引脚内部逻辑电路框图 A口数据方向寄存器 DDRAx位 内部数据总线 A口数据寄存器 PTAx位 《嵌入式应用技术基础教程》课件 (2)A口逻辑电路框图 下图给出了A口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。当DDRAx=1时,读地址$0000就是读PTAx。当DDRAx=0时,读地址$0000就是读引脚PTAx 电平。 6.1 MC68HC908GP32的普通I/O

  7. 《嵌入式应用技术基础教程》课件 6.1.2 B口 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的第7~0位分别记为DDRB7~DDRB0,这些位分别控制着B口引脚PTB7~PTB0是输入还是输出,若DDRBx=0,则引脚PTBx为输入,若DDRBx=1,则引脚PTBx为输出。复位时DDRB为$00。 记忆要点:数据方向寄存器的一位:0—定义输入,1—定义输出 6.1 MC68HC908GP32的普通I/O

  8. 《嵌入式应用技术基础教程》课件 ② B口数据寄存器(Port B Data Register,PTB) B口数据寄存器(PTB)的地址是:$0001,PTB的第7~0位分别记为PTB7~PTB0。若B口的某一引脚PTBx被定义成输出,程序使B口数据寄存器PTB的相应位PTBx=0,则引脚PTBx输出“低电平”,程序使PTBx=1,则引脚PTBx输出“高电平”。若B口的某一引脚PTBx被定义成输入,程序通过读取B口数据寄存器PTB,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。 注意:B口被定义成输入时,没有内部上拉电阻 6.1 MC68HC908GP32的普通I/O

  9. 读DDRB($0005) 写DDRB($0005) 复位 写PTB($0001) 引脚 PTBx 读PTB($0001) B口的一个引脚内部逻辑电路框图 内部数据总线 B口数据方向寄存器 DDRBx位 B口数据寄存器 PTBx位 《嵌入式应用技术基础教程》课件 (2)B口逻辑电路框图 下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。 6.1 MC68HC908GP32的普通I/O

  10. 《嵌入式应用技术基础教程》课件 6.1.3 C口、D口和E口 (1)C口 对44引脚的MC68HC908GP32芯片的C口只有7根引脚:PTC6 pin~PTC0 pin,而40及42引脚的MC68HC908GP32芯片的C口只有5根引脚:PTC4 pin~PTC0 pin。下面以44引脚的MC68HC908GP32芯片进行说明。C口只有普通I/O功能,它的内部逻辑结构框图与A口逻辑结构框图相同,只是其中的有关字母“A”改为字母“C”,地址作相应改变即可。 它也具有三个寄存器,它们是:C口数据方向寄存器(DDRC)、C口数据寄存器(PTC)、C口上拉电阻允许寄存器(PTCPUE)。 6.1 MC68HC908GP32的普通I/O

  11. 《嵌入式应用技术基础教程》课件 ① C口数据方向寄存器(Data Direction Register C,DDRC) C口数据方向寄存器(DDRC)的地址是:$0006,由于对应引脚只有7根,最高位没有意义。DDRC的第6~0位分别记为DDRC6~DDRC0,这些位分别控制着C口引脚PTC6~PTC0是输入还是输出,含义参考A口说明。复位时DDRC为$00。 ② C口数据寄存器(Port C Data Register,PTC) C口数据寄存器(PTC)的地址是:$0002,PTC的第6~0位分别记为PTC6~PTC0。含义请类比A口、B口的相应说明。 ③C口上拉电阻允许寄存器(Port C Input Pullup Enable Register,PTCPUE) C口上拉电阻允许寄存器(PTCPUE)的地址是:$000E。PTCPUE的第6~0位分别记为PTCPUE6~PTAPUE0。含义请类比A口的相应说明。 6.1 MC68HC908GP32的普通I/O

  12. 《嵌入式应用技术基础教程》课件 (2)D口 对于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)。 6.1 MC68HC908GP32的普通I/O

  13. 《嵌入式应用技术基础教程》课件 ① D口数据方向寄存器(Data Direction Register D,DDRD) D口数据方向寄存器(DDRD)的地址是:$0007。DDRD的第7~0位分别记为DDRD7~DDRD0,这些位分别控制着D口引脚PTD7~PTD0是输入还是输出,含义参考A口说明。复位时DDRD为$00。 ② D口数据寄存器(Port D Data Register,PTD) D口数据寄存器(PTD)的地址是:$0003,PTD的第7~0位分别记为PTD7~PTD0。含义请类比A口、B口的相应说明。 ③D口上拉电阻允许寄存器(Port D Input Pullup Enable Register,PTDPUE) D口上拉电阻允许寄存器(PTDPUE)的地址是:$000F。PTDPUE的第7~0位分别记为PTDPUE7~PTDPUE0。含义请类比A口的相应说明。 6.1 MC68HC908GP32的普通I/O

  14. 《嵌入式应用技术基础教程》课件 (3)E口 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的第1~0位分别记为PTE1~PTE0。含义请类比B口的相应说明。 返回 6.1 MC68HC908GP32的普通I/O

  15. 《嵌入式应用技术基础教程》课件 6.2 汇编程序编程框架 6.2.1 C口、D口和E口 (1)程序描述 给出程序名、硬件连接以及基本功能等描述,还可以给出编制者、编制时间等,若调试过程有新的体会,也可在此添加。 (2)头文件与有关常量命名 汇编语言也借用C语言中“头文件”的概念,将映像寄存器的地址定义在“头文件”中,程序直接使用寄存器地址所对应的“名称”。例如,有了“头文件”,对“D口数据寄存器”读出操作,可用“LDA PTD”取代“LDA $0003”,更容易理解。 6.2 汇编程序编程框架

  16. 《嵌入式应用技术基础教程》课件 (3)内存变量 如果程序中使用到内存变量,需在此定义。实际上,这里是对内存变量的声明,通常称为“开辟内存变量”,内存变量的初始化在主程序开始部分完成。第一个内存变量需用“ORG”语句定位,随后,按地址从小到大顺序存放。每个内存变量都有固定的内存地址。借用C语言术语,这里所开辟的所有内存变量都是“全局变量”。对应于C语言中的“局部变量”将在讲解子程序规范时说明。 (4)主程序 主程序一般包括初始化与主循环两大部分。初始化包括堆栈初始化、系统初始化、内存变量初始化、I/O端口初始化、中断初始化等。主循环是程序的工作循环,根据实际需要安排程序段,但一般不宜过长,建议不要超过200行,具体功能可通过调用子程序来实现,或由中断程序实现。不带操作系统的MCU程序总有一个主循环,表示程序周而复始地执行。 6.2 汇编程序编程框架

  17. 《嵌入式应用技术基础教程》课件 (5)内部直接调用子程序 若有不单独存盘的子程序,建议放在此处。这样在主程序总循环的最后一个语句就可以看到这些子程序。建议不要超过3个,每个子程序不要超过200行。若有更多的子程序请单独存盘,单独测试。 (6)外部子程序 若程序使用独立存盘的子程序,可在此处使用“$include 子程序名”将其包含。注意,独立存盘的子程序必须与主程序在同一个目录中。 (7)中断向量 中断向量一般放在最后。复位向量地址内容为MCU上电后执行的程序地址,即主程序的第一个语句地址。 6.2 汇编程序编程框架

  18. 《嵌入式应用技术基础教程》课件 6.2.2 第一个可执行的08汇编程序 • 第一个程序 返回 6.2 汇编程序编程框架

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

  20. 《嵌入式应用技术基础教程》课件 *[指示灯所接引脚定义] 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汇编语言编译过程所涉及的文件

  21. 《嵌入式应用技术基础教程》课件 (2)源程序文件(.ASM) 源程序文件,后缀名为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记录由下列五部分组成: 6.3 08汇编语言编译过程所涉及的文件

  22. 《嵌入式应用技术基础教程》课件 ① 类型 表示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.3 08汇编语言编译过程所涉及的文件

  23. 《嵌入式应用技术基础教程》课件 范例程序经编译后得到的目标文件: S11380009B45023F94CD802E1204120013006EFA99 S113801040CD80253B40FA12006EFA40CD80253BCE S113802040FACC800C87A6C89D9D4BFC868187A610 S113803001B71EA63DB71F3F366E01366E01386E7E S11380402C396E803A6E013B1A361E3718368681FB S105FFFE80007D S9030000FC 第一行S11380009B45023F94CD802E1204120013006EFA99的前两个符号S1表示这一行是S1记录,其后的“13”是十六进制数$13,等于十进制数的19,表示在这一行中其后有19个字节的数据,包括2个字节的地址8000、16个字节的编码/数据:9B45023F94CD802E1204120013006EFA,最后一个字节99为校验和,大家可验证。 6.3 08汇编语言编译过程所涉及的文件

  24. 地址 目标代码 行号 源程序 《嵌入式应用技术基础教程》课件 (4)列表文件(.LST) 编译过程还将产生列表文件(.LST)。列表文件包含地址、目标代码、行号、源程序等信息,该文件对用户很有帮助,它可以使用户清晰地看到程序代码的编译情况。列表文件的文件名与源程序的文件名相同,只是扩展名不同 。下图给出了上节实例程序的.LST文件的片段 。 返回 6.3 08汇编语言编译过程所涉及的文件

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

  26. 串行口 电位器2 LCD插孔 电位器1 发送指示灯 电源 开关 IC插线及其它元件扩展槽A LCD自行接线区 IC插线及其它元件扩展槽B 键盘插孔 写入器引线 电源指示灯 MC68HC908GP32芯片 MAX232 键盘 键 盘 接线 区 PTD PTC PTA PTB 蜂鸣器 FUSE RST 8位拨线开关 SD-HC08(GP32)实验板布局 8个输出指示灯 《嵌入式应用技术基础教程》课件 系统的硬件布局框图: 6.4 SD-HC08嵌入式MCU在线编程集成开发系统

  27. 《嵌入式应用技术基础教程》课件 (2)连接方法 ① 将实验开发板的串行口通过串行通信线与PC机的串行口1或2连接。 ② 接通实验开发板电源,电源指示灯亮。 ③ 连接实验所需线路 。 ④ 按实验板上的复位按钮。 ⑤ 执行PC机的配套软件,硬件系统等待SD-1软件系统的握手信号。 6.4 SD-HC08嵌入式MCU在线编程集成开发系统

  28. 《嵌入式应用技术基础教程》课件 (3)开关量输入 实验开发板用拨线开关提供8位数字量的输入。拨线开关状态为OFF时是高电平,拨线开关状态为ON时是低电平。 (4)开关量输出 ① 实验开发板用LED提供8位开关量的输出。导线接插点为高电平时LED是暗的,低电平时LED是亮的。 ② 实验开发板含有蜂鸣器输出, (5)模拟量输入 MCU电位器电路实验开发板利用电位器提供两路模拟量输入,供进行A/D转换实验使用。 (6)元件扩展口 实验开发板提供元件扩展口,使用者可以进行IC扩展。 液晶显示接口、键盘接口、串行口分别见后面的相应章节。 6.4 SD-HC08嵌入式MCU在线编程集成开发系统

  29. 在线编程开发系统 • C代码编译 • 汇编代码编译 • 编译出错处理 • 目标代码写 • 文件处理 • 源文件编辑 • 源文件编译 • 打 印 • 断 点 调 试 • 帮 助 • S19文件分解 • 建立通信线路 • 数据传输 • 建立通信线路 • 数据传输 • 分解显示数据 • 设置断点 《嵌入式应用技术基础教程》课件 6.4.2 软件使用说明 系统软件功能的主要结构,如下图所示。 6.4 SD-HC08嵌入式MCU在线编程集成开发系统

  30. (1)软件系统基本功能 ① 工程管理。 ② 源文件编辑。 ③ 源文件编译。 ④ 目标代码写入芯片。 ⑤ 断点调试。 6.4 SD-HC08嵌入式MCU在线编程集成开发系统

  31. 《嵌入式应用技术基础教程》课件 (2)软件系统使用 SD-1V20型MC68HC908GP32 MCU在线实验开发系统采用了WIN32的MDI风格,操作方便,直接支持Motorola的.S19文件格式,不改变用户中断向量,写入后直接转入用户程序执行。 ①新建工程。 ②源文件编辑。 ③编译设置。 ④编译工程。 ⑤下载程序。 返回 6.4 SD-HC08嵌入式MCU在线编程集成开发系统

  32. 本章小结 通过6.1节普通I/O的学习,理解MCU编程的基本原理,掌握寄存器的使用方法。必须认真仔细阅读6.2节、6.3节给出的08汇编与08C语言的编程框架,参考实例进行体会,一开始就形成良好的编程规范。在学习范例的基础上,动手编制I/O程序,进行实际的编程及调试训练,由此入门。 返回

More Related