北京工业大学8051单片机实验报告_第1页
北京工业大学8051单片机实验报告_第2页
北京工业大学8051单片机实验报告_第3页
北京工业大学8051单片机实验报告_第4页
北京工业大学8051单片机实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、L DELAY CALL DELAY CALL DELAY CALL DELAY RR A ;A寄存器内容右移1位并送发光二极管显示 MOV P3,A AJMP LOOP ;无限循环DELAY: MOV R5,#0H ;延时子程序D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET$include (Init_Device.inc);初始设置子程序文件包含伪指令 END将LED向左循环移位点亮改为向右循环移位点亮。 $include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令 LCALL Init_Device ;调用初始设置子

3、程序 MOV A,#07FH ;赋初始值并在发光二极管上显示该数值 MOV P3,ALOOP: CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY RL A ;A寄存器内容右移1位并送发光二极管显示 MOV P3,A AJMP LOOP ;无限循环DELAY: MOV R5,#0H ;延时子程序D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET$include (Init_Device.inc) ;初始设置子程序文件包含伪指令 END加快LED循环移位点亮的速度。(删除几个延迟指令!)$include (C8

4、051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令 LCALL Init_Device ;调用初始设置子程序 MOV A,#07FH ;赋初始值并在发光二极管上显示该数值 MOV P3,ALOOP: CALL DELAY CALL DELAY RR A ;A寄存器内容右移1位并送发光二极管显示 MOV P3,A AJMP LOOP ;无限循环DELAY: MOV R5,#0H ;延时子程序D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET$include (Init_Device.inc) ;初始设置子程序文件包含伪指令 END1-2将例程

5、二0-F的循环显示改为0-9的循环显示。$include (C8051F020.inc)ORG 0000HLJMP INITTAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H; 段码0-7DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH; 段码8-FINIT: LCALL Init_Device MOV R1,#00H;操作数据初始值MOV A,R1MAIN: MOV DPTR,#TAB;读取与A中数值对应的显示段码MOVC A,A+DPTRMOV P5A;段码送并行口5显示CALL DELAYCALL DELAY

6、CALL DELAYCALL DELAYCALL DELAY CALL DELAYCALL DELAY CALL DELAYCALL DELAY CALL DELAYINC R1 ;操作数据(R1)增1MOV A,R1CJNE A,#0AH,MAIN.;检查操作数据是否大于显示范围(F)SJMP INIT;无限循环DELAY: MOV R5,#0H;延时子程序D1: MOV R6,#0HDJNZ R6,$DJNZ R5,D1RET$include (Init_Device.inc) END 实验2.中断控制及定时器/计数器操作训练2-1通过对例程5的程序进行修改和上机调试,改变原程序的功能。(

7、1)将KEY2,KEY4的功能对调。(2)每次停下再启动后,更改发光二极管点亮的循环方向。$include (C8051F020.inc) ;C8051F02x单片机信息头文件包含伪指令 ORG 0000H LJMP INITIAL ;主程序入口 ORG 0013H LJMP STAR ;外中断0服务程序入口,开始键(STAR) ORG 0003H LJMP STOP ;外中断1服务程序入口 停止键(STOP) ORG 0100HINITIAL: LCALL Init_Device ;调用初始设置子程序 MOV P3,#0FFH ;熄灭全部发光二极管 MOV A,#0FFH MOV DPTR,

8、#7F80H MOVX DPTR,A ;清除数码管2(NUM2)显示 MOV A,#0FEH ;点亮发光二极管的初始数据 MOV R1,#1H ;发光二极管点亮位置初值 MOV IP,#04H ;设置INT0(开始键STAR)为高优先级 MOV TCON,#05H ;外中断采用边沿触发SETB EX1 ;INT1(停止键STOP)开中断 SETB EA ;开放中断LOOP: LOOP: CLR EA;关闭中断 RL A MOV P3,A;刷新发光二极管控制数据 INC R1;发光二极管点亮位置计数值增1 SETB EA;开放中断 LCALL DELAY1 ;延时 LCALL DELAY1 CJ

9、NE R1,#8,LOOP ;发光二极管点亮位置计数值有效性检测 MOV R1,#0H ;发光二极管点亮位置计数值等于8则回0 SJMP LOOP ;无限次循环;停止键的中断服务程序STOP: PUSH ACC;保护A寄存器内容 MOV A,R1;读取发光二极管点亮位置计数值 MOV DPTR,#TAB MOVC A,A+DPTR;获取发光二极管点亮位置计数值的显示段码 MOV DPTR,#7F80H MOVX DPTR,A;发光二极管点亮位置计数值的显示数据送显示 SETB EX1 ;INT0(启动键STAR)开中断 JNZ $;等待重新启动条件-A=0 MOV A,#0FFH MOVX D

10、PTR,A ;清除数码管2(DS2)显示 CLR EX1 ;禁止INT0中断(避免程序误动作) POP ACC ;恢复A寄存器内容 CLR IE0;清除INT1中断标志(避免程序误动作) RETI ;中断返回;启动键的中断服务程序STAR: MOV A,#00H;设置启动条件-A=0 CLR IE1;清除INT0中断标志(避免程序误动作) RETI;中断返回TAB: DB0C0H,0F9H,0A4H,0B0H,099H ;0-4段码 DB092H,082H,0F8H,080H ;5-8段码DELAY1: MOV R6,#0;延时子程序D1: MOV R7,#0 DJNZ R7,$ DJNZ R

11、6,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)DP2 EQU 07F80HDP1 EQU 07F90H ;增加一个DP_L EQU 30H DP_H EQU 31H MAIN: LCALL Init_Device MOV TMOD,#00000110B ;使计数器工作在模式2 MOV A,#0

12、 MOV DP_L,A ;显示计数的低位 MOV DP_H,A ;显示计数高位 CALL DISPLAY MOV TL0,#0 ;使TL0的初值为0 SETB TR0 ;启用定时器0LOOP: MOV A,TL0 CJNE A,#100,L1 ;A不等于100时,转到L1显示 MOV TL0,#0 ;当A等于100时,TL0清零 MOV A,TL0L1: MOV B,#10 DIV AB ;将16进制数转化为10进制数 MOV DP_L,B MOV B,#10 DIV AB MOV DP_H,B ;将B显示为高位 CALL DISPLAY SJMP LOOP ;循环LOOP DISPLAY:

13、MOV A,DP_L CALL DECODE MOV DPTR,#DP1 MOVX DPTR,A MOV A,DP_H CALL DECODE MOV DPTR,#DP2 MOVX DPTR,A MOV P5,A RET DECODE: MOV DPTR,#TAB MOVC A,A+DPTR RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH $include (Init_Device.inc) END 实验三.串行数据传送操作程序调试练习(1) 将发送1,2

14、,3,4的ASC码改为发送A,B,C,D的ASC码 $include (C8051F020.inc)NUM2EQU07F80H;NUM2地址NUM3EQU07F90H;NUM3地址NUM4EQU07FA0H ;NUM4地址NUM5EQU07FB0H;NUM5地址TIM_LEQU 0FDH; T/C1低字节计数值TIM_HEQU 0FDH ;T/C1高字节计数值REC_BUF0EQU32H ;数据接收缓冲器0REC_BUF1EQU33H ;数据接收缓冲器1REC_BUF2EQU34H ;数据接收缓冲器2FLAGBIT01H ;数据发送完成标志ORG 0000HLJMP MAIN ;转主程序ORG

15、 0023HLJMP RECE ;转串行通信中断程序MAIN: lcall Init_DeviceMOVA,#0FFHMOVP5,A ;清除数码管NUM1的显示MOVDPTR,#NUM2MOVXDPTR,A ;清除数码管NUM2的显示MOVDPTR,#NUM3MOVXDPTR,A ;清除数码管NUM3的显示MOVDPTR,#NUM4MOVXDPTR,A ;清除数码管NUM4的显示MOVDPTR,#NUM5MOVXDPTR,A ;清除数码管NUM5的显示MOVR6,#0 ;通信操作状态寄存器清除MOVSP,#40H ;堆栈栈底设置MOV TMOD,#00100000B ;T/C1方式2 MOV

16、TH1,#TIM_H ;T/C1重装填值MOV TL1,#TIM_L ;T/C1计数值SETB TR1 ;启动T/C1 MOV SCON0,#01010000B ;串口方式1SETB ES ;串口中断允许SETB EA ;开中断LOOP:CALLKEYBOARD ;调用案件状态分析子程序CJNEA,#0FFH,L0 ;按键状态发生变化转L0CLRFLAG ;按键状态无变化,清除发送完成标志SJMPLOOP ; L0:JBFLAG,LOOP ;数据发送完成,返回主循环MOVR7,A ;否则,键值暂存R7MOVA,#043H;CMOVSBUF0,A ;发送字符C的ASCII码值CALLDELAY

17、;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 ;中断服务程序RECE: JNBTI,REC1

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

19、3 ;接收状态改为3MOVR5,#3 ;数据接收计数器设置为3SJMPREC6 ;REC4:CJNER6,#3,REC6 ; PUSHACC ;接收状态为3,暂存接收的内容MOVA,#REC_BUF0ADDA,R5MOVR0,A ;生成接收数据存放缓冲器地址POPACC ;恢复接收数据至A寄存器MOVR0,A ;保存接收的数据DECR5 ;接收数据计数器减1CJNER5,#0,REC6 ;CALLDISPLAY ;接收数据计数器减为0,进行接收结果的显示REC5:MOVR6,#0 ;接收状态恢复为0(就绪状态)REC6:POP ACC ;恢复累加器A CLRRI ;清除接收中断标志RETI ;

20、中断返回 KEYBOARD:MOVA,P2 ;读按键状态输入端口RRARRARRCA ;KEY1有效键值移入位累加器CJCK1 ;键值无效转KEY2键值的分析MOVA,#1 ;否则,KEY1代码送A寄存器SJMPK5K1:RRCA ;KEY2有效键值移入位累加器CJCK2 ;键值无效转KEY3键值的分析MOVA,#2 ;否则,KEY2代码送A寄存器SJMPK5K2:RRCA ;KEY3有效键值移入位累加器CJCK3 ;键值无效转KEY4键值的分析MOVA,#3 ;否则,KEY3代码送A寄存器SJMPK5K3:RRCA ;KEY4有效键值移入位累加器CJCK4 ;键值无效转按键无效处理MOVA,

21、#4 ;否则,KEY4代码送A寄存器SJMPK5K4:MOVA,#0FFH ;按键无效代码送A寄存器K5:RETDISPLAY:MOVA,REC_BUF1;读取接收的第2字节数据 SWAPA ;高、低4位交换ANLA,#0FH ;分离高4位有效数值CALLDECODE ;换码MOVDPTR,#NUM2MOVXDPTR,A ; NUM2显示第2字节数据高4位数值MOVA,REC_BUF1 ;读取接收的第2字节数据ANLA,#0FH;提取低4位有效数值CALLDECODE;换码MOVDPTR,#NUM3MOVXDPTR,A; NUM3显示第2字节数据低4位数值MOVA,REC_BUF2;读取接收的

22、第3字节数据SWAPA;高、低4位交换ANLA,#0FH;分离高4位有效数值CALLDECODE;换码MOVDPTR,#NUM4MOVXDPTR,A; NUM4显示第3字节数据高4位数值MOVA,REC_BUF2;读取接收的第3字节数据ANLA,#0FH;提取低4位有效数值CALLDECODE;换码MOVDPTR,#NUM5MOVXDPTR,A; NUM5显示第3字节数据低4位数值RET;换码程序DECODE:MOVDPTR,#TABMOVCA,A+DPTRRET ;延时程序DELAY:MOVR5,#80HD1:MOVR6,#0HDJNZR6,$DJNZR5,D1RETTAB:DB 0C0H,

23、0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc)END (2) 将第二字节和第三字节互换位置 $include (C8051F020.inc)NUM2EQU07F80H;NUM2地址NUM3EQU07F90H;NUM3地址NUM4EQU07FA0H ;NUM4地址NUM5EQU07FB0H;NUM5地址TIM_LEQU 0FDH; T/C1低字节计数值TIM_HEQU 0FDH ;T/C1高字节计数值REC_BUF0EQU32H;数据接收缓

24、冲器0REC_BUF1EQU33H;数据接收缓冲器1REC_BUF2EQU34H;数据接收缓冲器2FLAGBIT01H;数据发送完成标志ORG 0000HLJMP MAIN ;转主程序ORG 0023HLJMP RECE ;转串行通信中断程序MAIN: lcall Init_DeviceMOVA,#0FFHMOVP5,A;清除数码管NUM1的显示MOVDPTR,#NUM2MOVXDPTR,A;清除数码管NUM2的显示MOVDPTR,#NUM3MOVXDPTR,A;清除数码管NUM3的显示MOVDPTR,#NUM4MOVXDPTR,A;清除数码管NUM4的显示MOVDPTR,#NUM5MOVXD

25、PTR,A;清除数码管NUM5的显示MOVR6,#0;通信操作状态寄存器清除MOVSP,#30H ;堆栈栈底设置MOV TMOD,#00100000B ;T/C1方式2 MOV TH1,#TIM_H ;T/C1重装填值MOV TL1,#TIM_L ;T/C1计数值SETB TR1 ;启动T/C1 MOV SCON0,#01010000B ;串口方式1SETB ES ;串口中断允许SETB EA ;开中断LOOP:CALLKEYBOARD ;调用案件状态分析子程序CJNEA,#0FFH,L0 ;按键状态发生变化转L0CLRFLAG ;按键状态无变化,清除发送完成标志SJMPLOOP ; L0:J

26、BFLAG,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码值CALLDELAY ;MOVA,#30H ;发送数字0的ASCII码值MOVSBUF0,ACALLDELAY ;MOVA,R7 ;ADDA,#30

27、H ;生成键值的ASCII码值MOVSBUF0,A ;发送键值的ASCII码值SETBFLAG;置位发送完成标志SJMPLOOP ;中断服务程序RECE: JNBTI,REC1 ;非发送转接收处理CLRTI ;否则,清除发送中断标志 RETI ;中断返回REC1: PUSH ACC ;保护累加器AMOVA,SBUF0 ;读接收缓冲器 CJNER6,#0,REC2;CJNEA,#43H,REC6;接收状态为0,进行字符C的过滤处理MOVR6,#1 ;接收状态改为1SJMPREC6;REC2:CJNER6,#1,REC3;CJNEA,#4FH,REC5;接收状态为1,进行字符O的过滤处理MOVR6

28、,#2 ;接收状态改为2SJMPREC6;REC3:CJNER6,#2,REC4;CJNEA,#4DH,REC5;接收状态为2,进行字符M的过滤处理MOVR6,#3 ;接收状态改为3MOVR5,#3 ;数据接收计数器设置为3SJMPREC6;REC4:CJNER6,#3,REC6; PUSHACC ;接收状态为3,暂存接收的内容MOVA,#REC_BUF0ADDA,R5MOVR0,A ;生成接收数据存放缓冲器地址POPACC ;恢复接收数据至A寄存器MOVR0,A ;保存接收的数据DECR5 ;接收数据计数器减1CJNER5,#0,REC6;CALLDISPLAY ;接收数据计数器减为0,进行接收结果的显示REC5:MOVR6,#0;接收状态恢复为0(就绪状态)REC6:POP ACC ;恢复累加器A CLRRI ;清除接收中断标志RETI ;中断返回 KEYBOARD:MOVA,P2;读按键状态输入端口RRARRARRCA ;KEY1有效键值移入位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论