第8章 模数转换模块(ADC) 8.8 ADC 转换应用举例
.include \"F2407REGS.H\" ;引用头部文件
.def _c_int0
;(1)建立中断向量表
.sect \".vectors\"
;定义主向量段
RSVECT B _c_int0 ;PM 0 复位向量 INT1 B GISR1 ;PM 2 中断优先级1 INT2 B PHANTOM ;PM 4 中断优先级2 INT3 B PHANTOM ;PM 6 中断优先级3 INT4 B PHANTOM ;PM 8 中断优先级4 INT5
B PHANTOM ;PM A 中断优先级5
1
4
5
6
7
8
171
INT6 B PHANTOM ;PM C 中断优先级6 9
RESERVED B PHANTOM ;PM E 模拟量输入中断(保留) 10
SW_INT8 B PHANTOM ;PM 10 用户定义软件中断 —
…
SW_INT31 B PHANTOM ;PM 3E 用户定义软件中断 ;中断子向量入口定义pvecs
.sect \".pvecs\" ;定义子向量段
PVECTORS B PHANTOM ;保留向量地址偏移量 0000h
B PHANTOM ;保留向量地址偏移量 0001h
B PHANTOM ;保留向量地址偏移量 0002h
B PHANTOM ;保留向量地址偏移量 0003h
B ADCINT_ISR
;保留向量地址偏移量 0004h ADC中断
—
172
B PHANTOM ;保留向量地址偏移量 0005h
…
B PHANTOM ;保留向量地址偏移量 0041h
;(2)主程序:
.text
_c_int0
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK
#81FEH,SCSR1
;CLKIN=6 M,CLKOUT=24 M 173
SPLK #0E8h,WDCR ;关看门狗
LDP #0
SPLK #0001h,IMR SPLK #0FFFFh,IFR CALL ADINIT CLRC INTM CALL AD WAIT: NOP
B WAIT
;(3)ADC初始化程序
ADINIT:
LDP
#225
;允许INT1中断
;清所有中断标志
;初始化ADC程序
;开总中断
;启动模数转换程序
;设置通用定时器 4
174
SPLK #0000H,T4CNT
SPLK #170CH,T4CON
SPLK #075H,T4PER
SPLK #0400H,GPTCONB
SPLK #0FFFFH,EVBIFRB
SPLK #0000H,EVBIMRB LDP #DP_PF2
SPLK #0010H,ADCTRL1 SPLK #8404H,ADCTRL2 SPLK #000FH,MAXCONV SPLK #3210H,CHSELSEQ1
SPLK #7654H,CHSELSEQ2
;设置ADC控制寄存器;16 通道
175
SPLK #0BA98H,CHSELSEQ3
SPLK #0FEDCH,CHSELSEQ4
LDP #DP_SARAM2 SPLK #ADRESULT,ADCOUNT
RET
;(4)启动模数转换程序
AD:
LDP #225
LACL T4CON
OR #40H SACL T4CON
RET
;指向0A00h~0A80h
;启动定时器4
176
;(5)中断程序
GISR1:
;优先级INT1中断子程序入口
;保护现场
LDP #0E0H
LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位ADD #PVECTORS ;加上外设中断入口地址
BACC ;跳到相应的中断服务子程序
ADCINT_ISR:
CLRC SXM
LDP #DP_SARAM2
LAR AR1,ADCOUNT
LAR
AR0,#15
177
LAR AR2,#RESULT0
MAR *,AR2
ADC1: LACC *+,10,AR1
SACH *
ADRK #32
MAR *,AR0
BANZ ADC1,*-,AR2
LDP #DP_PF2
LACL ADCTRL2
OR #4000H AND #0FFDFH SACL ADCTRL2
;复位 SEQ1
;清 INT FLAG SEQ1
178
LDP #DP_SARAM2
LACL ADCOUNT
SUB #ADRESULT+31
BCND ADC2,GEQ
ADD #ADRESULT+32 ;<32
SACL ADCOUNT
B GISR1_RET
ADC2: SPLK #ADRESULT,ADCOUNT ;=32
LACL T4CON
AND #0FFBFH ;停止定时器4,即停止AD转换
SACL T4CON
B
GISR1_RET
179
GISR1_RET: ;中断返回出口
;恢复现场
CLRC INTM ;开总中断,因为一进中断就自动关闭了总中断
RET
;(6)假中断程序
PHANTOM
KICK_DOG RET
END
;复位看门狗
180
因篇幅问题不能全部显示,请点此查看更多更全内容