微机原理与接口技术实验.docx
- 文档编号:2639824
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:48
- 大小:375.35KB
微机原理与接口技术实验.docx
《微机原理与接口技术实验.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验.docx(48页珍藏版)》请在冰点文库上搜索。
微机原理与接口技术实验
实验一存储器块操作实验
一、实验目的
1.熟悉KEIL集成调试环境和汇编程序的调试方法。
2.掌握存储器读写方法;
3.了解内存块的移动方法;
二、实验说明
实验1指定某块存储器的起始地址和长度,要求能将其内容赋值。
通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。
块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。
例程2给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。
移动3000H起始的256个字节到4000H起始的256个字节。
三、源程序代码
源程序1:
ORG0000H
STARTEQU8000H
MOVDPTR,#START;起始地址
MOVR0,#0;设置256字节计数值
MOVA,#1H
Loop:
MOVX@DPTR,A
INCDPTR;指向下一个地址
DJNZR0,Loop;计数值减一
NOP
LJMP$
END
MemoryWindow
初始:
运行后:
运行结果:
外部RAM8000H~80FFH的内容都为1。
源程序2:
ORG0000H
MOVDPTR,#3000H
MOVA,#01H
MOVR5,#0
LOOP:
MOVX@DPTR,A
INCDPTR
DJNZR5,LOOP
MOVR0,#30H
MOVR1,#00H
MOVR2,#40H
MOVR3,#00H
MOVR7,#0
LOOP1:
MOVDPH,R0
MOVDPL,R1
MOVXA,@DPTR
MOVDPH,R2
MOVDPL,R3
MOVX@DPTR,A
INCR1
INCR3
DJNZR7,LOOP1
LJMP$
END
MemoryWindow
初始:
运行程序后:
运行结果:
3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。
四、思考题
1、如何将存储器块的内容置成某固定值(例全填充为0FFH)?
请用户修改程序,完成此操作。
将源程序1修改为:
ORG0000H
STARTEQU8000H
MOVDPTR,#START;起始地址
MOVR0,#0;设置256字节计数值
MOVA,#0FFH;将累加器赋值为0FFH
Loop:
MOVX@DPTR,A
INCDPTR;指向下一个地址
DJNZR0,Loop;计数值减一
NOP
LJMP$
END
MemoryWindow
初始:
运行程序后:
2、若源块地址和目标块地址有重叠,该如何避免?
将源块地址和目标块地址重叠部分数据压制堆栈中,当要使用重叠部分源数据时,
直接从堆栈中弹出。
五、实验内容
1、试编程将片内RAM中的数据依次复制到片外RAM。
假设源数据区的首地址为40H,目的数据区的首地址为1000H,数据块长度为10H。
源程序:
ORG0000H
MOVR0,#40H
MOVDPTR,#1000H
MOVR1,#10H
LOOP:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR1,LOOP
SJMP$
END
MemoryWindow
初始:
程序运行后:
程序运行结果正确。
2、两个16位无符号二进制数分别存放在片外RAM首址为2000H和2002H单元内,将它们相加,结果存入片内RAM30H(低8位)、31H(高8位)。
源程序:
ORG0000H
MOVDPTR,#2000H
MOVXA,@DPTR
MOVR0,A
MOVDPTR,#2002H
MOVXA,@DPTR
ADDA,R0
MOV30H,A
MOVDPTR,#2001H
MOVXA,@DPTR
MOVR0,A
MOVDPTR,#2003H
MOVXA,@DPTR
ADDCA,R0
MOV31H,A
END
MemoryWindow
初始:
运行程序后:
2FAFH+067DH=362CH,36H存于31H(高八位),2CH存于30H(低八位)。
程序运行正确。
实验二数值转换实验
一、实验目的
1.熟悉KEIL集成调试环境和汇编程序的调试方法。
2.掌握简单的数值转换算法。
3.基本了解数值的各种表达方法。
4.掌握数值的加减法运算。
5.掌握用查表的方法将BCD值转换成ASCII值。
二、实验说明
单片机系统内部运算用二进制,而输入输出常用十进制,以符合日常习惯,因此,数制转换是仪表设计中常用的程序之一。
实验1:
单片机中的数值有各种表达方式,这是单片机的基础。
掌握各种数制之间的转换是一种基本功。
我们将给定的一字节二进制数,转换成二十进制(BCD)码。
将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。
实验2:
主要让学生了解数值的BCD码和ASCII码的区别,利用查表方法快速地进行数值转换。
进一步掌握数值的各种表达方式。
现在我们给出一个BCD数,将其转换成ASCII值。
如下:
将累加器A的值转换为二个ASCII码,并存入Result开始的二个单元,例如A赋值#1AH。
三、源程序代码
源程序1:
RESULTEQU30H
ORG0000H
LJMPSTART
BINTOBCD:
MOVB,#100
DIVAB
MOVRESULT,A;除以100得百位数
MOVA,B
MOVB,#10
DIVAB
MOVRESULT+1,A;余数除以10得十位数
MOVRESULT+2,B;余数为个位数
RET
START:
MOVSP,#40H
MOVA,#123
CALLBINTOBCD
LJMP$
END
MemoryWindow
程序结果:
运行结果:
30H~32H的内容分别为01,02,03。
源程序2:
RESULTEQU30H
ORG0000H
LJMPSTART
ASCIITAB:
DB‘0123456789ABCDEF’;定义数字对应的ASCII表
BCDTOHEX:
MOVDPTR,#ASCIITAB
MOVB,A;暂存A
SWAPA
ANLA,#0FH;取高四位
MOVCA,@A+DPTR;查ASCII表
MOVRESULT,A
MOVA,B;恢复A
ANLA,#0FH;取低四位
MOVCA,@A+DPTR;查ASCII表
MOVRESULT+1,A
RET
START:
MOVSP,#40H
MOVA,#1AH
CALLBCDTOHEX
LJMP$
END
MemoryWindow
运行结果:
运行结果:
30H、31H单元的结果分别为31、41。
四、思考题
1、BCD码转换成二进制数的算法是什么?
例如:
(91)BCD对应的二进制数是多少?
将BCD码写成权值相加的形式,再将各位转化为二进制。
(91)BCD=
=91,转化为二进制为1011011B
五、实验内容
1.把R3中的8位二进制整数转换为压缩BCD码,存放在R4R5中。
源程序:
ORG0000H
MOVR3,#116
MOVB,#100
MOVA,R3
DIVAB
MOVR4,A
MOVA,B
MOVB,#10
DIVAB
SWAPA
ADDA,B
MOVR5,A
END
运行结果:
R4、R5寄存器的值分别为1H、16H。
2.设4位BCD码abcd依次存放在内部RAM中50H~53H单元的低4位,(高4位为0)。
试编程将其转换成二进制数并存入R6R7中。
ORG0000H
LJMPDTB
ORG0100H
DTB:
MOVR0,#50H;R0指向千位地址
MOVR1,#3;循环次数送R1
MOVR6,#0;R6清零
MOVA,@R0;取千位数送A
MOVR7,A;暂存R7
LOOP:
MOVA,R7
MOVB,#10
MULAB;R7*10
MOVR7,A
MOVA,B
XCHA,R6
MOVB,#10
MULAB;R6*10,结果为1个字节
ADDA,R6
MOVR6,A
INCR0;取下一位BCD数
MOVA,R7;与R6R7相加,和送回R6R7
ADDA,@R0
MOVR7,A
MOVA,R6
ADDCA,#0
MOVR6,A
DJNZR1,LOOP;若未完成,则LOOP
END
MemoryWindow
初始:
运行程序后:
运行结果:
4位BCD码5421转换成二进制数并存入R6R7中,其中R6=0x15(高八位),R7=0x2D(低八位)。
实验三程序跳转表实验
一、实验目的
1.熟悉KEIL集成调试环境和汇编程序的调试方法。
2.了解简单的函数计算。
3.掌握多分支结构程序的编程方法。
二、实验说明
多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。
若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。
三、实验内容
源程序:
ORG0000H
MOVA,R0
MOVB,#2
JNBACC.7,FUNC1
CPLA
ADDA,#1
CLRC
RRCA
CPLA
ADDA,#1
MOV30H,A
LJMPFINAL
FUNC1:
JNZFUNC2
MOV30H,#2
LJMPFINAL
FUNC2:
MOVB,#2
MULAB
MOV30H,A
FINAL:
LJMP$
END
当x>0时:
R0=4
结果:
30H=08H=2x
当x=0时:
R0=0
结果:
30H=02H=2
当x<0时:
R0=0FCH=-4
结果:
30H=FEH=x/2=-2
四、思考题
1.写跳转程序时要注意些什么?
写跳转程序时,应该要注意跳转条件,不同分支的跳转条件应该是独立不重复的。
2.跳转的作用有哪些?
跳转程序可以应用于有条件判定的程序;使程序编写更灵活
实验四数据排序实验
一、实验目的
1.熟悉KEIL集成调试环境和汇编程序的调试方法。
2.掌握排序程序的设计方法。
二、实验说明
本例程采用交换排序法将内部RAM中的50~59H单元中的10个单字节无符号二进制数按从小到大的次序排列,并将这一列排序后的数据从小到大依次存贮到外部RAM1000H开始处。
三、实验步骤
1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。
在所建的Project文件中添加“TH6_数据排序.ASM”文件,阅读、分析、理解程序,编译无误后进入仿真环境。
2.在VIEW菜单中打开MEMORYWINDOW数据窗口,分别观察50H(在MEMORY#1中输入D:
50H)、1000H(MEMORY#2窗口输入X:
1000H)。
3.可在程序指令NOP处设置断点,在第一个断点处可观察50~59H单元内容是否为10个任意排列原始数据;在第二个断点处可观察每次排序的结果。
4.可单步执行程序观察排序过程。
四、流程图
二、硬件实验
实验一I/O口控制实验
一、实验目的
1、学习P1口的使用方法;
2、学习延时子程序的编写和使用;
二、实验说明
P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据可能是不正确的。
三、思考题
对于本实验延时子程序
Delay:
MOVR6,0
MOVR7,0
DelayLoop:
DJNZR6,.DelayLoop
DJNZR7,DelayLoop
RET
本模块使用12MHz晶振,粗略计算此程序的执行时间为多少?
执行时间:
(1+1+(256*2+2)*256+2)us=0.131588s
四、实验内容
1.编写程序,使发光二极管沿一个方向循环点亮。
ORG0000H
LOOP:
MOVA,#0FEH
MOVR2,#8
OUT:
MOVP1,A
RLA
ACALLDELAY
DJNZR2,OUT
LJMPLOOP
DELAY:
MOVR6,#0
MOVR7,#0
LOOP1:
DJNZR6,LOOP1
DJNZR7,LOOP1
RET
END
2.改变发光二极管移动步长、方向和时间。
ORG0000H
LOOP:
MOVA,#0FEH
MOVR2,#8
OUT:
MOVP1,A
RRA;改变发光二极管移动步长与方向
RRA
ACALLDELAY
DJNZR2,OUT
LJMPLOOP
DELAY:
MOVR6,#321;改变发光时间
MOVR7,#321
LOOP1:
DJNZR6,LOOP1
DJNZR7,LOOP1
RET
END
实验四动态扫描显示实验
一、实验目的
1.掌握数字、字符转换成显示段码的软件译码方法;
2.动态显示的原理和相关程序的编写;
二、实验说明
动态显示,也称扫描显示。
显示器由8个共阴极LED数码管构成。
单片机P0口输出显示段码,经由一片74LS245驱动输出给LED管,由P1口输出位码,经由74LS06输出给LED管。
三、思考题
1.程序停止运行后,显示随之变化,为什么?
动态显示是利用人眼的暂留作用,高频率的刷新数码管,其实同一时间,八位数码管中只有一只是亮的,这一点是动态显示与静态显示最大的区别。
当程序停止运行后,八位数码管中只有一位正常显示,其余熄灭。
四、实验内容
1.画出实验例程的流程图。
2.如何修改程序,实现八位LED数码管只显示其中的两位?
根据动态显示的特性,只需要改变P0、P2口输出的位码即可。
例如:
实现只显示“168168”第一位数“8”与第三位数“1”,那么位码P2循环输出1、100;P0段码循环输出“8”、“1”的段码。
ORG0000H
LJMPdisp
ORG0100H
disp:
MOV30h,#8
MOV31h,#6
MOV32h,#1
MOV33h,#8
MOV34h,#6
MOV35h,#1
MOVR0,#30H
MOVR1,#40H
MOVR2,#2
MOVDPTR,#SEGTAB
DP00:
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR1
INCR0
INCR0
DJNZR2,DP00
DISP0:
MOVR0,#40H
MOVR1,#2
MOVR2,#1
DP01:
MOVA,@R0
MOVP0,A
MOVA,R2
MOVP2,A
ACALLDELAY
MOVA,R2
RLA
RLA
MOVR2,A
INCR0
DJNZR1,DP01
SJMPDISP0
SEGTAB:
DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5
DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,B
DB58H,5EH,7BH,71H,00H,40H;C,D,E,F,,-
DELAY:
MOVR4,#03H
AA1:
MOVR5,#0FFH
AA:
NOP
NOP
DJNZR5,AA
DJNZR4,AA1
RET
END
3.将显示改成闪烁显示模式,频率约1Hz。
DBUFEQU30H
TEMPEQU40H
ORG0000H
LJMPdisp
ORG0100H
disp:
MOV30h,#8
MOV31h,#6
MOV32h,#1
MOV33h,#8
MOV34h,#6
MOV35h,#1
MOVR0,#DBUF
MOVR1,#TEMP
MOVR2,#6
MOVDPTR,#SEGTAB
DP00:
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR1
INCR0
DJNZR2,DP00
MOVR7,#1BH
MOVR2,#1
DISP0:
MOVR0,#TEMP
MOVR1,#6
DP01:
MOVA,@R0
MOVP0,A
MOVA,R2
MOVP2,A
ACALLDELAY
MOVA,R2
RLA
MOVR2,A
INCR0
DJNZR1,DP01
DJNZR7,DIPS0
MOVR7,#1BH
CJNER2,#20H,L1
MOVR2,#0
AJMPDISP0
L1:
MOVR2,#1
AJMPDIPS0
SEGTAB:
DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5
DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,B
DB58H,5EH,7BH,71H,00H,40H;C,D,E,F,,-
DELAY:
MOVR4,#03H
AA1:
MOVR5,#0FFH
AA:
NOP
NOP
DJNZR5,AA
DJNZR4,AA1
RET
END
一、数码管动态显示,加粗部分是在相对实验例程变化部分;
二、实现显示改成闪烁显示模式,频率约1Hz,需要限定程序刷新六位数码管的次数;DELAY子程序延时3065us,一次刷新六位数码管,时长0.01839s;考虑频率要求为1HZ,0.5s点亮,0.5s暗,这样就要求DISP0循环0.5/0.01839=27次,所以将赋R7为1BH.
三、DISP0循环结束后,通过比较R2,判断接下来0.5s数码管是亮还是暗;如果R2=20H,则接下来0.5s暗;反之,点亮。
实验五查询式键盘实验
一、实验目的
1、掌握键盘和显示器的接口方法和编程方法;
2、掌握键盘和八段码显示器的工作原理;
3、掌握静态显示的原理和相关程序的编写;
二、实验说明
实验箱提供了8个按钮的小键盘,可接到单片机的并行口,如果有键按下,则相应输出为低,否则输出为高。
单片机通过识别,判断按下什么键。
有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。
三、思考题
1.程序如何确保每按一次键,只处理一次。
程序在处理前与处理后,均有消除抖动的模块K00、K03,使得在一定延时后,去除两边可能发生抖动的时间,再进行查表键值和显示的操作,以保证每一次按键都能独立出来,不受两边抖动的干扰,实现只处理一次。
2.动态扫描和静态扫描有什么区别?
静态显示:
各数码管在显示过程中持续得到送显信号,与各数码管接口的I/O口线是专用的。
其特点是显示稳定,无闪烁,用元器件多,占I/O线多,无须扫描。
系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,节省CPU时间,提高CPU的工作效率,编程简单。
动态显示:
一位一位地轮流点亮每位显示器,与各数码管接口的I/O口线是共用的。
其特点是有闪烁,用元器件少,占I/O线少,必须扫描,花费CPU时间,编程复杂。
四、实验内容
试设计长按功能,当按键时间长于3秒时,个位上的数字以一定速率增加,直至按键释放。
说明:
利用动态显示模块,记录按键次数。
DBUFEQU30H
TEMPEQU40H
ORG0000H
LJMPSTART
ORG0100H
START:
MOVA,#10H
MAIN:
ACALLKEY
AJMPMAIN
KEY:
MOVP1,#0FFH
MOVA,P1
CJNEA,#0FFH,K00
AJMPKEY
K00:
ACALLDELAY
MOVA,P1
CJNEA,#0FFH,K01
AJMPKEY
K01:
MOVR3,#8
MOVR2,#0
MOVB,A
MOVDPTR,#K0TAB
K02:
MOVA,R2
MOVCA,@A+DPTR
CJNEA,B,K04
K03:
MOVA,P1
CJNEA,#0FFH,K03
ACALLDELAY
MOVR6,#-200
WAIT3S:
MOVB,P1
CJNEA,B,Exit
ACALLDELAY
ACALLDELAY
ACALLDELAY
ACALLDELAY
ACALLDELAY
ACALLDELAY
ACALLDELAY
ACALLDELAY
ACALLDELAY
ACALLDELAY
DJNZR6,WAIT3S
ACALLDELAY;延时3s
K05:
MOVA,B
RLA
MOVR6,#-111
WAIT500MS:
ACALLDELAY
MOVB,A
ACALLDELAY
ACALLDELAY
MOVA,P1
CJNEA,#0FFH,K06
LJMPExit
MOVA,B
K06:
DJNZR6,WAIT500MS;延时500ms
MOVB,A
MOVA,P1
CJNEA,#0FFH,K05
Exit:
RET
K04:
INCR2
DJNZR3,K02
MOVA,#0FFH
LJMPMAIN
K0TAB:
DB0FEH,0FDH,0FBH,0F7H
DB0EFH,0DFH,0BFH,07FH
DELAY:
MOVR4,#02H;大约延时1.5ms
AA1:
MOVR5,#0F8H
AA:
MOVP2,A
DJNZR5,AA
DJNZR4,AA1
RET
END
实验六定时器实验
一、实验目的
1.学习89C51内部计数器的使用和编程方法;
2.进一步掌握中断处理程序的编写方法;
二、实验说明
关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 实验
![提示](https://static.bingdoc.com/images/bang_tan.gif)