liuliangdt
liuliangdt
級別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
樓主  發(fā)表于: 2014-03-04 23:02
小哥是個單片機(jī)業(yè)余愛好者,接觸單片機(jī)有幾年了。但很汗顏,水平一直還在入門口徘徊。本來想弄一個類似于多站通信的網(wǎng)絡(luò)結(jié)構(gòu)程序玩。寫相互通信就的地方卡住了,再也寫不下去,F(xiàn)在跪求壇友幫忙,因為寫不下去已經(jīng)幾個月沒碰單片機(jī)了。太恨了···
介紹一下通訊方案。一串信息幀有5個字節(jié)組成,主站發(fā)出一串信息幀后由對于的從站響應(yīng)。因為從站要快速響應(yīng)所以就設(shè)計在中斷程序里回應(yīng)(回復(fù))。問題就出在這回應(yīng)的子程序。同一個子程序,在主程序里順序執(zhí)行的時候和其它站是正常通訊。但要快速回應(yīng)還得在中斷里執(zhí)行才行。從中斷程序里發(fā)出通信信息都亂了,接收方收不到正確的信息。我已經(jīng)試過了我想到可能性,但都不對。希望壇友們幫忙找出錯誤。在查錯時最好要有兩塊單片機(jī)硬件聯(lián)機(jī),然后在它們RS-485信號處連到電腦的串口助手里看那些錯誤的字節(jié)。
如有沒講請清楚的地方待補(bǔ)充。
描述:解壓文件
附件: 測試字符串通訊0#主機(jī)通訊.rar (23 K) 下載次數(shù):28
網(wǎng)站提示: 請不要用迅雷下載附件,容易出錯
liuliangdt
liuliangdt
級別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
1樓  發(fā)表于: 2014-03-05 15:36
引用
引用第1樓琴島工控于2014-03-05 13:39發(fā)表的  :
先下載看看,




嗯,先看看哪里有錯誤。最好在硬件上試。
liuliangdt
liuliangdt
級別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
2樓  發(fā)表于: 2014-03-05 20:14
為了吸引大家的關(guān)注,我得用英文回貼:Tie zi bu neng chen a!
liuliangdt
liuliangdt
級別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
3樓  發(fā)表于: 2014-03-06 20:45
引用
引用第4樓supermax于2014-03-06 07:20發(fā)表的  :
給樓主一例子,
//--------------------------------------------------------------
/*====================================
*名稱:lcd_str.c
*功能:從串口調(diào)試工具發(fā)送一字符串到單片機(jī),在lcd1602和串口調(diào)試工具上顯示【未加入校驗】
.......



哥,我是菜鳥。能告訴我下面這幾句是什么意思嗎?
/**table[j] != '\0' && flag == 1**/
/** j = j >= 10 ? 0 : j;**/
還有/**table = SBUF;**/,“table”不是一組嗎?
我寫的那個例子在主程序掃描中是正常執(zhí)行的,F(xiàn)在是不知道以后主程序會怎么寫、有多長,所以就想把通信那部分集中到中斷中來執(zhí)行。到中斷后問題就來了,在對方接收到信息來判斷發(fā)送就有問題了。
您說的校驗部分我在百度上問過了,不過汗顏我看不懂。百度知道鏈條:http://zhidao.baidu.com/question/2137614590531493588.html?quesup2&oldq=1
liuliangdt
liuliangdt
級別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
4樓  發(fā)表于: 2014-03-07 11:27
引用
引用第10樓supermax于2014-03-07 09:21發(fā)表的  :
再有不明白你最好請教:shi2999,,我只是他手下,他真是恐怖的高手,我的一切都他教的,我也是剛?cè)腴T。



一起共勉一起學(xué)習(xí)吧!
那兩句我那樣寫不出來。學(xué)習(xí)了。
liuliangdt
liuliangdt
級別: 家園常客
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
5樓  發(fā)表于: 2014-03-07 20:59
引用
引用第12樓supermax于2014-03-07 13:48發(fā)表的  :

坦白說我平時不學(xué)51單片的,我們?nèi)径加肁RM了。



老實說,我的工作跟單片機(jī)沒關(guān)系,ARM我都沒接觸過,F(xiàn)在想想要是單片機(jī)能從中斷程序中跳轉(zhuǎn)到主程序執(zhí)行也能解決問題,這樣可以跳轉(zhuǎn)嗎?
liuliangdt
liuliangdt
級別: 家園常客
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
6樓  發(fā)表于: 2014-03-07 22:16
引用
引用第14樓shi2999于2014-03-07 21:46發(fā)表的  :
能做到,進(jìn)中斷時,會把pc指針存進(jìn)堆棧,在中斷中修改相應(yīng)堆棧位置的數(shù)值為那個函數(shù)的地址就行
如:     MOV SP, #(STACK-1)
              MOV (STACK), #HIGH(function1)
              MOV (STACK+1), #LOW(function1)
              MOV SP, #(STACK+1)
.......




哥,謝謝您!您的寫的匯編語言我一點都看不懂。我的思維是進(jìn)入中斷程序執(zhí)行后可不可以用/**goto**/這樣的語句跳到主程序中來執(zhí)行?或者還有別的跳轉(zhuǎn)語句可以嗎?
真厲害,會寫匯編語言。16位跟32位的處理器好學(xué)嗎?
liuliangdt
liuliangdt
級別: 家園常客
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
7樓  發(fā)表于: 2014-03-07 22:57
引用
引用第17樓shi2999于2014-03-07 22:42發(fā)表的  :
正常是可以的,,
但GOTO,一般跳轉(zhuǎn),,不是太建議,
但GOTO是一個非常直接的方法,,一定要檢查清楚后,,再使用,




除了/**goto**/語句外還有別的更好的語句可用嗎?
liuliangdt
liuliangdt
級別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 443 個
工控威望: 682 點
下載積分: 66148 分
在線時間: 989(小時)
注冊時間: 2010-09-05
最后登錄: 2025-01-11
查看liuliangdt的 主題 / 回貼
8樓  發(fā)表于: 2014-03-08 19:17
這帖子不能沉。有沒有辦法在中斷程序里發(fā)送通信數(shù)據(jù)呢?