华中科技大学单片机实验实验报告MCS51单片机.docx
- 文档编号:24232587
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:80
- 大小:37.24KB
华中科技大学单片机实验实验报告MCS51单片机.docx
《华中科技大学单片机实验实验报告MCS51单片机.docx》由会员分享,可在线阅读,更多相关《华中科技大学单片机实验实验报告MCS51单片机.docx(80页珍藏版)》请在冰豆网上搜索。
华中科技大学单片机实验实验报告MCS51单片机
华中科技大学单片机实验报告
MCS-51系列单片机
(单片机原理及应用实验)
(根据2014年电气与电子工程学院单片机实验课程改编)
专业:
电气工程及其自动化
班级:
气卓1301
姓名:
廖鹏毅
学号:
ALLRIGHTRESERVED
目录
实验3.1软件仿真实验………………………………………………3
实验2“跑马灯”实验…………………………………………………8
实验3数码管显示功能的实现………………………………………11
实验5按键功能的实现………………………………………………23
实验7A/D转换器件TLC1543的用……………………………………29
实验8D/A转换器件TLV5617的应用…………………………………34
实验14指示灯的外部中断控制………………………………………47
实验18定时器控制继电器……………………………………………49
自行设计实验…………………………………………………………53
实验总结………………………………………………………………55
实验3.1软件仿真实验
一实验目的
1掌握软件仿真的方法
2熟悉集成开发环境的使用
3熟悉常用指令的功能
4熟悉程序调试的方法
5学习自己编写、调试计算机程序
二实验内容
1将Keil软件设置为软件仿真的方式
2将3.1.4介绍的示例程序录入、编译、调试
3观察有关寄存器、变量的值,理解程序及指令的功能
4编译、调试、验证自己编写的子程序
三实验步骤
1先阅读课本,大致了解仿真软件的使用和注意事项
2结合课本,边看书边上机操作,逐步了解和掌握仿真软件的使用
3阅读和理解3.1.4介绍的示例程序,并将其录入、编译、调试
4赋值给示例程序时,打开各观察窗口,观察有关寄存器、变量的值,验证其功能
5自行编译、调试、验证自己编写的子程序
四实验结果
1给十六进制数转换为十进制数子程序赋初值,
MOVH_DAT0,#01H
MOVH_DAT1,#00H
则编译加载调试该子程序,打开各观察窗口观察有关变量,实验发现D_DAT0,D_DAT1,D_DAT2,D_DAT3中的值分别为00,00,00,01。
则符合实际,即验证其功能。
2给双字节乘法运算子程序赋初值,
MOVR4,#8
MOVR5,#9
MOVR6,#6
MOVR7,#7
然后编译加载调试该子程序,并用观察窗口观察有关变量,实验发现MUL_0,MUL_1,MUL_2,MUL_3分别为08,04,04,07.则符合实际,即验证其功能。
3给三字节数除双字节数运算子程序赋初值,
MOVODIV_H,#00H
MOVODIV_M,#00H
MOVODIV_L,#01H
MOVDIV_1,#00H
MOVDIV_0,#01H
接着编译加载调试该子程序,并用观察窗口观察有关变量,实验发现R0,R1,R3,R4,R5中的值分别为00,00,00,00,01,则实验验证其功能。
五实验小结
本次实验,我初步了解仿真软件的使用,同时掌握了编译、加载、调试程序的方法以及验证实验结果的方法
附:
3.1.4示例程序
含主程序
十六进制数转换为十进制数子程序
双字节乘法运算子程序
三字节数除双字节数运算子程序
D_DAT0EQU50H
D_DAT1EQUD_DAT0+1
D_DAT2EQUD_DAT1+1
D_DAT3EQUD_DAT2+1
H_DAT0EQUD_DAT3+1
H_DAT1EQUH_DAT0+1
ODIV_LEQUH_DAT1+1
ODIV_MEQUODIV_L+1
ODIV_HEQUODIV_M+1
DIV_0EQUODIV_H+1
DIV_1EQUDIV_0+1
MUL_0EQUDIV_1+1
MUL_1EQUMUL_0+1
MUL_2EQUMUL_1+1
MUL_3EQUMUL_2+1
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSP,#30H
;在此处给有关变量单元赋值
MOVH_DAT1,#2
MOVH_DAT0,#0
LCALLHTD
;在此处给有关变量单元赋值
LCALLTMUL
;在此处给有关变量单元赋值
LCALLSDIV
LOOP:
NOP
AJMPLOOP
HTD:
MOVD_DAT3,#00H;将结果千位清0
MOVD_DAT2,#00H
MOVD_DAT1,#00H
MOVD_DAT0,#00H
;以上将各位结果存储单元清0
H1000:
CLRC;进位位C清0
MOVA,H_DAT0;源数据低位装载到累加器A中
MOVR6,A;备份源数值低位到寄存器R6中
SUBBA,#0E8H;源数值低位减去1000的低位0E8H
MOVH_DAT0,A;余数存回到源数值低位存储单元
MOVA,H_DAT1;源数值高位装载到累加器A中
MOVR7,A;备份源数值高位到寄存器R7中
SUBBA,#03H;源数值高位带借位减1000的高位03H
MOVH_DAT1,A;余数存回到源数值低位存储单元
INCD_DAT3;千位增1
JNCH1000;如果没有借位则利用余数循环再减
;有借位表明为最后一次无效减
;程序顺序执行,应还原最后一次修改值
MOVH_DAT0,R6
MOVH_DAT1,R7;用备份值作为新的源数值(余数)
DECD_DAT3;千位数减1,去掉最后一次无效减的影响
H100:
MOVA,H_DAT0;源数值低位装载到累加器A中
MOVR6,A;备份源数值低位到寄存器R6中
CLRC;清0进位位C
SUBBA,#100;减去100
MOVH_DAT0,A;存回余数低位
MOVA,H_DAT1;取源数值高位
SUBBA,#00H;减100的高位0,实际上是减去借位位
MOVH_DAT1,A;存回余数高位
JCH10;有借位则跳到下一步继续运算
INCD_DAT2;没有借位,百位增1
AJMPH100;没有借位继续减
;注意本轮循环中最后一次减时百位未增1
;所以不存在还原的问题
;进入下一轮时,源数值(余数)都在R6中
H10:
CLRC
MOVA,R6;源数值(低位)装载到累加器A中
;到此源数值高位已经为0,不用再参加计算
MOVD_DAT0,A;存回源数值低位
;如果是最后一次减,则此值即为个位
SUBBA,#10;减去10
MOVR6,A;保存余数
JCH1;有借位,运算结束
INCD_DAT1;没有借位,十位增1
LJMPH10;没有借位继续减
H1:
RET;子程序返回
TMUL:
MOVA,R6
MOVB,R4
MULAB;第一次乘法
MOVMUL_0,A;第一次乘法结果低位存到MUL_0(最终结果)
MOVR3,B;第一次乘法结果高位暂存在R3中
MOVA,R4
MOVB,R7
MULAB;第二次乘法
ADDA,R3;第二次乘法结果低位加第一次乘法结果的高位
MOVR3,A;所得第一次加法结果低位暂存到R3中
MOVA,B
ADDCA,#00H;第二次乘法结果高位加进位位C
MOVR2,A;所得第一次加法结果高位暂存到R2中
MOVA,R6
MOVB,R5
MULAB;第三次乘法
ADDA,R3;第三次乘法结果低位加R3
MOVMUL_1,A;第二次加法结果低位存到MUL_1(最终结果)
MOVR1,#00H;第二次加法高位进位值清0
MOVA,R2
ADDCA,B;第三次乘法结果高位加R2及进位位C
MOVR2,A;第二次加法结果高位暂存R2
JNCLAST;没有进位则跳转(R1=0)
MOVR1,#1;有进位,第二次加法高位进位值为1
LAST:
MOVA,R7
MOVB,R5
MULAB;第四次乘法
ADDA,R2;第四次乘法结果低位加R2
MOVMUL_2,A;第三次加法结果低位存到MUL_2(最终结果)
MOVA,B
ADDCA,R1;第四次乘法高位加第二次加法高位进位值R1
;及第三次加法低位进位位C
MOVMUL_3,A;第三次加法结果高位存到MUL_3中(最终结果)
RET
SDIV:
MOVR0,#00H
MOVR1,#00H;清0过渡单元
MOVR2,#24;因被除数有三个字节(24位),所以循环24次
SDIV0:
CLRC;清0进位位C
MOVA,ODIV_L;(ODIV_L)→A
RLCA;A中的值带进位位C左移1位
MOVODIV_L,A;(A)→ODIV_L,移位后存回
MOVA,ODIV_M
RLCA
MOVODIV_M,A
MOVA,ODIV_H
RLCA
MOVODIV_H,A;以上将被除数左移一位,最高位在进位位C中
MOVA,R0
RLCA
MOVR0,A;R0的值带进位左移后存回
MOVR6,A;备份R0的值在R6中
MOVA,R1
RLCA
MOVR1,A;R1的值带进位左移后存回
MOVR7,A;备份R1的值在R7中
;以上实现Z和X一起左移1位
;并把Z中的值备份了一份
CLRC
MOVA,R0
SUBBA,DIV_0
MOVR0,A
MOVA,R1
SUBBA,DIV_1
MOVR1,A;以上将Z减Y后差值写回Z中
JNCSDIV1;没有借位(够减)则跳转,用差值继续计算
MOVA,R6
MOVR0,A
MOVA,R7
MOVR1,A;有借位,不够减,用备份值取代差值,即不减
SDIV1:
CPLC;借位C取反即为商。
C为0,够减,商1
MOVA,R5
RLCA
MOVR5,A
MOVA,R4
RLCA
MOVR4,A
MOVA,R3
RLCA
MOVR3,A;以上将商移入R3、R4、R5中
DJNZR2,SDIV0;按R2中的值,循环24次
RET
END
实验2“跑马灯”实验
一实验目的
1了解发光二极管的使用方法
2熟悉串行、并行输出扩展接口的方法
3学习常用指令用法和简单程序编写技巧
二实验内容
1理解图4.3.1的电路原理和参考程序
2按图4.3.1连接电路,调试参考程序,单步执行每行指令,观察有关寄存器中值的变化,理解指令的功能和执行效果
三实验步骤
1先阅读课本,理解原理和程序
2按图接线,然后编译加载调试程序,观察实验现象,是否出现“跑马灯”
四实验结果
接好线,并运行程序后,8个灯依次循环闪亮,出现“跑马灯”,验证其功能。
五实验小结
理解I/O口的使用,以及发光二极管的使用和原理
附:
跑马灯子程序:
LIGHT-S跑马灯串行
LIGHTEQU60H;定义指示灯数据存放地址单元
SIOEQUP2.0;串行移位数据
SCLKEQUP2.1;串行移位时钟信号
SRCLKEQUP2.2;输出锁存信号
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSP,#30H;初始化堆栈指针
CLRSIO
CLRSCLK
CLRSRCLK
MOVLIGHT,#01H;初始化指示灯输出数据
NOP
MAIN:
LCALLFLYLED;调用指示灯循环点亮子程序
LCALLDELAY;延时子程序同参考例程一
AJMPMAIN;循环执行主程序
;******************************************************
;通过595循环点亮指示灯子程序
*****************************************************
FLYLED:
MOVA,LIGHT
CLRC
RLCA;A中最高位移到C
CPLC;因低电平点亮,故取反
MOVSIO,C;LIGHT中数据最高位送到SER输入端
SETBSCLK
NOP
CLRSCLK;产生一个移位脉冲
SETBSRCLK
NOP
CLRSRCLK;产生一个输出锁存脉冲
CJNEA,#0,FLYCON;A中不为0则继续
MOVA,#01H;A中为0,表明循环完一轮
;重新赋初值
FLYCON:
MOVLIGHT,A
RET
;**********************************************
;延时子程序
;**********************************************
DELAY:
MOVR7,#80H
DELY1:
MOVR6,#0FFH
DELY2:
DJNZR6,$;$代表当前行;;作用与DJNZR6,DELY2相同
DJNZR7,DELY1
LED-P跑马灯并行
LIGHTEQU60H;定义指示灯数据存放地址单元
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSP,#30H;初始化堆栈指针
;
CLRP1.0;初始化有关I/O口
MOVLIGHT,#01H;初始化指示灯数据
NOP
MAIN:
LCALLFLYLED;调用指示灯循环点亮子程序
LCALLDELAY;延时子程序
AJMPMAIN;死循环
;******************************************************
;通过374循环点亮指示灯子程序
;*****************************************************
FLYLED:
MOVA,LIGHT
CPLA;因为低电平点亮,故取反
MOVP0,A;LIGHT中数据送到374的输入端
;(因P1口与374输入端相连)
SETBP1.0
NOP
CLRP1.0;产生一个锁存脉冲
;将数据锁存到374中输出
MOVA,LIGHT
CLRC
RLCA;ACC中数据左移一位
;(高位丢到,低位补0)
CJNEA,#0,FLYCON;A中不为0则继续
MOVA,#01H;A中为0,循环完一轮
;重新赋初值
FLYCON:
MOVLIGHT,A
RET
;**********************************************
;延时子程序
;**********************************************
DELAY:
MOVR7,#80H
DELY1:
MOVR6,#0FFH
DELY2:
DJNZR6,$;$代表当前行
;与DJNZR6,DELY2相同
DJNZR7,DELY1
RET
END
实验3数码管显示功能的实现
一实验目的
1了解数码管显示器的特性和使用方法
2进一步熟悉常用指令和编程技巧
3熟悉单片机I/O口的使用方法
二实验内容
1对照图4.3.3和图4.3.4、图4.3.5,理解图4.3.3所示的电路原理
2读懂参考例程一和参考例程二
3分别验证参考例程一和参考例程二
4利用试验箱通用板上的电路模块,自行设计一套4位数码管显示器的并行动态显示电路
三实验步骤
1首先阅读课本,理解相关原理和程序运行
2调试示例程序,观察现象
3根据所学知识,编写一套4位数码管显示器的并行动态显示电路
四实验结果
1调试示例程序,结果都出现6位静态显示
2自行编写一套4位数码管显示器的并行动态显示电路
子程序:
MOVA,R0
MOVDPTR,#DISPD
MOVA,@A+DPTR
MOVP0,A
SETBP1.1
NOP
CLRP1.1
INCR0
LCALLDELAY
CJNER0,#0AH,DISP
MOVR0,#00H
NOP
RET
调试后,可以4位数码管显示器的并行动态显示电路
五实验总结
进一步了解I/O口的使用,掌握串行和并行的区别和使用,以及数码管的原理和使用
附:
参考程序
LED-S-P数码管显示功能的实现
(并行动态显示参考程序1)
D_DAT0EQU6AH
D_DAT1EQU6BH
D_DAT2EQU6CH
D_DAT3EQU6DH
D_DAT4EQU6EH
D_DAT5EQU6FH;定义显示数据存储单元
DATA_OEQUP0;定义显示数据输出口
PLED1EQUP2.0
PLED2EQUP2.1
PLED3EQUP2.2
PLED4EQUP2.3;以上定义四片574输出锁存信号
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSP,#30H;初始化堆栈指针
MOVD_DAT0,#0
MOVD_DAT1,#1
MOVD_DAT2,#2
MOVD_DAT3,#3
MOVD_DAT4,#4
MOVD_DAT5,#5;初始化显示数据
CLRPLED1
CLRPLED2
CLRPLED3
CLRPLED4
NOP
MAIN:
LCALLDISP;调用数码管循环点亮子程序
LOOP:
AJMPLOOP;循环执行主程序
;******************************************************
;通过574显示6位数字子程序
;*****************************************************
DISP:
MOVR0,#D_DAT0
MOVA,@R0;取需显示的数字
MOVDPTR,#DISPD;装载笔画编码表首地址
MOVCA,@A+DPTR;取需显示数字笔画代码
XRLA,#0FFH
MOVDATA_O,A;笔画代码送到P0口
SETBPLED1
NOP
CLRPLED1;产生一个锁存脉冲,锁存笔画代码
INCR0;R0增1指向下一个需显示数字
MOVA,@R0;取需显示的数字
MOVDPTR,#DISPD;装载笔画编码表首地址
MOVCA,@A+DPTR;取需显示数字笔画代码
XRLA,#0FFH
MOVDATA_O,A;笔画代码送到P0口
SETBPLED2
NOP
CLRPLED2;产生一个锁存脉冲,锁存笔画代码
INCR0;R0增1指向下一个需显示数字
MOVA,@R0;取需显示的数字
MOVDPTR,#DISPD;装载笔画编码表首地址
MOVCA,@A+DPTR;取需显示数字笔画代码
XRLA,#0FFH
MOVDATA_O,A;笔画代码送到P0口
SETBPLED3
NOP
CLRPLED3;产生一个锁存脉冲,锁存笔画代码
INCR0;R0增1指向下一个需显示数字
MOVA,@R0;取需显示的数字
MOVDPTR,#DISPD;装载笔画编码表首地址
MOVCA,@A+DPTR;取需显示数字笔画代码
XRLA,#0FFH
MOVDATA_O,A;笔画代码送到P0口
SETBPLED4
NOP
CLRPLED4;产生一个锁存脉冲,锁存笔画代码
RET
;数字笔画代码表
;0123456789熄
DISPD:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0
END
并行动态显示参考程序2
LIGHTEQU60H;定义指示灯数据存放地址单元
SIOEQUP2.0;串行移位数据
SCLKEQUP2.1;串行移位时钟信号
SRCLKEQUP2.2;输出锁存信号
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSP,#30H;初始化堆栈指针
CLRSIO
CLRSCLK
CLRSRCLK
MOVLIGHT,#01H;初始化指示灯输出数据
NOP
MAIN:
LCALLFLYLED;调用指示灯循环点亮子程序
LCALLDELAY;延时子程序同参考例程一
AJMPMAIN;循环执行主程序
;******************************************************
;通过595循环点亮指示灯子程序
;*****************************************************
FLYLED:
MOVA,LIGHT
CLRC
RLCA;A中最高位移到C
CPLC;因低电平点亮,故取反
MOVSIO,C;LIGHT中数据最高位送到SER输入端
SETBSCLK
NOP
CLRSCLK;产生一个移位脉冲
SETBSRCLK
NOP
CLRSRCLK;产生一个输出锁存脉冲
CJNEA,#0,FLYCON;A中不为0则继续
MOVA,#01H;A中为0,表明循环完一轮
;重新赋初值
FLYCON:
MOVLIGHT,A
RET
;**********************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华中科技大学 单片机 实验 报告 MCS51