完整程序下載:
PIC12F675兩通道的AD轉換的匯編程序.zip
(1.81 KB, 下載次數: 51)
2016-9-12 00:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
- ;程序功能:上電開機:PIN5為高電平,綠燈亮;PIN2,PIN3為低電平,紅燈滅;
- ; 輪流檢測PIN6,PIN7腳電平,欠壓3.9V,10V,紅燈亮,綠燈滅,過壓5.9V,15.9V
- ; 紅燈亮,綠燈滅,alram為TTL高電平,過壓鎖死
- LIST P=12F675
- INCLUDE <P12F675.INC>
- __CONFIG(B'11000101110100')
- ;Highest band gap voltage,0,0,Data memory is not protected
- ;Program memory is code-protected,BOD enabled,MCLR pin is MCLR function
- ;PWRT enabled,WDT disabled,INTOSC oscillator
- ;**************************************
-
- READH EQU 2Ah ;讀到的高2位數據
- READL EQU 2Bh ;讀到的低8位數據
- SOUH EQU 40h ;欠壓設置,高2位存儲地址
- SOU EQU 41h ;欠壓設置,低8位存儲地址
- RLTH EQU 42h ;過壓設置,高2位存儲地址
- RLT EQU 43h ;過壓設置,低8位存儲地址
- ORG 0000H
- GOTO MAIN
- ORG 0004H
- GOTO ADBEGIN
- ORG 0030H
-
- MAIN
- BCF STATUS,RP0 ;BANK 0
- CLRF GPIO
- MOVLW 07H
- MOVWF CMCON ;關閉比較器
-
- BSF STATUS,RP0 ;BANK 1
- CALL 3FFH ; 讀內部振蕩出廠校準字,返回值在W寄存器內
- MOVWF OSCCAL ;校準晶振
-
- MOVLW B'00001011';TRISIO 三態控制器
- MOVWF TRISIO ;設置TRISIO方向控制器,GP0,GP1,GP3為輸入口
- MOVLW B'00010011'
- MOVWF ANSEL ;8分頻晶振,AN0AN1為模擬口,AN2AN3為數字口
-
- BANKSEL OPTION_REG
- MOVLW B'00000000';將預分頻器分配給TIMER0 模塊,2分頻
- MOVWF OPTION_REG ;
-
- BANKSEL INTCON
- MOVLW B'10100000' ;允許全局中斷,禁止外圍中斷,允許TRMO中斷,禁止GP2/INT外部中斷
- MOVWF INTCON ;禁止GPIO端口電平變化中斷,TMR0寄存器沒有溢出,未發生GP2/INT中斷
- ;GP5:GP0 引腳電平均未發生變化
- MOVLW 02H
- MOVWF 24H ;AD通道設置選擇
- MOVLW D'10'
- MOVWF 25H ;過壓后延時采樣,10*90uS=900uS
- ;********************************************
- ;欠壓設置2.5V,5V路對應值3.8V,15V路對應值10V
- MOVLW 0002H
- MOVWF SOUH
- MOVLW 0000H
- MOVWF SOU
- ;*********************************************
- ;過壓設置值3.9V,5V路對應值5.9V,15V路對應15.9V
- MOVLW 0003H
- MOVWF RLTH
- MOVLW 0020H
- MOVWF RLT
-
- MOVLW B'10000001'
- MOVWF ADCON0 ;右對齊,參考電壓Vdd,模擬通道0
- BANKSEL TMR0
- MOVLW D'242'
- MOVWF TMR0
-
- GOTO $
- ;*********************************************
- ;定時中斷后開始AD轉換
- ADBEGIN
- BTFSC INTCON,T0IF ;是否是定時器TMR0中斷
- BANKSEL ADCON0
- BSF ADCON0,GO ;開始轉換
- ADWAIT
- BTFSC ADCON0,GO
- GOTO ADWAIT ;等待轉換完成
- ;**********************************************
- ;AD轉換后數據判斷處理
- READ
- BANKSEL ADRESH ;自動設置存儲地址bank
- MOVF ADRESH,W ;讀電壓值高2位,
- CLRF STATUS
- MOVWF READH ;讀到的高2位數據放到vrevh寄存器
-
- BANKSEL ADRESL ;自動設置存儲地址bank
- MOVF ADRESL,w ;讀電壓低8位
- CLRF STATUS
- MOVWF READL
- ;*****************************************************
- LOWPOWER
- MOVF SOU,W
- SUBWF READL,W
- BTFSS STATUS,C;沒有借位,跳過
- GOTO JUMP1
- MOVF SOUH,W
- CONTIUE1
- SUBWF READH,W
- BTFSS STATUS,C ;沒有借位,跳過
- GOTO ALARM0
-
- OVERPOWER
- MOVF RLT,W
- SUBWF READL,W
- BTFSS STATUS,C ;沒有借位,跳過
- GOTO JUMP2
- MOVF RLTH,W
- CONTIUE2
- SUBWF READH,W
- BTFSS STATUS,C ;;沒有借位,跳過
- GOTO NORMAL
- GOTO ALARM1
- ;*****************************************
- ;時間到,準備選擇通道和賦值
- LOOP
- DECFSZ 24H,F
- GOTO SKIP
- BANKSEL ADCON0
- MOVLW B'10000001'
- MOVWF ADCON0 ;右對齊,參考電壓Vdd,模擬通道0
- MOVLW D'2'
- MOVWF 24H
- GOON
- BCF INTCON,T0IF;恢復定時器繼續判斷
- BANKSEL INTCON
- BSF INTCON,7
- BANKSEL TMR0
- MOVLW D'242'
- ADDWF TMR0,F
- GOTO $
- ;***************************************************
- ;子程序
- SKIP
- BANKSEL ADCON0
- MOVLW B'10000101'
- MOVWF ADCON0 ;右對齊,參考電壓Vdd,模擬通道0
- GOTO GOON
- JUMP1
- INCFSZ SOUH,W
- GOTO CONTIUE1
- JUMP2
- INCFSZ RLTH,W
- GOTO CONTIUE2
- NORMAL
- BANKSEL GPIO
- BTFSC 22H,0 ;為0跳過
- GOTO BACK
- BSF GPIO,2 ;綠燈亮
- BCF GPIO,4 ;紅燈滅
- BACK
- BCF 22H,0
- GOTO LOOP
- ALARM0
- BSF 22H,0
- BANKSEL GPIO
- BCF GPIO,2 ;綠燈滅
- BSF GPIO,4 ;紅燈亮
- GOTO LOOP
- ALARM1
- DECFSZ 25H,F ;為0則跳
- GOTO LOOP
- BANKSEL GPIO
- BSF GPIO,5 ;關機
- BCF GPIO,2 ;紅燈亮
- BSF GPIO,4 ;綠燈滅
- GOTO $
-
- END
復制代碼
|