已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机实验报告 实验一实验一数据传送数据传送 RAM RAM XRAM XRAM 一 实验目的一 实验目的 熟悉星研集成环境软件或熟悉 Keil C51 集成环境软件的使用方法 熟悉 MCS51 汇编指令 能自己编写简单的程序 掌握数据传输的方法 二 实验内容二 实验内容 1 熟悉星研集成环境软件或熟悉 Keil C51 集成环境软件的安装和使用方法 2 编写程序 实现内外部数据段的传送 校验 三 程序框图三 程序框图 开始 堆栈指针初始化 计数器 地址初始化 内部RAM数据传送外部 RAM一次 地址指针 1 计数器 1 0 计数器 地址指针复位 取内部RAM和对应的外 部RAM 比较是否相等 地址指针 1 计数器 1 0 传送正确 传送错误 结束 N N Y Y Y N 数据传送程序框图 四 实验步骤四 实验步骤 在内部 RAM 30H 3FH 中输入数据 使用单步 断点方式调试程序 检测外部数据 RAM 的 1000H 100FH 中的内容 熟悉查看特殊功能寄存器 内部数据 RAM 外部数据空间 的各种方法 五 程序清单五 程序清单 将内部 RAM Address1 开始的 16 个字节送到外部 RAM 从 Address2 开始的单元里 再作 比较 Address1DATA30H Address2XDATA1000H ORG0000H LJMPSTAR ORG0100H STAR MOVSP 60H MOVR0 Address1 MOVDPTR Address2 MOVR7 10H STAR1 MOVA R0 传送 MOVX DPTR A INCR0 INCDPTR DJNZR7 STAR1 MOVR0 Address1 MOVDPTR Address2 MOVR7 10H STAR2 MOVB R0 比较 MOVXA DPTR CJNEA B STAR3 INCR0 INCDPTR DJNZR7 STAR2 SJMP 传送正确 STAR3 SJMP 传送错误 END 实验二实验二 双字节双字节 BCDBCD 码码 十进制数十进制数 加法加法 一 实验目的一 实验目的 熟悉 51 汇编指令 学会使用星研集成环境软件 能自己编写简单的程序 熟悉 BCD 码 了解如何调用系统提供的子程序 二 实验内容二 实验内容 从键盘上输入 4 位被加数 加数 实现双字节 BCD 码 四位数 的加法 结果显示在数 码管上 熟悉使用断点 单步进入 单步 运行到光标处 修改 PC 指针 全速运行等各种 调试手段 熟悉查看特殊功能寄存器 内部数据 RAM 外部数据空间的各种方法 三 实验框图三 实验框图 开始 初始化堆栈 设定 先清LED 再接收 键输入 标志 通过键盘获得4位被加 数 压缩BCD码 置位 接收到第一个键 后才清除LED 标志 通过键盘获得4位加数 压缩BCD码 被加数与加数的低位 字节不带进位加法 被加数与加数的高位字 节带进位加法 十进制调整 十进制调整 压缩BCD码 结果 转换 为非压缩BCD码 高位0消隐 显示结果 双字节BCD加法程序框图 四 实验步骤四 实验步骤 1 连线说明 D3 区 CLK B2 区 2M D3 区 CS A3 区 CS5 D3 区 A0 A3 区 A0 2 在 F4 区的键盘上输入 4 位被加数 加数 3 结果显示在 F4 区的数码管上 五 程序清单五 程序清单 EXTRNCODE Display8 GetBCDKey BufferDATA30H 8 字节显示缓冲区 F1BIT0D1H PSW 1 ORG0000H LJMPSTART ORG0100H START MOVSP 60H CLRF1 先清除显示 再接收键输入 START1 MOVR0 buffer MOVA 4 按键次数 LCALLGetBCDKey 得到双字节十进制数 被加数 SETBF1 接收到第一个键 才清除显示 MOVR0 buffer 4 MOVA 4 按键次数 LCALLGetBCDKey 得到双字节十进制数 加数 MOVA buffer 1 ADDA buffer 5 DAA MOVbuffer 5 A MOVA buffer ADDCA buffer 4 DAA MOVbuffer 4 A CLRA RLCA Display PUSHACC 显示结果 MOVR0 buffer MOVA buffer 5 低位 ACALLB1toB2 压缩 BCD 码转换成非压缩 BCD 码 MOVA buffer 4 高位 ACALLB1toB2 POPACC 进位 ACALLB1toB2 MOV R0 10H 最高二位消隐 INCR0 MOV R0 10H MOVR0 buffer 5 MOVR7 5 ACALLBlackDisplay 将高位 0 消隐 MOVR0 buffer LCALLDisplay8 SJMPSTART1 将一个字节压缩 BCD 码转换成二个字节非压缩 BCD 码 B1toB2 PUSHACC ANLA 0FH MOV R0 A INCR0 POPACC ANLA 0F0H SWAPA MOV R0 A INCR0 RET BlackDisplay MOVA R0 将高位 0 消隐 JNZExit MOVA 10H MOV R0 A DECR0 DJNZR7 BlackDisplay Exit RET END 实验三实验三 双字节双字节 BCDBCD 码码 十进制数十进制数 减法减法 一 实验目的一 实验目的 熟悉 51 汇编指令 学会使用星研集成环境软件 掌握汇编语言的设计和调试方法 能 看懂程序流程框图 能自己设计程序 熟悉 BCD 码 补码 了解如何调用系统提供的子程 序 二 实验内容二 实验内容 从键盘上输入 4 位被减数 减数 实现双字节 BCD 码 四位数 的减法 结果显示在数 码管上 进一步熟悉使用断点 单步进入 单步 运行到光标处 修改 PC 指针 全速运行 等各种调试手段 熟悉查看特殊功能寄存器 内部数据 RAM 外部数据空间的各种方法 三 程序框图三 程序框图 设定 先清LED 再接收 键输入 标志 堆栈初始化 开始 通过键盘获得双字节十 进制被减数 压缩BCD码 置位 接收到第一个键后 才清除LED 标志 通过键盘获得双字节十 进制减数 压缩BCD码 减数进行十进制取补 双字节十进制加法操作 C 1 C 0 有进位 结果为负 再执行一次求补运算 调整为正数 高位0消隐 若结果为负 前面加上 显示结果 Y N 双字节十进制减法程序框图 四 实验步骤四 实验步骤 1 连线说明 D3 区 CLK B2 区 2M D3 区 CS A3 区 CS5 D3 区 A0 A3 区 A0 2 在 F4 区的键盘上输入 4 位被减数 减数 3 结果显示在 F4 区的数码管上 五 程序清单五 程序清单 EXTRNCODE Display8 GetBCDKey BufferDATA30H 8 字节显示缓冲区 F1BIT0D1H PSW 1 ORG0000H LJMPSTART ORG0100H START MOVSP 60H CLRF1 先清除显示 再接收键输入 START1 MOVR0 buffer MOVA 4 按键次数 LCALLGetBCDKey 得到双字节十进制数 被减数 SETBF1 接收到第一个键 才清除显示 MOVR0 buffer 4 MOVA 4 按键次数 LCALLGetBCDKey 得到双字节十进制数 减数 MOVA 9AH CLRC SUBBA buffer 5 MOVbuffer 5 A MOVA 99H CLRC SUBBA buffer 4 MOVbuffer 4 A 减数取补 MOVA buffer 1 ADDA buffer 5 DAA MOVbuffer 5 A MOVA buffer ADDCA buffer 4 DAA MOVbuffer 4 A MOVF0 C 借位标志 JCDisplay MOVA 9AH SUBBA buffer 5 MOVbuffer 5 A MOVA 99H SUBBA buffer 4 XCHA buffer 5 ADDA 00H DAA XCHA buffer 5 ADDCA 00H DAA MOVbuffer 4 A Display MOVR0 buffer 显示结果 MOVA buffer 5 低位 ACALLB1toB2 压缩 BCD 码转换成非压缩 BCD 码 MOVA buffer 4 高位 ACALLB1toB2 MOV R0 10H 最高四位消隐 INCR0 MOV R0 10H INCR0 MOV R0 10H INCR0 MOV R0 10H MOVR0 buffer 3 MOVR7 3 ACALLBlackDisplay 将高位 0 消隐 MOVR0 buffer LCALLDisplay8 SJMPSTART1 BlackDisplay MOVA R0 将高位 0 消隐 JNZExit MOVA 10H MOV R0 A DECR0 DJNZR7 BlackDisplay Exit JBF0 Exit1 INCR0 MOV R0 11H 负数标志 Exit1 RET B1toB2 PUSHACC ANLA 0FH MOV R0 A INCR0 POPACC ANLA 0F0H SWAPA MOV R0 A INCR0 RET BlackDisplay MOVA R0 JNZExit MOVA 10H MOV R0 A DECR0 DJNZR7 BlackDisplay Exit RET END 实验四实验四四字节十六进制数转十进制数四字节十六进制数转十进制数 一 实验目的一 实验目的 进一步熟悉 51 汇编指令 了解十六进制数转十进制数的方法 二 实验内容二 实验内容 从键盘上输入 8 位十六进制数 实现四字节十六进制数转 8 位十进制数 并在数码管 上显示 注意输入数据必须在 00000000H 05F00000H 范围 否则 结果超出 8 位十进制数 无法正确显示 三 程序框图三 程序框图 初始化堆栈 开始 设定 先清LED 再接收 键输入 标志 通过键盘获得4字节十 六进制数 置位 接收到第一个键 后 才清除LED 标志 十六进制转十进制子程序 显示 开始 0 R4 R5 R6 R7 用于 存放压缩BCD码 32 B 循环次数 CLR C 四字节十六进制数带进 位左移一位 R4R5R6R7 2 进位位 C R4R5R6R7 同时 进行十进制调整 主程序十六进制转十进制子程序 N Y 返回 B 1 0 四 实验步骤四 实验步骤 1 连线说明 D3 区 CLK B2 区 2M D3 区 CS A3 区 CS5 D3 区 A0 A3 区 A0 2 在 F4 区的键盘上输入 8 位十六进制数 3 结果显示在 F4 区的数码管上 五 程序清单五 程序清单 EXTRNCODE Display8 GetKey BufferDATA30H 8 字节显示缓冲区 F1BIT0D1H PSW 1 ORG0000H LJMPSTART ORG0100H START MOVSP 60H CLRF1 先清除显示 再接收键输入 START1 MOVR0 buffer MOVA 8 按键次数 LCALLGetKey 得到 4 字节十六进制数 SETBF1 接收到第一个键后 才清除显示 MOVR0 buffer MOVR1 buffer 1 MOVR2 buffer 2 MOVR3 buffer 3 ACALLB4toD4 转换成十进制数 Display MOVR0 buffer 显示结果 MOVA R7 低位 ACALLB1toB2 压缩 BCD 码转换成非压缩 BCD 码 MOVA R6 ACALLB1toB2 MOVA R5 ACALLB1toB2 MOVA R4 高位 ACALLB1toB2 MOVR0 buffer 7 MOVR7 7 ACALLBlackDisplay 将高位 0 消隐 MOVR0 buffer LCALLDisplay8 SJMPSTART1 四字节十六进制数转十进制数 R0R1R2R3 为十六进制 R4R5R6R7 为压缩 BCD 码 B4toD4 CLRA MOVR4 A MOVR5 A MOVR6 A MOVR7 A MOVB 32 LOOP CLRC MOVA R3 RLCA MOVR3 A MOVA R2 RLCA MOVR2 A MOVA R1 RLCA MOVR1 A MOVA R0 RLCA MOVR0 A MOVA R7 ADDCA R7 DAA MOVR7 A MOVA R6 ADDCA R6 DAA MOVR6 A MOVA R5 ADDCA R5 DAA MOVR5 A MOVA R4 ADDCA R4 DAA MOVR4 A DJNZB LOOP RET B1toB2 PUSHACC ANLA 0FH MOV R0 A INCR0 POPACC ANLA 0F0H SWAPA MOV R0 A INCR0 RET BlackDisplay MOVA R0 将高位 0 消隐 JNZExit MOVA 10H MOV R0 A DECR0 DJNZR7 BlackDisplay Exit RET END 实验五实验五双字节双字节 BCDBCD 码码 十进制数十进制数 乘法乘法 一 实验目的一 实验目的 进一步熟悉 51 汇编指令 掌握汇编语言的设计和调试方法 根据程序流程图 自己设 计程序 了解如何调用系统提供的子程序 二 实验内容二 实验内容 从键盘上输入 4 位被乘数 乘数 实现四位十进制数的乘法 结果显示在数码管上 三 程序框图三 程序框图 开始 初始化堆栈 设定 先清LED再接收 键输入 标志 通过键盘获得4位十进 制被乘数 转换成二进制数并压 栈暂存 置位 接收到第一个键 后 才清除LED 标志 通过键盘获得4位十进 制乘数 转换成二进制数 R2R3 被乘数出栈 R0R1 双字节十六进制乘法 子程序 十六进制结果转十进 制 压缩BCD码转非压缩 BCD码 将高位0消隐 显示 双字节BCD乘法程序框图 R0 R1 R2 R3 R3R1H R3R1L R3R0H R3R0L R2R1H R2R1L R2R0H R2R0L R0 R1 R2 R3 双字节十六进制乘法示意图 四 实验步骤四 实验步骤 1 连线说明 D3 区 CLK B2 区 2M D3 区 CS A3 区 CS5 D3 区 A0 A3 区 A0 2 在 F4 区的键盘上输入 4 位被乘数 乘数 3 结果显示在 F4 区的数码管上 五 程序清单五 程序清单 EXTRNCODE Display8 GetBCDKey BufferDATA30H 8 字节显示缓冲区 F1BIT0D1H PSW 1 ORG0000H LJMPSTART ORG0100H START MOVSP 60H CLRF1 先清除显示 再接收键输入 START1 MOVR0 buffer MOVA 4 按键次数 LCALLGetBCDKey 得到双字节十进制数 被乘数 MOVR0 buffer ACALLD4toB2 转换成二进制数 PUSH02H PUSH03H SETBF1 接收到第一个键 才清除显示 MOVR0 buffer MOVA 4 按键次数 LCALLGetBCDKey 得到双字节十进制数 乘数 MOVR0 buffer ACALLD4toB2 转换成二进制数 POP01H POP00H ACALLWordMul R0R1 R2R3 R0R1R2R3 ACALLB4toD4 转换成十进制数 Display MOVR0 buffer 显示结果 MOVA R7 低位 ACALLB1toB2 压缩 BCD 码转换成非压缩 BCD 码 MOVA R6 ACALLB1toB2 MOVA R5 ACALLB1toB2 MOVA R4 高位 ACALLB1toB2 MOVR0 buffer 7 MOVR7 7 ACALLBlackDisplay 将高位 0 消隐 MOVR0 buffer LCALLDisplay8 SJMPSTART1 双字节十六进制数乘以双字节十六进制数子程序 WordMul MOVA R3 R0 R1 MOVB R1 R2 R3 MULAB XCHA R3 R3R1H R3R1L MOVR7 B R3R0H R3R0L MOVB R0 R2R1H R2R1L MULAB R2R0H R2R0L ADDA R7 MOVR7 A R0 R1 R2 R3 CLRA ADDCA B XCHA R1 MOVB R2 MULAB ADDA R7 XCHA R2 PUSHACC MOVA B ADDCA R1 MOVR1 A CLRA RLCA XCHA R0 POPB MULAB ADDA R1 MOVR1 A MOVA R0 ADDCA B MOVR0 A RET 双字节十进制数转二进制数 R0 指向双字节十进制数 结果在 R2R3 中 D4toB2 MOVA R0 ANLA 0FH XCHA R0 ANLA 0F0H SWAPA MOVB 10 MULAB ADDA R0 INCR0 MOVB 10 MULAB MOVR2 B MOVR3 A MOVA R0 ANLA 0FH XCHA R0 ANLA 0F0H SWAPA ADDA R3 XCHA R2 ADDCA 0 MOVB 10 MULAB XCHA R2 MOVB 10 MULAB ADDA R0 MOVR3 A MOVA R2 ADDCA B MOVR2 A RET B1toB2 PUSHACC ANLA 0FH MOV R0 A INCR0 POPACC ANLA 0F0H SWAPA MOV R0 A INCR0 RET BlackDisplay MOVA R0 将高位 0 消隐 JNZExit MOVA 10H MOV R0 A DECR0 DJNZR7 BlackDisplay B4toD4 CLRA MOVR4 A MOVR5 A MOVR6 A MOVR7 A MOVB 32 Exit RET END 实验六实验六 双字节双字节 BCDBCD 码除于单字节码除于单字节 BCDBCD 码码 一 实验目的一 实验目的 进一步熟悉 51 汇编指令 掌握汇编语言的设计和调试方法 自己设计程序 了解如何 调用系统提供的子程序 二 实验内容二 实验内容 从键盘上输入 4 位被除数 二位除数 实现双字节 BCD 码除于单字节 BCD 码 结果显 示在数码管上 三 程序框图三 程序框图 开始 初始化堆栈 设定 先清LED 再接收 键输入 标志 通过键盘获得4位被除 数 转换为十六进制数 并暂存 通过键盘获得单字节除 数 转换为16进制数 显示子程序 置位 接收到第一个键 后 才清除LED 标志 单字节除法 被除数的 高字节除以除数 结果 为最终商的高8位 双字节除以单字 节 商为16位 双字节除以单字节 商只有8位 子程序 最终获得结果 16位 的商 8位余数 双字节除以单字节 商为16位 子程序 循环次数8 R7 16位被除数 R2 R3 带进位左移一位 最低 位补0 C F0 R2 除数 B F0 1 C 1 差 R2 R3自加1 R7 1 0 双字节除以单字节 商为8位 子程序 开始开始 返回 返回 主程序 Y Y Y N N N 双字节BCD除法程序框图 四 实验步骤四 实验步骤 1 连线说明 D3 区 CLK B2 区 2M D3 区 CS A3 区 CS5 D3 区 A0 A3 区 A0 2 在 F4 区的键盘上输入 4 位被乘数 乘数 3 使用各种手段调试程序 4 结果显示在 F4 区的数码管上 五 程序清单五 程序清单 EXTRNCODE Display8 GetBCDKey BufferDATA30H 8 字节显示缓冲区 F1BIT0D1H PSW 1 ORG0000H LJMPSTART ORG0100H START MOVSP 60H CLRF1 先清除显示 再接收键输入 START1 MOVR0 buffer MOVA 4 按键次数 LCALLGetBCDKey 得到双字节十进制数 被除数 SETBF1 接收到第一个键 才清除显示 MOVR0 buffer ACALLD4toB2 转换成二进制数 MOVR0 buffer MOVA 2 LCALLGetBCDKey 得到 1 字节十进制数 除数 MOVR0 buffer ACALLD2toB2 转换成二进制数 JNZSTART2 ACALLDisplayError 除数为 0 出错 SJMPSTART START2 ACALLB2 DIV B1 被除数 除数 ACALLDisplay 显示商和被除数 SJMPSTART1 双字节除于单字节 R2R3 为 16 位二进制数 B 为除数 商在 R2R3 中 余数在 A 中 B2 DIV B1 PUSHB MOVA R2 DIVAB MOVR2 B POPB PUSHACC CALLDIV B2 B1 POPACC XCHA R2 RET 双字节除于单字节 R2R3 为被除数 B 为除数 结果 商 R3 中 余数在 R2 中 DIV B2 B1 MOVR7 8 双字节除于单字节 DIV2 CLRC R2R3 为被除数 B 为除数 MOVA R3 结果 商 R3 中 余数在 R2 中 RLCA MOVR3 A MOVA R2 RLCA MOVR2 A MOVF0 C CLRC SUBBA B JBF0 DIV3 JCDIV4 DIV3 MOVR2 A INCR3 DIV4 DJNZR7 DIV2 RET 4 字节二进制数转十进制数 R2R3 为 16 位二进制数 R4R5R6 为压缩 BCD 码 B2toD5 CLRA MOVR4 A MOVR5 A MOVR6 A MOVR7 16 LOOP CLRC MOVA R3 RLCA MOVR3 A MOVA R2 RLCA MOVR2 A MOVA R6 ADDCA R6 DAA MOVR6 A MOVA R5 ADDCA R5 DAA MOVR5 A MOVA R4 ADDCA R4 DAA MOVR4 A DJNZR7 LOOP RET D2toB2 MOVA R0 1 字节十进制数转二进制数 ANLA 0FH R0 指向 1 字节十进制数 结果在 B 中 XCHA R0 ANLA 0F0H SWAPA MOVB 10 MULAB ADDA R0 转换成二进制数 MOVB A RET Display PUSHACC 商在低四位 余数在高三位 ACALLB2toD5 二进制数转十进制数 MOVR0 buffer MOVA R6 ACALLB1toB2 压缩 BCD 码转换成非压缩 BCD 码 MOVA R5 ACALLB1toB2 DECR0 MOVR7 3 ACALLBlackDisplay 将高位 0 消隐 MOVbuffer 4 10H 消隐 MOVR0 buffer 7 POPACC MOVB 100 DIVAB MOV R0 A DECR0 MOVA B MOVB 10 DIVAB MOV R0 A DECR0 MOV R0 B MOVR0 buffer 7 MOVR7 2 ACALLBlackDisplay 将高位 0 消隐 MOVR0 buffer LCALLDisplay8 RET DisplayError MOVR0 buffer MOVR7 8 MOVA 0FH DisplayError1 MOV R0 A INCR0 DJNZR7 DisplayError1 MOVR0 buffer LCALLDisplay8 RET D4toB2 MOVA R0 ANLA 0FH XCHA R0 ANLA 0F0H SWAPA MOVB 10 MULAB ADDA R0 INCR0 MOVB 10 MULAB MOVR2 B MOVR3 A MOVA R0 ANLA 0FH XCHA R0 ANLA 0F0H SWAPA ADDA R3 XCHA R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025合同模板物业管理合同双方范本
- 4.1常见地貌类型《河流地貌》说课稿2025-2026学年高中地理人教版(2019)必修一
- 2025年医院护理岗笔试题目及答案
- 2025保险公司同业拆借合同
- 2025年商业地产抵押贷款合同范本
- 2025延期付款合同协议书
- 中职面试护理考试题目及答案
- 会计分录考试题及答案
- 导游资格考试题及答案
- 110kv水利变电站施工组织设计水利方案
- 甘肃开放大学2025年《地域文化(本)》形成性考核1-3终考答案
- 畜牧兽医专业职业规划
- 2026年河南女子职业学院单招职业技能考试必刷测试卷带答案
- 团干部培训分享
- 2026届湖南省华大新高考联盟高三上学期9月教学质量测评(一模)物理试题(解析版)
- 微量泵的使用方法及注意事项
- 游泳池安全保障制度和措施
- 2025年枣庄市工会社会工作者公开招聘(34人)笔试考试参考试题附答案解析
- 印花税法专项培训
- 2025湖南长沙融发集团招聘8人考试笔试模拟试题及答案解析
- 供应商管理资质及准入标准模板
评论
0/150
提交评论