PIC單片機AD轉換匯編程序
;此匯編程序實現A/D轉換功能,應用于pic單片機上,A/D采用中斷方式。該程序通過單片機的RA2模擬通道送入
;一直流電壓,當送入的直流電壓大于2.5V時,8個LED閃動,當直流電壓恢復到2.5V以下
;時,LED停止閃動。為了防止干擾,本程序對直流電壓采樣10次后再作判斷,中間的采樣結
;果用間接尋址的方式存取。
LIST P=18F458
INCLUDE "P18F458.INC"
TIMES EQU 0X20
DEY EQU TIMES+1
ACCALO EQU TIMES+2 ;ACCA為雙精度加數寄存器
ACCAHI EQU TIMES+3
ACCBLO EQU TIMES+4 ;ACCB為雙精度加法的結果寄存器
ACCBHI EQU TIMES+5
FLAG EQU TIMES+6
DEYH EQU TIMES+7
DEYL EQU TIMES+9
BEGFSR EQU 0X30 ;間接尋址FSR的起始值(宏定義方式給出)
ORG 0X0000
GOTO MAIN
ORG 0X0008
GOTO INTSERVE ;轉向中斷服務子程序
ORG 0X30
;***雙字節減法子程序,入口地址ACCB-ACCA,出口地址ACCB***
D_SUB
CALL NEG_A ;求ACCA的補碼
;***雙字節加法子程序,入口地址ACCB+ACCA,出口地址ACCB***
D_ADD
MOVF ACCALO,0 ;ACCB和ACCA低半字節相加
ADDWF ACCBLO
BTFSC STATUS,C ;有進位否?
INCF ACCBHI ;有,ACCB高字節加1,再加ACCAHI
MOVF ACCAHI,0 ;ACCA、ACCB高半字節相加
ADDWF ACCBHI
RETURN ;子程序返回
;************** ACCA取補子程序*****************
NEG_A
COMF ACCALO ;ACCALO取反加1
INCF ACCALO
BTFSC STATUS,Z ;低8位有進位嗎?
DECF ACCAHI ;有,ACCAHI減1,再取反
COMF ACCAHI ;否則ACCAHI直接取反
RETURN ;子程序返回
;*********初始化子程序***************
INITIAL
CLRF INTCON ;禁止總中斷和外圍中斷
MOVLW 0X51
MOVWF ADCON0 ;選擇AD通道為RA2,且打開A/D轉換器
;在工作狀態,且使AD轉換時鐘為8Tosc
MOVLW 0X80
MOVWF ADCON1 ;轉換結果右移,即ADRESH寄存器的高6
;位為"0",且把RA2口設置為模擬量輸入式
;(注意后面要把RA5改成數據I/O方式,以
;輸出顯示瑣存信號)
BCF PIR1,ADIF ;清除A/D轉換標志
BSF PIE1,ADIE ;A/D轉換中斷允許
BSF INTCON,PEIE ;外圍中斷允許
BSF IPR1,ADIP ;B口變位中斷高優先級
BSF RCON,7 ;使能中斷優先級
BSF TRISA,2 ;設置RA2為輸入方式
BCF TRISA,5 ;置RA5為輸出方式,以輸出鎖存信號
BCF TRISC,5
BCF TRISC,3 ;設置SCK與SDO為輸出方式
MOVLW 0XC0
MOVWF SSPSTAT ;設置SSPSTAT寄存器
MOVLW 0X30
MOVWF SSPCON1 ;設置SPI的控制方式,允許SSP方式,并
;且時鐘下降沿發送,與"74HC595當其
;SCLK從低到高電平跳變時,串行輸入數據
;(DI)移入寄存器"的特點相應
CLRF FLAG
RETURN
單片機相關文章:單片機教程
單片機相關文章:單片機視頻教程
單片機相關文章:單片機工作原理
評論