📄 em78p372n_ad.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 == 0X21 ;ADC高四位组结果变量
D_ADDATAL == 0X22 ;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为输入口
MOV A,@0X01
MOV AISR,A ;选择AD0作为采样口
MOV A,@0X08
MOV ADCON,A ;参考电压为VDD,ADC的时钟预分频1:16
;开ADC的电源,致能ADO采样口
CALL AD_CALI_P ;调用精度校正子程序
BS ADRUN ;开始AD转换
JBC ADRUN ;判断是否转换完成
JMP $-1
MOV A,ADDATA1L ;读取ADC低位元组结果值
MOV D_ADDATAL,A
MOV A,ADDATA1H ;读取ADC高四位组结果值
MOV D_ADDATAH,A
JMP INITIAL
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 + -