已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八节第八节 汇编语言程序的格式和伪指令汇编语言程序的格式和伪指令 一 一 格式格式 标号区标号区 操作码操作码 操作数操作数 注释注释 MOV R0 data 指向 指向 源数据区源数据区 MOV DPTR BUFFER 指向 指向 接收区接收区 MOV R1 20H 传送最大字节数 传送最大字节数 LOOP MOV A R0 取一个字节 取一个字节 CJNE A 24H SEND 是 是 NO 转转 SJMP RTN 是 返回 是 返回 SEND MOVX DPTR A 传送一个字节 传送一个字节 INC R0 指向下一个待传数指向下一个待传数 据据 INC DPTR 指向下一个接收单元指向下一个接收单元 DJNZ R1 LOOP 32 字节已经传完 字节已经传完 RTN RET 已经传完 已经传完 或找到或找到 返回返回 R0 data DPTR BUFFER 程序功能 把内程序功能 把内 RAM 中 起始地址为中 起始地址为 data 的的 32 个字节个字节 源源 传送到外 传送到外 RAM 中 从中 从 BUFFER 开始的区域 开始的区域 目的目的 在传送中 如果发现在传送中 如果发现 ASCII 码码 24H 立刻停止传送 立刻停止传送 以本程序为例 介绍汇编语言源程序的格式 以本程序为例 介绍汇编语言源程序的格式 1 标号区 标号区 源源 目目 的的 符号地址符号地址 在数值地址不知道的情况下 使用符号地址 在数值地址不知道的情况下 使用符号地址 使用有意义的符号地址使用有意义的符号地址 可选项可选项 不可重复使用不可重复使用 以字母打头以字母打头 长度规定长度规定 保留字保留字 2 操作码区 操作码区 指令助记符指令助记符 3 操作数 操作数 提供数据 地址信息提供数据 地址信息 4 注释区 注释区 提高程序的可读性提高程序的可读性 打头打头 必须有意义必须有意义 指令或程序段在整个程序中的作用指令或程序段在整个程序中的作用 非执行部分 但是是重要的组成部分非执行部分 但是是重要的组成部分 二 二 伪指令伪指令 指令指令 告诉告诉 CPU 进行某种操作 由进行某种操作 由硬件硬件完成具体操作 完成具体操作 伪指令伪指令 为为汇编程序汇编程序提供汇编信息 其功能由相应的提供汇编信息 其功能由相应的软件软件来完成来完成 汇编程序汇编程序 一段特殊的程序 其功能就是把汇编程序一段特殊的程序 其功能就是把汇编程序 翻译翻译 为为 机器代码 在机器代码 在 翻译翻译 过程中 汇编程序需要过程中 汇编程序需要了解若干信息了解若干信息才能顺才能顺 利完成全部利完成全部 翻译翻译 工作 如 工作 如 各个各个符号数据符号数据的数值是多少 的数值是多少 各个各个符号地址符号地址怎么怎么分配分配或或预留预留存储器单元 存储器单元 如何在如何在翻译的过程中翻译的过程中 把 把常数常数存放在存储器的指定单元 存放在存储器的指定单元 已经已经 翻译翻译 就绪的就绪的代码代码存放在存储器的什么地方 存放在存储器的什么地方 翻译翻译 工作怎么时候工作怎么时候结束结束 这一系列工作 主要是靠这一系列工作 主要是靠伪指令伪指令来完成的 来完成的 常用的常用的伪指令 伪指令 1 ORG origin 起点命令起点命令 规定目标程序的规定目标程序的起始地址起始地址 第一条指令的第一条指令的 第一个字节存第一个字节存 放在放在 ROM 区什么地方 区什么地方 ORG 2000H 以下程序代码从 以下程序代码从 2000H 开始存放开始存放 2 END 汇编终止命令汇编终止命令 汇编工作到此结束汇编工作到此结束 3 EQUequate 赋值命令赋值命令 给符号地址 符号数据赋值给符号地址 符号数据赋值 如 如 data EQU 30H BUFFER EQU 2500H 4 DB DEFB define byte 定义数据字节命令定义数据字节命令 功能 把字节数据送入指定的单元并给功能 把字节数据送入指定的单元并给第一个单元第一个单元分配分配一个名称一个名称 ORG 1000H FIRST DB 73H 01H 01H 90H 38H 00H 01H 00H SECOND DB 02H 00H 汇编后 汇编后 1000H 1007H 1008H 5 DW EFW define word 高高位字节在位字节在低低位地址位地址 低低位字节在位字节在高高位地址位地址 ORG 3000H DW A DW 100H 1ACH 814 3000H 3001H 汇编语言程序设计示例汇编语言程序设计示例 例例 3 1 将一双字节数存入片内将一双字节数存入片内 RAM 设该待存双字节高字节在工作寄存器设该待存双字节高字节在工作寄存器 R2 中 低字节在累加器中 低字节在累加器 A 中 要求高字节存入片内中 要求高字节存入片内 RAM 的的 36H 单元 低字节存入单元 低字节存入 35H 单单 73 00 02 1000H 的名称是的名称是 FIRST 1008H 的名称是的名称是 SECOND 00 41 01 00 01 AC D2 FC A 100H 1ACH 814 元 元 则相应程序为则相应程序为 00B0 78 35 MOVMOV R0R0 35H 35H 00B200B2 F6F6 MOVMOV R0 R0 A A 00B300B3 0808 INCINC R0R0 00B400B4 CACA XCHXCH A A R2R2 00B500B5 F6F6 MOVMOV R0 R0 A A 00B600B6 CACA XCHXCH A A R2R2 R0 R2 A A 例例 3 2 多字节无符号相加多字节无符号相加 设被加数与加数已别在以设被加数与加数已别在以 ADR1 与与 ADR2 为初址的片内数据存为初址的片内数据存 贮器区域中 自低字节起 由低到高依次存放 它们的字节数为贮器区域中 自低字节起 由低到高依次存放 它们的字节数为 L 要求加得的和放回原放被加数的单元 要求加得的和放回原放被加数的单元 程序的流程图如图程序的流程图如图 3 5 所示 所示 相应的程序如下 相应的程序如下 0030 7878 ADR1ADR1 MOVMOV R0R0 ADR1 ADR1 00320032 7979 ADR2ADR2 MOVMOV R1R1 ADR2 ADR2 00340034 7A7A L L MOVMOV R2R2 L L 00360036 C3C3 CLRCLR C C 00370037 E6E6 LOOPLOOP MOVMOV A A R0 R0 00380038 3737 ADDCADDC A A R1 R1 00390039 F6F6 MOVMOV R0 R0 A A 003A003A 0808 INCINC R0R0 R2 高高 A 低低36H 35H R0 003B003B 0909 INCINC R1R1 003C003C DADA F9F9 DJNZDJNZ R2R2 LOOPLOOP 003E003E DONEDONE 例例 3 4 将将 R1 R2 R3 R4 四个工作寄存器中的四个工作寄存器中的 BCD 码数据依次相码数据依次相 加 要求各中间计算的和与最后的各都仍为加 要求各中间计算的和与最后的各都仍为 BCD 码 且放回片内码 且放回片内 RAM 设设 4 个工作寄存器中个工作寄存器中 BCD 码数据相加后其总和仍为二位码数据相加后其总和仍为二位 BCD 码 无溢出 码 无溢出 R1 R2 后的和存于片内 后的和存于片内 RAM 的的 30H 单元 再加单元 再加 R3 后的和存于 后的和存于 31H 单元 总的和存于单元 总的和存于 32H 单元单元 则主程序为 则主程序为 R1 30H R2 31H R3 30H 32H R4 31H 部分和存入部分和存入 30H 31H 总和存入 总和存入 32H ORGORG 0050H0050H 00500050 7373 3030 MOVMOV R0R0 30H 30H R0R0 指向存和单元指向存和单元 00520052 E9E9 MOVMOV A A R1R1 取一个加数 取一个加数 00530053 2A2A ADDADD A A R2R2 部分和 部分和 00540054 3131 A0A0 ACALLACALL SUBSUB 完成十进制调整 存和 完成十进制调整 存和 00560056 2B2B ADDADD A A R3R3 求和 求和 00570057 3131 A0A0 ACALLACALL SUBSUB 完成十进制调整 存和 完成十进制调整 存和 BCD BCD BCD BCD R0 00590059 2C2C ADDADD A A R4R4 005A005A 3131 A0A0 ACALLACALL SUBSUB 子程序为 子程序为 ORGORG 01A0H01A0H 十进制调整与存和子程序 十进制调整与存和子程序 01A101A1 D4D4 SUBSUB DADA A A 十进制调整 十进制调整 01A201A2 F6F6 MOVMOV R0 R0 A A 存和 存和 BCDBCD 01A301A3 0808 INCINC R0R0 指向下一个单元 指向下一个单元 01A401A4 2222 RETRET 例例 3 83 8 统计自统计自 P1P1 口输入的数串中正数 负数 零的个数口输入的数串中正数 负数 零的个数 设 设 R0R0 R1R1 R2R2 三个工作寄存器分别为累计正数 负数 零的三个工作寄存器分别为累计正数 负数 零的 个数的计数器 个数的计数器 STARTSTART CLRCLR A A MOVMOV R0R0 A A 三个计数器清 三个计数器清 0 0 MOVMOV R1R1 A A MOVMOV R2R2 A A ENTERENTER MOVMOV A A P1P1 从 从 P1P1 口取一个数据到口取一个数据到 A A JZJZ ZEROZERO 如果该数为 如果该数为 0 0 转 转 RERORERO JBJB P1 7P1 7 NEGNEG 如果该数为负 转 如果该数为负 转 NEGNEG P1 7 1 P1 7 1 转 转 INCINC R0R0 为正 正数个数计数器加 为正 正数个数计数器加 1 1 SJMPSJMP ENTERENTER 转 继续从 转 继续从 P1P1 口取数据 判断口取数据 判断 ZEROZERO INCINC R2R2 为 为 0 0 0 0 个数计数器加个数计数器加 1 1 SJMPSJMP ENTERENTER NEGNEG INCINC R1R1 为负 负数个数计数器加 为负 负数个数计数器加 1 1 SJMPSJMP ENTERENTER 本例所示的程序的问题 本例所示的程序的问题 1 1 未考虑数串究竟有多少个数 输入不能结束 未考虑数串究竟有多少个数 输入不能结束 2 2 未考虑 未考虑 P1P1 口上数据输入速度与计算机取数和分档处理速度间口上数据输入速度与计算机取数和分档处理速度间 的协调配合 如已知 的协调配合 如已知 数串的个数为数串的个数为 L L 送数的速度为每秒 送数的速度为每秒 1 1 个 个 计算机取数 处理的速度极快 与计算机取数 处理的速度极快 与 1 1 秒比较可忽略不计 秒比较可忽略不计 考虑程序应作怎样改动 考虑程序应作怎样改动 例例 3 10 将某将某 8 位二进制转换为位二进制转换为 BCD 码 略 码 略 设该设该 8 8 位二进制已在位二进制已在 A A 中 转换后存贮于片内中 转换后存贮于片内 RAMRAM 的的 20H20H 21H21H 单元 单元 转换方式 转换方式 A A 100 100 01100100B01100100B 商商 百位数之值 百位数之值 余数余数 10 10 10101010 商商 十位数之值 十位数之值 余数余数 个位数之值 个位数之值 例 把例 把 01100110B01100110B 102D102D 转换为 转换为 BCDBCD 1 1 百位百位 11001001100100 11001101100110 11001001100100 1010余数余数 0 0 十位十位 10101010 1010 0 0 1010 个位个位 1 1 00010001 0 0 00000000 1010 00100010 00010001 00000000 00100010 BCD BCD 程序如下 程序如下 MOVMOV B B 100 100 除数 除数 DIVDIV ABAB A A 商即百位数 商即百位数 00000000BCDBCD B B 余数 余数 MOVMOV R0R0 21H 21H MOVMOV R0 R0 A A 百位数存入 百位数存入 21H21H DECDEC R0R0 MOVMOV A A 10 10 除数 除数 XCHXCH A A B B 余数送入 余数送入 A A 除数送入 除数送入 B B DIVDIV ABAB A A 十位数 十位数 00000000BCDBCD B B 个位数 个位数 00000000BCDBCD SWAPSWAP A A BCDBCD00000000 ADDADD A A B B BCDBCDBCDBCD MOVMOV R0 R0 A A 存入 存入 20H20H 21H21H 00000000 BCDBCD 29H29H BCDBCD BCDBCD 例例 3 123 12 将一串十六进制数转换为将一串十六进制数转换为 ASC ASC 码 码 十六进制数串 十六进制数串 5 5 个字节 存于以个字节 存于以 ADR1ADR1 为起始地址的内存区域为起始地址的内存区域 中 转换后拟存到以中 转换后拟存到以 ADR2ADR2 为起始地址的内存区域去 编出的程序如为起始地址的内存区域去 编出的程序如 下 下 HEXHEX ASCIIASCII 0 0 3030 1 1 3131 加加 30H30H 即可即可 9 9 3939 A A 4141 B B 4242 C C 4343 加加 37H37H 即可即可 D D 4444 E E 4545 F F 4646 1 1 先判断在哪一个区 通过加 先判断在哪一个区 通过加 246246 来判断 来判断 2 2 0 0 9 9 加加 30H30H A A B B 先加 先加 7 7 再加 再加 30H30H 转转 换换 方方 法法 MOVMOV R0R0 ADR1 ADR1 MOVMOV R1R1 ADR2 ADR2 MOVMOV R2R2 05H 05H 计数器 计数器 LOOLOO MOVMOV A A R0 R0 取一字节 取一字节 2 2 位位 16 16 进制进制 数数 ANLANL A A 0FH 0FH 高位数清 高位数清 0 0 保留低位 保留低位 ACALLACALL SUBSUB 调子程序完成 调子程序完成 1 1 位位 1616 进制数转换为 进制数转换为 ASCIIASCII 存入 存入 ADR2ADR2 开始的单元开始的单元 MOVMOV A A R0 R0 再取同一字节 再取同一字节 ANLANL A A 0F0H 0F0H 保留高位 低位清 保留高位 低位清 0 0 SWAPSWAP A A 高 低互换 高 低互换 ACALLACALL SUBSUB INCINC R0R0 指向下一字节 指向下一字节 DJNZDJNZ R2R2 LOOPLOOP 所有字节已经转换完 所有字节已经转换完 未完 继续 未完 继续 SUBSUB MOVMOV R3R3 A A 存一位 存一位 1616 进制数进制数 ADDADD A A 0F6H 0F6H 加 加 246246 若 若 A A 9 9 则和则和 255 10 10 则和则和 255 255 Cy 1Cy 1 MOVMOV A A R3R3 取回原一位 取回原一位 1616 进制数进制数 J JNCNC AD30AD30 9 10 10 先加 先加 7 7 再加 再加 30H30H AD30AD30 ADDADD A A 30H 30H MOVMOV R1 R1 A A ASCIIASCII 存入存入 R1R1 所指单元所指单元 INCINC R1R1 指向下一个存指向下一个存 ASCIIASCII 的单元的单元 RETRET R0R0 ADR1ADR1 1616 进制数串进制数串 高高 低低 ASCII 低 低 ASCII 高 高 R1R1 ADR2ADR2 ASCIIASCII 多分支转移 散转 程序多分支转移 散转 程序 例例 3 14 设计可多达设计可多达 128 路分支出口的转移程序路分支出口的转移程序 设 设 1 控制转移控制转移的信息存放在的信息存放在 R2 中 中 00 7F 2 128 个出口分别转向个出口分别转向 128 段程序 它们的初始址依次为段程序 它们的初始址依次为 addr00 addr01 addr02 addr03 addr7F 3 把 把 128 条转移指令集中形成一个条转移指令集中形成一个转移指令表转移指令表 则散转程序为 则散转程序为 MOVMOV DPTRDPTR TAB TAB 指向转移指令表 指向转移指令表 MOVMOV A A R2R2 取控制转移的信息 取控制转移的信息 RLRL A A x2x2 每条指令占 每条指令占 2 2 个单元 个单元 JMPJMP A DPTR A DPTR 从表中取某一转移指令 从表中取某一转移指令 TABTAB AJMPAJMP addr00addr00 以下是转移指令表 以下是转移指令表 AJMPAJMP addr01addr01 AJMPAJMP addr7Faddr7F 如果 如果 R2 01 RL A 执行后执行后 A 02 TAB 02 AJMP ADDR01 ADDR01 如果 如果 R2 7FH RL A 执行后执行后 A FEH TAB FE AJMP ADDR7F ADDR7F 要求 要求 R2 00 ADDR00 TAB 0 R2 01 ADDR01 1 JMP A DPTR AJMP ADDR00 AJMP ADDR01 AJMP ADDR7F 转转 移移 指指 令令 表表 程序程序 0 程序程序 1 2 ADDR03 3 4 5 R2 7F ADDR7F FEH FFH 定时器定时器 计数器应用程序计数器应用程序 例例 3 18 要求利用单片机内部的定时器要求利用单片机内部的定时器 计数器 达到计数器 达到 1 分钟延时 分钟延时 1 单片机内部的一个定时器 单片机内部的一个定时器 计数器 按定时器方式工作 计数器 按定时器方式工作 最最 长延时时间只有长延时时间只有 60ms0ms 左右左右 在 在 12MHz12MHz 晶振条件下 晶振条件下 2 2 通过 通过 T C0T C0 和和 T C1T C1 配合使用 可以实现配合使用 可以实现长延时长延时 T C0 T C0 作为定时器 作为定时器 定时时间定时时间 1ms1ms 在 在 fosc 12Mfosc 12M 时 时 Tcy 1 sTcy 1 s 计数初值计数初值 65536 1000 64536D FC18H 65536 1000 64536D FC18H 每到每到 1ms1ms 用 用软件方式软件方式向向 T1T1 提供一个计数脉冲提供一个计数脉冲 T C1 T C1 作为计数器作为计数器 对 对 1ms1ms 脉冲串计数 每计满脉冲串计数 每计满 6000060000 次 次 表明表明 1 1 分种到 分种到 计数初值计数初值 65536 60000 5536D 15A0H 65536 60000 5536D 15A0H 计数溢出时 发出中断请求 在计数溢出时 发出中断请求 在 T C1T C1 的中断服务程序中 把的中断服务程序中 把 用户标志位 用户标志位 F0F0 置 置 1 1 于是每当 于是每当 F0 1F0 1 时 就表明时 就表明 1 1 分定时到 分定时到 3 按本例的方式延时 按本例的方式延时 计算机仍可同时承担其它工作计算机仍可同时承担其它工作 不至 不至 完全降格为单纯的完全降格为单纯的 电子钟电子钟 这是此种延时方式的特点 这是此种延时方式的特点 ORGORG 0000H0000H LJMPLJMP 0030H0030H 复位就进入主程序 复位就进入主程序 ORGORG 001BH001BH T C1T C1 中断入口中断入口 SETBSETB F0F0 建立用户标志 表明 建立用户标志 表明 1 1 分定时到 分定时到 RETIRETI 中断返回 中断返回 ORGORG 0030H0030H 主程序 主程序 STARTSTART MOVMOV TMODTMOD 01010001B 01010001B 确定 确定 TC0TC0 T C1T C1 方式方式 1 1 程序程序 2 程序程序 127 非门控 非门控 T C1T C1 计数 计数 T C0T C0 定时定时 REPEATREPEAT MOVMOV TH1TH1 15H 15H T C1T C1 置初值置初值 MOVMOV TL1TL1 A0H A0H 计数 计数 6000060000 次次 MOVMOV TH0TH0 FCH FCH T C0T C0 初值初值 MOVMOV TL0TL0 18H 18H 定时 定时 1ms1ms CLRCLR P3 5P3 5 T1T1 设为低电平设为低电平 MOVMOV IEIE 88H 88H 中断总允许 中断总允许 T C1T C1 中断允许中断允许 SETBSETB TR1TR1 启动 启动 T C1T C1 开始计数开始计数 SETBSETB TR0TR0 启动 启动 T C0T C0 开始定时开始定时 LOOPLOOP 在接近 在接近 1ms1ms 的时间内 的时间内 CPUCPU 可以处理其它事务 可以处理其它事务 JNBJNB TF0TF0 1ms1ms 到 尚未 继续执行本指令到 尚未 继续执行本指令 CLRCLR TF0TF0 已到 清除 已到 清除 T C0T C0 溢出标志溢出标志 JBCJBC F0F0 ELSEELSE 1 1 分定时到 已到 转分定时到 已到 转 SETBSETB P3 5P3 5 尚未 使 尚未 使 T1T1 变为高电平变为高电平 向 向 T C1T C1 提供一个计数脉冲上升边提供一个计数脉冲上升边 MOVMOV TH0TH0 FCH FCH T C0T C0 初值重新装载初值重新装载 MOVMOV TL0TL0 18H 18H CLRCLR P3 5P3 5 使 使 T1T1 出现低电平 到此 出现低电平 到此 T C1T C1 已经确认了一个计数脉冲 当 已经确认了一个计数脉冲 当 确认了 确认了 6000060000 次时 次时 TF1 1TF1 1 转入 转入 001BH001BH SJMPSJMP LOOPLOOP 准备产生下一次计数脉冲并计数 准备产生下一次计数脉冲并计数 ELSEELSE 1 1 分钟定时到 执行相关程序分钟定时到 执行相关程序 AJMPAJMP 04BH04BH 转 转 REPEATREPEAT 04BH04BH 8M8M 第第 6000060000 个个 1ms1ms 1ms1ms SETSET P3 5P3 5 CLRCLR P3 5P3 5 硬件置硬件置 1 1 1 分分 硬件复位硬件复位 软件产生软件产生 计数脉冲计数脉冲 示意示意 TF 1 转转 001BH MOVMOV TH0TH0 FCH FCH 3M3M MOVMOV TL0TL0 18H 18H 3M3M CLRCLR P3 5P3 5 2M2M 外部中断应用程序外部中断应用程序 例例 3 20 某工业监控系统 具有温度 压力 某工业监控系统 具有温度 压力 pH 值 值 等多等多 路监控功能 对于路监控功能 对于 pH 值在值在 7 时将向时将向 CPU 申请中断 申请中断 CPU 响应后响应后 令令 P3 0 引脚输出高电平 经驱动 使加碱管道电磁阀接通引脚输出高电平 经驱动 使加碱管道电磁阀接通 1s 以调 以调 整整 pH 值 值 本例外部中断源较多 设本例外部中断源较多 设 pH 7 时通过外部中断时通过外部中断 0 申请中断 申请中断 而由外部中断而由外部中断 0 提出中断请求的中断源有好几个 究竟是哪一项监提出中断请求的中断源有好几个 究竟是哪一项监 控参数报警需用在检查控参数报警需用在检查 P1 口信息后判定 并转相应的中断服务程口信息后判定 并转相应的中断服务程 序入口地址 作出相应处理 序入口地址 作出相应处理 压力压力 中断撤除中断撤除 R 0 Q 0 R 1 CLK Q 1 P3 2 即即 INT0 单单 片片 P1 0 机机 P1 1 P1 2 P1 3 P1 6 P3 0 Q D R CLK 驱动驱动加碱电磁阀加碱电磁阀 0000H INT00 0003H INT01 0030H INT03 INT03 00F0H 01 F0 00 01 30 AJMP MAIN AJMP 030H 中断查中断查 询程序询程序 温温 1 中断中断 处理程序处理程序 温温 2 中断中断 处理程序处理程序 PH 7 中断中断 处理程序处理程序 压力中断压力中断 处理程序处理程序 主程序主程序 程序段如下 程序段如下 00000000 0101 F0F0 AJMPAJMP 0F0H0F0H 转入主程序 转入主程序 00020002 0000 DBDB 00H00H 00030003 0101 3030 AJMPAJMP 030H030H 转入中断查询程序 转入中断查询程序 ORGORG 0030H0030H 00300030 2020 9090 0D0D JBJB P1 0P1 0 INT00INT00 00330033 2020 9191 2A2A JBJB P1 1P1 1 INT01INT01 00360036 2020 9292 4747 JBJB P1 2P1 2 INT02INT02 00390039 2020 9393 6464 JBJB P1 3P1 3 INT03INT03 ORGORG 0080H0080H 处理 处理 PH 7PH 7 的程序的程序 00800080 C0C0 D0D0 INT02INT02 PUSHPUSH PSWPSW 00820082 C0C0 E0E0 PUSHPUSH ACCACC 00840084 D2D2 D3D3 SETBSETB PSW 3PSW 3 1 1 区区 00860086 D2D2 B0B0 SETBSETB P3 0P3 0 接通电磁阀 接通电磁阀 00880088 5151 0000 ACALLACALL DELAYDELAY 延时 延时 1s1s 008A008A C2C2 B0B0 CLRCLR P3 0P3 0 关断电磁阀 关断电磁阀 008C008C 5353 9090 BFBF ANLANL P1 P1 0BFH 0BFH 撤除中断请求 撤除中断请求 008F008F 4343 9090 4040 ORLORL P1 P1 40H 40H 为下次申请中断做准备为下次申请中断做准备 00920092 D0D0 E0E0 POPPOP ACCACC 恢复 恢复 A A 00940094 D0D0 D0D0 POPPOP PSWPSW 恢复 恢复 PSWPSW 0 0区区 00960096 3232 RETIRETI 例例 3 21 利用外部中断实现各程序间的转换 略 利用外部中断实现各程序间的转换 略 设有设有 6 个共阴极个共阴极 LED 数码管 数码的笔划信息由单片机数码管 数码的笔划信息由单片机 P1 0 P1 6 送给 位选的选中信号自左到右依次由送给 位选的选中信号自左到右依次由 P3 1 P3 3 P3 4 P3 5 P3 6 P3 7 提供 如图提供 如图 3 9 所示 共阴极所示 共阴极 LED 数码管的示意图与显示数码管的示意图与显示 0 1 2 3 E F 的的笔划信息笔划信息 编码编码表分别如图表分别如图 3 10 与表与表 3 10 所示 所示 a 1 显示原理 显示原理 g 共共阳极阳极 段控制信号加在 段控制信号加在阴极阴极上上 共共阴极阴极 段控制信号加在 段控制信号加在阳极阳极上上 d h 段选开关段选开关 共阴共阴 位选开关位选开关 a b c d e f g dp 反反 向向 驱驱 动动 1 亮 亮 0 亮 亮 字字 符符 段段 码码 段段 代代 码码 b c f e 显然 要控制显然 要控制 LED 显示器 有两个基本动作 显示器 有两个基本动作 1 根据待显字符的根据待显字符的字符段码字符段码 笔划信息 笔划信息 闭合相应的闭合相应的 段选段选开关开关 2 闭合闭合位选位选开关开关 注意在编程时如何体现这两点注意在编程时如何体现这两点 关于关于 LED 显示器及显示原理显示器及显示原理 2 字符字符与与字符段码字符段码的关系 的关系 以以共阴极共阴极接连法为例 接连法为例 显示显示 1 应该使 应该使 b c 两段两段 LED 发发 光 光 控制信号 字符段码 应该是 控制信号 字符段码 应该是 D7 D6 D5 D4 D3 D2 D1 D0 dp g f e d c b a 0 0 0 0 0 1 1 0 字符段码 字符段码 06H 显示显示 3 a b c d g 发光 发光 D7 D6 D5 D4 D3 D2 D1 D0 dp g f e d c b a 0 1 0 0 1 1 1 1 字符段码 字符段码 4FH P130 表表 3 10 给出了对应关系 给出了对应关系 本例中 以本例中 以 P1 0 P1 6 输出笔划信息 输出笔划信息 字符段码字符段码 P3 1 P3 3 P3 4 P3 5 P3 6 P3 7 给出位选信号给出位选信号 P1 0 P1 6 P3 1 P3 3 P3 4 P3 5 P3 6 P3 7 L1L2L3L4L5L6 各程序段可分别使该各程序段可分别使该 6 个数码管显示个数码管显示 111222 121212 333444 343434 555666 565656 777888 利用外部中断实现利用外部中断实现各程序段转换各程序段转换的程序如下 的程序如下 00000000 LJMPLJMP 0030H0030H 进入主程序 进入主程序 00030003 AJMPAJMP 320H320H 在 在 INT0INT0 中断入口填写转移指令 实质性的中断服务程序中断入口填写转移指令 实质性的中断服务程序 存放在 存放在 320H320H 开始的单元开始的单元 主程序 主程序 00300030 MOVMOV IEIE 81H 81H INT0INT0 中断允许 总允许中断允许 总允许 00330033 ROUTIROUTI MOVMOV P1 P1 06H 06H 1 1 00360036 MOVMOV P3P3 E4H E4H 选中 选中 L1L1 L2L2 L3L3 00390039 ACALLACALL DELAYDELAY 延时 显示 延时 显示 11
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管线盖板涵施工方案(3篇)
- 胡雪岩的营销方案(3篇)
- 账户拓展营销方案(3篇)
- 邮票展会营销方案(3篇)
- 非洲猪瘟-应急预案(3篇)
- 高等数学基础综合强化训练试卷
- 2026七年级道德与法治上册 卓越思维培养
- 2026道德与法治五年级知识窗 创新创业知识
- 2026七年级道德与法治下册 情感体验活动开展
- bat绩效考核制度
- (一模)惠州市2026届高三4月模拟考试英语试卷(含答案详解)
- 市政道路设施巡查制度与问题上报处理流程
- 2026云南省投资控股集团有限公司招聘168人备考题库含答案详解(完整版)
- 2026福建漳州高新区区属国有企业招聘工作人员48人备考题库含答案详解(基础题)
- 汽车4S 店钣喷车间维修质量管理制度
- 2024年河南艺术职业学院高职单招语文历年参考题库含答案解析
- 临床护理实践指南2024版
- 生猪屠宰兽医卫生检验人员理论考试题及答案
- 建筑装饰工程合同标准范本2024年
- 佛山酒店行业分析
- 编制说明-《乘用车甲醇燃料发动机油》
评论
0/150
提交评论