STC12C5A16S2单片机的AD转换功能,采用中断方式的C代码问题。

STC12C5A16S2单片机的AD转换功能,采用中断方式的C代码问题。,第1张

void adc_isr() interrupt 5 using 1

{

......

ch++

...

}

请教您是如何测试判断,程序根本就没有进入过AD的中断处理程序?

第一部分,定义寄存器地址,

主程序,main 对控制寄存器进行配置,定时器初始化,AD初始化及通道选择,然后用while(1)等待中断。

interrupt time,定时器中,对AD进行处理

可以试试这样一个函数

我不知道你按钮式高电平有效还是低电平有效,假设定义了一个函数读取按钮状态,按下返回一getkey()

代码可以这样写

for(i=0i<10000i++)

{

if

(!getkey())

break

}

可以试试这段代码,至于0.2s只能通过实验修改那个循环次数来确定了,不能很准确。

当然要在消抖之后,也就是延时10ms之后。

还有一个办法更准确一些,把按钮放在中断里,允许上升沿和下降沿同时触发。

按钮被按下后消抖10ms后重新启动中断,同时启动定时器。建立两个全局变量,一个保存计时器状态,一个保存按钮状态。

计时器启动后及时器状态置1,按钮启动后按钮置1。当按钮被松开时判断定时器是否正在计时,如果正在计时表示不到0.2s关定时器,如果已经超了时间直接把按钮状态置0就可以了。如果计时器到时按钮状态为一直接关闭灯就可以了。这是大致思路你看看行不行把。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8109172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存