北京工业大学8051单片机实验报告.docx

上传人:暗伤 文档编号:79805862 上传时间:2023-03-21 格式:DOCX 页数:18 大小:27.60KB
返回 下载 相关 举报
北京工业大学8051单片机实验报告.docx_第1页
第1页 / 共18页
北京工业大学8051单片机实验报告.docx_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《北京工业大学8051单片机实验报告.docx》由会员分享,可在线阅读,更多相关《北京工业大学8051单片机实验报告.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、8051 单片机实验报告专业:电子科学与技术姓名:学号:指导教师:第一单元 单片机程序调试环境使用及并行数据传送操作训练1-1 修改例程一的源程序:将 A 寄存器的初值改为 80H(正逻辑,数据位为1 表示发光二极管点亮),再对源程序进行简单修改,使程序运行后发光二极管点亮情况与修改前相同。$include(C8051F020.inc);C8051F02x 系列单片机信息头文件包含伪指令LCALLInit_Device;调用初始设置子程序MOVA,#080H;赋初始值并在发光二极管上显示该数值CPL AMOVP3,ALOOP:CALLDELAYCALLDELAYCALLDELAYCALLDEL

2、AYCALLDELAYRRA;A 寄存器内容右移1 位并送发光二极管显示MOVP3,AAJMPLOOP;无限循环DELAY:MOVR5,#0H;延时子程序D1:MOVR6,#0HDJNZR6,$DJNZR5,D1 RET$include(Init_Device.inc);初始设置子程序文件包含伪指令END将LED 向左循环移位点亮改为向右循环移位点亮。$include(C8051F020.inc);C8051F02x 系列单片机信息头文件包含伪指令LCALLInit_Device;调用初始设置子程序MOVA,#07FH;赋初始值并在发光二极管上显示该数值MOVP3,ALOOP:CALLDELA

3、YCALLDELAYCALLDELAYCALLDELAYCALLDELAYRLA;A 寄存器内容右移1 位并送发光二极管显示MOVP3,AAJMPLOOP;无限循环DELAY:MOVR5,#0H;延时子程序D1:MOVR6,#0HDJNZR6,$DJNZR5,D1RET$include(Init_Device.inc);初始设置子程序文件包含伪指令END加快LED 循环移位点亮的速度。(删除几个延迟指令!)$include(C8051F020.inc);C8051F02x 系列单片机信息头文件包含伪指令LCALLInit_Device;调用初始设置子程序MOVA,#07FH;赋初始值并在发光二

4、极管上显示该数值MOVP3,ALOOP:CALLDELAYCALLDELAYRRA;A 寄存器内容右移 1 位并送发光二极管显示MOVP3,AAJMPLOOP;无限循环DELAY:MOVR5,#0H;延时子程序D1:MOVR6,#0HDJNZR6,$DJNZR5,D1 RET$include(Init_Device.inc);初始设置子程序文件包含伪指令END1-2 将例程二 0-F 的循环显示改为 0-9 的循环显示。$include(C8051F020.inc) ORG0000HLJMPINIT TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H

5、DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EHINIT:LCALLInit_Device MOVR1,#00HMOVA,R1 MAIN:; 段码 0-7; 段码 8-F;操作数据初始值MOV DPTR,#TAB显示段码MOVCA,A+DPTR MOVP5ACALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAYCALLDELAY INCR1MOV A,R1CJNE A,#0AH,MAIN.显示范围(F) SJMPINIT DELAY:MOV R5,#0

6、H D1:MOV R6,#0H DJNZR6,$ DJNZR5,D1 RET$include(Init_Device.inc);读取与A 中数值对应的;段码送并行口 5 显示;操作数据(R1)增 1;检查操作数据是否大于;无限循环;延时子程序END实验 2.中断控制及定时器/计数器操作训练2-1 通过对例程 5 的程序进行修改和上机调试,改变原程序的功能。(1) 将KEY2,KEY4 的功能对调。(2) 每次停下再启动后,更改发光二极管点亮的循环方向。$include(C8051F020.inc);C8051F02x 单片机信息头文件包含伪指令ORG0000HLJMPINITIALORG001

7、3H;主程序入口LJMPSTAR;外中断 0 服务程序入口,开始键(STAR) ORG0003HLJMPSTOP;外中断 1 服务程序入口停止键(STOP) ORG0100HINITIAL: LCALL Init_Device;调用初始设置子程序 MOVP3,#0FFH;熄灭全部发光二极管MOVA,#0FFHMOVDPTR,#7F80HMOVXDPTR,A;清除数码管 2(NUM2)显示MOVA,#0FEH;点亮发光二极管的初始数据MOVR1,#1H;发光二极管点亮位置初值MOVIP,#04H;设置INT0(开始键STAR)为高优先级MOVTCON,#05H;外中断采用边沿触发SETBEX1;

8、INT1(停止键STOP)开中断SETBEA;开放中断LOOP:LOOP:CLREA;关闭中断RLAMOVP3,A;刷新发光二极管控制数据INCR1;发光二极管点亮位置计数值增 1SETBEA;开放中断LCALLDELAY1;延时LCALLDELAY1CJNER1,#8,LOOP ;发光二极管点亮位置计数值有效性检测MOVR1,#0H;发光二极管点亮位置计数值等于8 则回 0SJMPLOOP;无限次循环;停止键的中断服务程序STOP:PUSHACC;保护A 寄存器内容MOVA,R1;读取发光二极管点亮位置计数值MOVDPTR,#TABMOVCA,A+DPTR ;获取发光二极管点亮位置计数值的显

9、示段码MOVDPTR,#7F80HMOVXDPTR,A;发光二极管点亮位置计数值的显示数据送显示SETBEX1;INT0(启动键STAR)开中断JNZ$;等待重新启动条件-A=0MOVA,#0FFHMOVXDPTR,A;清除数码管 2(DS2)显示CLREX1;禁止INT0 中断(避免程序误动作)POPACC;恢复A 寄存器内容CLRIE0;清除INT1 中断标志(避免程序误动作)RETI;中断返回;启动键的中断服务程序 STAR:MOVA,#00H ;设置启动条件-A=0CLRIE1 RETI;清除INT0 中断标志(避免程序误动作);中断返回TAB:DB0C0H,0F9H,0A4H,0B0

10、H,099H;0-4 段码DB092H,082H,0F8H,080H;5-8 段码DELAY1:MOVR6,#0;延时子程序 D1:MOVR7,#0DJNZR7,$DJNZR6,D1 RET$include(Init_Device.inc);初始设置子程序文件包含伪指令2-2 修改例程 6,将计数范围由 0-F 扩展至 00-FF(使用定时器/计时器 0),并在 2 位数码管上用 10 进制数显示计数结果(00-99)。16 进制10 进制方法Hex/10:商=10 进制十位,余数=10 进制个位$include(C8051F020.inc)DP2EQU07F80HDP1EQU07F90H;增

11、加一个DP_LEQU30HDP_HEQU31HMAIN:LCALLInit_DeviceMOVTMOD,#00000110B;使计数器工作在模式 2MOVA,#0MOVDP_L,A;显示计数的低位MOVDP_H,A;显示计数高位CALLDISPLAYMOVTL0,#0;使TL0 的初值为 0SETBTR0;启用定时器 0LOOP:MOVA,TL0CJNEA,#100,L1;A 不等于 100 时,转到L1 显示MOVTL0,#0;当A 等于 100 时,TL0 清零MOVA,TL0L1:MOVB,#10DIVAB;将 16 进制数转化为 10 进制数MOVDP_L,BMOVB,#10DIVAB

12、MOVDP_H,B;将B 显示为高位CALLDISPLAYSJMPLOOP;循环LOOPDISPLAY:MOVA,DP_LCALLDECODEMOVDPTR,#DP1MOVXDPTR,AMOVA,DP_HCALLDECODEMOVDPTR,#DP2MOVXDPTR,ADECODE:MOVRET MOVP5,ADPTR,#TABMOVC RETA,A+DPTRTAB:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc) END实验三.

13、串行数据传送操作程序调试练习(1) 将发送 1,2,3,4 的 ASC 码改为发送A,B,C,D 的 ASC 码$include(C8051F020.inc)NUM2EQU 07F80H;NUM2 地址NUM3EQU 07F90H;NUM3 地址NUM4EQU 07FA0H;NUM4 地址NUM5EQU 07FB0H;NUM5 地址TIM_LEQU0FDH; T/C1 低字节计数值TIM_HEQU0FDH;T/C1 高字节计数值REC_BUF0EQU 32H;数据接收缓冲器 0REC_BUF1EQU 33H;数据接收缓冲器 1REC_BUF2EQU 34H;数据接收缓冲器 2FLAGBIT 0

14、1H;数据发送完成标志ORG0000HMAIN:LJMPORG LJMPlcallMAIN0023H RECEInit_Device;转主程序;转串行通信中断程序MOVA,#0FFHMOVP5,A;清除数码管NUM1 的显示MOVDPTR,#NUM2MOVXDPTR,A;清除数码管NUM2 的显示MOVDPTR,#NUM3MOVXDPTR,A;清除数码管NUM3 的显示MOVDPTR,#NUM4MOVXDPTR,A;清除数码管NUM4 的显示MOVDPTR,#NUM5MOVXDPTR,A;清除数码管NUM5 的显示MOVR6,#0;通信操作状态寄存器清除MOVSP,#40H;堆栈栈底设置MOV

15、TMOD,#00100000B;T/C1 方式 2MOVTH1,#TIM_H;T/C1 重装填值MOVTL1,#TIM_L;T/C1 计数值SETBTR1;启动T/C1MOVSCON0,#01010000B;串口方式 1SETBES;串口中断允许SETBEA;开中断LOOP:CALLKEYBOARD;调用案件状态分析子程序CJNEA,#0FFH,L0;按键状态发生变化转L0CLRFLAG;按键状态无变化,清除发送完成标志SJMPLOOP;L0: JBFLAG,LOOP;数据发送完成,返回主循环MOVR7,A;否则,键值暂存R7MOVA,#043H ;CMOVSBUF0,A;发送字符C 的 AS

16、CII 码值CALLDELAY;MOVA,#04FH;OMOVSBUF0,A;发送字符O 的 ASCII 码值CALLDELAY;MOVA,#04DH;MMOVSBUF0,A;发送字符M 的 ASCII 码值CALLDELAY;MOVA,#04BH;KMOVSBUF0,A;发送字符K 的 ASCII 码值CALLDELAY;MOVA,#30H;发送数字 0 的 ASCII 码值MOVSBUF0,ACALLDELAY;MOVA,R7;ADDA,#40H;生成键值的ASCII 码值MOVSBUF0,A;发送键值的ASCII 码值SETBFLAG;置位发送完成标志SJMPLOOP;中断服务程序REC

17、E:JNB TI,REC1;非发送转接收处理CLRTI;否则,清除发送中断标志RETI;中断返回REC1:PUSHACC;保护累加器AMOVA,SBUF0;读接收缓冲器CJNER6,#0,REC2;CJNEA,#43H,REC6;接收状态为 0,进行字符C 的过滤处理MOVR6,#1;接收状态改为 1SJMPREC6;REC2:CJNER6,#1,REC3;CJNEA,#4FH,REC5;接收状态为 1,进行字符O 的过滤处理MOV R6,#2 SJMPREC6;接收状态改为 2;REC3:CJNER6,#2,REC4;CJNEA,#4DH,REC5;接收状态为 2,进行字符M 的过滤处理MO

18、V R6,#3;接收状态改为 3MOV R5,#3;数据接收计数器设置为 3SJMPREC6;REC4:CJNER6,#3,REC6;PUSHACC;接收状态为 3,暂存接收的内容MOV A,#REC_BUF0 ADD A,R5MOV R0,A;生成接收数据存放缓冲器地址POP ACC;恢复接收数据至A 寄存器MOV R0,A;保存接收的数据DEC R5;接收数据计数器减 1CJNER5,#0,REC6;CALLDISPLAY REC5:MOV R6,#0 REC6:POPACCCLR RI;接收数据计数器减为 0,进行接收结果的显示;接收状态恢复为 0(就绪状态);恢复累加器A;清除接收中断

19、标志RETI;中断返回KEYBOARD:MOV A,P2;读按键状态输入端口RRARRARRC A;KEY1 有效键值移入位累加器CJCK1;键值无效转KEY2 键值的分析MOV A,#1;否则,KEY1 代码送A 寄存器SJMPK5K1:RRC A;KEY2 有效键值移入位累加器CJCK2;键值无效转KEY3 键值的分析MOV A,#2;否则,KEY2 代码送A 寄存器SJMPK5K2:RRC A;KEY3 有效键值移入位累加器CJCK3;键值无效转KEY4 键值的分析MOV A,#3;否则,KEY3 代码送A 寄存器SJMPK5K3:RRC A;KEY4 有效键值移入位累加器C JCK4;

20、键值无效转按键无效处理MOV A,#4;否则,KEY4 代码送A 寄存器SJMPK5K4:K5:MOV A,#0FFH;按键无效代码送A 寄存器RETDISPLAY:MOV A,REC_BUF1;读取接收的第 2 字节数据SWAPA;高、低 4 位交换ANL A,#0FH;分离高 4 位有效数值CALLDECODE;换码MOV DPTR,#NUM2MOVXDPTR,A; NUM2 显示第 2 字节数据高 4 位数值MOV A,REC_BUF1;读取接收的第 2 字节数据ANL A,#0FH;提取低 4 位有效数值CALLDECODE;换码MOV DPTR,#NUM3MOVXDPTR,A ; N

21、UM3 显示第 2 字节数据低 4 位数值MOV A,REC_BUF2;读取接收的第 3 字节数据SWAPA;高、低 4 位交换ANL A,#0FH;分离高 4 位有效数值CALLDECODE;换码MOV DPTR,#NUM4MOVXDPTR,A ; NUM4 显示第 3 字节数据高 4 位数值MOV A,REC_BUF2;读取接收的第 3 字节数据ANL A,#0FH;提取低 4 位有效数值CALLDECODE;换码MOV DPTR,#NUM5MOVX RETDPTR,A ; NUM5 显示第 3 字节数据低 4 位数值;换码程序DECODE: MOV DPTR,#TABMOVCA,A+DP

22、TRRET;延时程序DELAY:MOV R5,#80HD1:MOVR6,#0HDJNZR6,$TAB:DJNZ RETDBR5,D10C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc) END(2) 将第二字节和第三字节互换位置$include(C8051F020.inc)NUM2EQU07F80H;NUM2 地址NUM3EQU07F90H;NUM3 地址NUM4EQU07FA0H;NUM4 地址NUM5EQU07FB0H;NUM5 地

23、址TIM_LEQU0FDH; T/C1 低字节计数值TIM_HEQU0FDH;T/C1 高字节计数值REC_BUF0 REC_BUF1 REC_BUF2 FLAGEQU 32H EQU 33H EQU 34H BIT 01H;数据接收缓冲器 0;数据接收缓冲器 1;数据接收缓冲器 2;数据发送完成标志ORG0000HLJMPMAIN;转主程序ORG0023HLJMPRECE;转串行通信中断程序MAIN:lcallInit_DeviceMOV A,#0FFHMOV P5,A;清除数码管NUM1 的显示MOV DPTR,#NUM2MOVXDPTR,A;清除数码管NUM2 的显示MOV DPTR,#

24、NUM3MOVXDPTR,A;清除数码管NUM3 的显示MOV DPTR,#NUM4MOVXDPTR,A;清除数码管NUM4 的显示MOV DPTR,#NUM5MOVXDPTR,A;清除数码管NUM5 的显示MOV R6,#0 MOV SP,#30H;通信操作状态寄存器清除;堆栈栈底设置MOVTMOD,#00100000B;T/C1 方式 2MOVTH1,#TIM_H;T/C1 重装填值MOVTL1,#TIM_LSETBTR1;T/C1 计数值;启动T/C1MOVSCON0,#01010000B;串口方式 1SETBESSETBEA;串口中断允许;开中断LOOP:CALLKEYBOARD;调用

25、案件状态分析子程序CJNECLRA,#0FFH,L0FLAG;按键状态发生变化转L0;按键状态无变化,清除发送完成标志SJMPLOOP;L0: JBFLAG,LOOP;数据发送完成,返回主循环MOVR7,A;否则,键值暂存R7MOVA,#043H;CMOVSBUF0,A;发送字符C 的 ASCII 码值CALLDELAY;MOVA,#04FH;OMOVSBUF0,A;发送字符O 的 ASCII 码值CALLDELAY;MOVA,#04DH;MMOVSBUF0,A;发送字符M 的 ASCII 码值CALLDELAY;MOVA,#04BH;KMOVSBUF0,A;发送字符K 的 ASCII 码值C

26、ALLDELAY;MOVA,#30H;发送数字 0 的 ASCII 码值MOVSBUF0,ACALLDELAY;MOVA,R7;ADDA,#30H;生成键值的ASCII 码值MOVSBUF0,A;发送键值的ASCII 码值SETBFLAG;置位发送完成标志SJMPLOOP;中断服务程序RECE:JNB TI,REC1;非发送转接收处理CLRTI;否则,清除发送中断标志RETI;中断返回REC1:PUSHACC;保护累加器AMOV A,SBUF0;读接收缓冲器CJNE CJNER6,#0,REC2;A,#43H,REC6 ;接收状态为 0,进行字符C 的过滤处理MOV R6,#1 SJMPREC

27、6;接收状态改为 1;REC2:CJNER6,#1,REC3;CJNEA,#4FH,REC5 ;接收状态为 1,进行字符O 的过滤处理MOV R6,#2 SJMPREC6;接收状态改为 2;REC3:CJNER6,#2,REC4;CJNEA,#4DH,REC5 ;接收状态为 2,进行字符M 的过滤处理MOV R6,#3 MOV R5,#3 SJMPREC6;接收状态改为 3;数据接收计数器设置为 3;REC4:CJNER6,#3,REC6;PUSHACC;接收状态为 3,暂存接收的内容MOV A,#REC_BUF0 ADD A,R5MOV R0,A POP ACC MOV R0,A DEC R

28、5;生成接收数据存放缓冲器地址;恢复接收数据至A 寄存器;保存接收的数据;接收数据计数器减 1CJNE CALLR5,#0,REC6;DISPLAY;接收数据计数器减为 0,进行接收结果的显示REC5:MOV R6,#0;接收状态恢复为 0(就绪状态)REC6:POPACC;恢复累加器ACLR RI;清除接收中断标志RETI;中断返回KEYBOARD:MOV A,P2;读按键状态输入端口RRARRARRCA;KEY1 有效键值移入位累加器CJCK1;键值无效转KEY2 键值的分析MOVA,#1;否则,KEY1 代码送A 寄存器SJMPK5K1:RRCA;KEY2 有效键值移入位累加器CJCK2

29、;键值无效转KEY3 键值的分析MOVA,#2;否则,KEY2 代码送A 寄存器SJMPK5K2:RRCA;KEY3 有效键值移入位累加器CJCK3;键值无效转KEY4 键值的分析MOVA,#3;否则,KEY3 代码送A 寄存器SJMPK5K3:RRCA;KEY4 有效键值移入位累加器CJCK4;键值无效转按键无效处理MOVA,#4;否则,KEY4 代码送A 寄存器SJMPK5K4:MOVA,#0FFH;按键无效代码送A 寄存器K5:RETDISPLAY:MOV A,REC_BUF1;读取接收的第 2 字节数据SWAPA;高、低 4 位交换ANL A,#0FH;分离高 4 位有效数值CALLD

30、ECODE;换码MOV DPTR,#NUM4MOVXDPTR,A ; NUM2 显示第 2 字节数据高 4 位数值MOV A,REC_BUF1;读取接收的第 2 字节数据ANL A,#0FH;提取低 4 位有效数值CALLDECODE;换码MOV DPTR,#NUM5MOVXDPTR,A ; NUM3 显示第 2 字节数据低 4 位数值MOV A,REC_BUF2;读取接收的第 3 字节数据SWAPA;高、低 4 位交换ANL A,#0FH;分离高 4 位有效数值CALLDECODE;换码MOV DPTR,#NUM2MOVXDPTR,A ; NUM4 显示第 3 字节数据高 4 位数值MOV

31、A,REC_BUF2;读取接收的第 3 字节数据ANL A,#0FH;提取低 4 位有效数值CALLDECODE;换码MOV DPTR,#NUM3MOVX RETDPTR,A ; NUM5 显示第 3 字节数据低 4 位数值;换码程序DECODE: MOV DPTR,#TABMOVCA,A+DPTRRET;延时程序DELAY:MOV R5,#80HD1:MOVR6,#0HDJNZR6,$TAB:DJNZ RETDBR5,D10C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc) END

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁