




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章 普通I/O及第一个汇编工程,主要内容 通用I/O接口基本概念及连接方法 MC68HC908GP32的并行I/O端口 汇编工程文件组织 I/O口的输入和输出电流以及端口上拉问题,4.1 通用I/O接口基本概念及连接方法,I/O接口,即输入输出接口,是微控制器同外界进行交互的重要通道。这些接口千变万化,种类繁多,有显而易见的人机交互接口,如操纵杆、键盘、显示器;也有无人介入的接口,如网络接口、机器设备接口。 通用I/O: GPIO(General Purpose I/O),是I/O的最基本形式,它是一组输入或输出引脚,有时也称为并行I/O(parallel I/O)。,输入引脚有三种不同的连接方式:带上拉电阻的连接、带下拉电阻的连接和“悬空”连接。,返回,输出引脚的基本接法作为通用输出引脚,MCU内部程序向该引脚输出高电平或低电平来驱动器件工作,即开关量输出。如图4-2所示。O1发光二极管LED的驱动引脚O2引脚接蜂鸣器驱动电路,4.2 MC68HC908GP32的并行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口数据方向寄存器(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定义输出,4.2.1 A口,A口数据寄存器(PTA)的地址是:$0000,PTA的第7-0位分别记为PTA7-PTA0。若A口的某一引脚PTAx被定义成输出,程序使A口数据寄存器PTA的相应位PTAx0,则引脚PTAx输出“低电平”;程序使PTAx1,则引脚PTAx输出“高电平”。若A口的某一引脚PTAx被定义成输入,程序通过读取A口数据寄存器PTA,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。记忆要点: 输出时:数据寄存器的一位:0输出低电平 1输出高电平输入时:数据寄存器的一位:0代表外部输入低电平 1代表外部输入高电平, A口数据寄存器(Port A Data Register,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口上拉电阻允许寄存器(Port A Input Pullup Enable Register,PTAPUE),下图给出了A口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。当DDRAx=1时,读地址$0000就是读PTAx。当DDRAx=0时,读地址$0000就是读引脚PTAx 电平。,(2)A口逻辑电路框图,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定义输出,4.2.2 B口,B口数据寄存器(PTB)的地址是:$0001,PTB的第7-0位分别记为PTB7-PTB0。若B口的某一引脚PTBx被定义成输出,程序使B口数据寄存器PTB的相应位PTBx0,则引脚PTBx输出“低电平”,程序使PTBx1,则引脚PTBx输出“高电平”。若B口的某一引脚PTBx被定义成输入,程序通过读取B口数据寄存器PTB,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。注意:B口被定义成输入时,没有内部上拉电阻, B口数据寄存器(Port B Data Register,PTB),下图给出了B口作为普通I/O使用时,一个外部引脚的相应内部逻辑电路框图。,(2)B口逻辑电路框图,4.2.3 C口、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 本文件为MC908GP32 MCU映象寄存器名定义头文件,它是GP32的汇编工程的映像寄存器名与其地址的对应表, (2) MCUinit.s 芯片初始化文件,主要包含与芯片有关的设置,如总线频率、看门狗模块的使用等。,1芯片相关的程序文件,(3) Vectors08.s 该文件包含了中断处理程序和中断矢量表。中断处理程序是当中断发生后执行的子程序,中断子程序在返回时需要使用RTI指令。中断矢量表实质是在MCU的矢量区写入一些常量值,这些常量值就是相应的中断处理程序的入口地址。当系统发生中断时,从中断向量表获得相应的中断处理子程序的入口地址,使程序流转向中断服务例程,执行相应的中断处理动作,处理结束后,从中断返回。 /Vectors08.s中断处理子程序与中断向量表-* /功能: * / (1)定义中断处理子程序 * / (2)放置中断向量表 * /说明:该文件与芯片具体型号有关 * / (1)芯片型号MC68HC908GP32 * / (2)注意本文件内容的顺序不能变动 * /-*,/此处为用户中断处理子程序的存放处/未定义的中断处理子程序,本子程序不能删除isrDummy: RTI/中断矢量表,用户若需开放某中断,可修改下表中的相应项目/(interrupt service routine,isr 中断处理程序).area memory(abs).org 0xffdc /中断向量表起始地址(注意:与芯片型号有关)vectab: .word isrDummy /时基中断 .word isrDummy /AD转换中断 .word isrDummy /键盘中断 .word isrDummy /SCI发送中断 .word isrDummy /SCI接收中断 .word isrDummy /SCI错误中断 .word isrDummy /SPI发送中断,.word isrDummy /SPI错误中断 .word isrDummy /TIM2溢出中断 .word isrDummy /TIM2通道1输入捕捉/输出比较中断 .word isrDummy /TIM2通道0输入捕捉/输出比较中断 .word isrDummy /TIM1溢出中断 .word isrDummy /TIM1通道1输入捕捉/输出比较中断 .word isrDummy /TIM1通道0输入捕捉/输出比较中断 .word isrDummy /CGM的PLL锁相状态变化中断 .word isrDummy /IRQ引脚中断 .word isrDummy /SWI指令中断 .word MainInit /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)控制引脚为高电平时,小灯暗;反之,小灯亮 */-*/小灯驱动头文件.include LED.h/LEDinit:定义控制小灯的MCU引脚为输出-*/功能:定义控制小灯的MCU引脚为输出,并使小灯初始为暗 */入口:无 */出口:无 */堆栈深度:2 */-*LEDinit: BSET #Light_Pin,Light_D /令小灯引脚为输出 BSET #Light_Pin,Light_P /初始时,小灯暗 RTS/LED_L_A:驱动小灯亮,暗-*/功能:根据A的值控制小灯的亮和暗 */入口:A(A = L,小灯亮;A = A,小灯暗) */出口:无 */堆栈深度:2 */-*,LED_L_A: CMP #A BNE LED_L_A_1 BSET #Light_Pin,Light_P /小灯暗 BRA LED_L_A_ExitLED_L_A_1: CMP #L BNE LED_L_A_Exit /入口非L/A,程序无响应 BCLR #Light_Pin,Light_P /小灯亮LED_L_A_Exit: RTS,3通用程序文件 通用程序文件中可以定义一些与硬件无关、可以在不同工程项目中直接引用的子程序。它还可以是与这些通用子程序文件相对应的头文件。 在工程PrgFrame.prj中,有通用子程序文件GeneralFun.s,它定义了延时子程序DelayHX,这个程序不依赖于任何硬件模块,只是完成一个延时动作。工程PrgFrame.prj中,还有一个比较特殊的文件总头文件(Includes.h),它也属于通用程序文件。Includes.h用于声明全局变量和包含主程序文件中需要的头文件,宏定义等。它使得主函数文件能够尽量避免改动,结构更加清晰。在Includes.h中声明内存变量,通常称为“开辟内存变量”,内存变量的初始化在主程序开始部分完成。4主程序文件一个汇编工程中包含一个汇编主程序文件,文件名固定为main.s。汇编主程序的主体是程序的主干流程,要尽可能简洁、清晰,流程中的各个环节由子程序去完成,主程序仅仅是完成对子程序的调用。,返回,TXS /HX - 1 - SP /2. 系统初始化 JSR MCUinit /初学时跳过此处 /3. 模块初始化 JSR LEDinit /(1) I/O口小灯控制引脚初始化/程序总循环入口MainLoop: LDA #L /小灯亮 JSR LED_L_A LDHX #$02FF /延时 JSR DelayHX LDA #A /小灯暗 JSR LED_L_A LDHX #$02FF /延时 JSR DelayHX JMP MainLoop/包含本工程的其他文件-.include GeneralFun.s /通用子程序.include MCUinit.s /芯片初始化.include LED.s /小灯驱动/包含中断处理子程序与中断向量表文件Vectors08.s-.include Vectors08.s /中断处理子程序与中断向量表,/Delay_us:微秒级延时子程序-*/功 能:微秒级延时,延时T=(10+5*A)个时钟周期 */入 口:寄存器A=(T-10)/5 (A的取值范围#!1-#!255) */备 注:由总线频率计算每个周期时间. */ 设总线频率为f=2.4576MHz,每个周期为T=1/f0.4us*/ 若用BSR调用:T=10+5*A的来源 * / LDA(2),BSR(4),循环体(5*A),RTS(4) * /-*Delay_us: NOP /1个时钟周期 NOP /1个时钟周期 DBNZA Delay_us /3个时钟周期 RTS /4个时钟周期,/Delay_ms:毫秒级延时子程序-*/功 能:毫秒级延时子程序, 延时T=500*HX个时钟周期/入 口:HX=T/500 ;(HX的取值范围#!1-#!65535)*/调用例:LDHX #!1000;延时T=500*1000=50000时钟周期/ JSR Delay_ms */备 注:在总线频率为f=2.4576MHz时,每周期T=0.4us*/ 大延时:65535*500*0.4us=13s */-*Delay_ms: LDA #96 /2个时钟周期 BSR Delay_us /490个时钟周期 AIX #-1 /2个时钟周期 CPHX #0 /3个时钟周期 BNE Delay
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字笔顺的课件
- 汉字的构造及分类课件
- 广东省肇庆市2024-2025学年高二下学期期末考试物理试题(含答案)
- 工厂车间承包合同(5篇)
- 2024-2025学年广东省揭阳市普宁市二中七年级(下)第一次月考数学试卷(含答案)
- 《史记》的当代价值转换知到智慧树答案
- 年度个人先进工作总结
- 《Android移动应用开发基础》知到智慧树答案
- 能源环保产业前景分析报告
- 2024年秋新北师大版数学一年级上册 第四单元 一起做游戏 教学课件
- 护理法律相关案例分析
- 2025版《折弯机安全操作规程》全
- 2024版标准性二手车贷款合同模板(含车况鉴定)3篇
- 孕期阴道炎的健康宣教
- DB32-T 4467-2023 南美白对虾小棚养殖尾水生态化处理技术规程
- 31个工种安全技术交底
- 人工智能概论课件完整版
- 管道承诺质量保证书范本
- 门窗订购电子合同模板
- 渠道衬砌施工方案(渠道预制混凝土块)
- 台州市开发投资集团有限公司招聘笔试题库2024
评论
0/150
提交评论