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

下载本文档

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

文档简介

1、8051单片机实验报告专业:电子科学与技术姓名:学号: 120231指导教师:金冬月第一单元单片机程序调试环境使用及弁行数据传送操作训练1-1修改例程一的源程序:将A寄存器的初值改为 80H (正逻辑,数据位为1表示发光二极管点亮)源程序进行简单修改,使程序运行后发光二极管点亮情况与修改前相同。$include (C8051F020.inc);C8051F02x伪指令LCALL Init_Device MOV A,#080HCPL AMOV P3,ALOOP: CALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYRR AMOV P3,AAJMP

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

3、 DELAYCALL DELAYRL AMOV P3,AAJMP LOOP ;C8051F02x系列单片机信息头文件包含调用初始设置子程序赋初始值并在发光二极管上显示该数值;A寄存器内容右移1位并送发光二极管显示无限循环延时子程序DELAY: MOV R5,#0H5;初始设置子程序文件包含伪指令(删除几个延迟指令!);C8051F02x系列单片机信息头文件包调用初始设置子程序赋初始值并在发光二极管上显示该数值;A 寄存器内容右移1位并送发光二极管无限循环;延时子程序;初始设置子程序文件包含伪指令0-9的循环显示。;段码0-7;段码8-F;操作数据初始值D1:MOVR6,#0HDJNZ R6,$

4、 DJNZ R5,D1 RET $include (Init_Device.inc)END加快LED循环移位点亮的速度。$include (C8051F020.inc) 含伪指令LCALL Init_Device;MOV A,#07FH;MOV P3,A LOOP: CALL DELAY CALL DELAY RRA显示 MOV P3,A AJMP LOOP ;DELAY: MOV R5,#0H D1:MOV R6,#0HDJNZ R6,$ DJNZ R5,D1 RET $include (Init_Device.inc)END1-2将例程二0-F的循环显示改为$include (C8051F

5、020.inc)ORG 0000HLJMP INITTAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EHINIT: LCALL Init_DeviceMOV R1,#00HMOV A,R1MAIN:MOV DPTR,#TAB显示段码;读取与A中数值对应的MOVC A,A+DPTRMOV P5ACALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYC

6、ALL DELAYINC R1MOV A,R1CJNE A, #0AH MAIN.显示范围(F)SJMP INITDELAY:MOV R5,#0HD1:MOV R6,#0HDJNZ R6,$DJNZ R5,D1RET$include (Init_Device.inc)END;段码送并行口 5显示;操作数据(R1)增1;检查操作数据是否大于;无限循环;延时子程序实验2.中断控制及定时器/计数器操作训练2-1通过对例程5的程序进行修改和上机调试,改变原程序的功能(1)将KEY2 KEY4的功能对调。(2)每次停下再启动后,更改发光二极管点亮的循环方向。$include (C8051F020.inc

7、)ORG 0000HLJMP INITIALORG 0013HLJMP STARORG 0003HLJMP STOP;C8051F02x单片机信息头文件包含伪指令;主程序入口外中断0服务程序入口,开始键(STAR外中断1服务程序入口停止键(STOPORG 0100HINITIAL: LCALL Init_Device调用初始设置子程序MOV P3,#0FFH熄灭全部发光二极管MOV A,#0FFHMOVDPTR,#7F80HMOVX DPTR,A ;清除数码管2 ( NUM2显示MOV A,#0FEH点亮发光二极管的初始数据MOV R1,#1H发光二极管点亮位置初值MOVIP,#04H设置IN

8、T0 (开始键STAR为高优先级MOV TCON,#05H ;外中断采用边沿触发SETB EX1;INT1 (停止键STOP开中断;开放中断LOOP:;关闭中断SETB EALOOP: CLR EARLAMOV P3,AINCR1SETB EA;刷新发光二极管控制数据;发光二极管点亮位置计数值增1;开放中断LCALL DELAY1 ; 延时LCALL DELAY1CJNE R1,#8,LOOP ;发光二极管点亮位置计数值有效性检测MOV R1,#0H;发光二极管点亮位置计数值等于8则回0SJMP LOOP ;无限次循环;停止键的中断服务程序STOP: PUSH ACC;保护A寄存器内容MOV

9、A,R1;读取发光二极管点亮位置计数值MOV DPTR,#TABMOVC A,A+DPTR ;获取发光二极管点亮位置计数值的显示段码MOV DPTR,#7F80HMOVX DPTR,A;发光二极管点亮位置计数值的显示数据送显示SETB EX1;INT0 (启动键 STAR开中断JNZ$;等待重新启动条件-A=0MOV A,#0FFHMOVX DPTR,ACLR EX1POP ACCCLR IE0;清除数码管2 (DS2显示;禁止INT0中断(避免程序误动作);恢复A寄存器内容;清除INT1中断标志(避免程序误动作)RETI;中断返回;启动键的中断服务程序STAR: MOV A,#00H ;设置

10、启动条件-A=0CLR IE1;清除INT0中断标志(避免程序误动作)RETI;中断返回TAB:DB0C0H,0F9H,0A4H,0B0H,099H;0-4 段码DB 092H,082H,0F8H,080H;5-8 段码DELAY1: MOV R6,#0;延时子程序D1:MOV R7,#0DJNZ R7,$DJNZ R6,D1RET初始设置子程序文件包含伪指令$include (Init_Device.inc);2-2修改例程6,将计数范围由0-F扩展至00-FF (使用定时器/计时器0),并 在2位数码管上用10进制数显示计数结果(00-99) 。 16进制一 10进制方法 Hex/10:商

11、=10进制十位,余数=10进制个位$include (C8051F020.inc)DP2EQU07F80HDP1EQU07F90HDP_LEQU30HDP_HEQU31HMAIN:LCALL Init_DeviceMOV TMOD,#00000110BMOV A,#0MOV DP_L,AMOV DP_H,ACALL DISPLAYMOV TL0,#0SETB TR0LOOP:MOV A,TL0CJNE A,#100,L1MOV TL0,#0MOV A,TL0L1:MOV B,#10DIV ABMOV DP_L,BMOV B,#10DIV ABMOV DP_H,BCALL DISPLAYSJMP

12、 LOOPDISPLAY: MOV A,DP_L;使计数器工作在模式 2;显示计数的低位;显示计数高位;使TL0的初值为0;启用定时器0;A不等于100时,转到L1显示;当A等于100时,TL0清零;将16进制数车专化为10进制数;将B显示为高位;循环LOOPCALL DECODEMOV DPTR,#DP1MOVX DPTR,AMOV A,DP_HCALL DECODEMOV DPTR,#DP2MOVX DPTR,AMOV P5,ARETDECODE: MOV DPTR,#TABMOVC A,A+DPTRRETTAB:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0

13、F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc)END实验三.串行数据传送操作程序调试练习(1) 将发送1,2,3,4 的AS加改为发送 A,B,C,D的ASC $include (C8051F020.inc)NUM2EQU 07F80H;NUM2地址NUM3EQU 07F90H;NUM3地址NUM4EQU 07FA0H;NUM4 地址NUM5EQU 07FB0H;NUM5地址TIM_LEQU0FDH;I/C1低字节计数值TIM_HEQU0FDH;I/C1高字节计数值REC_BUF0EQU 32H;数

14、据接收缓冲器0REC_BUF1EQU 33H;数据接收缓冲器1REC_BUF2EQU 34H;数据接收缓冲器2FLAGBIT 01H;数据发送完成标志ORG0000HLJMPMAIN;转主程序ORG0023HLJMPRECE;转串行通信中断程序MAIN: IcallInit_DeviceMOV A,#0FFHMOV P5,A;MOV DPTR,#NUM2MOVX DPTR,A;MOV DPTR,#NUM3MOVX DPTR,A;MOV DPTR,#NUM4MOVX DPTR,A;MOV DPTR,#NUM5MOVX DPTR,A;MOV R6,#0;MOV SP,#40HMOV TMOD,#0

15、0100000BMOV TH1,#TIM_H ;T/C1MOV TL1,#TIM_LSETB TR1MOV SCON0,#01010000BSETB ESSETB EALOOP: CALL KEYBOARDCJNEA,#0FFH,L0;CLR FLAG;SJMPLOOP;L0: JB FLAG,LOOP;MOV R7,A;清除数码管NUM1的显示清除数码管NUM2勺显示清除数码管NUM3勺显示清除数码管NUM4勺显示清除数码管NUM5勺显示通信操作状态寄存器清除;堆栈栈底设置;T/C1方式2重装填值;T/C1计数值;启动T/C1;串口方式1;串口中断允许;开中断;调用案件状态分析子程序按键状态

16、发生变化转 L0按键状态无变化,清除发送完成标志数据发送完成,返回主循环否则,键值暂存R7MOV A,#043H ;CSJMP REC6生成键值的ASCII码值发送键值的ASCII码值置位发送完成标志中断服务程序非发送转接收处理否则,清除发送中断标志;中断返回;保护累加器A读接收缓冲器接收状态为0,进行字符C的过滤处理接收状态改为1MOV SBUF0,A;CALL DELAYMOV A,#04FH;OMOV SBUF0,A;CALL DELAYMOV A,#04DH;MMOV SBUF0,A;CALL DELAYMOV A,#04BH;KMOV SBUF0,A;CALL DELAYMOV A,

17、#30H;MOV SBUF0,ACALL DELAY;MOV A,R7ADD A,#40H;MOV SBUF0,A;SETB FLAGSJMP LOOP;RECE: JNB TI,REC1;CLR TI;RETIREC1: PUSH ACCMOV A,SBUF0;CJNE R6,#0,REC2CJNE A,#43H,REC6;MOV R6,#1;发送字符C的ASCII码值发送字符O的ASCII码值发送字符M的ASCII码值发送字符K的ASCII码值发送数字0的ASCII码值REC2: CJNE R6,#1,REC3CJNE A,#4FH,REC5;接收状态为1 ,进行字符O的过滤处理MOV R

18、6,#2;接收状态改为2SJMP REC6REC3: CJNE R6,#2,REC4CJNE A,#4DH,REC5;接收状态为2,进行字符M的过滤处理MOV R6,#3;接收状态改为3MOV R5,#3;数据接收计数器设置为3SJMP REC6REC4: CJNE R6,#3,REC6PUSH ACC;接收状态为3,暂存接收的内容MOV A,#REC_BUF0ADD A,R5MOV R0,A;生成接收数据存放缓冲器地址POP ACC;恢复接收数据至A寄存器MOV R0,A;保存接收的数据DEC R5;接收数据计数器减1CJNE R5,#0,REC6CALL DISPLAY;接收数据计数器减为

19、0,进行接收结果的显示REC5: MOV R6,#0;接收状态恢复为0 (就绪状态)REC6: POPACC;恢复累加器ACLR RI;清除接收中断标志RETI;中断返回KEYBOARD: MOV A,P2;读按键状态输入端口RR ARR ARRC A;KEY1有效键值移入位累加器CJC K1;键值无效转KEY2键值的分析MOV A,#15否则,KEY1代码送A寄存器SJMP K5K1:RRC A;KEY2JC K2;MOV A,#2;SJMP K5K2:RRC A;KEY3JC K3;MOV A,#3;SJMP K5K3:RRC A;KEY4JC K4 ;MOV A,#4;SJMP K5有效

20、键值移入位累加器 C键值无效转KEY3键值的分析否则,KEY2代码送A寄存器有效键值移入位累加器 C键值无效转KEY4键值的分析否则,KEY3代码送A寄存器有效键值移入位累加器 C键值无效转按键无效处理否则,KEY4代码送A寄存器K4:MOV A,#0FFH; 按键无效代码送 A寄存器K5:RETDISPLAY:MOV A,REC_BUF1SWAP A;ANL A,#0FH;CALL DECODE ;MOV DPTR,#NUM2MOVX DPTR,AMOV A,REC_BUF1 ;读取接收的第2字节数据高、低4位交换分离高4位有效数值换码;NUM2显示第2字节数据高4位数值读取接收的第2字节数

21、据ANL A,#0FH ;提取低4位有效数值CALL DECODE ;换码MOV DPTR,#NUM3MOVX DPTR,A ; NUM掘示第2字节数据低4位数值MOV A,REC_BUF2 ;读取接收的第 3字节数据SWAP A;高、低4位交换ANL A,#0FH;分离高4位有效数值CALL DECODE ;换码MOV DPTR,#NUM4MOVX DPTR,A ; NUM"示第3字节数据高4位数值MOV A,REC_BUF2 ;读取接收的第 3字节数据ANL A,#0FH ;提取低4位有效数值CALL DECODE ;换码MOV DPTR,#NUM5MOVX DPTR,A ; N

22、UM瘫示第3字节数据低4位数值RET;换码程序DECODE: MOV DPTR,#TABMOVC A,A+DPTRRET;延时程序DELAY: MOV R5,#80HD1:MOV R6,#0HDJNZ R6,$DJNZ R5,D1RETTAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8HDB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc)END(2)将第二字节和第三字节互换位置$include(C8051F020.inc)NUM2EQU 07F80H;NUM2地址NUM3

23、EQU 07F90H;NUM3地址NUM4EQU 07FA0H;NUM4 地址NUM5EQU 07FB0H;NUM5地址TIM_LEQU0FDH;I/C1低字节计数值TIM_HEQU0FDH;I/C1高字节计数值REC_BUF0 EQU 32HREC_BUF1 EQU 33HREC_BUF2 EQU 34HFLAG BIT 01H;数据接收缓冲器0;数据接收缓冲器1;数据接收缓冲器2;数据发送完成标志ORG 0000HLJMPMAIN;转主程序ORG 0023HLJMPRECE;转串行通信中断程序MAIN: lcall Init_DeviceLOOP: CALL KEYBOARD5调用案件状态

24、分析子程序MOV A,#0FFHMOV P5,AMOV DPTR,#NUM2MOVX DPTR,AMOV DPTR,#NUM3MOVX DPTR,AMOV DPTR,#NUM4MOVX DPTR,AMOV DPTR,#NUM5MOVX DPTR,AMOV R6,#0MOV SP,#30H;清除数码管;清除数码管;清除数码管;清除数码管NUM1的显示NUM2勺显示NUM3勺显示NUM4勺显示;清除数码管NUM5勺显示;通信操作状态寄存器清除;堆栈栈底设置MOVTMOD,#00100000B;T/C1方式 2MOV TH1,#TIM_H ;T/C1重装填值MOVTL1,#TIM_L;T/C1计数值

25、SETBTR1;启动T/C1MOV SCON0,#01010000B;串口方式 1SETBES;串口中断允许SETBEA;开中断CJNE A,#0FFH,L0按键状态发生变化转L0CLR FLAGSJMP LOOPL0: JB FLAG,LOOPMOV R7,AMOV A,#043HMOV SBUF0,ACALL DELAYMOV A,#04FHMOV SBUF0,ACALL DELAYMOV A,#04DHMOV SBUF0,ACALL DELAYMOV A,#04BHMOV SBUF0,ACALL DELAYMOV A,#30HMOV SBUF0,ACALL DELAYMOV A,R7AD

26、D A,#30HMOV SBUF0,ASETB FLAGSJMP LOOPRECE: JNB TI,REC1CLR TI ;RETI;按键状态无变化,清除发送完成标志数据发送完成,返回主循环否则,键值暂存 R7;C;发送字符;O;发送字符;M;发送字符;K;发送字符; 发送数字C的ASCII码值O的ASCII码值M的ASCII码值K的ASCII码值0的ASCII码值;生成键值的ASCII码值发送键值的ASCII码值;置位发送完成标志中断服务程序非发送转接收处理否则,清除发送中断标志中断返回REC1: PUSHACC保护累加器AMOV A,SBUF0读接收缓冲器KEYBOARD: MOV A,P

27、2;读按键状态输入端口CJNER6,#0,REC2 ;CJNEA,#43H,REC6 ;接收状态为0,进行字符C的过滤处理MOV R6,#1; 接收状态改为 1SJMPREC6 ;REC2: CJNE R6,#1,REC3 ;CJNEA,#4FH,REC5 ;接收状态为1,进行字符。的过滤处理MOV R6,#2; 接收状态改为2SJMPREC6 ;REC3: CJNE R6,#2,REC4 ;CJNE A,#4DH,REC5 ;接收状态为2,进行字符 M的过滤处理MOV R6,#3; 接收状态改为3MOV R5,#3;数据接收计数器设置为 3SJMP REC6 ;REC4: CJNE R6,#

28、3,REC6 ;PUSH ACC接收状态为3,暂存接收的内容MOV A,#REC_BUF0ADD A,R5MOV R0,A生成接收数据存放缓冲器地址POP ACC恢复接收数据至A寄存器MOV R0,A保存接收的数据DEC R5接收数据计数器减1CJNE R5,#0,REC6CALL DISPLAY;接收数据计数器减为 0,进行接收结果的显示REC5: MOV R6,#0;接收状态恢复为0 (就绪状态)REC6: POP ACC恢复累加器ACLR RI清除接收中断标志中断返回RETIRR AK4:MOV A,#0FFHK5:RETDISPLAY:MOV A,REC_BUF1SWAP A;ANL A,#0FH ;分离高CALL DECODE ;换码MOV DPTR

温馨提示

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

评论

0/150

提交评论