实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
PIC单片机原理、开发方法及实践
云南大学滇池学院
理工学院
电子信息工程系
陈一凡
20112121006
PIC的实验程序
基于MAPLAB的程序设计
一·实验目的简述:
学会用汇编语言控制单片机完成预定的算法,实现对内部各模块的功能,掌握好其指令系统,实现对内部弄块的控制和I/O操作。基于MPLAB IDE,对PIC系列单片机进行源程序文档的创建、编辑和汇编,以至实现目标程序的模拟运行。二·实验要求:
1.将20H---2FH的数据搬迁到30H起始的数据区;
2.设计一个程序交换两个双字节(16bit)的数据X,Y;
3.设计一个程序,将一个长度为16的无符号8bit数据区中的最大的数据找出,并储存到数据区内;
三·实验原理简述:
应用PIC单片机指令集中的绝大部分指令如:数据传送操作、加减法操作、逻辑操作、移位操作等等都是能够在单个指令周期中完成的特定操作,而这些单一的指令就是实现复杂的计算和控制任务的基本。将若干条指令按照一定的规则和要求排列组合在一起,就构成了可以控制的复杂的,能实现一定功能的程序。
四·实验步骤:
针对问题一:将20H---2FH的数据搬迁到30H起始的数据区;实验思路:依次将20H——2FH中的数据存在相应的数
据区,然后对每一个数据进行相加运算,得到从30H起始的数据。
实验程序: LIST P=16F877A
INCLUDE "P16F877A.INC"
y EQU 0x40
x EQU 0x20
temp EQU 0x41
TEST NOP;空操作
GOTO START;汇编开始
ORG 004h;汇编起始点为004h;
START MOVLW 01H;将01H送到W寄存器中
MOVWF x;将W中的内容送到x 中
MOVLW 02H;将02H送到W寄存器中
MOVWF x+1;将W中的内容送到x+1 中
MOVLW 03H;将03H送到W寄存器中
MOVWF x+2;将W中的内容送到x+2 中
MOVLW 04H;将04H送到W寄存器中
MOVWF x+3;将W中的内容送到x+3 中
MOVLW 05H;将05H送到W寄存器中
MOVWF x+4; 将W中的内容送到x+4 中
MOVLW 06H;将06H送到W寄存器中
MOVWF x+5;将W中的内容送到x+5中MOVLW 07H;将07H送到W寄存器中MOVWF x+6;将W中的内容送到x+6 中MOVLW 08H;将08H送到W寄存器中MOVWF x+7;将W中的内容送到x+7 中MOVLW 09H;将09H送到W寄存器中MOVWF x+8;将W中的内容送到x+8 中MOVLW 0AH;将10H送到W寄存器中MOVWF x+9;将W中的内容送到x+9 中MOVLW 0BH;将11H送到W寄存器中MOVWF x+0AH;将W中的内容送到x+10 中MOVLW 0CH;将12H送到W寄存器中MOVWF x+0BH;将W中的内容送到x+1 1中MOVLW 0DH;将13H送到W寄存器中MOVWF x+0CH;将W中的内容送到x+1 2中MOVLW 0EH;将14H送到W寄存器中MOVWF x+0DH;将W中的内容送到x+1 3中MOVLW 0FH;将15H送到W寄存器中MOVWF x+0EH;将W中的内容送到x+1 4中
MOVLW 10H;将10H送到W寄存器中MOVWF y;将W中的内容送到y中
MOVLW 20H;将20H送到W寄存器中
MOVWF FSR;将W中的内容送到FSR目标寄存器中
LOOP MOVF INDF,W;进入循环
MOVWF TEMP ;将W的内容送到TEMP;
MOVLW 10H ;将10H送到W寄存器中
addwf F SR,F;W寄存器中的内容与FSR寄存器中的内容
MOVF TEMP,W;将TEMP的内容传送到目标寄存器
MOVWF INDF;将W的内容传送至F
MOVLW 10H;将10H送到W寄存器中
SUBWF FSR,F;从立即数中减去W的内容
INCF FSR,F;F递增1
DECFSZ y,F;Y递减1,为0则跳过
GOTO LOOP;跳转到循环
END;程序结束
程序分析:见注释
五·实验操作:
1.新建一个工程:project-new-命名工程-保存到工作目录
2.编写源文件并保存到工作目录下
3.加在原文件到工程中
4.程序环境设置
(1)选择器件
(2)调试环境位设置
5.编译工具的选择
6.编译源文件
实验结果如图所示:
程序执行过程:
执行第一条程序时:
逐条执行程序时:
1.开始执行程序时寄存器里的变量
2.汇编起点寄存器变量
3.第一条汇编程序执行时寄存器变量
4.依次执行到loop循环时的寄存器变量
5.进行相加运算之后的寄存器变量
6.进行相减运算之后的寄存器变量
7.最终执行结果
最终实现从20H到30H的搬迁
针对问题二:设计一个程序交换两个双字节(16bit)的数据X,Y;
实验思路:将x存到z中,将z存到y中,将y存到x中,最终使得双字节数进行交换。
实验程序:
LIST P=16F877A
INCLUDE "P16F877A.INC"
x EQU 0x20