| 高手们,我用两路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口的状态,来做相应的灯亮/灯灭的动作。
 |