高手们,我用两路AD转换通道进行两路AD转换,一路光敏电阻,一路人体感应,当光敏电阻感觉到天黑时,输出高电平,灯亮; 当天亮时,灯灭。当有人靠近时,人体感应检测到信号,输出高电平,灯亮; 当人离开时,灯灭。
检测程序如下:
TEST1 ;人体感应检测
MOVLW B'01000001' ;转换时钟频率为内部时钟的1/8,AN0通道
MOVWF ADCON0 ;允许ADC工作,暂不开启AD转换
ATODC1
BTFSS INTCON,T0IF ;等待和循环检测TMR0溢出中断标志位
GOTO ATODC1 ;标志位未溢出,返回
BCF INTCON,T0IF ;溢出,清标志位
BSF ADCON0,GO ;启动A/D转换
WAIT1
BTFSS PIR1,ADIF ;等待A/D转换结束,检测标志位
GOTO WAIT1 ;未完成,返回
MOVF ADRESH,W ;转换完成,读结果到W
MOVWF TEMP1 ;将结果转存临时寄存器
SUBWF TEMP1,1 ;相减后,W中的值不变
BTFSS STATUS,Z ;看与上次的结果是否一致
GOTO ATODC1 ;
SUBLW 0AAH ;转换结果与立即数相减,看AN0口的输入电压压是否提高
BTFSS STATUS,C ;测试C位是否有借位
GOTO ADOUT1 ;为0,表示有人靠近,转去执行相应指示程序
CALL DELAY ;为1,表示无人靠近,延时,准备下一个通道的检测
TEST2 ;光敏电阻检测
MOVLW B'01001001' ;转换时钟频率为内部时钟的1/8,AN0通道
MOVWF ADCON0 ;允许ADC工作,暂不开启AD转换
ATODC2
BTFSS INTCON,T0IF ;等待和循环检测TMR0溢出中断标志位
GOTO ATODC2 ;标志位未溢出,返回
BCF INTCON,T0IF ;溢出,清标志位
BSF ADCON0,GO ;启动A/D转换
WAIT2
BTFSS PIR1,ADIF ;等待A/D转换结束,检测标志位
GOTO WAIT2 ;未完成,返回
MOVF ADRESH,W ;转换完成,读结果到W
MOVWF TEMP2 ;将结果转存临时寄存器
SUBWF TEMP2,1 ;相减后,W中的值不变
BTFSS STATUS,Z ;看与上次的结果是否一致
GOTO ATODC2 ;
SUBLW 0AAH ;转换结果与立即数相减,看AN0口的输入电压压是否提高
BTFSS STATUS,C ;测试C位是否有借位
GOTO ADOUT2 ;为0,表示有人靠近,转去执行相应指示程序
谁能提示一下这个指示程序应该怎么写呢?也就是上面的GOTO ADOUT1/GOTO ADOUT2里面的ADOUT 子程序要怎么想法检测到AN0与AN1口的状态,来做相应的灯亮/灯灭的动作。 |