器材:Microchip公司的控制芯片pic16f88三、LED灯、电阻、导线、程序下载器、代码编译仿真软件MPLABV8.8 测试
【电路链接原理图】: code
【软件流程图】 ip
本实验使用TIMER1模块 16位计数器溢出检测来完成周期性延时0.5S。 编译
【数据计算】 class
计算方法以下: 原理
计数频率:4MHz * 1/4 * 1/8 = 1/8 MHz 软件
则计数周期为:8uS 配置
因为代码中设置每延迟0.5S,LED引脚电位取反来切换状态。因此要使计数器累计计数0.5S: 循环
计数器次数= 0.5S/8uS = 62500次 下载
TMR1是16为计数器,因此计数起始值设为65536-62500 = 3036 (0x0BDC)。这样子仿真LED闪烁周期为:1.000036 S
【微调&校准周期】
因而将计数起点调整为0x0BDF,而且在循环里加入6个NOP(以前测试执行一条命令的周期为1uS),LED闪烁周期准确的为1 S。
【可重定位汇编语言】
实现代码以下:
#include<p16f883.inc> UDATA_SHR COUNTER1 RES 1 COUNTER2 RES 1 RESET_VECTOR CODE 0X0000 NOP GOTO MAIN MAIN BANKSEL ANSEL ;设置PORTA为数字信号I/O CLRF ANSEL BANKSEL TRISA MOVLW B'00000000' ;PORTA全设为输出 MOVWF TRISA BANKSEL T1CON MOVLW B'10110101' ;配置timer1 ,1:8预分频(时钟信号进入TIMER1时有一个1:4分频) MOVWF T1CON BANKSEL OSCCON MOVLW B'11101100' ;时钟4M MOVWF OSCCON Delay ;延时,等待时钟振荡器稳定 INCFSZ COUNTER1,1 GOTO Delay INCFSZ COUNTER2,1 GOTO Delay BANKSEL PORTA LOOP COMF PORTA,1 ;PORTA I/O取反 CALL LOOP1 ;计数器计数,延时 GOTO LOOP LOOP1 BANKSEL TMR1H ;TMR1设置计数初值 MOVLW 0X0B MOVWF TMR1H BANKSEL TMR1L MOVLW 0XDF MOVWF TMR1L BANKSEL PIR1 LOOP2 ;TMR1溢出检测 BTFSS PIR1,0 GOTO LOOP2 BCF PIR1,0 NOP NOP NOP NOP NOP NOP RETURN END