Re: 利用8051撰寫AT command 的問題

看板ASM (組合語言)作者 (ksmrt)時間15年前 (2009/12/14 23:14), 編輯推噓21(21049)
留言70則, 3人參與, 最新討論串2/2 (看更多)
改這樣試看看~~~ ※ 引述《maxwellyann (不彥其煩)》之銘言: : init_rs232() //初始化RS232通訊介面 <<這裡怪怪的 分號的部份>> : { //通訊協定:<9600 N 8 1> : SCON=0x50; //設定串列界面工作模式1,接收資料致能 SCON=0xD8; <- 改為 mode 3, 並把TB8設為1 這樣才有正確的stop bit : TMOD=0x20; //設定計時器1工作於模式2 : TH1=0xFD; //設定鮑率為9600BPS : TR1=1; //啟動計時器1開始計數 : TI=1; //設定串列傳送中斷產生旗號 TI=0; : } : tx_char(unsigned char c) //傳送一位元組資料 : { : while(1) : if(TI)break; //等待傳送中斷旗號產生 上兩行改 while(TI) ; : TI=0; //清除串列傳送中斷旗號 : SBUF=c; //由串列埠傳送資料出去 : } : tx_str(char*str) //傳送字串資料 : { : do{tx_char(*str++);} : while(*str!='\0'); 改 while(*str) tx_char(*str++); 可能好一點 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.68.71.218 ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/14 23:24)

12/14 23:23, , 1F
謝謝你唷~我先來試試看!
12/14 23:23, 1F

12/15 12:07, , 2F
SCON=0xD8 是加上去的還是改掉上面那句?
12/15 12:07, 2F
改掉上面

12/15 12:13, , 3F
TB8設為1意思是我還要再加東西上去嗎?
12/15 12:13, 3F
不用, 這邊只是說明SCON=0xD8的效果

12/15 12:15, , 4F
TI=0也是要加打上去的嗎?
12/15 12:15, 4F
改掉原來的 TI=1; ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/15 14:47)

12/15 22:34, , 5F
可以請問,如果我只要單純測試RS232這一段,我的硬體
12/15 22:34, 5F

12/15 22:35, , 6F
該如何配置,才能測試code是否能夠傳送資料呢?
12/15 22:35, 6F
用示波器或是邏輯分析儀看TxD的波形啊 這兩樣都沒有就有點麻煩了... ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/16 00:30)

12/16 17:10, , 7F
經過測試RS232的部份只有PIN4有動作,PIN2.PIN3都沒有
12/16 17:10, 7F
RS232? 還是51的serial port? 什麼東西的pin 2,3,4? 這兩個並不一樣

12/16 17:10, , 8F
動作,是RS232程式碼定義錯誤嗎?
12/16 17:10, 8F
怎樣的動作? 有看到波形嗎? 正確嗎?

12/16 17:15, , 9F
還有我的BAUD RATE是9600,這個部份需要定義嗎?
12/16 17:15, 9F
假如你用的標準的8051, 且crystal用的是 11.0592MHz, 那這麼baudrate應該是9600沒錯 ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/16 20:38)

12/16 21:31, , 10F
我說的是RS232的第二三四腳,只有第四腳有電位差。
12/16 21:31, 10F
rs232 pin.4是DTR, 你有用到DTR? 還有什麼叫"有電位差"?

12/16 21:47, , 11F
RS232指的是51的serial port,還有要怎麼看51是標準的
12/16 21:47, 11F
就說這兩個不一樣了... 把廠牌/型號寫出來啊

12/16 21:53, , 12F
經過測試51的2腳(RD).3腳(TD)都沒有反應.只有4腳有
12/16 21:53, 12F
你應該又把rs232 什麼又叫"有反應"? 跟51的serial port搞混了 ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/16 23:03)

12/16 23:56, , 13F
我使用的51版是洋天科技TE-51-UC
12/16 23:56, 13F

12/17 00:09, , 14F
測量過51的serial port 需要使用的RXD、TXD接示波器,
12/17 00:09, 14F

12/17 00:10, , 15F
都沒有任何反應,DTR沒用到。
12/17 00:10, 15F

12/17 00:12, , 16F
假設我的51 serial port接GSM RS232(母),
12/17 00:12, 16F

12/17 00:15, , 17F
連接的線是GSM專用的線,GSM RS232(母)對線(公),
12/17 00:15, 17F

12/17 00:16, , 18F
線(公)對51 serial port(母),這樣接51跟GSM能順利溝
12/17 00:16, 18F

12/17 00:18, , 19F
通嗎?我不會測量傳輸線是否為交叉線,也不確定這麼接
12/17 00:18, 19F

12/17 00:19, , 20F
對不對?麻煩你幫我解答嚕!非常緊急需要你的幫忙!
12/17 00:19, 20F

12/17 00:20, , 21F
目前我遇到最大的問題在於我不曉得RS232轉換電路是否
12/17 00:20, 21F

12/17 00:21, , 22F
可以正常運作,如果可以正常運作,跑軟體卻還是沒有動
12/17 00:21, 22F

12/17 00:22, , 23F
作的話,軟體該怎麼去修改?硬體接收到senser==1的訊
12/17 00:22, 23F

12/17 00:23, , 24F
號是否要放到暫存器中,如果是的話,我對這部份更是一
12/17 00:23, 24F

12/17 00:24, , 25F
竅不通,解決完這部份,就剩下ATcommand的部份要測試
12/17 00:24, 25F

12/17 00:31, , 26F
還有一個重點是,我用的51,它的說明比較煩雜,甚至
12/17 00:31, 26F

12/17 00:31, , 27F
有什麼功能或者使用方式都跟一般的51不太一樣
12/17 00:31, 27F

12/17 01:55, , 28F
洋天的TE51基本上是89S51,除了燒錄外都跟標準51差不多
12/17 01:55, 28F

12/17 01:58, , 29F
老兄,您別著急,您的GSM MODEM有沒有線上規格可以抓得到?
12/17 01:58, 29F

12/17 02:02, , 30F
然後確定一下,你的GSM MODEM是否為UART或需要轉換信號
12/17 02:02, 30F

12/17 02:05, , 31F
然後,TE51的232第二隻腳是輸出(TX)第三隻腳是輸入(RX)
12/17 02:05, 31F

12/17 02:05, , 32F
地5隻腳是接地,用電錶量看看到MODEM對不對
12/17 02:05, 32F

12/17 02:24, , 33F
真的搞不清楚,先接PC操作看看
12/17 02:24, 33F

12/17 13:12, , 34F
回WO大,GSM MODEN的規格網路上好像找不到,我打給廠
12/17 13:12, 34F

12/17 13:12, , 35F
商問,不過是個很爛的廠商,先問他規格
12/17 13:12, 35F

12/17 13:13, , 36F
還有一個問題,51的serial port 第三腳TX第二腳RX吧?
12/17 13:13, 36F

12/17 13:14, , 37F
51的serial port應該都一樣吧!
12/17 13:14, 37F

12/17 13:15, , 38F
還有我要怎麼去量51到MODEN呢?要接傳輸線吧?
12/17 13:15, 38F

12/17 13:16, , 39F
可是如果接起來了,我要怎麼去量測呢?麻煩你嚕!
12/17 13:16, 39F

12/17 14:06, , 40F
只要用三用電錶就可以測量電線怎麼跳了您該不會連三用電
12/17 14:06, 40F

12/17 14:06, , 41F
錶都不會用吧? 類比的指針表甚至能捕捉到脈衝跳動哪
12/17 14:06, 41F

12/17 15:35, , 42F
你的意思是測量51的serial port吧!如果是的話我已經
12/17 15:35, 42F

12/17 15:37, , 43F
用電錶測量過了,RX跟TX都沒有反應,正極接RX.TX負極
12/17 15:37, 43F

12/17 15:38, , 44F
接地對吧!還有可請大大開呼叫器嗎?這樣問你較方便!
12/17 15:38, 44F
假如還在debug, 可照下列步驟做: (0) 名詞定義 0.1 實驗板: 洋天 TE-51-UC 0.2 51: 8051 uP, 廠牌與型號未知, 可能是 Atmel 89S51 0.3 Serial port: 8051 IC 上的 serial io port, 包含 RxD (pin 10) 與 RxD (pin 11) 0.4 RS232: TE-51-UC板子上的 DE-9 接頭的那個介面. RS232跟 51 serial port相關但不相同, 不要搞混 TE-51-UC板子應該是DCE端, TxD是pin3, RxD是pin 2 (1) 確認 8051 正確燒錄與執行 請先確定寫好的程式有正確的燒錄進8051, 並且有正確執行. 把下列程式燒進去51裡, 用示波器或電表量看看51的IO port輸出是否正確: #include <reg51.h> main() { P0 = 0x55; P1 = 0x55; P2 = 0x55; P3 = 0x55; } (2) 確認 51 serial port 有正確輸出 #include <reg51.h> main() { int c; SCON=0xD8; TMOD=0x20; TH1=0xFD; TR1=1; TI=1; TI=0; c = 0; while(1) { SBUF = 0x00; while(!TI) ; TI = 0; } } 把上面的程式燒進 51 後, 用示波器量 51 的 TxD (pin 11), 會看到這樣的波形: _ _ _ _ _ TxD: |_________| |_________| |_________| |_________| |___ (3) 確認 baudrate 假如8051用的是11.0592MHz的crystal, 那serial port輸出 會是 9600 bps. 輸出0x00, 包含1個start bit 跟8個data bits 均為 low, 所以TxD波形 low 的寬度是 9個 bit time, 約為 937.5 uS; high只佔1個bit time, 約104uS. _ _ |_________| |____ ^-937.5uS-^ ^-^ 104uS (4) 先這樣看情況再說吧... ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/17 16:01)

12/17 16:17, , 45F
感恩KS大唷,我先試試看再說!還有我用的是
12/17 16:17, 45F

12/17 16:18, , 46F
ATMEL AT89S52
12/17 16:18, 46F

12/17 16:57, , 47F
測試(1)後,每一個pin都是一個5V一個0V,這樣對嗎?
12/17 16:57, 47F
嗯, 這樣應該ok

12/17 16:59, , 48F
還有pin10.RX電壓4.6V,pin11.TX電壓0V,這樣正常嗎?
12/17 16:59, 48F
你的RS232有接東西嗎? 理論上沒接其他東西的話 RxD應該要維持 5V, TxD 因為送 0x00出去, 用電錶 量到 0V 應該ok... 你不是有示波器? 用示波器看比較準~ 量量看有沒有我畫的那樣的波形 ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/17 17:05)

12/17 17:11, , 49F
pin10.11當我沒說@@,那不在PORT裡面~~~
12/17 17:11, 49F

12/17 17:12, , 50F
(2)測量完了,TXD的波形與你的畫的是一樣的,測(3)!
12/17 17:12, 50F

12/17 17:59, , 51F
鮑率我不會算,幫我算一下好嗎?Time=0.2ms,CH1=5V,
12/17 17:59, 51F

12/17 18:00, , 52F
FREQ=1.7453KHZ,算超久算不出來,麻煩你嚕!
12/17 18:00, 52F

12/17 18:17, , 53F
? 沒關過呼叫器啊~ 只是我又不一定在電腦旁
12/17 18:17, 53F

12/17 18:20, , 54F
TH1=0xFD就是設定BAUDRATE為9600bps對吧!
12/17 18:20, 54F

12/17 18:20, , 55F
目前我出現的波形都跟你說的一樣,代表說我可以開始
12/17 18:20, 55F

12/17 18:22, , 56F
測試程式碼嚕,對吧!那code不改直接測吼!對吧?
12/17 18:22, 56F
還是先確定baudrate正確比較好, 1.7543KHz有點怪怪的. 不然你看一下板子上的 crystal 上面打多少? 假如不是 11.0592 的話 baudrate就不對, 要改 TH1. 示波器還是要學一下... 不會看示波器以後debug會很困難 你說的 CH1=5V是垂直(電壓)的區間(division)一格是5V, 在這不重要, Time=0.2mS 表示水平一格是 0.2mS = 200uS, 假如TxD以9600bps送出 0x00, 那 low 的部份就會佔 937.5uS, 大約是4格多接近5格. 這樣可大約估出波形寬度了. 可配合 trigger position來調整波形在螢幕上的位置, 把前面的下降緣對齊格線, 這樣量就比較準確了. 現在的示波器都是DSO, 有遊標(cursors)做精確地量測, 把第一個cursor放在下降緣, 第二個放上升緣, 這樣low 的寬度 DSO 就自動量好顯示在螢幕上了. (一般在右上方顯示 |A-B| 或是 一個三角形(delta)的就是了) ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/17 19:01)

12/17 19:45, , 57F
我在燒錄的時候設定11.0592來燒,跑你的code也都沒問
12/17 19:45, 57F

12/17 19:46, , 58F
題,這樣可以確定鮑率是9600bps嗎?
12/17 19:46, 58F
不可以

12/17 19:51, , 59F
TH1=0xFD,就是設定鮑率9600對吧,所以code可以跑步不
12/17 19:51, 59F

12/17 19:51, , 60F
就代表51是11.0592嗎,這麼說對吧!
12/17 19:51, 60F
不對 你應該要讀一下 8051 serial port跟baudrate的設定. 當baudrate固定, crystal頻率跟(0x100-TH1)成正比. crystal 越快, 0x100-TH1 就要越大, TH1 也就越小. 至於 keil c 設定的 11.0592 MHz 是供 simulator 計算時間用的, 跟實際一點關係都沒有. 你可試試把 keil 設成 generic 8052, crystal 可設成 999 MHz, 燒錄看看跑起來有沒有不一樣~~~ ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/17 20:24)

12/17 20:45, , 61F
(耍冷)感覺遇到很盧的菜鳥了。你要不要乾脆收費代製算了
12/17 20:45, 61F
這划不來吧 ^^ ※ 編輯: ksmrt0123 來自: 219.68.71.218 (12/17 21:40)

12/17 22:42, , 62F
我剛剛用keil c跑DEBUG,可是鮑率顯示0耶 = =
12/17 22:42, 62F

12/17 22:44, , 63F
還有KS大你說的將keil設成reneric 8052我不懂意思= =
12/17 22:44, 63F

12/17 22:46, , 64F
我突然發覺你們再雞同鴨講.....uVersion的SIM狀態UART
12/17 22:46, 64F

12/17 22:46, , 65F
不會從硬體出去的,要不去買真的ICE要不直接燒錄直接RUN
12/17 22:46, 65F

12/17 22:47, , 66F
不要用STEP MODE啦 ....
12/17 22:47, 66F

12/17 23:06, , 67F
Wolf大的意思是如此太麻煩了嗎?直接跑軟體就好事嗎?
12/17 23:06, 67F

12/17 23:08, , 68F
不是麻煩,是軟體模擬不會真的送到IC上輸出
12/17 23:08, 68F

12/17 23:09, , 69F
除非你有真的硬體ICE,不然就是直接燒直接跑,觀察對不對
12/17 23:09, 69F

12/26 02:15, , 70F
精闢的解說,不得不推一下!
12/26 02:15, 70F
文章代碼(AID): #1B9bPHR0 (ASM)
討論串 (同標題文章)
文章代碼(AID): #1B9bPHR0 (ASM)