您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第4章 通用IO与第一个汇编程序
《嵌入式技术基础与实践》第四章普通I/O及第一个汇编工程主要内容•通用I/O接口基本概念及连接方法•MC68HC908GP32的并行I/O端口•汇编工程文件组织•I/O口的输入和输出电流以及端口上拉问题《嵌入式技术基础与实践》4.1通用I/O接口基本概念及连接方法I/O接口(或端口),即输入输出接口,是微控制器同外界进行交互的重要通道。这些接口千变万化,种类繁多,有显而易见的人机交互接口,如操纵杆、键盘、显示器;也有无人介入的接口,如网络接口、机器设备接口。通用I/O:GPIO(GeneralPurposeI/O),是I/O的最基本形式,它是一组输入或输出引脚,有时也称为并行I/O(parallelI/O)。《嵌入式技术基础与实践》输入引脚有三种不同的连接方式:带上拉电阻的连接、带下拉电阻的连接和“悬空”连接。VCCK2R4R3VCCK3R5I3I2MCUK1R1I1VCCR2上拉电阻R2下拉电阻R4I3悬空状态返回《嵌入式技术基础与实践》输出引脚的基本接法作为通用输出引脚,MCU内部程序向该引脚输出高电平或低电平来驱动器件工作,即开关量输出。如图4-2所示。其中O1引脚是发光二极管LED的驱动引脚,当O1引脚输出高电平时,LED不亮;当O1引脚输出低电平时,LED点亮。O2引脚接蜂鸣器驱动电路,当O2脚输出高电平时,蜂鸣器响;O2脚输出低电平时,蜂鸣器不响。这里只是原理性说明,关于电流方向与大小等问题,作为进一步讨论放在4.4节。《嵌入式技术基础与实践》4.2MC68HC908GP32的并行I/O端口MC68HC908GP32单片机有5个普通I/O口,分别是A口、B口、C口、D口、E口。它们中的大部分具有双功能,本节仅讨论它们作为普通I/O功能时的编程方法。《嵌入式技术基础与实践》A口的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—定义输出4.2.1A口《嵌入式技术基础与实践》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—代表外部输入高电平(该引脚的电平值决定其值)②A口数据寄存器(PortADataRegister,PTA)《嵌入式技术基础与实践》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—有内部上拉电阻③A口上拉电阻允许寄存器(PortAInputPullupEnableRegister,PTAPUE)《嵌入式技术基础与实践》下图给出了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口逻辑电路框图《嵌入式技术基础与实践》B口的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—定义输出4.2.2B口《嵌入式技术基础与实践》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口被定义成输入时,没有内部上拉电阻②B口数据寄存器(PortBDataRegister,PTB)《嵌入式技术基础与实践》下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。读DDRB($0005)写DDRB($0005)复位写PTB($0001)引脚PTBx读PTB($0001)B口的一个引脚内部逻辑电路框图B口数据方向寄存器DDRBx位B口数据寄存器PTBx位内部数据总线(2)B口逻辑电路框图《嵌入式技术基础与实践》4.2.3C口、D口和E口作为通用I/O口使用时,C口、D口的功能以及用法与A口类似,E口与B口类似。表4-1描述了C、D、E这3个通用I/O口。《嵌入式技术基础与实践》4.3汇编工程文件组织通用程序文件芯片相关的程序文件GP32映像寄存器名定义头文件(GP32ASM.h)芯片初始化文件(MCUinit.s)中断处理子程序与中断向量表文件(Vectors08.s)硬件对象控制文件小灯驱动头文件(LED.h)小灯驱动文件(LED.s)总头文件(Includes.h)通用函数文件(GeneralFun.s)主函数文件(Main.s)PrgFrame.prj《嵌入式技术基础与实践》PrgFrame.prj工程中芯片相关类的程序文件包括:GP32映像寄存器名定义头文件(GP32ASM.h)、芯片初始化文件(MCUinit.s)和中断处理子程序与中断向量表文件(Vectors08.s)。(1)GP32ASM.h本文件为MC908GP32MCU映象寄存器名定义头文件,它是GP32的汇编工程的映像寄存器名与其地址的对应表,(2)MCUinit.s芯片初始化文件,主要包含与芯片有关的设置,如总线频率、看门狗模块的使用等。1.芯片相关的程序文件《嵌入式技术基础与实践》(3)Vectors08.s该文件包含了中断处理程序和中断矢量表。中断处理程序是当中断发生后执行的子程序,中断子程序在返回时需要使用RTI指令。中断矢量表实质是在MCU的矢量区写入一些常量值,这些常量值就是相应的中断处理程序的入口地址。当系统发生中断时,从中断向量表获得相应的中断处理子程序的入口地址,使程序流转向中断服务例程,执行相应的中断处理动作,处理结束后,从中断返回。//[Vectors08.s]中断处理子程序与中断向量表---------------*//功能:*//(1)定义中断处理子程序*//(2)放置中断向量表*//说明:该文件与芯片具体型号有关*//(1)芯片型号MC68HC908GP32*//(2)注意本文件内容的顺序不能变动*//---------------------------------------------------------------------------------*《嵌入式技术基础与实践》//此处为用户中断处理子程序的存放处//未定义的中断处理子程序,本子程序不能删除isrDummy::RTI//中断矢量表,用户若需开放某中断,可修改下表中的相应项目//(interruptserviceroutine,isr中断处理程序).areamemory(abs).org0xffdc//中断向量表起始地址(注意:与芯片型号有关)vectab::.wordisrDummy//时基中断.wordisrDummy//AD转换中断.wordisrDummy//键盘中断.wordisrDummy//SCI发送中断.wordisrDummy//SCI接收中断.wordisrDummy//SCI错误中断.wordisrDummy//SPI发送中断《嵌入式技术基础与实践》.wordisrDummy//SPI错误中断.wordisrDummy//TIM2溢出中断.wordisrDummy//TIM2通道1输入捕捉/输出比较中断.wordisrDummy//TIM2通道0输入捕捉/输出比较中断.wordisrDummy//TIM1溢出中断.wordisrDummy//TIM1通道1输入捕捉/输出比较中断.wordisrDummy//TIM1通道0输入捕捉/输出比较中断.wordisrDummy//CGM的PLL锁相状态变化中断.wordisrDummy//IRQ引脚中断.wordisrDummy//SWI指令中断.wordMainInit//RESET(见主程序定位处)复位被认为是一种特殊中断《嵌入式技术基础与实践》2.硬件对象控制文件MCU工程编程是面向硬件对象的。PrgFrame.prj工程用普通I/O口控制小灯(LED)闪烁。(1)LED.h文件“LED.h”中包含小灯控制引脚宏定义。//[LED.h]小灯驱动头文件----------------------------------//小灯控制引脚宏定义Light_P=PTA//灯(Light)接在PTA口Light_D=DDRA//相应的方向寄存器Light_Pin=1//所在的引脚(2)LED.s文件“LED.s”中包含:①文件描述:文件中的子程序的索引、硬件对象及其与MCU的连接描述②头文件:小灯控制所需用到的头文件和小灯控制引脚定义及小灯控制子程序中用到的其他常量声明可全部存放在“LED.h”中,“LED.s”只要包含该头文件即可。③小灯驱动子程序定义:每个子程序前要有相应的程序描述,包括子程序名,子程序的功能、入口和出口,必要时加上相关说明。《嵌入式技术基础与实践》//[LED.s]小灯驱动------------------------------------------------------*//本文件包含:*//(1)LEDinit:定义控制小灯的MCU的I/O引脚为输出*//(2)LED_L_A:驱动小灯“亮”,“暗”*//硬件连接:*//(1)本处的小灯是一个发光二极管,由MCU的I/O引脚控制*//(2)控制引脚为高电平时,小灯“暗”;反之,小灯“亮”
本文标题:第4章 通用IO与第一个汇编程序
链接地址:https://www.777doc.com/doc-3399201 .html