?? em78p372n_ad_wake up.dt
字號:
;**************************************************************************
;以下的程序是在睡眠模式下實現P50的AD轉換,并把轉換的結果存儲在
;D_ADDATAL和D_ADDATAH中,采用內部VDD作為參考電壓。
;**************************************************************************
;MCU:EM78P372N
;Oscillator:IRC 4MHz
;Clock:2
;WDT: Disable
;編譯軟件:eUIDE version 1.02.09.07
INCLUDE "EM78P372N.INC"
COUNTER == 0X10 ;校正AD次數
D_ADDATAH == 0X11 ;ADC高四位組結果變量
D_ADDATAL == 0X12 ;ADC低位元組結果變量
ORG 0X00
JMP INITIAL
ORG 0X08
INITIAL:
WDTC
DISI
BS S_BANK
MOV A,@0X7F
MOV SCR,A ;選擇4MHz
BC S_BANK
BC IOCS
MOV A,@0X01
IOW P5CR ;PORT5為輸入口
BS S_BANK ;選擇rpage 1
BC IDLE ;IDLE=0
BC S_BANK ;選擇RAPGE 0
MOV A,@0X01
MOV AISR,A ;選擇AD0作為采樣口
MOV A,@8
MOV ADCON,A ;參考電壓為VDD,ADC的時鐘預分頻1:16
;開ADC的電源,致能ADO采樣口
BS ADWE ;使能AD喚醒功能
CALL AD_CALI_P ;調用精度校正子程序
BS ADRUN ;開始AD轉換
SLEP ;進入睡眠模式
NOP
WDTC
JBC ADRUN ;判斷是否轉換完成
JMP $-1
MOV A,ADDATA1L ;讀取ADC低位元組結果值
MOV D_ADDATAL,A
MOV A,ADDATA1H ;讀取ADC高四位組結果值
MOV D_ADDATAH,A
JMP $ ;進入無限循環
;********************************************************
; AD校正子程序部分
;********************************************************
AD_CALI_P: ;校正ADC位準正電壓
MOV A,@0X07
MOV COUNTER,A
MOV A,@0XF8 ;使能ADC位準校正功能
MOV ADOC,A
CAL_LOOP_P:
BS ADRUN ;開始AD轉換
JBC ADRUN ;判斷是否轉換完成
JMP $-1
MOV A,ADDATA1H
AND A,@0X0F
JBS Z
JMP CAL_STILL_P
MOV A,ADDATA1L
JBC Z ;判斷ADC低位元組結果值是否為0
JMP CAL_END
CAL_STILL_P:
MOV A,@0X08
SUB ADOC,A ;每次微調2LSB
DJZ COUNTER ;至多減七次
JMP CAL_LOOP_P
AD_CALI_N: ;校正ADC位準負電壓
MOV A,@0X07
MOV COUNTER,A
MOV A,@0X80 ;使能ADC位準校正功能
MOV ADOC,A
CAL_LOOP_N:
BS ADRUN ;開始AD轉換
JBC ADRUN ;判斷是否轉換完成
JMP $-1
MOV A,ADDATA1H
AND A,@0X0F
JBS Z
JMP CAL_STILL_N
MOV A,ADDATA1L ;判斷ADC低位元組結果值是否為0
JBC Z
JMP CAL_END
CAL_STILL_N:
MOV A,@0X08
ADD ADOC,A ;每次微調2LSB
DJZ COUNTER ;至多減七次
JMP CAL_LOOP_N
CAL_END:
BC CALI ;除能ADC位準校正功能
RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -