名: 院(系):专 业:学
号:指导教师: 本科实验报告
微机原理与接口技术
邵芳琳 控制学院 自动化 3140103307
曹峥
2016年 11月 11日
学
实验一 存储器块操作实验
一、实验目的
1. 熟悉 KEIL 集成调试环境和汇编程序的调试方法。 2. 掌握存储器读写方法; 3. 了解内存块的移动方法; 二、实验说明
实验 1 指定某块存储器的起始地址和长度,要求能将其内容赋值。通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。
块移动是单片机常用操作之一, 多用于大量的数据复制和图象操作。 例程 2 给出起始地址,用地址加一方法移动块, 将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。移动 3000H 起始的 256 个字节到 4000H 起始的 256 个字节。
思考题
1. 如何将存储器块的内容置成某固定值 作。
将 MOV A,#1H 改为 MOV A, #FFH
(例全填充为 0FFH)? 请用户修改程序,完成此操
2. 若源块地址和目标块地址有重叠,该如何避免?
源块地址和目标块地址重叠部分数据压制堆栈中, 中弹出。 实验内容
当要使用重叠部分源数据时,
直接从堆栈
1. 试编程将片内
RAM 中的数据依次复制到片外RAM。假设源数据区的首地址为
目的数据区的首地址为 1000H,数据块长度为 10H。
40H,
ORG 0000H
MOV R0,#40H
MOV A,#01H MOV R5,#10H
LOOP:
MOV @R0,A INC R0
DJNZ R5,LOOP
MOV R0,#40H ;起始地址
MOV R2,#10H MOV R3,#00H
MOV R7,#10H ;循环次数
LOOP1: MOV A,@R0
MOV DPH,R2 MOV DPL,R3 MOVX @DPTR,A INC R0 INC R3
DJNZ R7,LOOP1 LJMP $ END
运行结果:
2. 两个 16 位无符号二进制数分别存放在片外 它们相加,结果存入片内
RAM 首址为 2000H 和 2002H 单元内, 将
RAM 30H(低 8 位)、 31H(高 8 位)。
ORG 0000H MOV A,#11H
MOV DPTR,#2000H MOVX @DPTR,A MOV DPTR,#2003H MOVX @DPTR,A MOV R0,A
MOV DPTR,#2002H MOVX A,@DPTR ADD A,R0 MOV 30H,A
MOV DPTR,#2001H MOVX A,@DPTR MOV R0,A
MOV DPTR,#2003H MOVX A,@DPTR ADDC A,R0 MOV 31H,A END
运行前:
运行后:
1100+0011=1111 运行结果正确。
实验二 数值转换实验
一、实验目的
1. 熟悉 KEIL 集成调试环境和汇编程序的调试方法。 2. 掌握简单的数值转换算法。 4. 掌握数值的加减法运算。 5. 掌握用查表的方法将 二、实验说明
3. 基本了解数值的各种表达方法。
BCD 值转换成 ASCII 值。
单片机系统内部运算用二进制, 是仪表设计中常用的程序之一。 单片机中的数值有各种表达方式,
而输入输出常用十进制, 以符合日常习惯, 因此, 数制转换
这是单片机的基础。 掌握各种数制之间的转换是一种基本
功。我们将给定的一字节二进制数,转换成二十进制( 个 BCD 码,并存入 RESULT开始的三个单元,例程 实验 2 主要让学生了解数值的
转换。进一步掌握数值的各种表达方式。 如下:将累加器 A 的值转换为二个 值#1AH。
BCD)码。将累加器 A 赋值 #123 。
A 的值拆为三
BCD 码和 ASCII 码的区别,利用查表方法快速地进行数值
现在我们给出一个
ASCII 码,并存入 Result 开始的二个单元,例如
BCD 数,将其转换成 ASCII 值。
A 赋
思考题
BCD 码转换成二进制数的算法是什么?例如:( 9×10^1+1 × 10^0=91=() B 实验内容
1. 把 R 3 中的 8 位二进制整数转换为压缩
ORG 0000H
MOV R3, ##10111011B MOV A,R3 MOV B,#100 DIV AB MOV R4, A MOV A,B MOV B,#10 DIV AB MOV R5, A SWAP A ADD A,B MOV R5, A
BCD 码,存放在
R4, R5 中。
91) BCD 对应的二进制数是多少?
将 BCD码写成权值相加的形式 ,再将各位转化为二进制。
寄存器结果:
2. 设 4 位 BCD 码 abcd 依次存放在内部 为 0)。试编程将其转换成二进制数并存入
RAM 中 50H~ 53H 单元的低 R6R7 中。
4 位,(高 4 位
ORG 0000H MOV 50H,#01 MOV 51H,#02 MOV 52H,#03 MOV 53H,#04 MOV A,50H MOV B,#10 MUL AB MOV B,#100 MUL AB MOV R1,B MOV R0,A MOV B,#100 MOV A,51H MUL AB ADD A,R0 MOV R0,A MOV A,B ADDC A,R1 MOV R1,A
MOV B,#10
MOV A,52H
MUL AB ADD A,R0 MOV R0,A MOV A,R1 ADDC A,#0 MOV R1,A MOV A,R0 ADD A,53H MOV R0,A MOV A,R1 ADDC A,#0 MOV R6,A MOV A,R0 MOV R7,A
执行结果:
4 位 BCD码为 1234 ,转换为 2 进制数为 4d2 与实际相符。
实验三 程序跳转表实验
一、实验目的
1. 熟悉 KEIL 集成调试环境和汇编程序的调试方法。 2. 了解简单的函数计算。
3. 掌握多分支结构程序的编程方法 二、实验说明
多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。
若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。 三、思考题
1. 写跳转程序时要注意些什么?
1)子程序的第 1 条指令前必须有标号, 即表明子程序的名称, 也作为调用指令的符号地址。 2)要有入口条件,用来说明入子程序时,它所要处理的数据如何得到。另外,要有出口条件,即处理的结果是如何存放的。
3)注意保护现场和恢复现场,即在调用子程序前将不允许被破坏的内容保存起来;恢复现场即在子程序执行完毕返回主程序前,将保存的内容恢复到保护现场前的状况;
4)子程序必须以 RET结束。子程序中,对堆栈的入栈和出栈操作次数必须相同,以保证返回后堆栈指针 SP的值与调用时一直。
2. 可以避免重复书写相同的程序;
可以简化程序的逻辑结构; 使程序模块化,通用化。
三、实验内容
ORG 0000H MOV R0,#0FCH CJNE R0,#0,NEXT0
MOV R0,#2 MOV A,R0 SJMP NEXT3
NEXT0:CJNE R0,#80H,NEXT1
MOV R0,#2 MOV A,R0 SJMP NEXT3
NEXT1:JC NEXT2
SETB C MOV A,R0 RRC A
SJMP NEXT3
NEXT2:MOV A,R0
MOV B,#2 MUL AB
NEXT3:MOV 30H,A END 测试结果: X<0
X=0
X>0
实验四 数据排序实验
一、实验目的
1. 熟悉 KEIL 集成调试环境和汇编程序的调试方法。 2. 掌握排序程序的设计方法。 二、实验说明
本例程采用交换排序法将内部 处。 初始:
RAM 中的 50~ 59H 单元中的 10 个单字节无符号二进制数按
RAM 1000H 开始
从小到大的次序排列,并将这一列排序后的数据从小到大依次存贮到外部
结果:
三、实验内容
画出本实验程序的流程图。
实验五 键盘显示仿真实验
一、实验目的
1. 熟悉 KEIL 集成调试环境和汇编程序的调试方法。 2. 学习使用外围接口工具调试程。 3. 熟悉键盘显示接口电路及程序设计。 提高实验
1. 根据键盘、 LED 仿真板,设计一个走马灯程序,通过按键实现启停、速率及方向的控制 UpDown BIT 00H StartEnd BIT 01H LAMPCODE EQU 21H ORG 0000H AJMP MAIN ORG 30H MAIN:
MOV SP,#5FH
MOV P1,#0FFH
CLR UpDown ;启动时处于向上的状态 CLR StartEnd ;启动时处于停止状态
MOV LAMPCODE,#01H 单;灯流动的代码 LOOP:
ACALL KEY调;用键盘程序
JNB F0,LNEXT如;果无键按下 ,则继续 ACALL KEYPROC ;否则调用键盘处理程序 LNEXT:
ACALL LAMP 调;用灯显示程序 AJMP LOOP DELAY:
MOV R7,#100 D1:
MOV R6,#100 DJNZ R6,$ DJNZ R7,D1 RET
KEYPROC:
MOV A,B ;从 B 寄存器中获取键值
JB ACC.2,KeyStart 分;析键的代码 ,某位被按下 ,则该位为 1 JB ACC.3,KeyOver JB ACC.4,KeyUp JB ACC.5,KeyDown AJMP KEY_RET KeyStart:
SETB StartEnd 第;一个键按下后的处理 AJMP KEY_RET KeyOver:
CLR StartEnd ;第二个键按下后的处理 AJMP KEY_RET KeyUp:
SETB UpDown ;第三个键按下后的处理 AJMP KEY_RET
LampStart:
AJMP LAMPRET ;否则关闭所有显示 ,返回 LampStart: JB UpDown,LAMPUP ;如果 UpDown=1, 则向上流动 MOV A,LAMPCODE RL A ;左移位而 MOV LAMPCODE,A
2. 根据实验仿真板 ORG 0000H
2 设计一个按键显示数字的程序,即按 0 显示 0,依次类推。
START: MOV P2,#0FEH
MOV P3,#0EFH JB P3.0,NEXT1 MOV P0,#0C0H LJMP FINAL
NEXT1: MOV P3,#0EFH
JB P3.1,NEXT2 MOV P0,#0F9H LJMP FINAL
NEXT2: MOV P3,#0EFH
JB P3.2,NEXT3 MOV P0,#0A4H LJMP FINAL
NEXT3: MOV P3,#0EFH
JB P3.3,NEXT4 MOV P0,#0B0H LJMP FINAL
NEXT4: MOV P3,#0DFH
JB P3.0,NEXT5 MOV P0,#99H LJMP FINAL
NEXT5: MOV P3,#0DFH
JB P3.1,NEXT6 MOV P0,#92H LJMP FINAL
NEXT6: MOV P3,#0DFH
JB P3.2,NEXT7
显示结果:
因篇幅问题不能全部显示,请点此查看更多更全内容