PIC单片机实验报告Word文档下载推荐.docx
《PIC单片机实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PIC单片机实验报告Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
(2)编程思路
通过对TRISD赋值“00H”,将PORTD全部设置为输出,首先PORTD赋值为01H,调用延时子程序。
然后PORTD赋值分别为02H--04H--08H--10H--20H--40H--80H,并在这八个数中循环。
流程图:
、
(3)代码、仿真:
(略)
五,心得与体会:
本实验比较简单,与第二个实验相似,不同的是给PORTD值的时候,一个是分别赋值,而另一个是通过查表的方法。
所以仿真与代码省略。
实验二
(1)学习子程序的调用如:
延时和查表子程序;
(2)锻炼编程的思想和提高编程的能力;
(3)了解程序运行过程内存参数的变化情况;
利用延时和查找表的方法,实现8盏LED灯的循环点亮,每次点亮一盏,向左或向右循环点亮,延时时间适当即可。
实验必须达到功能正确,程序编写清晰,而且有适当的注释。
1.设计方案原理与思路:
通过查表,将查表之后的结果送到输出端D口,再循环跳转,让LED灯循环点亮。
2.设计流程图:
3.程序代码:
LISTP=18F452
INCLUDE"
P18F452.INC"
ABC EQU 20H
;
―――――――――――――――――――――
主程序
ORG0000H
NOP
BSFSTATUS,5;
选择体1
MOVLW00H
MOVWFTRISD ;
D口为输出
BCFSTATUS,5;
返回体0
MAINMOVLW00H
MOVWFABC
MOVWFPORTD;
D口清0
STMOVFABC,W
CALLSHUZH;
调用查表子程序
MOVWF PORTD;
D口显示
CALLDELAY;
延时
INCFABC,F
INCFABC,F
BTFSSABC,4;
循环设置
GOTO ST
GOTO MAIN
―――――――――――――――――
SHUZHADDWFPCL,F;
表子程序
RETLW01H
RETLW02H
RETLW04H
RETLW08H
RETLW10H
RETLW20H
RETLW40H
RETLW80H
DELAYNOP;
延时子程序
NOP
RETURN
――――――――――――――――――
END
4.实验步骤
1.在软件上编写代码
2.编译与仿真
3.仿真与结果
5.验证结果的说明
当采用单步运行时,PORT的值每一步由当前状态跳到下一状态,且根据查表子程序里设计的返回值来顺序显示。
实验结果与实验要求一致。
本实验成功
五、问题讨论
在这次的实验过程中,一开始出现了一些问题,也就是书本上学的单片机“体选”指令是BCF STATUS,RP0,但是在P18F452的体选应该是BCF STATUS,5还有就是取指令和执行,共两个指令时间,开始时按一条的时间去运行,故达不到预定的结果。
在修改后,程序成功的执行并给出了正确的结果。
实验三
一、实验目的
(1)了解TIMER0的定时功能及相关寄存器
(2)利用TIMER0实现定时溢出中断
二,实验内容
利用TIMER0实现定时计数,并将计数结果写入PORTD端口控制LED灯,以二进制计数方式进行点亮。
定时时间适当即可。
三,实验要求
必须能够正确找到并设置与TIMER0相关的寄存器,将TIMER0配置为8bits的定时器。
并通过相关设置另TIMER0利用片内时钟进行计时,溢出时申请中断,完成二进制的一次计数并写入PORTD,中断返回后进入下一次定时的等待。
四,实验内容与步骤
用TMR0L定时器进行定时计数,当TMR0L溢出,中断标志位自动置位,自动跳转到入口地址为0008H的中断服务子程序,中断服务子程序为二进制的一次计数。
从而完成实验。
2..设计流程图
3.程序代码
LISTP=18F452
INCLUDE"
TMR0BEQU0C3H
COUNTEREQU20H
ORG0000H
NOP
GOTOMAIN
----------------------------------------------------------
中断服务子程序
------------------------------------------------------------
ORG0008H
BCFINTCON,T0IF;
将中断标志位寄存器清0
DECFSZCOUNTER;
COUNTER寄存器自减1,为0则间跳
GOTORT
INCFPORTD
MOVLW01H
MOVWFCOUNTER
RTNOP
BANKSELTMR0L
MOVLWTMR0B
MOVWFTMR0L
RETFIE
主程序
MAINNOP
BANKSELTRISD;
选择TRISD寄存器所在的体
MOVLW00H
MOVWFTRISD;
设置PORTD为输出
MOVLW0C0H ;
使能中断,设置为8位的定时器
MOVLW T0CON
MOVLWB'
10100000'
MOVWFINTCON
CLRFPORTD;
输出端清0
MOVLWTMR0B;
将时间常数0FF送到TMR0L
MOVWFTMR0L;
开始定时
LOOPGOTOLOOP
END
4.仿真,观察相关寄存器
4、实验结果
当TMR0L定时器的计数溢出后,中断标志位自动置位,之后开始中断服务子程序,直到COUNTER的值为0时,PORTD的值自加1
5、问题讨论
在此次实验中,中断入口为0008H,而不是0004H,且定时器的相关寄存器的名字与课本上的有出入,需由实际使用芯片在数据手册决定。
通过这次实验,明白了对一片芯片的使用,需根据它的数据手册来使用,每块芯片都有自己的特征。
本次实验主要是对定时器相关寄存器设置,例如设置T0CON来实现TMR0L使用内部时钟、边沿触发,分频等。
只要了解这些寄存器,完成实验就不是难事,但是由于书本上学的是PICF877的单片机,与上机选用的18F452有些不一样,所以开始编程是时候出现了错误,直到查阅芯片手册才知道。
所以,我们应该学会举一反三。