ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:867.50KB ,
资源ID:7683878      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7683878.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(飞思卡尔8位单片机MC9S0809程序键盘中断模块编程实例.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

飞思卡尔8位单片机MC9S0809程序键盘中断模块编程实例.doc

1、9.2 汇编语言键盘中断模块编程实例 (2)键盘编程汇编语言子程序 下面给出有关键盘编程的汇编语言子程序。它们是:键盘中断初始化子程序、扫描法读取键值子程序、键值转为定义值子程序。即使不使用中断方式识别按键,三个子程序仍然需要使用。只不过键盘初始化子程序中改为不允许中断进入。扫描法读取键值与键值转为定义值两个子程序在键盘编程中通常需要使用的。 KBsub.ASM *------------------------------------------------------* *文件描述:包含3个键盘子程序,分别为: * *

2、 (1)键盘初始化子程序(KB_Init) * * (2)扫描读取键值子程序(KB_Scan) * * (3)键值转为定义值子程序(KB_Def) * *------------------------------------------------------* *===================以下为子程序源代码=================* KB_P EQU PTA ;键盘接在PTA口上 KB_D EQU DD

3、RA ;相应的方向寄存器 KB_PUE EQU PTAPUE ;相应的上拉电阻允许寄存器 *KB_Init:键盘初始化子程序------------------------------* *功能:初始化键盘中断的引脚,但未开放键盘中断 * *入口:无 * *出口:无 * *堆栈深度:2

4、 * *------------------------------------------------------* KB_Init: PSHA ;保护A LDA #$00 ;复位相应寄存器 STA KB_P LDA #%00001111 ;定义7-4为输入,3-0为输出 STA KB_D LDA #%11110000 ;定义输入引脚有内部上拉电阻 STA KB_PUE

5、 BSET 1,INTKBSCR ;屏蔽键盘中断(IMASK=1) LDA #%11110000 ;允许输入引脚的中断可进入 STA INTKBIER BSET 2,INTKBSCR ;清除键盘中断请求(ACKK=1) PULA ;恢复A RTS *KB_Scan:扫描读取键值子程序----------------------------* *功能:扫描4*4键盘,读取键值->A,无按键,为$FF * *入口:无

6、 * *出口:A=键值 * *堆栈深度:2+2=4 * *------------------------------------------------------* KB_Scan: AIS #-!2 ;开辟临时变量 LDA #%11111110 ;使第一根行线为0

7、低电平) STA !1,SP LDA #$04 ;将扫描4根行线 STA !2,SP KB_Scan1: LDA KB_P ;取KB_P->A ORA #%00001111 ;KB_P.7-4保留,KB_P.3-0为1 AND $1,SP ;令KB_P.n=0,n=0、1、2、3 STA KB_P NOP NOP LDA KB_P

8、 ;看第n行是否有键按下 AND #%11110000 ;KB_P.7-4保留,令低4位=0 CBEQA #$F0,KB_Scan2 ;本行无键按下,转KB_Scan2 LDA KB_P ;本行有键按下 BRA KB_Scan_Exit KB_Scan2: SEC ;C=1 ROL $1,SP ;使下一个行线为0 DBNZ !2,SP,KB_Scan1 ;对行线循环

9、 LDA #$FF ;没有键被按下返回$FF KB_Scan_Exit: AIS #!2 ;释放临时变量 RTS *KB_Def:键值转为定义值子程序---------------------------* *功能:键值转为键盘定义值 * *入口:A=键值 * *出口:A=键定义值

10、 * *堆栈深度:2+3=5 * *------------------------------------------------------* KB_Def: PSHH ;保护HX PSHX AIS #-!1 ;开辟临时变量 STA !1,SP ;把键值存入(!1,SP) LDHX #KB_Table ;取键盘定义表首地址 KB_Def1: L

11、DA ,X CMP #$00 ;与0(定义表结束标志)相比较 BEQ KB_Def3 ;=0,表示即表中无次定义值 CMP $1,SP ;与键值相比较 BNE KB_Def2 ;不等,未找到转KB_Def2 AIX #!1 ;找到 LDA ,X ;取键定义值-〉A BRA KB_DefR KB_Def2: AIX #!

12、2 ;指向下一个键值 BRA KB_Def1 ;继续判断 KB_Def3: LDA #$FF ;无此定义,用FF标志 KB_DefR: AIS #!1 ;释放临时变量 PULX ;恢复HX PULH RTS ;键盘定义表 KB_Table FCB $EE,"1",$DE,"2",$BE,"3",$7E,"A" FCB $ED,"4",$DD,"5",$BD,"6",$7D,"B"

13、 FCB $EB,"7",$DB,"8",$BB,"9",$7B,"C" FCB $E7,"*",$D7,"0",$B7,"#",$77,"D" FCB $00 9.2.2 键盘中断编程举例 下面给出的实例程序的功能是,当按下键盘上任何一个键,产生键盘中断,在键盘中断程序中,通过串行口发送“键值”及“键定义值”。PC机方程序,接收它们,并显示。 (1)键盘中断编程汇编主程序 实例编号:A03 路径:\ASM\ A03_键盘实验 (Keyboard.asm) *----------------------------键盘实验------

14、 *文 件 名:Keyboard.asm * *硬件连接:PTA.7-4接键盘4根列线,PTA.3-0接键盘4根行线 * *程序描述:按下键盘按键,串口发送对应的键值 * *目 的:键盘扫描,键盘中断,键值识别,键盘编码 * *注 意:如果键盘插在实验板的上排插孔,无须连线,若插在下排 * * 插孔,需手工接线

15、 *---------《嵌入式应用技术基础教程》教学实例-----------* *[头文件] $include "GP32ASM.H" *[两个起始地址] RAMstartAddr equ $0040 ;RAM的起始地址 FlashStartAddr equ $8000 ;程序开始地址 *======================================================= *[主程序] org FlashStartAddr ;程序起始地址 MainInit: ;复位后程序从此开始执行

16、 ;[系统初始化] SEI ;关中断 LDHX #$023F TXS JSR GP32Init ;调系统初始化子程序GP32Init JSR SCIInit ;调串行口初始化子程序SCIInit JSR KB_Init ;调键盘初始化子程序 BCLR 1,INTKBSCR ;开放键盘中断(IMASK=0)

17、CLI ;开中断 ;[程序总循环入口,无中断时空操作] MainLoop: NOP NOP BRA MainLoop *==================以下为子程序存放处============================ *KB_Int:键盘中断处理程序-------------------------------* *功能:键盘中断程序,把键定义值从串口发送出去 * *调用子程序:(1)扫描法读取

18、键值子程序(KB_Scan) * * (2)键值转为定义值子程序(KB_Def) * *------------------------------------------------------* KB_Int: SEI ;关总中断 PSHH ;保护H BSET 1,INTKBSCR ;禁止键盘中断 JSR KB_Scan ;扫描键盘,读取键值->A JSR

19、SCISend1 ;发送键值 JSR KB_Def ;转成键定义值->A JSR SCISend1 ;发送键定义值 JSR KB_Init BCLR 1,INTKBSCR ;开放键盘中断(IMASKK=0) PULH ;恢复H CLI ;开总中断 RTI *[外部子程序存放处] $include "GP32init.asm" $include "SCIInit.asm"

20、 $include "H08SCI.asm" $include "KBsub.asm" *[中断向量] ORG $FFE0 ;键盘中断矢量 DW KB_Int ORG $FFFE ;复位矢量 DW MainInit (2)键盘中断编程的PC机方的VB界面与程序 图9-4 键盘中断编程的PC机方的VB界面 图9-4为针对上述MCU程序的PC机方的VB界面。通过它可以清楚地知道定义值与键值的对应关系,若显示不对,可以修改键值转为定义值子程序中的键值表。 实例编号:A03 路径:\A

21、SM\A03_键盘实验\VB_KB '程序描述:把接收到的数据显示在接收窗口中 '------------------------------------------------------- Option Explicit '检查未经声明的变量 Dim RecvData() As Byte '接收数据数组 Private Sub Form_Load() '清空有关文本框 Txthex.Text = "" Txtchr.Text = "" '串行口初始化 Call SCIinit(MSComm1, 1, "

22、9600,N,8,1") '开放串行中断 MSComm1.RThreshold = 1 End Sub Public Sub MSComm1_OnComm() '串行接收中断 Dim i As Integer Dim S1 As String, S2 As String MSComm1.RThreshold = 0 '关闭串行中断 RecvData = MSComm1.Input S1 = Hex(RecvData(0)) S2 = Chr(RecvData(1)) Txthex.Text = S2

23、Txtchr.Text = S1 MSComm1.RThreshold = 1 '开放串行中断 End Sub Private Sub CmdCLR_Click() '单击"清空"按钮 Txthex.Text = "" Txtchr.Text = "" End Sub Private Sub CmdEXIT_Click() '单击"退出"按钮 If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End End Sub Private Sub CmdEXIT_C

24、lick() '单击"退出"按钮 If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End End Sub 9.3 08C语言键盘中断模块编程实例 本节给出与汇编程序相对应的08C语言程序。PC机部分的VB程序相同。 9.3.1 按键识别与键盘定义函数 H08KB.C /*-----------------------------------------------------* *文件描述:本文件包含了H08C键盘中断子函数,分别为: * *(1)KB_Init:

25、键盘初始化函数 * * void KB_Init(void) * *(2)KB_Scan:扫描读取键值函数 * * unsigned char KB_Scan(void) * *(3)KB_Def:键值转为定义值函数 * * unsigned char KB_Def(unsigned char KB_valv

26、e) * *-----------------------------------------------------*/ /*[以下为子程序源代码]*/ /*[头文件]*/ #include "GP32C.H" #include "KB.h" /*KB_Init:键盘初始化函数-------------------------------* *功 能:初始化键盘中断的引脚,但未开放键盘中断 * *参 数:无 * *返 回:无

27、 * *-----------------------------------------------------*/ void KB_Init(void) { KB_P=0x00; //复位KB_P KB_D=0b00001111; //定定义7-4为输入,3-0为输出 KB_PUE=0b11110000; //定义输入引脚有内部上拉电阻 INTKBSCR|= (1<

28、0000; //允许输入引脚的中断可进入 INTKBSCR|= (1<*p ,若无按键, * * *p为0xff * *参 数:无 * *返 回:扫描到的键值

29、 * *-----------------------------------------------------*/ unsigned char KB_Scan(void) { unsigned char line,i,tmp; line=0b11111110; //使第一根行线为0(低电平) for(i=1;i<=4;i++) //将扫描4根行线 { tmp=KB_P; //取KB_P->tmp tmp|=0b00001111;

30、 //KB_P.7-4保留,KB_P.3-0为1 KB_P=tmp&line; //令KB_P.n=0,n=0、1、2、3 asm("NOP"); //等待,消除按键抖动 asm("NOP"); tmp=KB_P; tmp&=0b11110000; //看第n行是否有键按下 if(tmp!=0xf0) //本行有键按下 { tmp=KB_P; break; } else

31、 //本行无键按下,扫描下一行 line=(line<<1)|0x01; } if(i==5) tmp=0xff; return(tmp); } /*KB_Def:键值转为定义值函数----------------------------* *功 能:键值转为定义值 * *参 数:键值 * *返 回:键定义值

32、 * *-----------------------------------------------------*/ //键盘定义表 const unsigned char KB_Table[]= {0xEE,'1',0xDE,'2',0xBE,'3',0x7E,'A', 0xED,'4',0xDD,'5',0xBD,'6',0x7D,'B', 0xEB,'7',0xDB,'8',0xBB,'9',0x7B,'C', 0xE7,'*',0xD7,'0',0xB7,'#',0x77,'D', 0x00}; unsigned char KB_Def(uns

33、igned char KB_valve) { unsigned char KeyPress; unsigned char i; unsigned char j; i=0; while(1) { j=KB_Table[i]; //与0(定义表结束标志)相比较 if (j==0) //=0,即表中无次定义值 {KeyPress=0xff; break;} //返回0xff else //与键值相比较 if (

34、j==KB_valve) //找到 {KeyPress=KB_Table[i+1];break;} //取键定义值 else i+=2; //指向下一个键值,继续判断 }; return KeyPress; } 9.3.2 键盘中断编程08C语言举例 (1)键盘中断编程实例的08C主函数 实例编号:C03 路径:\C\ C03_C03_键盘实验 /*-------------------键盘实验----------------------

35、 *工 程 名:Keyboard.prj * *硬件连接:PTA.7-4接键盘4根列线,PTA.3-0接键盘4根行线 * *程序描述:按下键盘按键,串口发送对应的键值 * *目 的:键盘扫描,键盘中断,键值识别,键盘编码 * *注 意:如果键盘插在实验板上排插孔,无须连线,若插在下 * * 排插孔,需手工接线 * *-------《嵌入式应用技术基础教程》教学实例------------*/

36、 /*[头文件]*/ #include "GP32C.H" #include "KB.h" //键盘中断头文件 /*[主程序]*/ void main() { asm("SEI"); //关总中断 KB_Init(); INTKBSCR&= ~(1<

37、 vectors08.c /*-----------------------------------------------------* *文件名:vectors08.c * *功 能:用于定义中断矢量表 * *-----------------------------------------------------*/ /*[头文件]*/ #include "GP32C.H" #include "KB.h"

38、include "SCI.h" /*键盘中断处理函数------------------------------------*/ #pragma interrupt_handler isrKBI void isrKBI(void) { unsigned char KB_valve; asm("SEI"); //关总中断 INTKBSCR|= (1<

39、alve); KB_valve=KB_Def(KB_valve); //键值转化为定义值 SCISend1(KB_valve); KB_Init(); //重新初始化键盘 INTKBSCR&= ~(1<

40、改下表中的相应项目 #pragma abs_address:0xffdc //中断向量表起始地址 void (* const _vectab[])(void) = { isrDummy, //Timebase isrDummy, //ADC isrKBI, //KBI isrDummy, //SCI TC/TE isrDummy, //SCI RF/IDLE isrDummy, //SCI PE/FE/NF/OR isrDummy, //SPI

41、 TE isrDummy, //SPI MOD/OVR/RF isrDummy, //TIM2 OVR isrDummy, //TIM2 channel 1 isrDummy, //TIM2 channel 0 isrDummy, //TIM1 OVR isrDummy, //TIM1 channel 1 isrDummy, //TIM1 channel 0 isrDummy, //CGM isrDummy, //IRQ isrDummy //SWI //RESET也是中断,定义在 crt08.o中 }; #pragma end_abs_address

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服