微机原理及应用实验实验一开发环境的使用一、实验目的掌握伟福开发环境的使用方法,包括源程序的输入、汇编、修改;工作寄存器内容的查看、修改;内部、外部RAM内容的查看、修改;PSW中个状态位的查看;机器码的查看;程序的各种运行方式,如单步执行、连续执行,断点的设置。
二、实验内容在伟福开发环境中编辑、汇编、执行一段汇编语言程序,把单片机片内的30H~7FH 单元清零。
三、实验设备PC机一台。
四、实验步骤用连续或者单步的方式运行程序,检查30H-7FH 执行前后的内容变化。
五、实验思考1.如果需把30H-7FH 的内容改为55H,如何修改程序?2.如何把128B的用户RAM全部清零?六、程序清单文件名称:CLEAR.ASMORG 0000HCLEAR: MOV R0,#30H ;30H 送R0寄存器MOV R6,#50H ;50H 送R6寄存器(用作计数器)CLR1: MOV A,#00H ;00 送累加器AMOV @R0,A ;00 送到30H-7FH 单元INC R0 ;R0 加1DJNZ R6,CLR1 ;不到50H个字节,继续WAIT: LJMP WAITEND实验二数据传送一、实验目的掌握MCS-51指令系统中的数据传送类指令的应用,通过实验,切实掌握数据传送类指令的各种不同的寻址方式的应用。
二、实验内容1.编制一段程序,要求程序中包含7中不同寻址方式。
2.编制一段程序,将片内RAM30H~32H中的数据传送到片内RAM38H~3AH中。
3.编制一段程序,将片内RAM30H~32H中的数据传送到片外RAM1000H~1002H 中。
4.编制一段程序,将片内RAM40H~42H中的数据与片外RAM2000H~2002H中的数据互换。
三、实验设备PC机一台。
四、实验步骤逐段编制程序,汇编无误后,用连续或者单步的方式运行程序,检查程序的运行结果,看是否达到预期的效果。
五、实验思考1.如何把片外RAM中1000H~100FH单元中的数传送到片外RAM中2000H~200FH单元中?2.如何把ROM中0200H~0207H单元的数传送至片外RAM0000H~0007H单元中?实验三数码转换一、实验目的掌握采用软件方法进行不同形式数据之间的转换,如十进制数与二进制数的转换、十六进制数与BCD码的转换、BCD数与ASCII码之间的转换、非压缩BCD码与压缩BCD码之间的转换。
二、实验内容1.编制一段程序,将31H单元中的无符号数转换成BCD码,存入32H~34H单元中。
2.编制一段程序,将片内RAM40H,41H中的BCD数转换成十六进制数,存入42H单元中。
3.编制一段程序,将片内RAM30H~32H中的BCD数转换成ASCII码,结果存入外内RAM40H~42H中。
4.编制一段程序,将片内RAM40H~4FH中的BCD码转换成压缩BCD码,结果存入片外RAM0800H~0807H中。
三、实验设备PC机一台。
四、实验步骤逐段编制程序,汇编无误后,用连续或者单步的方式运行程序,检查程序的运行结果,看是否达到预期的效果。
五、实验思考1.如何把一个2字节无符号数转换成BCD码?2.如何把一个3字节十六进制数转换成ASCII码?实验四数值运算一、实验目的掌握采用软件方法进行多字节二进制数、BCD码的加、减运算。
二、实验内容1.编制一段程序,将30H~35H单元中的无符号与40H~45H单元中的无符号数相加,结果存入30H~35H单元中。
2.编制一段程序,将40H~45H单元中的无符号与46H~4BH单元中的无符号数相减,结果存入40H~45H单元中。
3.编制一段程序,将30H~35H单元中的压缩BCD码与40H~45H单元中的压缩BCD码相加,结果存入30H~35H单元中。
三、实验设备PC机一台。
四、实验步骤逐段编制程序,汇编无误后,用连续或者单步的方式运行程序,检查程序的运行结果,看是否达到预期的效果。
五、实验思考若有一个多字节有符号数的原码,如何求其补码?实验五堆栈操作一、实验目的掌握堆栈的使用方法何特点,学习部分有关堆栈操作的编程技巧。
二、实验内容1.编制一段程序,利用堆栈将30H~35H单元中的数传送到40H~45H单元中。
2.编制一段包含子程序调用的程序,观察子程序调用过程中堆栈指针SP的变化以及堆栈中数据的变化。
三、实验设备PC机一台。
四、实验步骤逐段编制程序,汇编无误后,用“步入”的方式运行程序,检查程序运行过程中堆栈指针SP的变化以及堆栈中数据的变化,了解堆栈中的数据与子程序调用语句所处位置间的关系。
五、实验思考如何在子程序执行完成后,不返回到原调用处,而是返回到某一指定地址处?实验六查表操作一、实验目的掌握查表程序的编程方法和技巧。
二、实验内容1.以PC为基址寄存器,查表求30H单元中BCD码的平方,结果存入31H单元。
2.以DPTR为基址寄存器,查表求30H单元中无符号数的平方,结果存入40H、41H单元中。
四、实验步骤逐段编制程序,汇编无误后,用连续或者单步的方式运行程序,检查程序的运行结果,看查表结果是否正确。
五、实验思考如何用查表的方法求一个2字节无符号数的平方?实验七逻辑运算操作一、实验目的掌握逻辑运算操作的编程方法和应用技巧。
二、实验内容1.设有X1、X2、X3、X4、X5、X6共六个十六进制数,存放在30H~35H单元中,求(X1·X2)⊕(X3+X4)+/(X5⊕X6)之值,并将结果存入40H单元。
X1~X6的初始值分别为:X1=35H、X2=AAH、X3=67H、X4=4FH、X5=D9H、X6=08H。
2.编制一段程序,采用移位的方法,将50H~53H单元中的无符号数乘以8,不考虑溢出。
3.编制一段程序,采用移位的方法,将50H~53H单元中的无符号数除以128,不考虑余数。
三、实验设备PC机一台。
四、实验步骤逐段编制程序,汇编无误后,用连续或者单步的方式运行程序,检查程序的运行结果,看查表结果是否正确。
五、实验思考如何将一个字节中的各位逆序排列(例如:由82H变为41H)?实验八中断及I/O口实验一、实验目的掌握中断程序的编程方法以及LJD-SY-5100实验开发板的使用。
二、实验内容1.利用定时/计数器T0,实现1秒定时器。
在中断服务程序中,将P1口的内容左移一位,由此实现与P1口相连的8个LED中一个点亮的LED每隔1秒左移一位。
2.在P0口、P1口、P2口各取一个LED,模拟红、黄、绿交通指示灯。
利用定时/计数器T1,实现红灯亮2秒、黄灯亮1秒、绿灯亮4秒的循环。
三、实验设备1.PC机一台;2.LJD-SY-5100实验开发板一套;四、实验步骤1.接好LJD-SY-5100实验装置的电源,并将LJD-SY-5100实验装置的串行接口与PC机的串行接口相连。
2.开启LJD-SY-5100实验装置的电源。
3.在PC机上运行Keil C51软件,然后按《实验指导书》第一章中“LJD-SY-5100 学习实验开发板的使用”一节的步骤操作,输入源程序并进行调试。
五、实验思考如何实现红灯亮2秒、黄灯亮以0.5秒间隔闪烁2次、绿灯亮4秒的循环。
?六、参考程序以下程序的功能:使P1.0所连接的LED每隔0.5秒闪烁一次。
其原理是利用定时器T0定时50ms,再利用计数器COUNT计数10次,构成0.5秒定时器。
每当0.5秒定时时间到,将P1.0的状态反转。
;============================================================== COUNT EQU 30H;==============================================================ORG 0000HLJMP STARTORG 000BHLJMP T0_INT;==============================================================ORG 0030HSTART: MOV SP,#6FHMOV TMOD,#01HMOV TH0,#4CHMOV TL0,#00H ;晶振11.0592MHz,定时50msMOV COUNT,#10 ;10×50=500ms,状态反转一次MOV P1,#01HSETB TR0 ;启动T0SETB ET0 ;T0中断允许SETB EA ;总中断允许SJMP $ ;等待;==============================================================;T0中断服务程序;==============================================================T0_INT:MOV TH0,#4CHMOV TL0,#00H ;晶振11.0592MHz,定时50msDJNZ COUNT,T0_INT1 ;10次计数值未到,返回MOV COUNT,#10H ;重置计数器CPL P1.0T0_INT1:RETIEND实验九串行通讯实验一、实验目的掌握串行通讯程序的编程方法。
二、实验内容1.理解参考程序并在LJD-SY-5100实验开发板上调试通过。
2.对参考程序进行改造,增加串行口初始化程序及串行口中断服务程序,并进行双机通讯实验。
三、实验设备1.PC机一台;2.LJD-SY-5100实验开发板一套;四、实验步骤1.接好LJD-SY-5100实验装置的电源,并将LJD-SY-5100实验装置的串行接口与PC机的串行接口相连。
2.开启LJD-SY-5100实验装置的电源。
3.在PC机上运行Keil C51软件,然后按《实验指导书》第一章中“LJD-SY-5100 实验开发板的使用”一节的步骤操作,输入参考程序进行调试并通过。
4. 在参考程序基础上对程序进行改造,将程序功能改为:每按一次按键,就将键号通过串行口发送出去;对方单片机接收到数据后,将其显示在LED上。
5. 程序修改完成后汇编成机器码,保存为.HEX或.BIN文件。
6.将机器码下载至单片机的Flash中,两台LJD-SY-5100实验开发板为一组进行串行通讯实验。
为保障实验装置的安全,下载操作必须在教师指导下在指定LJD-SY-5100实验开发板上进行,严禁同学擅自进行下载实验。
五、实验思考如何实现一次发送或接收一批数据?六、参考程序以下程序的功能:每次按键,所按键号将在LED上显示。
LOAD BIT P1.2DIN BIT P1.0DCLK BIT P1.1DOUT BIT P3.3;==============================================================DATA_KEY DATA 35H;==============================================================ORG 0000HLJMP STARTORG 0013HLJMP CH451_INT1;==============================================================ORG 0030HSTART: MOV SP,#60H;--------------------------------------------------------------LCALL INITIAL ;初始化CH451CLR IT1 ;置外部信号为低电平触发CLR IE1 ;清中断标志SETB PX1SETB EX1 ;允许键盘中断SETB EA ;开总中断SJMP $ ;等待;==============================================================;键盘处理;==============================================================CH451_INT1:PUSH PSW ;现场保护PUSH ACCLCALL READ_KEY ;读键值MOV R3,DATA_KEYK1:CJNE R3,#40H,K2MOV A,#03FH ;'0'的显示码SJMP LED_DISPK2:SJMP LED_DISPK3:CJNE R3,#42H,K4MOV A,#5BH ;'2'的显示码SJMP LED_DISPK4:CJNE R3,#43H,K5MOV A,#4FH ;'3'的显示码SJMP LED_DISPK5:CJNE R3,#48H,K6MOV A,#66H ;'4'的显示码SJMP LED_DISPK6:CJNE R3,#49H,K7MOV A,#6DH ;'5'的显示码SJMP LED_DISPK7:CJNE R3,#4AH,K8MOV A,#7DH ;'6'的显示码SJMP LED_DISPK8:CJNE R3,#4BH,K9MOV A,#07H ;'7'的显示码SJMP LED_DISPK9:CJNE R3,#50H,K10MOV A,#7FH ;'8'的显示码SJMP LED_DISPK10:CJNE R3,#51H,K11MOV A,#6FH ;'9'的显示码SJMP LED_DISPK11:CJNE R3,#52H,K12MOV A,#77H ;'A'的显示码SJMP LED_DISPK12:CJNE R3,#53H,K13MOV A,#7CH ;'B'的显示码SJMP LED_DISPK13:CJNE R3,#58H,K14MOV A,#39H ;'C'的显示码SJMP LED_DISPK14:CJNE R3,#59H,K15MOV A,#5EH ;'D'的显示码SJMP LED_DISPK15:CJNE R3,#5AH,K16MOV A,#79H ;'E'的显示码SJMP LED_DISPK16:;------------------------------------------------------------LED_DISP:MOV B,#08HLCALL WRITECLR IT1 ;置外部信号为低电平触发SETB PX1SETB EX1 ;允许键盘中断SETB EAK17:POP ACCPOP PSWCLR IE1 ;清中断标志RETI;============================================================ ;初始化CH451;============================================================ INITIAL:MOV P1,#60H ;禁止其它芯片CLR DIN ;初始化CH451SETB DCLKSETB DINSETB LOADSETB DOUTNOPMOV B,#04H ;设置CH451MOV A,#03H ;关看门狗开显示键盘LCALL WRITERET;============================================================ ;入口: B中为传送数据位数;出口: 无;影响寄存器: A,R7,PSW;============================================================ WRITE:CLR EX0CLR LOADMOV R7,#08HWRITE_1:RRC ACLR DCLKMOV DIN,CSETB DCLKDJNZ R7,WRITE_1MOV A,BMOV R7,#04HWRITE_2:RRC ACLR DCLKMOV DIN,CSETB DCLKDJNZ R7,WRITE_2SETB LOADSETB EX1RET;============================================================;入口: 无;出口: 键盘扫描值在DATA_KEY中;影响寄存器: 无;============================================================READ_KEY:PUSH PSW ;现场保护PUSH ACCCLR EX1CLR LOAD ;命令开始MOV A,#0F7H ;读键值命令,忽略12位命令的低8位,高4位用作结束标志READ_KEY_4:SETB C ;在高位添0以检测位数据结束RRC A ;低位在前,高位在后CLR DCLKMOV DIN,C ;送出一位数据SETB DCLK ;产生时钟上升沿锁通知CH451输入位数据CJNE A,#0FFH,READ_KEY_4 ;位数据未完继续,共4位,完成后为0FFHSETB LOAD ;产生加载上升沿通知CH451处理命令数据MOV A,#0FCH ;该数据用以检测位数据结束READ_KEY_7:MOV C,DOUT ;读入一位数据CLR DCLK ;产生时钟下升沿通知CH451输出下一位RLC A ;数据移入ACC,高位在前,低位在后SETB DCLKJC READ_KEY_7 ;位数据未完继续,共7位,完成后才移出0MOV DATA_KEY,A ;保存键值POP ACCPOP PSWSETB EX1CLR IE1 ;清中断标志,该指令需根据实际情况作修改RET。