发表于:2011/1/10 20:05:25
#0楼
相关程序是从网上下载,其发送数据的部分没有问题也好如我之前的贴子一样,只是电平不同,
但收数部份总是不对,
按照我与一个仪表传回的485信号来看,应是有6个字节传回,前面两个字节表示当前的温度数
但用此方法收回的字节数不定
由6~12位,通常,11位时前面的四位会是00 00 00 00或者是80 00 00 00
后面的第五位六位才是想要的数据,而且,约有70%收到的数据是正确的,其余的全部不对
请教各位老师,都几个星期搞不定啊!
;********从PC 机接收数据子程序********
OUTPUT:
;程序一开始是用了SETB RXD
JB RXD, $ ;判断是否有起始位出现 这个起始位由谁来定? 等待起始位!判断0的出现!
;应有个时间限制.过时不候
;是发送回来吗?如果一直是1就不变动了
lcall delaybps
MOV R3,#8
OUT:
MOV C ,RXD
clr P1.7;收数时灯亮
RRC A
lcall delaybps
DJNZ R3,OUT ;接收8 位数据
JNB RXD ,$ ;判断是否有停止位出现,如果通信出了问题就要S循环了
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delaybps: ;一直等到计时到了再做工作
JNB TF1, $ ;查计时器0的溢出标志,为0则转移,且不影响标志位
;此时为标志有溢出,即时间到,重新计数
CLR TF1 ;计时器0溢出标志清空
MOV TH1, #0feH ;重置计时器0的高8位; 自动重装,作用是否多余?
MOV TL1, #07FH ;重置计时器0的低8位
RET
;====================================================
;==模拟收发结束
;====================================================
但收数部份总是不对,
按照我与一个仪表传回的485信号来看,应是有6个字节传回,前面两个字节表示当前的温度数
但用此方法收回的字节数不定
由6~12位,通常,11位时前面的四位会是00 00 00 00或者是80 00 00 00
后面的第五位六位才是想要的数据,而且,约有70%收到的数据是正确的,其余的全部不对
请教各位老师,都几个星期搞不定啊!
;********从PC 机接收数据子程序********
OUTPUT:
;程序一开始是用了SETB RXD
JB RXD, $ ;判断是否有起始位出现 这个起始位由谁来定? 等待起始位!判断0的出现!
;应有个时间限制.过时不候
;是发送回来吗?如果一直是1就不变动了
lcall delaybps
MOV R3,#8
OUT:
MOV C ,RXD
clr P1.7;收数时灯亮
RRC A
lcall delaybps
DJNZ R3,OUT ;接收8 位数据
JNB RXD ,$ ;判断是否有停止位出现,如果通信出了问题就要S循环了
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delaybps: ;一直等到计时到了再做工作
JNB TF1, $ ;查计时器0的溢出标志,为0则转移,且不影响标志位
;此时为标志有溢出,即时间到,重新计数
CLR TF1 ;计时器0溢出标志清空
MOV TH1, #0feH ;重置计时器0的高8位; 自动重装,作用是否多余?
MOV TL1, #07FH ;重置计时器0的低8位
RET
;====================================================
;==模拟收发结束
;====================================================