|
一:458ad的介紹和功能 1.458有8路(p60-p67)8bit精度的ad,其中p60,p63可以由ad內(nèi)部的放大,達(dá)到12bit的精度。 當(dāng)待測電流較小,可以通過ad的精度調(diào)整來提高精度。 用到p60,p63且用到ad內(nèi)部的放大器時(shí),測試結(jié)果以實(shí)測為準(zhǔn)。 2.ad采樣的完成可以用中斷也可以用查詢 3.code option的WDT使能,458的AD中斷打開,通過相關(guān)設(shè)置,當(dāng)Em78p458在睡眠狀態(tài)時(shí),458的AD轉(zhuǎn)換還可以由WDT的clock進(jìn)行,轉(zhuǎn)換完成后,ic可以被喚醒 二:458的ad轉(zhuǎn)換 2.1 458的ad轉(zhuǎn)換的說明。 通過相關(guān)設(shè)置,458的ad能夠轉(zhuǎn)換完成: 458的ad轉(zhuǎn)換可以用查詢也可以用中斷 2.2 458的ad轉(zhuǎn)換用到的相關(guān)特殊寄存器: ADCON(R9),AD-CMP-CON(IOCA0),GCON(IOC90),IMR(IOCF0) Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 ADCON - - IOCS ADRUN ADPD ADIS2 ADIS1 ADIS0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 AD-CMP-CON VREFS CE COE IMS2 IMS1 IMS0 CKR1W CKR0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 GCON OP2E OP1E G22 G21 G20 G12 G11 G10 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 IOCF0 - CMPIE PWM2IE PWM1E ADIE EXIE ICIE TCIE 2.3 458的ad轉(zhuǎn)換的設(shè)置步驟和舉例(相關(guān)定義見庫文件em78458.inc)。 2.3.1 用中斷完成458的ad轉(zhuǎn)換。 下面的程式,用p60實(shí)現(xiàn)ad轉(zhuǎn)換,用到ad的內(nèi)部2倍放大。 STEPS: 1.對寄存器AD-CMP-CON的IMS2:IMS0進(jìn)行設(shè)置 2.設(shè)置寄存器ADCON的ADIS2:ADIS0,選擇AD輸入通道 3 對寄存器GCON寫入數(shù)據(jù),選擇OP放大及倍數(shù) 4.定義AD轉(zhuǎn)換的時(shí)鐘速率 5.對寄存器ADCON的ADPD置1 6.AD中斷使能,中斷標(biāo)志位清0 7.用中斷完成AD轉(zhuǎn)換,下指令ENI然后設(shè)置寄存器ADCON的ADRUN為1;如果要用查詢,設(shè)置寄存器ADCON的ADRUN為1后,檢測該位:該位為1,繼續(xù)查詢;該位為0,一次AD轉(zhuǎn)換完成。 S_A==0X10 S_S==0X11 CNT1==0X12 INCLUDE "D:\HEADFILE\EM78458\EM78458.INC" ORG 0X000 JMP INITIAL ORG 0X008 MOV S_A,A SWAP S_A SWAPA STATUS MOV S_S,A MOV A,ISR AND A,@11110111B MOV ISR,A MOV A,ADDATA MOV CNT1,A BS ADCON,ADRUN ;START TO RUN THE ADC SWAPA S_S MOV STATUS,A SWAPA S_A RETI INITIAL: BC ADCON,IOCS MOV A,@0XFF IOW PORT6 MOV A,@00000100B ;IMS2,IMS1,IMS0==001,CKR1,CKR0==00 IOW AN_CMP_CON MOV A,@0X00 ;ADIS2,ADID1,ADID0==000 MOV ADCON,A MOV A,@01000001B ;ENABLE OP1E IOW GCON BS ADCON,ADPA ;A/D START SAMPLING MOV A,@00001000B ;ENABLE AD INTERRUPT IOW IMR BC ISR,ADIF ENI ;ENABLE THE INTERRUPT FUCTION BS ADCON,ADRUN ;START TO RUN THE ADC NOP NOP NOP JMP $-3 2.3.2 用查詢完成458的ad轉(zhuǎn)換。 下面的程式,用p60實(shí)現(xiàn)ad轉(zhuǎn)換,用到ad的內(nèi)部2倍放大。 STEPS: 1.對寄存器AD-CMP-CON的IMS2:IMS0進(jìn)行設(shè)置 2.設(shè)置寄存器ADCON的ADIS2:ADIS0,選擇AD輸入通道 3 對寄存器GCON寫入數(shù)據(jù),選擇OP放大及倍數(shù) 4.定義AD轉(zhuǎn)換的時(shí)鐘速率 5.對寄存器ADCON的ADPD置1 6.AD中斷不使能 7.用查詢完成ad轉(zhuǎn)換,設(shè)置寄存器ADCON的ADRUN為1后,檢測該位:該位為1,繼續(xù)查詢;該位為0,一次AD轉(zhuǎn)換完成。 CNT1==0X12 INCLUDE "D:\HEADFILE\EM78458\EM78458.INC" ORG 0X000 JMP INITIAL ORG 0X050 INITIAL: BC ADCON,IOCS MOV A,@0XFF IOW PORT6 MOV A,@00000100B ;IMS2,IMS1,IMS0==001,CKR1,CKR0==00 IOW AN_CMP_CON MOV A,@0X00 ;ADIS2,ADID1,ADID0==000 MOV ADCON,A MOV A,@01000001B ;ENABLE OP1E IOW GCON BS ADCON,ADPA ;A/D START SAMPLING MOV A,@00001000B ;ENABLE AD INTERRUPT IOW IMR BC ISR,ADIF DISI BS ADCON,ADRUN ;START TO RUN THE ADC POLLING: JBC ADCON,ADRUN ;USE DEMANDING JMP POLLING NOP MOV A,ADDATA MOV CNT1,A NOP NOP JMP POLLING 三.458ad的校驗(yàn) 3.1當(dāng)測試要求較高時(shí),可以進(jìn)行AD的校驗(yàn)(如模擬電壓較小,用到OP放大) 3.2 AD校驗(yàn)用到的相關(guān)特殊寄存器 ADCON(R9),AD-CMP-CON(IOCA0),GCON(IOC90),IOCA1 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 ADCON - - IOCS ADRUN ADPD ADIS2 ADIS1 ADIS0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 AD-CMP-CON VREFS CE COE IMS2 IMS1 IMS0 CKR1W CKR0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 GCON OP2E OP1E G22 G21 G20 G12 G11 G10 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 IOCA1 CALI2 SIGN2 VOF2(2) VOF2(1) VOF2(0) - PWM2(9) PWM2(8) 3.3 AD校驗(yàn)的步驟說明和范例程式(相關(guān)定義見庫文件em78458.inc)。 如下的范例程式,p60作為AD輸入口,P60用到OP放大 ;steps: 1.對寄存器AD-CMP-CON的IMS2:IMS0進(jìn)行設(shè)置 2.設(shè)置寄存器ADCON的ADIS2:ADIS0,選擇AD輸入通道 3 對寄存器GCON寫入數(shù)據(jù),選擇OP放大及倍數(shù) 4.定義AD轉(zhuǎn)換的時(shí)鐘速率 5.對寄存器ADCON的ADPD置1 6.使能校驗(yàn)功能 7.對寄存器ADCON的ADRUN置1 8.轉(zhuǎn)換完成,檢查得到的ADDATA值:如果為0,修改校驗(yàn)系數(shù),如果不為0,校驗(yàn)結(jié)束。 9.不使能校驗(yàn)功能 INCLUDE <78458.INC> ORG 0X000 JMP INITIAL ORG 0X020 INITIAL: BC ADCON,IOCS MOV A,@0XFF IOW PORT6 MOV A,@00000100B ;IMS2,IMS1,IMS0==001,CKR1,CKR0==00 IOW AN_CMP_CON MOV A,@0X00 ;ADIS2,ADID1,ADID0==000 MOV ADCON,A MOV A,@01000101B ;ENABLE OP1E IOW GCON BS ADCON,ADPA ;A/D START SAMPLING BS ADCON,IOCS MOV A,@0X80 MOV TEMP,A IOW IOC71 ;ENABLE CALIBRATION BC ADCON,IOCS RE_SAMPLE: BS ADCON,ADRUN ;START TO RUN THE ADC JBC ADCON,ADRUN JMP $-1 MOV A,ADDATA JBS STATUS,Z JMP NON_ZERO ;UNTIL ADDATA!=0X00 BS ADCON,IOCS MOV A,@00001000B ;CALIBRATION ADD TEMP,A MOV A,TEMP IOW IOC71 BC ADCON,IOCS JMP RE_SAMPLE NON_ZER BS ADCON,IOCS BC TEMP,7 ;DISABLE CALIBRATION MOV A,TEMP IOW IOC71 ;STORE CALIBRATION DATA BC ADCON,IOCS NOP NOP JMP $ 四.458ad的喚醒ic 4.1 458的AD在睡眠時(shí)也可以用WDT的clock運(yùn)行(WDT要使能),如果AD中斷使能,AD轉(zhuǎn)換完成后能喚醒IC 4.2 AD喚醒ic用到的相關(guān)特殊寄存器 ADCON(R9),AD-CMP-CON(IOCA0),GCON(IOC90),IMR(IOCF0)
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 ADCON - - IOCS ADRUN ADPD ADIS2 ADIS1 ADIS0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 AD-CMP-CON VREFS CE COE IMS2 IMS1 IMS0 CKR1W CKR0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 GCON OP2E OP1E G22 G21 G20 G12 G11 G10 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 IOCF0 - CMPIE PWM2IE PWM1E ADIE EXIE ICIE TCIE 4.3 AD校驗(yàn)的步驟說明和范例程式(相關(guān)定義見庫文件em78458.inc)。 4.3.1AD轉(zhuǎn)換完成,喚醒IC后,程式繼續(xù)往下執(zhí)行 如下的范例程式,p60作為AD輸入口,用來喚醒ic ;steps: 1.對寄存器AD-CMP-CON的IMS2:IMS0進(jìn)行設(shè)置 2.設(shè)置寄存器ADCON的ADIS2:ADIS0,選擇AD輸入通道 3 對寄存器GCON寫入數(shù)據(jù),選擇OP放大及倍數(shù) 4.定義AD轉(zhuǎn)換的時(shí)鐘速率 5.對寄存器ADCON的ADPD置1 6.使能AD中斷 7.WDT使能,PRESCALER TO WDT(比值設(shè)置大于1:2) 8.DISI(喚醒后,程式繼續(xù)執(zhí)行) 9.對寄存器ADCON的ADRUN置1 10.下SLEEP指令。 CNT1==0X12 INCLUDE "D:\HEADFILE\EM78458\EM78458.INC" ORG 0X000 JMP INITIAL ORG 0X050 INITIAL: BC ADCON,IOCS MOV A,@0XFF IOW PORT6 MOV A,@0X0F CONTW MOV A,@0X80 IOW IOCE0 MOV A,@00000111B ;IMS2,IMS1,IMS0==001,CKR1,CKR0==11 IOW IOCA0 ;AD_CMP_CON MOV A,@0X00 ;ADIS2,ADID1,ADID0==000 MOV ADCON,A MOV A,@01000101B ;ENABLE OP1E IOW GCON BS ADCON,ADPD ;A/D START SAMPLING MOV A,@00001000B ;ENABLE AD INTERRUPT IOW IMR BC ISR,ADIF DISI ;DISABLE THE INTERRUPT FUCTION BS ADCON,ADRUN SLEP NOP NOP MOV A,ADDATA MOV CNT1,A BC ADCON,IOCS MOV A,@00 IOW IOCE0 JMP $-1 4.3.2AD轉(zhuǎn)換完成,喚醒IC后,程式繼續(xù)往下執(zhí)行 如下的范例程式,p60作為AD輸入口,用來喚醒ic ;steps: 1.對寄存器AD-CMP-CON的IMS2:IMS0進(jìn)行設(shè)置 2.設(shè)置寄存器ADCON的ADIS2:ADIS0,選擇AD輸入通道 3 對寄存器GCON寫入數(shù)據(jù),選擇OP放大及倍數(shù) 4.定義AD轉(zhuǎn)換的時(shí)鐘速率 5.對寄存器ADCON的ADPD置1 6.使能AD中斷 7.WDT使能,PRESCALER TO WDT(比值設(shè)置大于1:2) 8.ENI(喚醒后,程式跳到中斷開始執(zhí)行) 9.對寄存器ADCON的ADRUN置1 10.下SLEEP指令。 S_A==0X10 S_S==0X11 CNT1==0X12 INCLUDE "D:\HEADFILE\EM78458\EM78458.INC"
ORG 0X000 JMP INITIAL ORG 0X008 MOV S_A,A SWAP S_A SWAPA STATUS MOV S_S,A MOV A,ISR AND A,@11110111B MOV ISR,A MOV A,ADDATA MOV CNT1,A SWAPA S_S MOV STATUS,A SWAPA S_A RETI INITIAL: BC ADCON,IOCS MOV A,@0XFF IOW PORT6 MOV A,@0X0F CONTW MOV A,@0X80 IOW IOCE0 MOV A,@00000111B ;IMS2,IMS1,IMS0==001,CKR1,CKR0==11 IOW IOCA0 ;AD_CMP_CON MOV A,@0X00 ;ADIS2,ADID1,ADID0==000 MOV ADCON,A MOV A,@01000101B ;ENABLE OP1E IOW GCON BS ADCON,ADPD ;A/D START SAMPLING MOV A,@00001000B ;ENABLE AD INTERRUPT IOW IMR BC ISR,ADIF ENI ;ENABLE THE INTERRUPT FUCTION BS ADCON,ADRUN SLEP NOP NOP BC ADCON,IOCS MOV A,@00 IOW IOCE0 JMP $-1 |