廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 20734 個閱讀者
 
<< 上頁  1   2   3   4   5   6  下頁 >>(共 6 頁)
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

發現沒有辦法回傳值
電路也檢查過了
不知道是什麼原因…
程式如下

main()
{
     char buf;
     int i;
     SCON = 0x52;
     TMOD = 0X21;
     TH1 = 256-(28800/9600);
     TR1 = 1;
     TI = 1;


     P1 = 0x00;
     while(1)
     {
           if(RI == 1)
           {
                 TI = 1;
                 buf = SBUF;
                 i = atoh(buf);
                 P1 = seven_seg[ i ];
                 delay10ms(50) ;
                 RI = 0;
                 do
                 {

                 }while(!TI);
                 TI=0;
                 SBUF = buf;

           
           }
     }
}

是回傳程式有誤嗎?



獻花 x0 回到頂端 [30 樓] From:未知地址 | Posted:2007-03-25 01:56 |
cmovies
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x20
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

你把TI的定義弄錯了. 你的程式變成收到一個Byte就停了. 因為 TI 永遠不會自動清為零

當 51 將 SBUF 的資料送完時(傳送 stop bit), 會自動將 TI 設為 1, 而不是清為 0
不過你的程式只是測試而已, 也不需要等是否傳送完. 反正接收也要相同的時間才會有下一個 byte

  while(1)
  {
      if(RI == 1)
      {
          buf = SBUF;
          i = atoh(buf);
          P1 = seven_seg[ i ];
          delay10ms(50) ;
          RI = 0;
          TI=0;
          SBUF = buf;
          while (!TI) ; // 純測試的話不一定需要這行
      }
  }


獻花 x0 回到頂端 [31 樓] From:臺灣中華電信HINET | Posted:2007-03-25 13:19 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

改完之後還是沒有回傳值
問了學長
他說之前的學長有提到有關於電腦com1那邊的資源設定要注意到
但他說他也不太清楚
但檢查之後發現電路也沒錯...


獻花 x0 回到頂端 [32 樓] From:未知地址 | Posted:2007-03-25 15:33 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我將測試rs232的程式加入了一小段
燒錄8052
功能多了將高位跟低位的值都show出來
發現輸入1,七段顯示器會顯示71
代表從pc端傳出來的值原本就是不對的…
用VB傳送的不是都是ASCII碼嗎…數字1應該是31H呀....


獻花 x0 回到頂端 [33 樓] From:未知地址 | Posted:2007-03-25 16:24 |
cmovies
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x20
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我記得你之前做RS232測試時不是會回傳嗎???

如果你覺得PC送的資料有問題有兩種方式可以確定:
1. 使用 Serial Port Monitor 軟體來監看PC對COM Port的動作
2. 使用另一個COM Port來接收這個COM Port的資料

你有用過上次那個RS232 PC 測試軟體來送資料嗎???

Serial Port Monitor 軟體
http://www.microsoft.com/technet/sys...ies/portmon.mspx


獻花 x0 回到頂端 [34 樓] From:臺灣中華電信HINET | Posted:2007-03-25 17:14 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

從軟體上監看
輸出的值是正確的沒錯
但我在接收到SBUF時的值卻是錯的
這是什麼情形…
鮑率也都設成9600但輸入的值卻是錯的....

後來我加入了底下程式
    if( getChar >= 0x41 && getChar <= 0x4f ) getChar = getChar - 0x20;
    if( getChar >= 0x70 && getChar <= 0x8f ) getChar = getChar - 0x40;
    if( getChar >= 0xb0 && getChar <= 0xcf ) getChar = getChar - 0x60;
    if( getChar >= 0xf0 && getChar <= 0xfe ) getChar = getChar - 0x80;

雖然傳的資料是錯的
但是有規則
而用軟體監看傳資料的狀況
發現大大您之前寫的vb程式
似乎有些許ug
就是你設定每行一次最多傳送長度為32
但在hex檔裡每行幾乎都當過32
當超過時
他會直接將後面的截掉加入0x0a,好像是換行指令
然後接著下一行傳
所以當傳到最後存的資料是不正確的....


[ 此文章被ken0127在2007-03-25 20:56重新編輯 ]


獻花 x0 回到頂端 [35 樓] From:未知地址 | Posted:2007-03-25 20:12 |
cmovies
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x20
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

接收的資料會錯, 如果送的沒問題只有收的出錯了.
收的會錯應該是格式不對速率不對或是 MAX232 有問題.
你有檢查你的 Crystal 真的是 11.0592 MHz 嗎?
如果你有示波器的話也許可以量量看波形對不對.

你有打開 Options -> Show Hex 來確定嗎? 我剛試了一下好像沒問題啊!
還有 Edit -> Max Output Bytes 要設定 128 這樣才能看到所有 Hex 資料


獻花 x0 回到頂端 [36 樓] From:臺灣中華電信HINET | Posted:2007-03-25 21:28 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

原來是我沒打開設為128
所以看的都短短的資料,以為後面被截掉

我現在用的是12.0000 M HZ

而ICE上面的也是12.0000MHZ
難道是這個原因嗎?
那我改成11.0592好了,剛好手邊有一顆
那我把ICE設為使用外頻模式來試試


獻花 x0 回到頂端 [37 樓] From:未知地址 | Posted:2007-03-25 21:42 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

對不起…我錯了
原來真的是這個問題
現在收發正確的資料了
現下就來試試程式了…
謝謝大大....


獻花 x0 回到頂端 [38 樓] From:未知地址 | Posted:2007-03-25 21:48 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

但我不知道我的程式有沒有真的寫入記憶體內
因為在ice內的memory window裡頭去找那位置看不到我寫入的資料
           *((unsigned char *)&pCode + 0 ) = getChar + 0x80;      // high address
           getHex();
           *((unsigned char *)&pCode + 1 ) = getChar ;      // low address



           *pCode++ = getChar;                  //讀取並儲存data

但在ICE裡頭看監看pCode、getChar都有正確的值
我將偏移量設為8000
也就是pCode寫的位置會在8xxxh那邊
這樣是正確的嗎?
有在8k之後嗎?
因為用ice模擬,傳送完資料之後
p1有清除的動作,也就是我的程式有載完並有跳到8000h那個位置
但結果依然不是我想要的動作....
是我偏移量設錯了嗎?


獻花 x0 回到頂端 [39 樓] From:未知地址 | Posted:2007-03-25 22:20 |

<< 上頁  1   2   3   4   5   6  下頁 >>(共 6 頁)
首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.055731 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言