liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
楼主  发表于: 2014-03-04 23:02
小哥是个单片机业余爱好者,接触单片机有几年了。但很汗颜,水平一直还在入门口徘徊。本来想弄一个类似于多站通信的网络结构程序玩。写相互通信就的地方卡住了,再也写不下去。现在跪求坛友帮忙,因为写不下去已经几个月没碰单片机了。太恨了···
介绍一下通讯方案。一串信息帧有5个字节组成,主站发出一串信息帧后由对于的从站响应。因为从站要快速响应所以就设计在中断程序里回应(回复)。问题就出在这回应的子程序。同一个子程序,在主程序里顺序执行的时候和其它站是正常通讯。但要快速回应还得在中断里执行才行。从中断程序里发出通信信息都乱了,接收方收不到正确的信息。我已经试过了我想到可能性,但都不对。希望坛友们帮忙找出错误。在查错时最好要有两块单片机硬件联机,然后在它们RS-485信号处连到电脑的串口助手里看那些错误的字节。
如有没讲请清楚的地方待补充。
描述:解压文件
附件: 测试字符串通讯0#主机通讯.rar (23 K) 下载次数:28
网站提示: 请不要用迅雷下载附件,容易出错
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
1楼  发表于: 2014-03-05 15:36
引用
引用第1楼琴岛工控于2014-03-05 13:39发表的  :
先下载看看,




嗯,先看看哪里有错误。最好在硬件上试。
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
2楼  发表于: 2014-03-05 20:14
为了吸引大家的关注,我得用英文回贴:Tie zi bu neng chen a!
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
3楼  发表于: 2014-03-06 20:45
引用
引用第4楼supermax于2014-03-06 07:20发表的  :
给楼主一例子,
//--------------------------------------------------------------
/*====================================
*名称:lcd_str.c
*功能:从串口调试工具发送一字符串到单片机,在lcd1602和串口调试工具上显示【未加入校验】
.......



哥,我是菜鸟。能告诉我下面这几句是什么意思吗?
/**table[j] != '\0' && flag == 1**/
/** j = j >= 10 ? 0 : j;**/
还有/**table = SBUF;**/,“table”不是一组吗?
我写的那个例子在主程序扫描中是正常执行的。现在是不知道以后主程序会怎么写、有多长,所以就想把通信那部分集中到中断中来执行。到中断后问题就来了,在对方接收到信息来判断发送就有问题了。
您说的校验部分我在百度上问过了,不过汗颜我看不懂。百度知道链条:http://zhidao.baidu.com/question/2137614590531493588.html?quesup2&oldq=1
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
4楼  发表于: 2014-03-07 11:27
引用
引用第10楼supermax于2014-03-07 09:21发表的  :
再有不明白你最好请教:shi2999,,我只是他手下,他真是恐怖的高手,我的一切都他教的,我也是刚入门。



一起共勉一起学习吧!
那两句我那样写不出来。学习了。
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
5楼  发表于: 2014-03-07 20:59
引用
引用第12楼supermax于2014-03-07 13:48发表的  :

坦白说我平时不学51单片的,我们全公司都用ARM了。



老实说,我的工作跟单片机没关系,ARM我都没接触过。现在想想要是单片机能从中断程序中跳转到主程序执行也能解决问题,这样可以跳转吗?
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
6楼  发表于: 2014-03-07 22:16
引用
引用第14楼shi2999于2014-03-07 21:46发表的  :
能做到,进中断时,会把pc指针存进堆栈,在中断中修改相应堆栈位置的数值为那个函数的地址就行
如:     MOV SP, #(STACK-1)
              MOV (STACK), #HIGH(function1)
              MOV (STACK+1), #LOW(function1)
              MOV SP, #(STACK+1)
.......




哥,谢谢您!您的写的汇编语言我一点都看不懂。我的思维是进入中断程序执行后可不可以用/**goto**/这样的语句跳到主程序中来执行?或者还有别的跳转语句可以吗?
真厉害,会写汇编语言。16位跟32位的处理器好学吗?
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
7楼  发表于: 2014-03-07 22:57
引用
引用第17楼shi2999于2014-03-07 22:42发表的  :
正常是可以的,,
但GOTO,一般跳转,,不是太建议,
但GOTO是一个非常直接的方法,,一定要检查清楚后,,再使用,




除了/**goto**/语句外还有别的更好的语句可用吗?
liuliangdt
liuliangdt
级别: 家园常客
精华主题: 0
发帖数量: 445 个
工控威望: 679 点
下载积分: 66142 分
在线时间: 987(小时)
注册时间: 2010-09-05
最后登录: 2024-05-28
查看liuliangdt的 主题 / 回贴
8楼  发表于: 2014-03-08 19:17
这帖子不能沉。有没有办法在中断程序里发送通信数据呢?