您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 飞思卡尔8位单片机MC9S08第6章 通用IO与第一个汇编程序
第六章通用I/O与第一个汇编程序主要内容MC68HC908GP32的普通I/O汇编程序编程框架08汇编语言编译过程所涉及的文件SD-HC08嵌入式MCU在线编程集成开发系统6.1MC68HC908GP32的普通I/O6.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/OA口的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口数据寄存器(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口上拉电阻允许寄存器(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/O下图给出了A口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。当DDRAx=1时,读地址$0000就是读PTAx。当DDRAx=0时,读地址$0000就是读引脚PTAx电平。读DDRA($0004)写DDRA($0004)复位写PTA($0000)引脚PTAxVDDPTAPUEx内部上拉电阻读PTA($0000)A口的一个引脚内部逻辑电路框图A口数据方向寄存器DDRAx位A口数据寄存器PTAx位内部数据总线(2)A口逻辑电路框图6.1MC68HC908GP32的普通I/OB口的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口数据寄存器(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/O下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。读DDRB($0005)写DDRB($0005)复位写PTB($0001)引脚PTBx读PTB($0001)B口的一个引脚内部逻辑电路框图B口数据方向寄存器DDRBx位B口数据寄存器PTBx位内部数据总线(2)B口逻辑电路框图6.1MC68HC908GP32的普通I/O6.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/OC口数据方向寄存器(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对于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/OD口数据方向寄存器(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/OE口只有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.2汇编程序编程框架6.2.1C口、D口和E口(1)程序描述给出程序名、硬件连接以及基本功能等描述,还可以给出编制者、编制时间等,若调试过程有新的体会,也可在此添加。(2)头文件与有关常量命名汇编语言也借用C语言中“头文件”的概念,将映像寄存器的地址定义在“头文件”中,程序直接使用寄存器地址所对应的“名称”。例如,有了“头文件”,对“D口数据寄存器”读出操作,可用“LDAPTD”取代“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汇
本文标题:飞思卡尔8位单片机MC9S08第6章 通用IO与第一个汇编程序
链接地址:https://www.777doc.com/doc-5951090 .html