实验报告2.docx

上传人:b****8 文档编号:10529163 上传时间:2023-02-21 格式:DOCX 页数:12 大小:357.13KB
下载 相关 举报
实验报告2.docx_第1页
第1页 / 共12页
实验报告2.docx_第2页
第2页 / 共12页
实验报告2.docx_第3页
第3页 / 共12页
实验报告2.docx_第4页
第4页 / 共12页
实验报告2.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验报告2.docx

《实验报告2.docx》由会员分享,可在线阅读,更多相关《实验报告2.docx(12页珍藏版)》请在冰豆网上搜索。

实验报告2.docx

实验报告2

实验报告

PIC单片机原理、开发方法及实践

 

云南大学滇池学院

理工学院

电子信息工程系

陈一凡

20112121006

 

PIC的实验程序

基于MAPLAB的程序设计

一·实验目的简述:

学会用汇编语言控制单片机完成预定的算法,实现对内部各模块的功能,掌握好其指令系统,实现对内部弄块的控制和I/O操作。

基于MPLABIDE,对PIC系列单片机进行源程序文档的创建、编辑和汇编,以至实现目标程序的模拟运行。

二·实验要求:

1.一个16位加法程序,实现X+Y,结果存result;

2.将20H单元的高低四位分别转换为ASCII码,存储在LED1和LED2单元;

3.将20H单元的8bit二进制数转换为三位BCD码存储在B1,B2,B3单元;

三·实验原理简述:

应用PIC单片机指令集中的绝大部分指令如:

数据传送操作、加减法操作、逻辑操作、移位操作等等都是能够在单个指令周期中完成的特定操作,而这些单一的指令就是实现复杂的计算和控制任务的基本。

将若干条指令按照一定的规则和要求排列组合在一起,就构成了可以控制的复杂的,能实现一定功能的程序。

四·实验步骤:

1.针对问题一:

一个16位加法程序,实现X+Y,结果存result;

实验思路:

将x,y分别存放在目标寄存器中,对x,y进行加法运算,并注意其进位位。

实验程序:

LISTP=16F877A

INCLUDE"P16F877A.INC"

xEQU0x20

yEQU0x22

zEQU0x24

TESTNOP;空操作

GOTOSTART;汇编开始

ORG004h;汇编起始点为004h;

STARTCLRFz;将z清零;

CLRFz+1;将z+1清零;

CLRFz+2;将z+2清零;

MOVLW0F0H;将立即数0F0H送到w;

MOVWFx;将W的内容传送至x;

MOVLW0F0H;将立即数0F0H送到w;

MOVWFx+1;将W的内容传送至x+1;

MOVLW11H;将立即数11H送到w;

MOVWFy;将W的内容传送至y;

MOVLW11H;将立即数11H送到w;

MOVWFy+1;将W的内容传送至y+1;

MOVFx,W;将x的内容送到目标寄存器;

ADDWFy,W;w和y相加;

BTFSCSTATUS,C;检测STATUS中的进位位,为0则跳过;

INCFz+1,F;z+1递增1;

MOVWFz;将W的内容传送至z;

MOVFx+1,W;将x+1的内容送到目标寄存器;

ADDWFy+1,W;w和y+1相加;

BTFSCSTATUS,C;检测STATUS中的进位位,为0则跳过;

INCFz+2,F;z+2递增1;

ADDWFz+1,F;F和Z+1相加

BTFSCSTATUS,C;检测STATUS中的进位位,为0则跳过;

INCFz+2,F;z+2递增1;

END;程序结束;

程序分析:

见注释

五·实验操作:

1.新建一个工程:

project-new-命名工程-保存到工作目录

2.编写源文件并保存到工作目录下

3.加在原文件到工程中

4.程序环境设置

(1)选择器件

(2)调试环境位设置

5.编译工具的选择

6.编译源文件

实验结果如图所示:

程序执行过程:

执行第一条程序时:

逐条执行程序时:

STATUS寄存器中的变量

将x和y进行相加运算时的寄存器变量

检测标志寄存器时

最终执行结果

最终实现x和y的相加;

2.针对问题二:

将20H单元的高低四位分别转换为ASCII码,存储在LED1和LED2单元;

实验思路:

实验程序:

LISTP=16F877A

INCLUDE"P16F877A.INC"

led1EQU0x21

led2EQU0x22

xEQU0x23

yEQU0x24

TESTNOP;空操作

GOTOSTART;汇编开始

ORG004h;汇编起点为004H

STARTMOVLW23H;将立即数23h传送到w;

MOVWF20H;将w的内容传送到20h;

MOVLW20H;将立即数20h传送到w;

MOVWFFSR;将w的内容传送到FSR;

MOVLW0FH;将立即数0fh传送到w;

MOVWFx;将w的内容传送到X;

MOVFINDF,W;将INDF的内容传送到目标寄存器中;

ANDWFx,F;w和x做逻辑与运算;

MOVLW30H;将立即数30h传送到w;

ADDWFx,W;w和x的内容相加;

MOVWFled1;将w的内容传送到LED1;

MOVLW0FH;将w的内容传送到20h;

MOVWFx;将w的内容传送到x;

MOVFINDF,W;将INDF的内容传送到目标寄存器中;

MOVWFy;将w的内容传送到y;

RRFy,F;对Y进行带进位的右移;

RRFy,F;对Y进行带进位的右移;

RRFy,F;对Y进行带进位的右移;

RRFy,W;对Y进行带进位的右移;

ANDWFx,F;w和x做逻辑与运算;

MOVLW30H;将立即数30h传送到w;

ADDWFx,W;w和x的内容相加;

MOVWFled2;将w的内容传送到led2;

End;程序结束

程序分析:

见注释

五·实验操作:

1.新建一个工程:

project-new-命名工程-保存到工作目录

2.编写源文件并保存到工作目录下

3加在原文件到工程中

4.程序环境设置

(1)选择器件

(2)调试环境位设置

5.编译工具的选择

6.编译源文件

实验结果如图所示:

实验操作步骤:

1.程序执行前目标寄存器变量:

3.最终实现高低四位分别转换为ASCII码:

 

4.针对问题三:

将20H单元的8bit二进制数转换为三位BCD码存储在B1,B2,B3单元;

实验思路:

把二进制数减100,减10得到BCD码

实验程序:

listp=16f877a

include"P16f877a.inc"

AEQU0X20

B1EQU0X30

B2EQU0X31

B3EQU0X32

ORG0X00

NOP

GOTOSTART

STARTMOVLW0E5H;把E5H送给W寄存器

MOVWFA;把W寄存器的值送到A

CLRFB1;清空B1

CLRFB2;清空B2

CLRFB3;清空B3

BAIMOVLW64H;把64H(十进制的100)送给W寄存器

SUBWFA,F;把A中的数值减去100还送回A

INCFB1;把B1加1

BTFSCSTATUS,C;检测STATUS寄存器中的进位位C

GOTOBAI;没有借位继续循环

MOVLW64H

ADDWFA,F

DECFB1

SHIMOVLW0AH;把0AH(十进制的10)送给W寄存器

SUBWFA,F;把A中的数值减去10还送回A

INCFB2;把B2加1

BTFSCSTATUS,C;检测STATUS寄存器中的进位位C

GOTOSHI;没有借位继续循环

MOVLW0AH;

ADDWFA,F;

DECFB2;

MOVFA,W;把A中剩下的数送到W寄存器·

MOVWFB3;把W寄存器中的数据送到B3

END

程序分析:

见注释

五·实验操作:

1.新建一个工程:

project-new-命名工程-保存到工作目录

2.编写源文件并保存到工作目录下

3.加在原文件到工程中

4.程序环境设置

(1)选择器件

(2)调试环境位设置

5.编译工具的选择

6.编译源文件

7.调试

实验结果如图所示:

1.汇编开始时寄存器变量:

2.百位转换完之后

3.十位转换完之后

4.程序执行的最终结果

最终实现将20H中的数据转换成BCD码分别存储在B1,B2,B3中

六·实验总结:

对单片机的学习要注重实践,操作。

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

当前位置:首页 > 求职职场 > 简历

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

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