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次等待接受方式,改变距离有反应了。
?
|