器材: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