北工大8051单片机实验报告Word文档下载推荐.docx
- 文档编号:17837482
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:24
- 大小:26.70KB
北工大8051单片机实验报告Word文档下载推荐.docx
《北工大8051单片机实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北工大8051单片机实验报告Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
A寄存器内容右移1位并送发光二极管显示
AJMP
LOOP
无限循环
DELAY:
R5,#0H
延时子程序D1:
MOV
R6,#0H
DJNZ
R6,$
R5,D1
RET
$include
(Init_Device.inc)
初始设置子程序文件包含伪指令
END
(2)修改后的源程序:
A,#07FH
RL
A寄存器内容左移1位并送发光二极管显示
(3)修改后的源程序:
CALLDELAY;
删除部分延时指令
1.2修改后的源程序:
(C8051F020.inc)
C8051F02x系列单片机信息头文件包含伪指令
ORG
0000H
LJMP
INIT
TAB:
DB
0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H
段码0-7
080H,090H,088H,083H,0C6H,0A1H,086H,08EH
段码8-F
INIT:
LCALL
Init_Device
调试初始设置子程序
INIT1:
R1,#00H
操作数据初始值
MOV
A,R1
MAIN:
DPTR,#TAB
读取与A中数值对应的显示段码
MOVC
A,@A+DPTR
P5,A
段码送并行口5显示
CALL
DELAY
DELAY
INC
R1
操作数据(R1)增1
A,R1
CJNE
A,#0AH,MAIN
检查操作数据是否大于显示范围(9)
SJMP
无限循环
R5,#0H
延时子程序
D1:
MOV
R6,$
(Init_Device.inc)
1.4实验总结与心得体会
第一次上机实验,比较简单,程序段也很短比较容易读懂。
第一题的第一问,原程序位07FH,即01111111,修改后为80H,即10000000,显然是由各位取反可以得到,因此在初值修改后加了一句CPLA对A地址数据取反就解决问题了;
第二问,原程序为左循环灯,在RR为右移显示,因此改为RL左移显示,走马灯就可以右移循环了;
第三问,DELAY延时程序控制走马灯循环速度,故删除部分延时程序即可。
第二题,在检查操作数是否超过范围时,原程序范围控制在0-F,10H为0FH进位后结果,所以0-9时应为0AH。
第一次实验都是在考察对语句的理解,平时多读一些程序比较快的做出来。
第二单元中断控制及定时器/计数器操作训练
2
3
3.1通过对例程5法人程序进行修改和上机调试,改变原程序的功能。
(1)将KEY2、KEY4的功能对调。
(2)每次停下再启动以后,更改发光二极管点亮的循环方向。
3.2修改例程6,将计数范围由0-F扩展至00-FF(使用定时器/计时器0),并在2位数码管上用10进制数显示计数结果(00-99)。
16进制→10进制方法
Hex/10:
商=10进制十位,余数=10进制个位
3.3实验步骤
2.1
$include(C8051F020.inc);
ORG0000H
LJMPINITIAL;
主程序入口
ORG0013H
LJMPSTAR;
外中断0服务程序入口,开始键(STAR)
ORG0003H
LJMPSTOP;
外中断1服务程序入口停止键(STOP)
ORG0100H
INITIAL:
LCALLInit_Device;
调用初始设置子程序
MOVP3,#0FFH;
熄灭全部发光二极管
MOVA,#0FFH
MOVDPTR,#7F80H
MOVX@DPTR,A;
清除数码管2(NUM2)显示
MOVA,#0FEH;
点亮发光二极管的初始数据
MOVR1,#1H;
发光二极管点亮位置初值
MOVIP,#04H;
设置INT0为高优先级
MOVTCON,#05H;
外中断采用边沿触发
SETBEX0;
INT0开中断
SETBEA;
开放中断
LOOP:
CLREA;
关闭中断
RLA
MOVP3,A;
刷新发光二极管控制数据
INCR1;
发光二极管点亮位置计数值增1
SETBEA;
LCALLDELAY1;
延时
LCALLDELAY1
LCALLDELAY1
CJNER1,#8,LOOP;
发光二极管点亮位置计数值有效性检测
MOVR1,#0H;
发光二极管点亮位置计数值等于8则回0
SJMPLOOP;
无限次循环
;
停止键的中断服务程序
STOP:
PUSHACC;
保护A寄存器内容
MOVA,R1;
读取发光二极管点亮位置计数值
MOVDPTR,#TAB
MOVCA,@A+DPTR;
获取发光二极管点亮位置计数值的显示段码
MOVX@DPTR,A;
发光二极管点亮位置计数值的显示数据送显示
SETBEX1;
INT1开中断
JNZ$;
等待重新启动条件--A=0
MOVA,#0FFH
MOVX@DPTR,A;
清除数码管2(NUM2)显示
CLREX1;
禁止INT1中断(避免程序误动作)
POPACC;
恢复A寄存器内容
CLRIE0;
清除INT0中断标志(避免程序误动作)
RETI;
中断返回
启动键的中断服务程序
STAR:
MOVA,#00H;
设置启动条件--A=0
CLRIE1;
清除INT1中断标志(避免程序误动作)
RETI;
中断返回
DB0C0H,0F9H,0A4H,0B0H,099H;
0--4段码
DB092H,082H,0F8H,080H;
5--8段码
DELAY1:
MOVR6,#0;
延时子程序
MOVR7,#0
DJNZR7,$
DJNZR6,D1
RET
$include(Init_Device.inc);
初始设置子程序文件包含伪指令
END
$include(C8051F020.inc);
LJMPSTAR;
MOVR4,#0F0H;
转换标志
MOVIP,#01H;
设置INT0(开始键STAR)为高优先级
SETBEX1;
INT1(停止键STOP)开中断
CJNER4,#0F0H,LOOP1;
判断是否转向
RLA
CJNER4,#0F0H,LOOP1;
判断是否转向
CJNER4,#0F0H,LOOP1;
INCR1;
发光二极管点亮位置计数值增1
发光二极管点亮位置计;
数值有效性检测
MOVR1,#0H;
LOOP1:
CLREA;
CJNER4,#0FH,LOOP;
RRA
CJNER4,#0FH,LOOP;
刷新发光二极管控制数据减
DECR1;
发光二极管点亮位置计数值1
判断是否转向
CJNER1,#0,LOOP;
MOVR1,#8H;
发光二极管点亮位置计数值等于0则回8
SJMPLOOP
MOVA,R1;
MOVCA,@A+DPTR;
MOVX@DPTR,A;
SETBEX0;
INT0(启动键STAR)开中断
JNZ$;
CLREX0;
禁止INT0中断(避免程序误动作)
CLRIE1;
清除INT1(停止键STOP)中断标志(避免程序误动作)
PUSHACC
MOVA,R4
CPLA
MOVR4,A
POPACC
CLRIE0;
清除INT0(启动键STOP)中断标志(避免程序误动作)
DB092H,082H,0F8H,080H;
2.2修改后的源程序
$include(C8051F020.inc);
DP2EQU07F80H
DP1
EQU
07F90H
增加一个
DP_LEQU30H;
低位数值暂存器
DP_HEQU31H;
高位数值暂存器
LCALLInit_Device;
MOVTMOD,#00000110B;
C/T0工作于方式2
MOVA,#0;
显示初值为0
MOVDP_L,A
MOVDP_H,A
CALLDISPLAY;
调用显示子程序显示初值0
MOVTL0,#0;
C/T0置初值0
SETBTR0;
启动计数器0
MOVA,TL0;
读计数器0的计数值
CJNEA,#10H,L1;
如果A中不为16转L1
计数器0清0
MOVA,TL0
L1:
MOVB,#0AH;
在NUM2显示计数器0的计数值
DIVAB
MOVDP_L,B
MOVDP_H,A
CALLDISPLAY;
调用显示子程序显示计数值
SJMPLOOP;
显示子程序
DISPLAY:
MOVA,DP_L;
读低位显示值
CALLDECODE;
调用换码子程序
MOVDPTR,#DP2;
显示段码送NUM2
MOVX@DPTR,A
MOVA,DP_H;
读高位显示值
MOVP5,A;
显示段码送NUM1
RET
换码子程序
DECODE:
MOVDPTR,#TAB
MOVCA,@A+DPTR
RET
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H;
显示段码0-7
DB080H,090H,088H,083H,0C6H,0A1H,086H,08EH;
显示段码8-F
$include(Init_Device.inc);
初始设置子程序文件包含伪指令
END
3.4实验总结与心得体会
相比第一次实验,这次的程序相对长了一些,而且比较难懂。
有不少要上网找一些答案才能做出来。
第一题第一问,将两个键位对调,实际上是将INT0和INT1功能对调,因此主要在各中断控制的代码上进行修改;
第二问,每次将循环顺序改变,意味着每次停下后要改变一次循环顺序,因此添加了一个比较和反向循环的程序段,就解决了。
第二题,第一个难点是将一位显示改为两位显示,意味着要添加一个数码管显示;
第二个难点是16进制改为10进制,在指导书上有提示用DIV字码操作,具体要看课本上具体的使用方法。
第三单元串行数据传送操作训练
4
4.1通过对例程8的程序进行修改和上机调试,改变原程序的功能。
(1)将发送1、2、3、4的ASCⅡ码改为发送A、B、C、D的ASCⅡ码。
(2)将接收的第2、第3字节数据的显示位置交换。
4.2实验步骤
3.1
NUM2EQU07F80H;
NUM2地址
NUM3EQU07F90H;
NUM3地址
NUM4EQU07FA0H;
NUM4地址
NUM5EQU07FB0H;
NUM5地址
TIM_LEQU0FDH;
T/C1低字节计数值
TIM_HEQU0FDH;
T/C1高字节计数值
REC_BUF0EQU32H;
数据接收缓冲器0
REC_BUF1EQU33H;
数据接收缓冲器1
REC_BUF2EQU34H;
数据接收缓冲器2
FLAGBIT01H;
数据发送完成标志
ORG0000H
LJMPMAIN;
转主程序
ORG0023H
LJMPRECE;
转串行通信中断程序
;
主程序
lcallInit_Device;
MOVA,#0FFH
MOVP5,A
MOVDPTR,#NUM2
MOVX@DPTR,A;
清除数码管NUM1的显示
MOVDPTR,#NUM3
清除数码管NUM2的显示
MOVDPTR,#NUM4
清除数码管NUM3的显示
MOVDPTR,#NUM5
清除数码管NUM4的显示
MOVR6,#0;
通信操作状态寄存器清除
MOVSP,#30H;
堆栈栈底设置
MOVTMOD,#00100000B;
T/C1方式2
MOVTH1,#TIM_H;
T/C1重装填值
MOVTL1,#TIM_L;
T/C1计数值
SETBTR1;
启动T/C1
MOVSCON0,#01010000B;
串口方式1
SETBES;
串口中断
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北工大 8051 单片机 实验 报告