合肥工业大学单片机实验报告.docx

上传人:b****8 文档编号:10892222 上传时间:2023-02-23 格式:DOCX 页数:37 大小:2.38MB
下载 相关 举报
合肥工业大学单片机实验报告.docx_第1页
第1页 / 共37页
合肥工业大学单片机实验报告.docx_第2页
第2页 / 共37页
合肥工业大学单片机实验报告.docx_第3页
第3页 / 共37页
合肥工业大学单片机实验报告.docx_第4页
第4页 / 共37页
合肥工业大学单片机实验报告.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

合肥工业大学单片机实验报告.docx

《合肥工业大学单片机实验报告.docx》由会员分享,可在线阅读,更多相关《合肥工业大学单片机实验报告.docx(37页珍藏版)》请在冰豆网上搜索。

合肥工业大学单片机实验报告.docx

合肥工业大学单片机实验报告

《单片机原理与程序设计》

课程实验报告

 

************************

学号:

**********

班级:

通信工程17-1班

指导老师:

王昕,吴从中

 

实验一系统认识

(一)实验目的

1、学习及掌握在KeilC51开发平台上建立、汇编、连接、调试及运行汇编程序的方法和步骤。

2、学习及掌握μVision2系统项目窗口、

调试窗口和存储器窗口等常用平台的操作。

3、学习及掌握MCS-51汇编源程序的书写格式和汇编语言的语法规则。

(二)实验内容及要求

1、以《单片机原理及应用实验教程》(第2版)“第2章实验1”中示例汇编语言源程序为蓝本,学习及掌握在μVision2平台上开发单片机应用程序的一般步骤。

2、学习μVision2平台项目窗口、调试窗口和存储器窗口等常用平台的使用。

3、记录实验操作过程和结果。

4、完成实验报告。

 

(三)实验过程和结果

1.建立一个新的工程项目

第1步:

点击菜单project,选择建立newproject。

 

第2步:

从键盘输入工程项目文件名(不需要扩展名),选择项目文件保存路径,如下图所示,项目文件名为test,保存到keil目录里,然后点击保存。

 

第3步:

这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择。

keil支持大部分51单片机,如图所示,选择Atmel的89c51之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

 

第4步:

点击菜单File->New,新建一个源程序文件,建立一个汇编或c文件,如果你已经有源程序文件,可以忽略这一步。

第5步:

输入示例程序,如下图并保存文件

 

第6步:

在Save对话框的文件名栏里输入源程序文件名,注意一定要输入扩展名,我们这里是要存储一个汇编源程序文件,所以输入.ASM(.A)扩展名,保存为text.ASM的名字

第7步:

将源程序文件加入到项目中。

点击Target1前面的+号,展开里面的内容sourceGroup1,用鼠标的右键点击SoureceGroup1,将弹出一个菜单,选择AddFilestoGuoup'SourceGroup1出现Add对话框,在文件类型栏选择asmsourcefile项,然后选择刚才的文件text.ASM,最后点击Add按纽。

之后,窗口不会消失,(如果要添加多个文件,可以不断添加),添加完毕,再点击Close按纽关闭该窗口。

2.项目设置

第1步:

点击菜单project,选择OptionsforTarget’Target1’项,选择项目

 

第2步:

这时会弹出一个对话框,要求你选择单片机的晶振Xtl,输入12(MHZ)

第3步:

点击菜单中Debug标签项,设置软件仿真UseSimulator

 

第4步:

点击菜单中Output标签项,设置16进制格式文件,最后点击确定关闭该窗口。

3.编译、调试程序

第1步:

点击菜单project项,选择BuildTarget标签项编译源程序文件。

如果源文件没有语法错误,编译成功,生成目标文件。

第2步:

点击菜单中Debug,选择Start标签项,进入调试方式。

第3步:

选择菜单VIEW项中的MemoryWindow标签项,打开存储器窗口。

存储器窗口如下图,在窗口Address处键入地址D:

50H

第4步:

在存储器窗口点击鼠标右键,出现下图所示快捷菜单,选择最后一项ModifyMemory…更改指定存储单元内容。

单击该选项,弹出如下图所示对话框,输入示例程序中的一组实验数据,然后单击‘OK’按纽后,新键入的数据将取代原来存储单元的内容。

第5步:

点击菜单中Debug,选择RUN标签项,全速运行程序在存储器窗口观察片内RAM单元03H(高位)04H(低位)中数据是否正确。

(00DEH)

实验二查表程序设计

(一)、实验目的

1.学习汇编语言查表程序设计方法。

2.学习并掌握51单片机MOVCA,@A+DPTR和MOVCA,@A+PC两条指令功能及编程方法。

3.学习并掌握51单片机数据地址定义伪指令DB的功能及应用。

(二)实验内容及要求

1.程序设计要求:

【功能1】在片内RAM区中生成十六进制数组Hex:

00H、01H、…、0EH、0FH,数组Hex的首地址为10H。

【功能2】用DB伪指令在程序中定义Hex数组元素ASCⅡ码表,表首地址用符号地址TABLE表示。

【功能3】用MOVCA,@A+DPTR和@A+PC指令指令编写查表程序,实现用查表方式将数组Hex的十六进制数转换为ASCⅡ码并存入片内RAM数组Asc中,数组Asc首地址70H。

2.开机启动KeilC51进入μVision2软件仿真开发环境。

3.完成程序的设计、编辑、编译、连接。

4.进入DEBUG方式,打开存储器Memory1窗口,在窗口Address处键入地址C:

XXH;观察程序存储器中建立的ASCⅡ码表。

5.调试和运行程序并记录存储器Memory2窗口Hex数组和Asc数组实验结果。

6.完成实验报告。

(三)程序框图

(四)设计说明

1.生成16进制数组部分:

MOVR0,#00H;累加初值为0

MOVR7,#16;循环次数为16

MOVR1,#Hex;Hex地址用R1表示

LOOP:

MOVA,R0

MOV@R1,A;将自加1后的书送入Hex数组

INCR0

INCR1;地址数加1

DJNZR7,LOOP;R7-1;直到减到零停止循环

2.转换为ASCII码部分:

1 利用@A+DPTR

MOVR1,#Asc

MOVR0,#Hex;Asc,Hex的地址分别用R1,R0代替

MOVR7,#16;循环次数为16

MOVDPTR,#TABLE

NEXT:

MOVA,@R0

MOVCA,@A+DPTR

MOV@R1,A;利用@A+DPTR通过A将表中的书送入Asc数组

INCR1

INCR0

DJNZR7,NEXT;循环16次

SJMP$

2 利用@A+PC

MOVR1,#Asc

MOVR0,#Hex

MOVR7,#16;和第一种方法一致

NEXT:

MOVA,@R0

ADDA,TABLE-($+3);计算修正值

MOVCA,@A+PC

MOV@R1,A;利用@A+PC通过A将表中的书送入Asc数组

INCR1

INCR0

DJNZR7,NEXT

SJMP$

 

(五)运行结果

两个程序都运行正确

结果正确

(六)心得体会

本次程序设计和范例类似,主要就是先利用循环语句通过自加一产生16个数送入Hex,然后通过查表程序,利用基址变址寻址用@A+DPTR或@A+PC来查找出表中的数,最后循环通过A将数送入Asc中。

注意利用@A+PC时要计算修正值,因为PC不是一开始就指向表地址的,我们查阅资料利用ADDA,TABLE-($+3)从而让PC指向表地址。

通过本次实验更加熟练地掌握了循环语句和了解了两种基址变址寻址

实验三十进制数1-100累加运算

(一)实验目的

1.学习并掌握ADD、ADDC、INC、DA指令的应用。

2.学习并掌握多字节程序设计及应用。

3.学习并掌握十进制数累加程序设计方法。

(二)程序设计实验报告要求

1、编写程序,实现以下功能:

【功能1】产生十进制数1~100,并存入片外RAMDeci数组中,首地址为1001H。

【功能2】对Deci数组元素进行累加运算,并将累加和存入内部RAM中60H(存累加和低位)和61H(存累加和高位)单元。

2、开机启动KeilC51进入μVision2软件仿真开发环境。

3、完成程序的设计、编辑、编译、连接。

4、进入DEBUG方式,打开存储器Memory1窗口,在窗口Address栏键入X:

1001H;打开存储器Memory2窗口,在窗口Address栏键入D:

60H;运行程序并记录存储器窗口Memory1和Memory2的实验结果。

5、完成实验报告。

(三)程序框图

1.存数部分

2.累加部分

(四)设计说明

本次实验程序主要由两部分构成,一是给数组赋值,利用循环语句,从0零开始依次加1后送给Deci数组。

这里要注意存储器中不能存储两位,所以不能直接表示100,所以我们用低位表示00,高位表示1,即循环101次,第100次对应的地址里存00H,第101次存01H,这样既可表示100;第二个是累加部分,也是利用循环语句,由第一位和零相加后面依次与下一位相加,加的过程低位放到60H,高位存到61H。

对于和特殊的100相加,低位无需变动,只需将存储高位的R6和100的高位地址里的内容(01)相加。

1.赋值部分:

MOVDPTR,#Deci

MOVR1,#0;设置累加初值

MOVR5,#101;设置循环次数,101次

NEXT1:

MOVA,R1

   ADDA,#1

   DAA

   MOVX@DPTR,A;将R1值加1后送入Deci数组中

   MOVR1,A;更新R1值

   INCDPTR;地址数加1

   DJNZR5,NEXT1

 

2.累加部分

(1)前99次累加

MOVDPTR,#Deci

MOVR5,#0

MOVR6,#0;设置累加初值

MOVR7,#99;累加99次

NEXT2:

   MOVXA,@DPTR

    ADDA,R5  ;低位累加

    DAA     ;累加后转为10进制存入R5中

    MOVR5,A

    

   MOVA,R6 ;进位累加

    ADDCA,#0

    DAA   ;转化为10进制

    MOVR6,A

     

   INCDPTR;地址数+1

    DJNZR7,NEXT2;开始循环

(2)和100相加  

    INCDPTR;与第101个地址里的内容相加

    MOVXA,@DPTR

    ADDA,R6

    DAA

    MOVR6,A

    

    MOV60H,R5;低位送入60H

    MOV61H,R6;高位送入61H;最后将低位送入60H,高位送入61H

     

(五)程序运行结果

60H(低位)存50,61H(低位)存50,程序运行正确

外部RAM从1001H开始存连续100个自然数,程序正确。

(六)心得

首先,通过这次实验更加深入理解和学习并掌握ADD、ADDC、INC、DA指令的应用。

学习并掌握多字节程序设计及应用。

本个实验还是主要采用顺序设计方法,所以通过本次实验也是我更加深入理解了顺序的相关指令和程序。

顺序结构也是程序分支结构里最简单的的程序,通过对顺序结构的顺联,可以为以后设计大型程序打好基础。

本实验遇到的最主要的问题是最后一位100的表示,经过多次失败,最终想到了用低位(1070H)表示00,高位(1071H)表示1,即循环101次,第100次对应的地址里存00H,第101次存01H,这样1070H,1071H共同表示出100H。

所以最后与100相加时,只需将存储高位的R6和100的高位地址里的内容(01)相加。

最后调试的结果终于不是4950了

实验四数据交换程序设计

(一)实验目的

1.学习并掌握51指令系统的MOV、MOVX、XCH、INC指令功能及应用。

2.掌握51单片机内部RAM和外部RAM寻址方式和应用。

3.学习并掌握汇编语言子程序设计及调用方法。

4.学习并掌握汇编语言程序设计中堆栈的定义及应用。

(二)程序设计实验报告要求

1.编写程序,实现以下操作:

【功能1】产生十进制数组Deci:

0、1、2、…、97、98、99,并存储到片内RAM区中,数组Deci的首地址为10H。

【功能2】产生十六进制数组Hex:

63H、62H、61H、…、01H、00H,并存到片外RAM区中,数组Hex的首地址为1000H。

【功能3】将片外RAM数组Hex与片内RAM数组Deci交换内容。

1.开机启动KeilC51软件进入μVision2软件仿真开发环境。

2.完成程序的设计、编辑、编译、连接。

3.进入DEBUG方式,打开存储器Memory1窗口,在窗口Address栏键入D:

10H;打开存储器Memory2窗口,在窗口Address栏键入X:

1000H;运行程序并记录存储器窗口Memory1和Memory2的实验结果。

4.完成实验报告。

(三)程序框图

(四)设计说明

1.给Deci数组赋值

数组中的数从0-99,相邻两数隔一位,也就是在上一个数的基础上加1,所以用ADDA,#1语句,所以用R1存累加数,循环将将上一个数加1后存到下一个数中。

MOVR0,#Deci

MOVR1,#0;累加初值

MOVR5,#100;循环次数

LCALLSUB1  ;调用给Deci数组赋值的子程序  

SUB1:

     

LOOP1:

   

MOVA,R1

MOV@R0,A;将上一个地址中的值传到下一个地址中。

ADDA,#1

DAA;转换为10进制

MOVR1,A;A自加1后再传回R1中

INCR0                

DJNZR5,LOOP1;地址数+1,循环

RET           

2.为Hex数组赋值

和1同理,利用循环语句,R1中存累减数,每次减1后存到下一个R1中,在用寄存器间接寻址送入Hex数组中。

MOVDPTR,#Hex

MOVR1,#63H;设置自减初值

MOVR5,#100;设置循环次数

LCALLSUB2 ;调用给Hex数组赋值的子程序。

SUB2:

LOOP2:

   

MOVA,R1

MOVX@DPTR,A;将R1中的值送入Deci数组中

DECR1;然后R1自减1

INCDPTR

DJNZR5,LOOP2;地址数+1,循环

RET 

    

   

3.两数组交换数据

还是利用循环语句,用R0表示Deci的地址,DPTR表示Hex的地址,通过寄存器A交换每对地址里面的数据

MOVDPTR,#Hex;外部数据通过MOVA,@DPTR传送,所以先设置DPTR的地址

MOVR0,#Deci

MOVR6,#100

LCALLSUB3;调用交换子程序

SUB3:

 LOOP3:

   

MOVXA,@DPTR

   XCHA,@R0

   MOVX@DPTR,A;通过A交换两数组中的数。

   

INCR0

   INCDPTR

   DJNZR6,LOOP3;两个数组中的地址都+1,开始循环

   RET 

(五)运行结果

外部RAM数组和内部RAM数组成功进行了交换

(六)心得体会

通过本次实验深入掌握51指令系统的MOV、MOVX、XCH、INC指令功能及应用。

同时也更加深入理解了51单片机内部RAM和外部RAM寻址方式和应用。

本程序主要用循环语句和子程序来进行设计的,所以程序的编写过程中也更加深入掌握了子程序的调用和使用,更加熟练地运用循环语句。

实验五定时器应用实验

(一)实验目的

1.掌握μVision2平台硬件操作步骤。

2.熟悉ZY15MCU12BC2单片机实验箱,掌握实验箱内拨位开关KC、KF使用。

3.学习并掌握51单片机内部定时器/计数器的编程方法。

4.学习并掌握中断服务程序的设计方法。

(二)实验程序框图

 

(三)实验内容及步骤。

1.建立一个新的工程项目

2.项目设置

①:

点击菜单工程,选择OptionsforTarget’Target1设置选项

 

②:

选择单片机的晶振Xtl,输入12(MHZ)

 

③:

击菜单中Debug标签项,设置硬件仿真UseKeilMontor-51Drivar。

④:

点击菜单中Output标签项,设置16进制格式文件

 

(四)硬件仿真结果及程序分析

仿真结果如图:

(五)心得体会

通过本次实验初步了解了ZY15MCU12BC2单片机实验箱,掌握实验箱内拨位开关KC、KF使用。

同时也学习并掌握了51单片机内部定时器/计数器的编程方法和中断服务程序的设计方法。

同时最重要的还是第一次将单片机软硬件结合使用,用KeilC51软件进入μVision2集成开发环境,使89C51完成硬件仿真。

实验由于老师已经贴心地给出代码,所以程序设计上没遇上问题,但是硬件仿真上却是问题重重。

一开始是不知道怎么进行硬件仿真的,不知道怎么才能将单片机箱与电脑连接,经过查阅资料,认真看PPT才发现项目设置有问题,应该在Debug窗口设置硬件仿真UseKeilMontor-51Drivar。

设置完之后又是仿真不了,在其他同学的帮助下才发现是setting里面的port选择有问题,试验箱连接电脑的port应该是COM3而不是默认的COM2。

错误全纠正后试验箱就可以成功运行了。

通过这次实验,我也深深地感觉到细节的重要性,我们组发生的两个错误都是细节上出了问题,结果导致卡了很长时间。

以后的实验一定要注意,不要再粗心了。

 

实验六并行口应用—模拟广告灯实验

(一)实验目的

1.熟悉ZY15MCU12BC2单片机实验箱的资源,学会选用其模块电路连接成实验需要的系统。

2.掌握MCS-51单片机P1端口的应用方法。

3.学习及掌握单片机内部定时器和并行接口综合应用程序设计技术。

(二)实验程序框图

(三)实验内容及步骤

1.建立一个新的工程项目

2.项目设置

1 点击菜单工程,选择OptionsforTarget’Target1设置选项

2 选择单片机的晶振Xtl,输入12(MHZ)

 

 

3 击菜单中Debug标签项,先设置硬件仿真UseUseSimulator。

 

4 点击菜单中Output标签项,设置16进制格式文件

 

5 程序文件加入target后编译程序

1)原程序:

 

2)中断方式:

3)查询方式:

 

6 运行程序

1)原程序:

 

2)中断方式:

 

3)查询方式:

 

7 点击菜单中Debug标签项,设置硬件仿真UseKeilMontor-51Drivar

(四)试验箱仿真结果

1.原程序

2.中断方式

3.查询方式

(五)实验心得体会

本次实验较之前的实验难度有所提升,但因为实验之前就已经在课后完成了程序的设计,所以上机实验很快就完成,但实验过程中还是遇到了不少问题。

首先是我们的试验箱没有51单片机芯片,我和队友在实验室到处找才终于找到一个多余的试验箱;在对着实验电路图连好线后,程序项目设置也弄好好后却又发生了上次一样的情况--无法连接试验箱,一切检查完毕后都没发现问题,最后在咨询了吴从中老师,老师给的意见是可能试验箱接口有问题。

最后不想再在这个问题上耽误时间了,于是便等其他同学完成了实验,直接用他们的试验箱完成我们的实验。

对于本次实验设计,老师已经给出了总的程序,我们只需把其中的延时程序段换成定时器程序就行,所以程序上主要就是弄清中断方式和查询方式。

中断方式是指编写中断服务子程序,等产生溢出时,中断信号响应中断来处理中断事件,而查询方式是不断查询标志位,等标志位置1时将标志位清零,重新给TH0,TL0赋值。

弄清这两个方式后就可以先编写一小段程序,然后加入到完整程序中。

在程序调试过程中,一直有“errorA45:

UNDEFINEDSYMBOL(PASS-2)”,查阅资料是说没有定义符号,后来认真观察程序才发现,TR零,TL零写成了TRO,TLO,这的确挺需要注意的,阿拉伯数字零和英文0有时候的确挺容易弄错的。

“error56:

can'topenfile”点击rebuild在运行就可以解决问题。

通过本次实验,首先是更加熟悉ZY15MCU12BC2单片机实验箱的资源,学会选用其模块电路连接成实验需要的系统。

同时也更加熟练地掌握MCS-51单片机P1端口的应用方法,学习及掌握单片机内部定时器和并行接口综合应用程序设计技术。

当然,本次实验更重要地是培养了解决问题的能力,无论是程序设计还是上机仿真都遇到了不少问题,有可以解决的,也有无能为力的。

但最终,通过查阅相关资料和同学们热心帮助,我也最终完成了实验任务。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1