实验报告2.docx
《实验报告2.docx》由会员分享,可在线阅读,更多相关《实验报告2.docx(12页珍藏版)》请在冰豆网上搜索。
实验报告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中
六·实验总结:
对单片机的学习要注重实践,操作。