书签 分享 收藏 举报 版权申诉 / 40
上传文档赚钱

类型单片机原理及接口技术第4章80C51的汇编语言程序设计课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4092383
  • 上传时间:2022-11-10
  • 格式:PPT
  • 页数:40
  • 大小:1.93MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《单片机原理及接口技术第4章80C51的汇编语言程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    单片机 原理 接口 技术 80 C51 汇编语言 程序设计 课件
    资源描述:

    1、第第4 4章章 80C5180C51的汇编语言程序设计的汇编语言程序设计程序编制的程序编制的方法方法和和技巧技巧4.1源程序的源程序的编辑编辑和和汇编汇编4.2基本基本程序结构程序结构4.3子程序子程序及其调用及其调用4.4简单简单I/O设备的并口直接驱动设备的并口直接驱动示例示例4.52022-11-101 单片机应用系统由单片机应用系统由硬件系统硬件系统和和应用程序应用程序构成构成 汇编语言汇编语言 高级语言高级语言 应用程序设计方法应用程序设计方法 汇编语言汇编语言,生成的目标程序占内存空间少、运行速,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强。度快,具有效率高、实时性

    2、强。高级语言高级语言,对系统的功能描述与实现简单,程序阅,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。读、修改和移植方便,适合于编写复杂的程序。2022-11-1024.1 程序编制的方法和技巧程序编制的方法和技巧4.1.1 4.1.1 程序编制的步骤程序编制的步骤 明确任务:功能要求、技术指标明确任务:功能要求、技术指标 运行环境调研运行环境调研 任务分析任务分析 将实际问题转化为计算机处理的程序算法将实际问题转化为计算机处理的程序算法 算法比较与优化(内存需求算法比较与优化(内存需求与与运行速度)运行速度)算法设计算法设计2022-11-103 流程描述流程

    3、描述 流程图符号流程图符号“超级循环超级循环”框架框架2022-11-104 强化模块观念强化模块观念使程序占用空间减少、结构清晰使程序占用空间减少、结构清晰循环初值和结束条件,避免循环初值和结束条件,避免“死机死机”现象现象子程序的现场保护(注意栈平衡、寄存器内容)子程序的现场保护(注意栈平衡、寄存器内容)程序模块(主程序模块、各种子程序模块)程序模块(主程序模块、各种子程序模块)模块化优点:分块设计、便于阅读、调试方便模块化优点:分块设计、便于阅读、调试方便4.1.2 4.1.2 程序编制的方法和技巧程序编制的方法和技巧 采用循环和子程序采用循环和子程序对中断子程序还有注意保护对中断子程序

    4、还有注意保护PSWPSW的内容的内容2022-11-1054.1.3 4.1.3 汇编语言的语句格式汇编语言的语句格式非数字字符开头,后跟字母、数字、非数字字符开头,后跟字母、数字、“-”-”、“?”等等不能用已定义的保留字(指令助记符、伪指令等)不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号后跟英文冒号“:”:”KeilKeil的汇编器的汇编器A51A51可以识别的语句形式为:可以识别的语句形式为:标号(即符号地址)标号(即符号地址)标号:指令助记符指令助记符 操作数1,操作数2,操作数3,;注释 指令助记符指令助记符是指令功能的英文缩写。是指令功能的英文缩写。2022-11-10

    5、6数据:二进制(数据:二进制(B B)十进制(十进制(D D或省略或省略D D)十六进制(十六进制(H H),注意),注意A AFF开头时要加开头时要加“0 0”ASCII ASCII码,如码,如 AA,12451245v 符号:符号名、标号或符号:符号名、标号或“$”$”(PCPC的当前值)的当前值)v 表达式:由运算符和数据构成(见表表达式:由运算符和数据构成(见表4.14.1)操作数操作数 注释注释英文分号英文分号“;”;”开头开头2022-11-107优先级运 算 符功 能表达式及其结果示例高低()括号4*(5+6)即44NOT、HIGH、LOW取反、取高字节、取低字节NOT 55H

    6、即AAH;HIGH 1234H 即12H、正号、负号5、6*、/、MOD乘、除(取商)、取余数17/5 即3;17 MOD 5 即2、加、减 54 即 9;54=即1SHL、SHR左移、右移2 SHL 2即8;8 SHR 2 即 2AND、OR、XOR与、或、异或45H AND 0FH即05H、=、=比较运算符MOV A,X8;若X8为真,则为MOV A,01H若X8为假,则为MOV A,00H表表4.14.12022-11-1084.2 源程序的编辑和汇编源程序的编辑和汇编目标程序的产生过程如下图:目标程序的产生过程如下图:2022-11-1094.2.1 4.2.1 源程序的编辑和汇编源程

    7、序的编辑和汇编 源程序的编辑源程序的编辑 ORG ORG 0000H LJMP MAIN ORG ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP$ENDEND依据汇编语言规则依据汇编语言规则用好用好伪指令伪指令符号符号不用中文不用中文SJMP$SJMP$用于调试用于调试以以 .ASM.ASM存盘存盘2022-11-1010 源程序的汇编源程序的汇编汇编源程序转为目标程序的过程叫汇编源程序转为目标程序的过程叫汇编汇编汇编通常在汇编通常在WindowsWindows下的下的集

    8、成开发环境集成开发环境完成完成用用A51.EXEA51.EXE汇编生成汇编生成.OBJ.OBJ、.LIB.LIB及及.LST.LST 目标程序的连接目标程序的连接.OBJ.OBJ、.LIB.LIB经经BL51.EXEBL51.EXE生成无扩展名的生成无扩展名的绝对地址目标文件绝对地址目标文件绝对地址目标文件绝对地址目标文件可以用于仿真器调试可以用于仿真器调试调试无误的目标文件用调试无误的目标文件用OH51.EXEOH51.EXE转换为转换为.HEX.HEX文件文件.HEX.HEX文件经文件经编程器编程器写入单片机存储器写入单片机存储器2022-11-10114.2.2 4.2.2 伪指令伪指令

    9、伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码伪指令无对应的单片机可执行代码 起始地址设定伪指令起始地址设定伪指令ORGORGORG ORG 表达式表达式表达式通常为十六进制地址,例:表达式通常为十六进制地址,例:ORG 8000HSTART:MOV A,#30H ORGORG可多次使用,但地址值的顺序要由小到大可多次使用,但地址值的顺序要由小到大 结束汇编伪指令结束汇编伪指令ENDENDEND该伪指令位于源程序的该伪指令位于源程序的最后一行最后一行。2022-11-1012 定义字节数据表伪指令定义字节数据表伪指令DBDB定

    10、义字数据表伪指令定义字数据表伪指令DWDW1000H 标号:标号:DB DB 字节数据表字节数据表如:如:ORG 1000HORG 1000HDB -2,-4,-6,8,10,18DB -2,-4,-6,8,10,18FEH FCHFAH08H0AH12H1001H 标号:标号:DW DW 字数据表字数据表 ORG 1400H ORG 1400HDATA1:DW 32DATA1:DW 324A4AH,3CHH,3CH 1400H32H 4AH00H3CH1401H1402H1403H大端模式2022-11-1013 定义常值为符号名伪指令定义常值为符号名伪指令EQUEQU符号名符号名 EQU

    11、EQU 常值表达式常值表达式 LENLEN EQUEQU 10 10 SUMSUM EQUEQU 21H 21HBLOCKBLOCK EQU EQU 22H 22H CLR A CLR A MOV R7,MOV R7,LENLEN MOV R0,MOV R0,BLOCKBLOCK LOOP:ADD A,R0 LOOP:ADD A,R0 INC R0 INC R0 DJNZ R7,LOOP DJNZ R7,LOOP MOV MOV SUMSUM,A,A 符号名为:符号名为:v地址地址v常数常数v段名段名v字符串字符串v寄存器名寄存器名v位名位名比较:比较:标号标号只能是地址只能是地址2022-1

    12、1-1014 定义位地址为符号名伪指令定义位地址为符号名伪指令BITBIT符号名符号名 BIT BIT 位地址表达式位地址表达式如:如:ST BIT P1.0 ;ST BIT P1.0 ;将将P1.0P1.0的位地址赋给符号名的位地址赋给符号名STSTCF BIT 0D7H ;CF BIT 0D7H ;将位地址为将位地址为D7HD7H的位定义为符号名的位定义为符号名用用BITBIT定义的定义的“符号名符号名”一经定义便不能重一经定义便不能重新定义和改变新定义和改变其它一些伪指令参见教材表其它一些伪指令参见教材表4.2 4.2 2022-11-10154.3 基本程序结构基本程序结构一般不影响标

    13、志寄存器一般不影响标志寄存器PSWPSW的状态。的状态。传送类指令有两大类传送类指令有两大类 一般传送(一般传送(MOVMOV )特殊传送,如:特殊传送,如:MOVC MOVC MOVX MOVX PUSH PUSH、POPPOP XCH XCH、XCHDXCHD SWAP SWAP 2022-11-10164.3.1 4.3.1 顺序程序顺序程序(无分支、无循环)(无分支、无循环)4.3 基本程序结构基本程序结构【例例4-14-1】片内片内RAMRAM的的21H21H单单元存放一个十进制数据十元存放一个十进制数据十位的位的ASCIIASCII码,码,22H22H单元存单元存放该数据个位的放该

    14、数据个位的ASCIIASCII码。码。编写程序将该数据转换成编写程序将该数据转换成压缩压缩BCDBCD码存放在码存放在20H20H单元。单元。2022-11-1017 ORG 0040H ORG 0040HSTART:MOV A,21H ;START:MOV A,21H ;取十位取十位ASCIIASCII码码 ANL A,#0FH ;ANL A,#0FH ;保留低半字节保留低半字节 SWAP A ;SWAP A ;移至高半字节移至高半字节 MOV 20H,A ;MOV 20H,A ;存于存于20H20H单元单元 MOV A,22H ;MOV A,22H ;取个位取个位ASCIIASCII码码

    15、ANL A,#0FH ;ANL A,#0FH ;保留低半字节保留低半字节 ORL 20H,A ;ORL 20H,A ;合并到结果单元合并到结果单元 SJMP$SJMP$END END2022-11-10184.3.2 4.3.2 分支程序分支程序(单分支、双分支、多分支)(单分支、双分支、多分支)【例例4-24-2】设变量设变量x x以补码以补码的形式存放在片内的形式存放在片内RAMRAM的的30H30H单元,变量单元,变量y y与与x x的关的关系是系是:当当x x大于大于0 0时时,y=x;,y=x;当当x=0 x=0时时,y=20H;,y=20H;当当x x小于小于0 0时时,y=x+5

    16、,y=x+5。编制程序。编制程序,根根据据x x的大小求的大小求y y并送回原单并送回原单元。元。2022-11-1019 ORG 0040HORG 0040HSTART:MOV A,30H ;START:MOV A,30H ;取取x x至累加器至累加器 JZ NEXTJZ NEXT ;x=0,;x=0,转转NEXTNEXT ANL A,#80H ;ANL A,#80H ;否,保留符号位否,保留符号位 JZ DONEJZ DONE ;x 0,;x 0,转结束转结束 MOV A,#05H ;x 0MOV A,#05H ;x 0处理处理 ADD A,30H ADD A,30H MOV 30H,A

    17、;X+05H MOV 30H,A ;X+05H送送Y Y SJMP DONE SJMP DONE NEXT:MOV 30H,#20H;x=0,20H NEXT:MOV 30H,#20H;x=0,20H送送Y Y DONE:SJMP DONE DONE:SJMP DONE END END 2022-11-1020【例例4-34-3】根据根据R7R7的内容的内容x x(转移序号)转向相应的处理程序。(转移序号)转向相应的处理程序。设设R7R7内容为内容为0 04 4,对应的处理程序入口地址分别为,对应的处理程序入口地址分别为PP0PP0PP4PP4。2022-11-1021 START:MOV R

    18、7,#3 ;START:MOV R7,#3 ;以转移序号以转移序号3 3为例为例 ACALL JPNUMACALL JPNUM AJMP START AJMP START JPNUM:MOV DPTR,#TAB ;JPNUM:MOV DPTR,#TAB ;置分支入口地址表首址置分支入口地址表首址 MOV A,R7MOV A,R7 ADD A,R7ADD A,R7 ;乘乘2 2,调整偏移量,调整偏移量 MOV R3,A MOV R3,A MOVC A,A+DPTR ;MOVC A,A+DPTR ;取地址高字节,暂存于取地址高字节,暂存于R3R3 XCH A,R3 XCH A,R3 INC A I

    19、NC A MOVC A,A+DPTR ;MOVC A,A+DPTR ;取地址低字节取地址低字节 MOV DPL,A ;MOV DPL,A ;处理程序入口地址低处理程序入口地址低8 8位送位送DPLDPL MOV DPH,R3 ;MOV DPH,R3 ;处理程序入口地址高处理程序入口地址高8 8位送位送DPHDPH CLR A CLR A JMP A+DPTRJMP A+DPTR 2022-11-1022 TAB:DW PP0 TAB:DW PP0 DW PP1 DW PP1 DW PP2 DW PP2 DW PP3DW PP3 DW PP4 DW PP4 PP0:MOV 30H,#0 ;PP0

    20、:MOV 30H,#0 ;转移序号为转移序号为0 0时时,置功能号置功能号“0”0”于于30H30H单元单元 RETRET PP1:MOV 30H,#1 ;PP1:MOV 30H,#1 ;转移序号为转移序号为1 1时时,置功能号置功能号“1”1”于于30H30H单元单元 RETRET PP2:MOV 30H,#2 ;PP2:MOV 30H,#2 ;转移序号为转移序号为2 2时时,置功能号置功能号“2”2”于于30H30H单元单元 RETRET PP3:MOV 30H,#3PP3:MOV 30H,#3 ;转移序号为转移序号为3 3时时,置功能号置功能号“3”3”于于30H30H单元单元 RETR

    21、ET PP4:MOV 30H,#4 ;PP4:MOV 30H,#4 ;转移序号为转移序号为4 4时时,置功能号置功能号“4”4”于于30H30H单元单元 RETRET 2022-11-10234.3.3 4.3.3 循环程序循环程序(2种:先执行,后判断;先判断,后执行)种:先执行,后判断;先判断,后执行)【例例4-44-4】将内部将内部RAMRAM的的30H30H至至3FH3FH单元初始化为单元初始化为00H00H。MAIN:MOV R0,#30H;MAIN:MOV R0,#30H;置初值置初值 MOV A,#00H ;MOV A,#00H ;MOV R7,#16 ;MOV R7,#16 ;

    22、LOOP:MOV R0,A ;LOOP:MOV R0,A ;循环处理循环处理 INC R0 ;INC R0 ;DJNZ R7,LOOP;DJNZ R7,LOOP;循环修改,判结束循环修改,判结束 SJMP$;SJMP$;结束处理结束处理2022-11-1024【例例4-54-5】将内部将内部RAMRAM起始地址为起始地址为60H60H的数据串传送到外部的数据串传送到外部RAMRAM中中起始地址为起始地址为1000H1000H的存储区域,直到发现的存储区域,直到发现$字符停止传送。字符停止传送。MAIN:MOV R0,#60H ;MAIN:MOV R0,#60H ;置初值置初值 MOV DPTR

    23、,#1000HMOV DPTR,#1000HLOOP0:MOV A,R0 ;LOOP0:MOV A,R0 ;取数据取数据 CJNE A,#24H,LOOP1;CJNE A,#24H,LOOP1;循环结束?循环结束?SJMP DONE ;SJMP DONE ;是是LOOP1:MOVX DPTR,A ;LOOP1:MOVX DPTR,A ;循环处理循环处理 INC R0 ;INC R0 ;循环修改循环修改 INC DPTR INC DPTR SJMP LOOP0 ;SJMP LOOP0 ;继续循环继续循环 DONE:SJMP DONE ;DONE:SJMP DONE ;结束处理结束处理2022-1

    24、1-10254.4 子程序及其调用子程序及其调用 完成完成通用功能通用功能、反复使用反复使用的程序设计成的程序设计成子程序。子程序。使应用使应用程序结构清晰紧凑,便于阅读和调试程序结构清晰紧凑,便于阅读和调试 执行要由其它程序来调用,执行完后要返回到调用程序执行要由其它程序来调用,执行完后要返回到调用程序 结构上仍然采用一般程序的结构上仍然采用一般程序的3 3种结构种结构 调用时注意:调用时注意:一是现场的保护和恢复;一是现场的保护和恢复;二是主程序与子程序间的参数传递。二是主程序与子程序间的参数传递。2022-11-10264.4.1 4.4.1 现场保护与恢复现场保护与恢复在主程序中实现(

    25、在主程序中实现(结构灵活结构灵活)PUSH PSW ;PUSH PSW ;保护现场(保护现场(含当前工作寄存器组号)含当前工作寄存器组号)PUSH ACC ;PUSH ACC ;PUSH B ;PUSH B ;MOV PSW,#10H;MOV PSW,#10H;切换当前工作寄存器组切换当前工作寄存器组LCALL addr16 ;LCALL addr16 ;子程序调用,子程序调用,POP B ;POP B ;恢复现场恢复现场POP ACC ;POP ACC ;POP PSW ;POP PSW ;含当前工作寄存器组切换含当前工作寄存器组切换2022-11-1027在子程序中实现(在子程序中实现(程

    26、序规范、清晰程序规范、清晰)SUB1:PUSH PSW ;SUB1:PUSH PSW ;保护现场(保护现场(含当前工作寄存器组含当前工作寄存器组号)号)PUSH ACC ;PUSH ACC ;PUSH B ;PUSH B ;MOV PSW,#10H;MOV PSW,#10H;切换当前工作寄存器组切换当前工作寄存器组 POP B ;POP B ;恢复现场恢复现场 POP ACC ;POP ACC ;POP PSW ;POP PSW ;内含当前工作寄存器组切换内含当前工作寄存器组切换 RETRET2022-11-10284.4.2 4.4.2 参数传递参数传递利用累加器或寄存器(利用累加器或寄存器

    27、(简单、快速,但参数个数不多简单、快速,但参数个数不多)【例例4-64-6】实现两个实现两个8 8位的十六进制无符号数求和的子程序。位的十六进制无符号数求和的子程序。SADD:MOV A,R3 ;SADD:MOV A,R3 ;取加数(在取加数(在R3R3中)中)CLR CCLR C ADD A,R4 ;ADD A,R4 ;被加数(在被加数(在R4R4中)加中)加A A JC PP1 JC PP1 MOV R3,#00H;MOV R3,#00H;结果小于结果小于255255时,高字节时,高字节R3R3内容为内容为00H00H SJMP PP2 SJMP PP2 PP1:MOV R3,#01H;P

    28、P1:MOV R3,#01H;结果大于结果大于255255时,高字节时,高字节R3R3内容为内容为01H01H PP2:MOV R4,A ;PP2:MOV R4,A ;结果的低字节在结果的低字节在R4R4中中 RETRET入口入口:(R3R3)=加数;加数;(R4R4)=被加数。被加数。出口出口:(R3R3)=和的高字节;和的高字节;(R4R4)=和的低字节。和的低字节。2022-11-1029利用存储器(利用存储器(个数多,用个数多,用R0R0或或R1R1及及DPTRDPTR为参数表指针为参数表指针)【例例4-74-7】将内部将内部RAM RAM 中两个中两个4 4字节无符号整数相加,和的高

    29、字节无符号整数相加,和的高字节由字节由R0R0指向。数据采用大端模式存储。指向。数据采用大端模式存储。入口入口:(R0R0)=加数低字节地址;加数低字节地址;(R1R1)=被加数低字节地址。被加数低字节地址。出口出口:(R0R0)=和的高字节起始地址。和的高字节起始地址。NADD:MOV R7,#4 ;NADD:MOV R7,#4 ;字节数字节数4 4送计数器送计数器 CLR C ;CLR C ;NADD1:MOV A,R0 ;NADD1:MOV A,R0 ;利用指针利用指针,取加数低字节取加数低字节 ADDC A,R1 ;ADDC A,R1 ;利用指针利用指针,被加数低字节加被加数低字节加A

    30、 A MOV R0,A ;MOV R0,A ;DEC R0 DEC R0 DEC R1 DEC R1 DJNZ R7,NADD1 DJNZ R7,NADD1 INC R0 ;INC R0 ;调整指针调整指针,指向出口,指向出口 RET RET 2022-11-1030利用堆栈利用堆栈【例例4-84-8】将内部将内部RAMRAM中中20H20H单元中的单元中的1 1个字节十六进制数转换为个字节十六进制数转换为2 2位位ASCIIASCII码,存放在码,存放在R0R0指示的两个单元中。指示的两个单元中。入口:预转换数据(低半字节)在栈顶入口:预转换数据(低半字节)在栈顶 出口:转换结果(出口:转换

    31、结果(ASCIIASCII码)在栈顶码)在栈顶 HEASC:MOV R1,SP ;HEASC:MOV R1,SP ;借用借用R1R1为堆栈指针为堆栈指针 DEC R1DEC R1 DEC R1 ;R1 DEC R1 ;R1指向被转换数据指向被转换数据 XCH A,R1 ;XCH A,R1 ;取被转换数据取被转换数据 ANL A,#0FH ;ANL A,#0FH ;取一位十六进制数取一位十六进制数 ADD A,#2 ;ADD A,#2 ;偏移调整偏移调整,所加值为所加值为MOVCMOVC与与DBDB间总字节间总字节数数 MOVC A,A+PC ;MOVC A,A+PC ;查表查表 XCH A,R

    32、1 ;1XCH A,R1 ;1字节指令字节指令,存结果于堆栈中存结果于堆栈中 RET ;1RET ;1字节指令字节指令ASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37HASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H DB 38H,39H,41H,42H,43H,44H,45H,46H2022-11-1031验证程序段验证程序段 MAIN:MOV A,20H ;MAIN:MOV A,20H ;SWAP A SWAP A PUSH ACC ;PUSH ACC ;

    33、预转换的数据(在低半字节)入栈预转换的数据(在低半字节)入栈 ACALL HEASCACALL HEASC POP ACC ;POP ACC ;弹出栈顶结果于弹出栈顶结果于ACCACC中中 MOV R0,A ;MOV R0,A ;存转换结果高字节存转换结果高字节 INC R0 ;INC R0 ;修改指针修改指针 PUSH 20H ;PUSH 20H ;预转换的数据(在低半字节)入栈预转换的数据(在低半字节)入栈 ACALL HEASCACALL HEASC POP ACC ;POP ACC ;弹出栈顶结果于弹出栈顶结果于ACCACC中中 MOV R0,A ;MOV R0,A ;存转换结果低字节

    34、存转换结果低字节 SJMP$SJMP$2022-11-10324.4.3 4.4.3 常用子程序示例(略)常用子程序示例(略)2022-11-10334.5 简单简单I/O设备的并口直接驱动示例设备的并口直接驱动示例4.5.1 4.5.1 独立式键盘与独立式键盘与LEDLED显示示例显示示例【例例4-174-17】数据端与数据端与P0P0口口正序正序连接。编写程序,分别实现连接。编写程序,分别实现功能:上电后数码管显示功能:上电后数码管显示“P”P”,按下任何键后,显示从,按下任何键后,显示从“0”0”开始每隔开始每隔1 1秒加秒加1 1,加至,加至“F”F”后,数码管显示后,数码管显示“P”

    35、P”,进入等待按键状态。进入等待按键状态。2022-11-1034 TEMP EQU 30H TEMP EQU 30HORG 0000HORG 0000HJMP STARTJMP START ORG 0100H ORG 0100HSTART:MOV SP,#5FHSTART:MOV SP,#5FH MOV P0,#8CH;MOV P0,#8CH;显示显示PPMOV P3,#0FFHMOV P3,#0FFHNOKEY:MOV A,P3NOKEY:MOV A,P3CPL ACPL AJZ NOKEY ;JZ NOKEY ;无键按下无键按下MOV TEMP,P3;MOV TEMP,P3;有键按下有键

    36、按下CALL D10msCALL D10msMOV A,P3MOV A,P3CJNE A,TEMP,NOKEY;CJNE A,TEMP,NOKEY;去抖去抖MOV R7,#16MOV R7,#16MOV R2,#0MOV R2,#0LOOP:MOV A,R2LOOP:MOV A,R2 MOV DPTR,#CODE_P0 MOV DPTR,#CODE_P0 MOVC A,A+DPTR MOVC A,A+DPTR MOV P0,A MOV P0,A INC R2 INC R2 SETB RS0;SETB RS0;切换组切换组 CALL D_1S CALL D_1S CLR RS0 CLR RS0

    37、DJNZ R7,LOOP DJNZ R7,LOOP JMP START JMP START D_1S D_1S:(子程序):(子程序)D10msD10ms:(子程序):(子程序)CODE_P0:DB 0C0H,0F9H,0A4H,0B0HCODE_P0:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H,DB 80H,90H,88H,83H,DB 0C6H,0A1H,86H,8EH DB 0C6H,0A1H,86H,8EH 2022-11-1035有时为方便走线而采用逆序连接,显示段

    38、码要进行调整:有时为方便走线而采用逆序连接,显示段码要进行调整:CODE_P2:DB 03H,9FH,25H,0DH,99H,49H,40H,1FHCODE_P2:DB 03H,9FH,25H,0DH,99H,49H,40H,1FH DB 01H,09H,11H,0C1H,63H,85H,61H,71H DB 01H,09H,11H,0C1H,63H,85H,61H,71HCODE_P0:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HCODE_P0:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83

    39、H,0C6H,0A1H,86H,8EH DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH试比较:试比较:2022-11-10364.5.2 4.5.2 矩阵式键盘与矩阵式键盘与LEDLED显示示例显示示例步骤:步骤:判有无键按下、判按下哪个键判有无键按下、判按下哪个键 、依键号进入相应程序、依键号进入相应程序 2022-11-1037 判有无键按下判有无键按下 行线接输入口,列线接输出行线接输入口,列线接输出口。置所有列线为低电平,然后口。置所有列线为低电平,然后读行线状态,若行线均为高电平,读行线状态,若行线均为高电平,则没有键按下;若行线状态不全则没有键按下;若行线

    40、状态不全为高电平,则可断定有键按下。为高电平,则可断定有键按下。判按下哪个键判按下哪个键先让先让C0C0列为低电平,其余列线列为低电平,其余列线为高电平,读行线状态,如行线为高电平,读行线状态,如行线状态不全为状态不全为“1”1”,则说明所按,则说明所按键在该列;否则所按键不在该列,键在该列;否则所按键不在该列,再使再使C1C1列线为低电平,其它列为列线为低电平,其它列为高电平,判断高电平,判断C1C1列有无按键按下。列有无按键按下。进入相应程序进入相应程序 键号键号 =行首号行首号+列号。列号。根据键号进入相应的功能程序。根据键号进入相应的功能程序。(程序略)2022-11-1038列数多时

    41、可用列数多时可用线反转法线反转法(依据键号与键值的对应关系依据键号与键值的对应关系 )。如。如“D”D”号号键,先使行线输出全键,先使行线输出全“0”0”,读列线,结果为,读列线,结果为D0HD0H;再使列线输出全;再使列线输出全“0”0”,读行线,结果为,读行线,结果为07H07H。2 2次读的结果拼成一个字节,即次读的结果拼成一个字节,即D7HD7H,该值称为键值。该值称为键值。将键值与键号的对应关系列成一个有序表,并设置一个计数器,将将键值与键号的对应关系列成一个有序表,并设置一个计数器,将所按键值用线反转法求出后,将其作为关键字在键值表中从表首开所按键值用线反转法求出后,将其作为关键字在键值表中从表首开始计数查找,查到匹配处时相应的计数值就是键号,根据键号就可始计数查找,查到匹配处时相应的计数值就是键号,根据键号就可以进入相应的处理程序了。以进入相应的处理程序了。2022-11-10392022-11-1040

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:单片机原理及接口技术第4章80C51的汇编语言程序设计课件.ppt
    链接地址:https://www.163wenku.com/p-4092383.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库