PIC單片機AD轉(zhuǎn)換匯編程序
;此匯編程序實現(xiàn)A/D轉(zhuǎn)換功能,應用于pic單片機上,A/D采用中斷方式。該程序通過單片機的RA2模擬通道送入
;一直流電壓,當送入的直流電壓大于2.5V時,8個LED閃動,當直流電壓恢復到2.5V以下
;時,LED停止閃動。為了防止干擾,本程序?qū)χ绷麟妷翰蓸?0次后再作判斷,中間的采樣結(jié)
;果用間接尋址的方式存取。
LIST P=18F458
INCLUDE "P18F458.INC"
TIMES EQU 0X20
DEY EQU TIMES+1
ACCALO EQU TIMES+2 ;ACCA為雙精度加數(shù)寄存器
ACCAHI EQU TIMES+3
ACCBLO EQU TIMES+4 ;ACCB為雙精度加法的結(jié)果寄存器
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 ;轉(zhuǎn)向中斷服務(wù)子程序
ORG 0X30
;***雙字節(jié)減法子程序,入口地址ACCB-ACCA,出口地址ACCB***
D_SUB
CALL NEG_A ;求ACCA的補碼
;***雙字節(jié)加法子程序,入口地址ACCB+ACCA,出口地址ACCB***
D_ADD
MOVF ACCALO,0 ;ACCB和ACCA低半字節(jié)相加
ADDWF ACCBLO
BTFSC STATUS,C ;有進位否?
INCF ACCBHI ;有,ACCB高字節(jié)加1,再加ACCAHI
MOVF ACCAHI,0 ;ACCA、ACCB高半字節(jié)相加
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轉(zhuǎn)換器
;在工作狀態(tài),且使AD轉(zhuǎn)換時鐘為8Tosc
MOVLW 0X80
MOVWF ADCON1 ;轉(zhuǎn)換結(jié)果右移,即ADRESH寄存器的高6
;位為"0",且把RA2口設(shè)置為模擬量輸入式
;(注意后面要把RA5改成數(shù)據(jù)I/O方式,以
;輸出顯示瑣存信號)
BCF PIR1,ADIF ;清除A/D轉(zhuǎn)換標志
BSF PIE1,ADIE ;A/D轉(zhuǎn)換中斷允許
BSF INTCON,PEIE ;外圍中斷允許
BSF IPR1,ADIP ;B口變位中斷高優(yōu)先級
BSF RCON,7 ;使能中斷優(yōu)先級
BSF TRISA,2 ;設(shè)置RA2為輸入方式
BCF TRISA,5 ;置RA5為輸出方式,以輸出鎖存信號
BCF TRISC,5
BCF TRISC,3 ;設(shè)置SCK與SDO為輸出方式
MOVLW 0XC0
MOVWF SSPSTAT ;設(shè)置SSPSTAT寄存器
MOVLW 0X30
MOVWF SSPCON1 ;設(shè)置SPI的控制方式,允許SSP方式,并
;且時鐘下降沿發(fā)送,與"74HC595當其
;SCLK從低到高電平跳變時,串行輸入數(shù)據(jù)
;(DI)移入寄存器"的特點相應
CLRF FLAG
RETURN
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
評論