基於pic16f883芯片的彙編秒閃LED實驗

器材: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
來自HUST·EI seedclass2010 鍾老師微機原理課實驗,祝好! 
相關文章
相關標籤/搜索