永发信息网

你好,向你请教个问题。我是个大三学生,刚学单片机不久,劳烦你多多指教。

答案:2  悬赏:20  手机版
解决时间 2021-11-12 11:08
  • 提问者网友:抽煙菂渘情少年
  • 2021-11-11 12:47
你好,向你请教个问题。我是个大三学生,刚学单片机不久,劳烦你多多指教。
最佳答案
  • 五星知识达人网友:上分大魔王
  • 2021-11-11 13:34
这种温度传感器和单片机是以它自己独有的一种串行通信方式来进行的。基本上所有的串行通信在进行期间都不允许中断掉去干其他事情。 数据传输过程中一旦中断,中断后即使你的现场保护的很好,也白费。因为数据是一个位一个位传的,在向传感器发数据或者命令的时候,它只要一个完整的8位传完后对方才能知道你所发的是什么数据。并且传感器给你数据的时候,它可不管你此时是否中断了 ,它只是一口气发送完,你要就收,不要拉倒。
所以,读传感器的时候,绝对不可以中断干其他事情,只有对传感器发完指令,然后接受完传感器送来的数据后,才能进行中断等其他操作。

另外,我对你使用CCP1做捕捉功能却还用定时器0及其中断不是太理解。因为用捕捉的话,是应该开定时器1的,而且定时器1的中断不需要开,定时器只是给一个计数的功能。就是说,当外部有脉冲进来时候,打开定时器1,定时器1开始计数。当收到下一个脉冲的时候,ccp1模块自动停止计数,根据你设置进行中断(CCP中断,不是定时器1的中断)。然后你可以再中断服务子程序里读取TMR1H和TMR1L送到CCPR1H和CCPR1L里面的数据。就是两个脉冲之间的时间差(其实是两个脉冲之间间隔了N个时钟周期)。所以跟TRM0中断没有什么关系。追问嗯,你说的这个方法我正打算这样修改。这个程序里面之所以用到TMR0,是我借用我买的这个板子的例程序,他是用TMR0而不是T1。然后我现在遇到一个更奇怪的问题,我把它里面解码的子程序弄出来,单独来使用,只希望把接收到的按键的数据显示出来,却发现按他原来的时间判断不行,必须把判断时间范围扩大,这样才能接收到,而且按键反应不灵敏,在原来的例程序里面却非常正常。你有邮箱吗,我想问更具体点,初学者,小问题居多。来自:求助得到的回答
全部回答
  • 1楼网友:鱼忧
  • 2021-11-11 15:05
单片机要解决的无非是“时间问题”与“空间问题”。你的这个问题就是一个时间冲突的问题,解决的方法是分时进行,当读写DS18B20时让它独占CPU的时间,而一旦检测到有红外线,就不要读写DS18B20,先完成红外线的所有接受这后再去读写DS18B20。因为红外遥控的机会很少,而读写DS18B20如果是一秒一次也已经是足够了,你会有足够的时间来分别处理的。追问你说的方法我也试过,不知道为什么还是不行。而且这样做的话,得到的温度有点奇怪,变化很大,而且数据容易乱跳。而且死机的机率变得大很多了,不知道为什么有时会死机呢
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯