(玩电子) 电子技术学习与研究
当前位置单片机教程网 >> MCU设计实例 >> 浏览文章

pic单片机闪灯实验Hello World实验报告

作者:佚名   来源:互联网   点击数:x  更新时间2014年08月14日   字体

1.  实验目的

A,学习汇编语言编程

B,学习使用编程软件和下载器在单片机上编程

C,学习学习嵌入式的方法

2.  任务要求

用汇编语言编程实现LED灯闪烁

3.  实验器材

单片机PIC16F886一片LED灯一只电阻任选下载器及相关的线一个

4.  实验方案

 

 

 

图 1 硬件设计图

 

 

图 2 软件流程图

5.  调试过程

先使LED灯亮再写延时程序最后实现闪灯最后的结果是可以实现闪灯但是闪灯的频率和亮灭时间比例还不能精确控制

6.  实验现象分析

奇怪的现象还没有解决

1只写让LED灯亮的程序即

LIST p=16f886

INCLUDE p16f886.inc

ORG 0x00

BANKSEL TRISC

CLRF TRISC

CLRF STATUS

MOVLW B'00001111'

MOVWF PORTC

END

时在PICKIT 2中选择5V on 测得Vdd=4.2V,万用表直流电压档测得PIN RC3 2.7V ,示波器测时发现RC3引脚是频率是50Hz幅值是2.7V的正方波LED可以一直亮但是不是预期的一直置位还没有找到原因

2如果采用延时翻转如此循环即循环部分分别为

A.loop call delay

comf portc,1

goto loop

B.loop call delay

call delay

call delay

call delay

call delay

comf portc,1

goto loop

C.loop call delay

call delay

call delay

call delay

call delay

call delay

call delay

call delay

call delay

call delay

 

comf portc,1

goto loop

时测到的实际频率都在0.48Hz左右采用的时候总周期是默系4MHz)然而一个循环中delay调用次数越多灯亮的时间越短灭的时间越长当时钟频率选择127kHz,调用3delay本已经不会亮了

3如果采们零延时置位延时的循环发现LED每次亮灭的时间基本相同但是每亮灭五次后会有一次灯灭的时间稍微长一点改变时钟频率后也是这样猜测是delay函数写得有问题

 

 

这三个现象计划的解决方法是单步调试和仿真

 

写完这份报告时杜航同学提醒说我在delay中用到了decfsz函数而decfsz函数的操作范围只有0~127而我设置的却是0ffh,已超出该范围

之前曹航用127kHz的时钟假设四个时钟周期是一个指令周期假设按照之前以为的2^8*2^8*2*2周期在8s左右实验出来的结果却在2s左右按照杜航的说法实实一个周期内指令一共2^7*2^7*2*2则计算得到灯的周期为2.06秒实验时计算到的现象是亮灯周期2s左右比较符合但是具体是不是这样还要进一步验证

 

额刚刚把delay中的0ffh改成07fh发现灯明显闪烁快了所以之前的假设不闪

 

 

 

 

 

INCLUDE P16F886.INC
org   000h      
nop             
BANKSEL OSCCON
BCF OSCCON,4
BCF OSCCON,5
BSF OSCCON,6
BANKSEL TRISC
movlw   00h       
movwf   TRISC    
BANKSEL PORTC   
movlw  000h       
movwf  PORTC   
  
loop 
CALL delay
BSF PORTC,3
CALL delay
BCF PORTC,3
goto loop

;-------------------------廷时子程序----------------------------
delay                       ;子程序名也是子程序入口地址
       movlw   0ffh          ;将外层循环参数值FFH经过W
       movwf   20h          ;送入用作外循环变量的20H单元
lp0    movlw   0ffh          ;将内层循环参数值FFH经过W
       movwf   21h           ;送入用作内循环变量的21H单元
lp1    decfsz   21h,1         ;变量21H内容递减若为0跳跃
           goto     lp1           ;跳转到LP1处
       decfsz    20h,1         ;变量20H内容递减若为0跳跃
       goto     lp0           ;跳跃到LP0处
return

end

发表评论告诉好友收藏此文关闭窗口

文章评论

ձһhƬձƵ ձƵɫwww ձƵ:ɫ