男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
PIC單片機AD轉換匯編程序
PIC單片機AD轉換匯編程序
 更新時間:2009-7-22 16:39:02  點擊數:0
【字體: 字體顏色
/script>

;此匯編程序實現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

;*********軟件延時子程序****************
DELAY
MOVLW 0XFF
MOVWF DEYH
AGAIN1 MOVLW 0XFF
MOVWF DEYL
AGAIN2 NOP
DECFSZ DEYL
GOTO AGAIN2
DECFSZ DEYH
GOTO AGAIN1
RETURN

;*************** A/D中斷服務子程序*****************
INTSERVE
BCF PIR1,ADIF ;清除A/D轉換標志
MOVF ADRESH,W
MOVWF INDF0 ;讀取并存儲A/D轉換結果的高兩位
INCF FSR0L
MOVF ADRESL,W
MOVWF INDF0
INCF FSR0L ;讀取并存儲A/D轉換結果的低8位
DECF TIMES,1 ;A/D轉換次數減1
MOVLW 0X02
MOVWF DEY
LOOP13 DECFSZ DEY,1
GOTO LOOP13 ;給予一定的延時,保證兩次A/D轉換期間
;2Tad的間隔時間和電容的采樣時間
BSF ADCON0,2 ;啟動下一次A/D轉換
RETFIE ;中斷返回

;********** LED閃爍報警子程序*************
ALARM
MOVLW 0X01
XORWF FLAG,1
BTFSS FLAG,0 
CALL DISPLAY0 ;調用顯“0”子程序
NOP
BTFSC FLAG,0
CALL DISPDARK ;調用顯“DARK”子程序
RETURN

;**********顯全0子程序*************
DISPLAY0
TRANSMIT ;SPI發送顯示子模塊
CLRF PORTA ;LACK送低電平,為鎖存做準備
MOVLW 0X08
MOVWF TIMES
LOOP80 MOVLW 0XC0 ;顯示值為0,C0H為0的段碼
MOVWF SSPBUF ;啟動發送 
WAIT
BTFSS PIR1,SSPIF
GOTO WAIT ;等待發送結束
BCF PIR1,SSPIF ;清除中斷標志
DECFSZ TIMES
GOTO LOOP80 ;一次要發送完8個數據 
BSF PORTA,5 ;最后給一個鎖存信號,代表一次顯示任務完成
RETURN

;**********顯示全DARK子程序*************
DISPDARK
TRANSMIT1 ;SPI發送顯示子模塊
CLRF PORTA ;LACK送低電平,為鎖存做準備
MOVLW 0X08
MOVWF TIMES
LOOP8D MOVLW 0XFF ;顯示值為0,FFH為DARK的段碼
MOVWF SSPBUF ;啟動發送 
WAIT1
BTFSS PIR1,SSPIF
GOTO WAIT1 ;等待發送結束
BCF PIR1,SSPIF ;清除中斷標志
DECFSZ TIMES
GOTO LOOP8D ;一次要發送完8個數據 
BSF PORTA,5 ;最后給一個鎖存信號,代表一次顯示任務完成
RETURN

;*********PIC單片機A/D轉換匯編程序主程序************
;轉載請保留文章原始出處http://www.51hei.com ;單片機
MAIN NOP
CALL INITIAL ;初始化
LOOP
MOVLW 0X80 ;轉換結果右移,及ADRESH寄存器的高6位為"0"
;且把RA2口設置為模擬量輸入式(注意后面要把
; RA5改成數據I/O方式,以輸出顯示瑣存信號)
MOVWF ADCON1
MOVLW BEGFSR
MOVWF FSR0L ;給出間接尋址時FSR的初值
MOVLW 0X0A
MOVWF TIMES ;每一輪A/D連續采樣10次
BSF INTCON,GIE ;總中斷打開,及可以進行A/D轉換中斷
BSF ADCON0,2 ;啟動A/D轉換
LOOP1 MOVF TIMES,W
BTFSS STATUS,Z
GOTO LOOP1 ;等待A/D轉換中斷
BCF INTCON,GIE ;A/D轉換次數到10次,關閉中斷
NOP
CLRF ACCBHI
CLRF ACCBLO ;雙精度加法的結果寄存器清0,為后面準備
MOVLW 0X0A
MOVWF TIMES
MOVLW BEGFSR
MOVWF FSR0L
LOOP15 MOVF INDF0,W
MOVWF ACCAHI
INCF FSR0L
MOVF INDF0,W
MOVWF ACCALO
INCF FSR0L
CALL D_ADD
DECFSZ TIMES
GOTO LOOP15
NOP ;計算得到10次A/D轉換的和
MOVLW 0X84
MOVWF ADCON1 ;把RA5設成數字I/O,以輸出顯示鎖存信號
MOVLW 0X14
MOVWF ACCAHI
CLRF ACCALO
CALL D_SUB ;通過雙精度減判斷模擬量是否達到報警限
;度(1400H=200H*0AH,200H與2.5V對應)
BTFSS ACCBHI,7
CALL ALARM ;若ACCBHI的最高位為1,則證明減法結
;果為負,即直流電壓值超過2.5V,則報警
NOP
BTFSC ACCBHI,7
CALL DISPLAY0 ;若沒有超過2.5V,則不報警,8個LED
;同時顯示0
CALL DELAY ;軟件延時,使電壓檢測不要過于頻繁
GOTO LOOP ;重復檢測輸入的直流電壓值
END 
  • 上一篇: PIC16C5X單片機概述
  • 下一篇: PIC16F877A的四位數碼管電子鐘
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 湘西| 夹江县| 定州市| 新郑市| 江西省| 巩义市| 阳城县| 灌阳县| 汉阴县| 芜湖市| 肥乡县| 石家庄市| 苏尼特左旗| 邯郸市| 芷江| 轮台县| 东光县| 宁德市| 巩义市| 哈巴河县| 深水埗区| 万山特区| 翁牛特旗| 独山县| 广平县| 平远县| 垫江县| 科技| 宁乡县| 鸡泽县| 香河县| 延庆县| 安溪县| 宁都县| 新巴尔虎左旗| 永康市| 巴青县| 闻喜县| 南和县| 库尔勒市| 和龙市|