以下是使用PIC16C711指令系统完成11位A/D转换的程序段。
BSF STATUS,RP0;选页面1
MOVLW 00000010B ;RA0、RA1为模拟通道
MOVWF ADCON1 ;内部参考电压
BCF STATUS,RP0 ;选页面0
MOVLW 11000001B ;选RA0通道和内部时钟
MOVWF ADCON0
MOVLW .125 ;延时125μs,等待输入
CALL WAIT ;稳定
BSF ADCON0,GO ;启动A/D
LOOP BTFSC ADCON0,GO ;判断A/D完成否
GOTO LOOP
MOVF ADRES,W ;取转换结果
ANDLW 0E0 ;屏蔽低5位
MOVWF D1 ;存入D1
BCF STATUS,C
RRF D1,1 ;右移5次
RRF D1,1
RRF D1,1
RRF D1,1
RRF D1,1
MOVF D1,W
MOVWF PORTB ;档位输出
MOVLW 11001001B ;选RA1通道
MOVWF ADCON0
MOVLW .60 ;延时60μs
CALL WAIT
BSF ADCON0,GO ;启动A/D
LOOP1 BTFSC ADCON0,GO ;判断A/D完成否
GOTO LOOP1
MOVF ADRES,W ;A/D转换结果存D0
MOVWF D0
WAIT MOVWF TEMP ;延时子程序
NEXT DECFSZ TEMP,1
GOTO NEXT
RETURN
用这种方法实现的11位A/D转换速度快PIC16C711基本上都是单周期指令,在4MHz振荡频率下指令周期1μs,进行1次A/D转换最短时间20μs;2次A/D转换40μs;2个运放变换时间20μs×2=40μs。总的转换时间为百μs级。
本文介绍的方法电路简单,速度快,调试方便,已用于我们研制的单片机电阻炉温自动控制系统中,取得了预期的效果。对于其他带8位、10位A/D的单片机稍加改动均可使用,具有推广价值。