打印
[PIC®/AVR®/dsPIC®产品]

PIC18F242 单片机 两个中断 老是有复位

[复制链接]
553|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
金箍棒2000|  楼主 | 2021-1-13 12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC18F242-I/SO
8Mhz OSC
距离传感器以ASCII码发送D:065回车换行 给PIC18F242-I/SO板子, 065代表距离,可以变化, D: 以及回车换行固定不变
D:065 后面接回车换行字符两个控制,共7个字符,ASCII字符
D      :   0   6    5   回车  换行
0x44 0x3A 0x30 0x36 0x35 0x0D  0x0A

PIC18F242板子收到以后取出其中的距离数字065 ,(这里假设距离是65厘米,其他的同理可得),用满量程减去这个距离,再跟满量程比
较得到一个百分比,用800乘以这个百分比(即满量程等分为800等分),得到一个800标化以后数值,将这个800标化数值通过UART 485 (RB3 enable MAX485)传给上位机

实现方法
PIC18F242-I/SO接受距离传感器数据采用中断,收中断来了以后,进中断看看是不是0x44, 是则继续等待收下后面6个ASCII byte,一直查询接受标志位一有收数据就去取出来,7个byte,打头的一个是收中断收到0x44,后面6个用等待查询方式收取(在第一个的收中断里面)

PIC18F242每500毫秒左右,通过UART 485发送一幁数据给上位机器,幁以8F开头,其中第7 8 byte是前面提到到800标化数值,

500毫秒是这样实现的,timer 1 做16位定时器,板内部8M时钟四分频以后输入,再设置1:8 prescale,
8M时钟四分频相当于2M,周期0.5us,乘以8,为4us, 16位定时器全长65526, 4x65526=262104us=262ms
不足500毫秒,因此中断程序里面每两次进入才通过UART 485发送一幁数据给上位机器,具体是通过一个全局变量每次加一,全局变量是偶数的时候才发送

目前故障现象
发送格式正确,上位机反应正常,改变距离有反应,但是PIC18F242板子每20秒左右会有一次复位,请教是哪里不对?怀疑是两个中断跑乱了,有什么好的调试和代码修改建议?谢谢群里大侠!

试验过距离传感器数据全部采用中断来收,一个byte一次中断,会出现改变距离没有反应现象,通过UART发数据跟踪发现,把距离往数组里面写的代码后来再也没有进去过,数组里面数字不更新。后来改为一次中断+6次等待接受方式,改变距离有反应了。



PIC18F242.pdf

5.44 MB

sensor-sch-Aug2020.pdf

51.58 KB

rdu.rar

2.2 KB

使用特权

评论回复
沙发
lcczg| | 2021-1-14 17:25 | 只看该作者
串口不发数据有没有复位,距离不变有没有复位?先找找什么能触发

使用特权

评论回复
板凳
金箍棒2000|  楼主 | 2021-1-19 11:35 | 只看该作者
lcczg 发表于 2021-1-14 17:25
串口不发数据有没有复位,距离不变有没有复位?先找找什么能触发

谢谢大侠!距离不变有复位的。

使用特权

评论回复
地板
金箍棒2000|  楼主 | 2021-1-19 11:38 | 只看该作者
lcczg 发表于 2021-1-14 17:25
串口不发数据有没有复位,距离不变有没有复位?先找找什么能触发

但是,即使是距离不变的情况下,测距模块还是周期性地给PIC单片机板子发距离数据的,只是距离一样而已,1秒来一次。

使用特权

评论回复
5
金箍棒2000|  楼主 | 2021-2-1 17:08 | 只看该作者
lcczg 发表于 2021-1-14 17:25
串口不发数据有没有复位,距离不变有没有复位?先找找什么能触发

不发数据也有复位的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

13

帖子

0

粉丝