1. 实验目的
学习如何使用定时器
2. 任务要求
用可重定位汇编代码完成1s为周期的闪灯实验;
画出程序流程图;
验证程序的正确性;
3. 实验器材
单片机PIC16F886一片、LED灯一只、电阻任选、下载器(及相关的线)一个
4. 实验方案
图 1 硬件设计图
图 2 软件流程图
计算过程:选择Timer0,内部振荡器频率31KHz,要达到周期为1s,则0.5s翻转一次,则0.5s中需要执行的指令数是0.5*31k/4=3875,则若使TMR0由0加到溢出,预置数为0,则3875/256=15.136.那么分频比可选1:16,1:32,1:64,1:128,1:256.我们选择了最接近的1:16.
预置数的计算:
3875/16=256-T+2
得T=15.8,软件实测发现15比16更加接近,故取15.
调试方法:debug 单步调试和断点调试结合。先确保程序正确,再调整预置数提高精度。
5. 实验现象分析
最初由于代码错误LED一直处于亮的状态,由于调试时改动的代码太多不知道是具体由哪一步引起,或者可能是很多错误一起造成的。
我们似乎没有地方可以用到可重用代码,所以最后没有采用。(也有可能是因为对可重用代码不理解。)
实验最终结果:
1,LED正常亮灭,亮灭时间相同,没有奇怪现象
2,软件仿真时T=0.9999483s,误差较小。
附:
#INCLUDE p16f886.inc
__config _CONFIG1, _LP_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF
ORG 0x00
NOP
CLRF TMR0
BANKSEL OPTION_REG;BANK3
MOVLW B'000011'
MOVWF OPTION_REG
BANKSEL INTCON;
MOVLW B'00000111'
ANDWF INTCON,F
BANKSEL OSCCON
MOVLW B'00000011'
MOVWF OSCCON
BANKSEL ANSEL
CLRF ANSEL
BANKSEL TRISA;BANK1
MOVLW B'00000000'
MOVWF TRISA
LP
BANKSEL INTCON
BTFSS INTCON,2
GOTO LP
GOTO LED
LED
BANKSEL INTCON
BCF INTCON,2
BANKSEL PORTA
COMF PORTA,1
BANKSEL TMR0
MOVLW B'00001111'
MOVWF TMR0
GOTO LP
END
下一个实验:http://www.51hei.com/mcu/3996.html