AD怎么指示?

2020-02-09 11:40发布

高手们,我用两路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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
xyufo2000
1楼-- · 2020-02-09 17:36
自己编点程序吧,又不难。也可以用那个输入捕获。
yealien
2楼-- · 2020-02-09 18:14
也就是上面的GOTO ADOUT1/GOTO ADOUT2里面的ADOUT 子程序要怎么想法检测到AN0与AN1口的状态,来做相应的灯亮/灯灭的动作。
headwolf_83
3楼-- · 2020-02-09 20:34
本质上就是不同的查询两个AD通道,设置通道,启动AD,读数据,然后处理。可以先逐一把AD数据读走了,统一处理,分析。
yealien
4楼-- · 2020-02-09 22:32
关键还有A口的数据检测完了还要检测B口的电平变化状态的。
yealien
5楼-- · 2020-02-09 22:51
 精彩回答 2  元偷偷看……
headwolf_83
6楼-- · 2020-02-09 22:57
用什么指令来实现,转到C语言,不过是多几个IF ELSE的判定,汇编也是一样的,哪里有什么简单的1,2条指令搞定的啊。

一周热门 更多>