廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 19855 個閱讀者
 
<<   1   2   3  下頁 >>(共 3 頁)
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
tgs0910 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x61
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x1
有關於8051和ascii的問題謝謝
小弟我的石英晶體是 11.0592我想用19200bps的速率
想 p2.1 on時就發射30h和31h
這樣寫對嗎
如果收到30h時 p1.1就on
收到31h時 p1.2就on  這要如何寫
收到的ascll碼是0還是1或是其他
請會的大大幫幫小弟謝謝
---------------------- ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



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

-13 應該為 F3, 算法為 2 補數 (一般電腦的負數都用 2 補數來算)
13 = 0Dh = 00001101 取 1 補數(就是反相) -> 11110010 再加 1 就為 2 補數 -> 11110011 = F3h
另外一種算法為 100h - 0Dh = F3h
你可用 Windows 的小算盤, 選擇檢視->工程型. 輸入 -13 然後換成 16 進位看最後兩位就是 F3h

想 p2.1 on時就發射30h和31h
這樣寫對嗎?
-> 不對, 你只有讀 p2.1 但沒有判別 1 或 0, 一般按鍵按下應該拉為 Low, 所以應該要判別 p2.1 為 0 時才動作

如果收到30h時 p1.1就on
收到31h時 p1.2就on  這要如何寫???
->
判別 ri 就可以知道有沒有收到資料, 但你的 SCON 中 REN 設為 0 根本收不到資料
所以 scon = 01111000b
接收很簡單
jnb ri, checkp21
clr ri
mov a, sbuf
cjne a, #30h, chkrcv31h
setb p1.1
jmp checkp21
chkrcv31h:
cjne a, #31h, checkp21
setb p1.2
checkp21:
setb p2.1 ; pull high p2.1 for input
jnb p2.1, START_9 ; 因為你的程式按下 p2.1 送完資料就停了, 所以不考慮這個按鍵是否已處理過的問題

收到的ascll碼是0還是1或是其他
-> 送什麼就收到什麼, 電腦送 Ɔ', 51 就收到 30h 你也可以寫成 Ɔ' 都一樣

此文章被評分,最近評分記錄
財富:100 (by codeboy) | 理由: 很熱心的回答喔~^^給你一些獎勵喔~請繼續在此幫忙喔~^^thx


獻花 x0 回到頂端 [1 樓] From:台灣中華電信 | Posted:2006-03-28 00:45 |
tgs0910 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x61
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

首先非常謝謝大大的幫忙
但是小弟還有一點小問題要麻煩大大的幫忙
不知道可不可以
請大大不令賜教幫幫小弟 謝謝


-> 不對, 你只有讀 p2.1 但沒有判別 1 或 0, 一般按鍵按下應該拉為 Low,
所以應該要判別 p2.1 為 0 時才動作



START_2:MOV     P2,#11111111B
    SETB   C
    MOV     C,P2.1
    jc     start_2
    jnc     start_9
這樣寫對嗎
如果不對請大大幫幫小弟改一下好嗎    
   


如果收到30h時 p1.1就on
收到31h時 p1.2就on  這要如何寫???


->
判別 ri 就可以知道有沒有收到資料, 但你的 SCON 中 REN 設為 0 根本收不到資料
所以 scon = 01111000b
接收很簡單
jnb ri, checkp21     若ri不等於零則跳checkp21
clr ri             把ri設為零
mov a, sbuf         把sbuf的內容存到a裡
cjne a, #30h, chkrcv31h 若a不等於30h時就跳到chkrcv31h
setb p1.1           把p1.1設為1
jmp checkp21         跳到check21
chkrcv31h:
cjne a, #31h, checkp21 若a不等於31h時就跳到checkp21h
setb p1.2           把p1.2設為1
checkp21:
setb p2.1 ; pull high p2.1 for input
jnb p2.1, START_9 ; 因為你的程式按下 p2.1 送完資料就停了,
所以不考慮這個按鍵是否已處理過的問題

請問一下我這樣的寫法
不是應該按下p2.1是就重復發送30h和31h嗎


請問一下這最後兩行是什麼意思
checkp21:
setb p2.1 ; pull high p2.1 for input
jnb p2.1, START_9 ;
這樣寫的話不是永遠p2.1等於1嘛
也永遠不會跳到start_9嘛



那我想p2.1等餘零時就發射30h和31h
等我收到30h時就p1.1亮
  收到31h時就p1.2亮是不是這樣寫
  我是用副控制
    ORG   00h          
    MOV   TMOD,#00100000B

    MOV   TH1,#0FDH    
    SETB   TR1      
    ORL   PCON,#80H
    MOV   SCON,#01111000B


START_2:MOV   P2,#11111111B
    SETB   C
    MOV   C,P2.1
    jc     start_2
    Jnc   START_9
   

START_9:mov   dptr,#table  
next:   mov   a,#0      
    movc   a,@a+dptr  
    cjne   a,#$,trans
    RET        
NEXT2: jnb   ri, chkp21    
    clr   ri            
    mov   a, sbuf        
    cjne   a, #30h, chk31h
    CLR   p1.1          
    jmp   chkp21        
chk31h: cjne   a, #31h, chkp21  
    CLR   p1.2          
chkp21: ORL   P2,#11111111B


trans: mov   sbuf,a    
    jnb   ti,$        
    clr   ti        
    inc   dptr        
    ajmp   next      

table: DB     30h
    DB     31h
    DB     $
如果我要收到30h和31h時on p1.3
    收到30h時on p1.1
    收到31h時on p1.2
要如何寫謝謝


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

START_2:MOV   P2,#11111111B
  SETB   C
  MOV   C,P2.1
  jc   start_2
  jnc   start_9
這樣寫對嗎
如果不對請大大幫幫小弟改一下好嗎  
->
這樣寫也可以, 但既然 mov c, p2.1 為何還要 setb c
有了 jc start_2 下一行可以寫 jmp start_9 也不會錯 (不是 1 就是 0 這在數位邏輯不會錯吧)
不過一般會用我下面的寫法
checkp21:
setb p2.1 ; pull high p2.1 for input
jnb p2.1, START_9 ;
這樣寫的話不是永遠p2.1等於1嘛
也永遠不會跳到start_9嘛
-> 當外部輸入拉為 Low 的話, 你讀到的就一定為 Low
setb p2.1 就跟你的 MOV   P2,#11111111B 一樣意思為pull high
在 8051 要讀外部輸入一般都會先將此 port 輸出為 High, 然後由外部輸入拉為 Low

那我想p2.1等餘零時就發射30h和31h
等我收到30h時就p1.1亮
收到31h時就p1.2亮是不是這樣寫
我是用副控制

  ORG   00h      
  MOV   TMOD,#00100000B

  MOV   TH1,#0FDH  
  SETB   TR1    
  ORL   PCON,#80H
  MOV   SCON,#01111000B


START_2:MOV   P2,#11111111B
  SETB   C
  MOV   C,P2.1
  jc   start_2
  Jnc   START_9
 

START_9:mov   dptr,#table  
next:   mov   a,#0    
  movc   a,@a+dptr  
  cjne   a,#$,trans
  RET      
-> 我沒看到你用 call, 為何要用 ret

NEXT2: jnb   ri, chkp21  
  clr   ri        
  mov   a, sbuf      
  cjne   a, #30h, chk31h
  CLR   p1.1      
  jmp   chkp21      
chk31h: cjne   a, #31h, chkp21  
  CLR   p1.2      
chkp21: ORL   P2,#11111111B
-> 下面怎麼直接到 trans 了??? 加個 jmp 吧!

trans: mov   sbuf,a  
  jnb   ti,$      
  clr   ti      
  inc   dptr      
  ajmp   next    

table: DB   30h
  DB   31h
  DB   $
如果我要收到30h和31h時on p1.3
  收到30h時on p1.1
  收到31h時on p1.2
要如何寫謝謝
->
on p1.1 應該是 setb p1.1 吧? 還是你輸出有反相???

如果我要收到30h和31h時on p1.3
-> 你說的是收到 30h, 31h 兩個 bytes 後 p1.3 要 ON 嗎?
你可以在收到 30h 設個 flag 然後再收到 31h 時判別該 flag 是否有設定就可以知道是否收到 30h 31h
如果收到其他資料要記得將該 flag 清除


獻花 x0 回到頂端 [3 樓] From:台灣中華電信 | Posted:2006-03-29 11:05 |
tgs0910 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x61
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

謝謝大大的幫忙
          ORG   00h    
            MOV   TMOD,#00100000B
            MOV   TH1,#0FDH  
            SETB   TR1  
            ORL   PCON,#80H
            MOV   SCON,#01111000B

START_9:   mov   dptr,#table  
next:       mov   a,#0  
            movc   a,@a+dptr  
            cjne     a,#$,trans
            jmp     start_9

NEXT2:     jnb     ri, chkp21  
          clr       ri      
          mov     a, sbuf    
          cjne     a, #30h, chk31h
          CLR       p1.1    
          jmp       chkp21    
chk31h:   cjne     a, #31h, chkp21  
          CLR       p1.2

chkp21:   setb p2.1 ; pull high p2.1 for input
          jnb p2.1, START_9 ;


   
trans:     mov     sbuf,a  
          jnb       ti,$    
          clr       ti    
          inc       dptr    
          ajmp     next  

table:     DB       30h
          DB       31h
          DB       $
這樣對嘛

你可以在收到 30h 設個 flag 然後再收到 31h 時判別該 flag 是否有設定就可以知道是否收到 30h 31h
如果收到其他資料要記得將該 flag 清除

可以在說的清楚一點嘛
小弟太笨了
請大大多幫忙感激不盡謝謝


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

怎麼越寫越奇怪???
修改如下:
    ORG   00h  
    MOV   TMOD,#00100000B
    MOV   TH1,#0FDH  
    SETB   TR1  
    ORL   PCON,#80H
    MOV   SCON,#01111000B
    clr   20h.0
START:
    jnb   ri, checkp21
    clr   ri
    mov   a, sbuf
    cjne   a, #30h, chkrcv31h
    setb   p1.1
    setb   20h.0
    jmp   checkp21
chkrcv31h:
    cjne   a, #31h, rcvother
    setb   p1.2
    jnb   20h.0, checkp21
    setb   p1.3         ; 收到 30h, 31h
    clr   20h.0
    jmp   checkp21
rcvother:
    clr   20h.0       ; 非 30h, 31h
checkp21:
    setb   p2.1         ; pull high p2.1 for input
    jnb   p2.1, START_9
    jmp   START
   
START_9:
    mov   dptr, #table
next:   mov   a,#0
    movc   a,@a+dptr
    cjne   a,#'$',trans
    jmp   START
     
trans: mov   sbuf,a
    jnb   ti,$
    clr   ti
    inc   dptr
    ajmp   next
table: DB     30h, 31h, '$'


獻花 x0 回到頂端 [5 樓] From:台灣中華電信 | Posted:2006-03-30 01:00 |
tgs0910 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x61
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

謝謝大大的幫忙
不知大大是否有用過 rs485 和8051來傳輸
如果有的話請大大幫小弟看一下好嗎
我把8051的 rx接485的第一支腳
          tx 接485的第四支腳
          485的第二和第三腳接0時input
                            接1時output
                第五腳接地
                第八腳接+5v
                第六腳接d+
                第七腳接d-
這樣對嗎
但是我用兩顆8051這樣接卻不能用
還是第六七腳要在接啥東西
麻煩大大幫幫小第謝謝


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

RS485 IC 第六七腳就是真正的訊號的輸出/輸入(差動訊號).
因為 485 為兩線式 Bus 訊號, 同時只能有一方送訊號(半多工)
所以第三腳 DE 就為發送時拉 High, 其他時候拉 Low (允許別人發送)
第二腳 /RE 為接收致能(Receive Enable), 必須拉為 Low 才可以接收.

兩個 8051 透過 RS485 來通訊, 就必須將兩個板子上 RS485 D+ D- 透過兩芯線接在一起才會通

以你的程式應該有送有收吧? 還是只有一個送一個收???
如果只有一送一收那你RS485的接法應該可以用!

一般 RS485 腳位的接法, 都是第三腳接到 8051 的某個 I/O, 發送時拉 High
第二腳直接接地, 永遠可以接收.

假設 P1.7 接到 RS485 第三腳 DE
setb p1.7 ; DE 拉 High 發送
mov sbuf, a
jnb ti, $
clr ti
clr p1.7 ; DE 拉 Low 允許其他人發送


獻花 x0 回到頂端 [7 樓] From:台灣中華電信 | Posted:2006-03-31 12:35 |
tgs0910 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x61
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

ORG   0000H
    MOV   TMOD,#00100000B
    MOV   TH1,#230
    MOV   TL1,#230
    SETB   TR1
;
    MOV   SCON,#01110000B
;
   
LOOP:   CLR   RI
    CLR   TI
    MOV   SBUF,P2
WAIT1: JNB   TI,WAIT1
;
WAIT2: JNB   RI,WAIT2
   
;
    ORL   P1,#11111111B    
    MOV   A,SBUF
    JNB   ACC.0,CASE0
    JNB   ACC.1,CASE1
    JNB   ACC.2,CASE2
    JNB   ACC.3,CASE3
    JNB   ACC.4,CASE4
    JNB   ACC.5,CASE5
    JNB   ACC.6,CASE6
    JNB   ACC.7,CASE7
    AJMP   LOOP

 
CASE0: CLR   P1.0
    AJMP   LOOP
CASE1: CLR   P1.1
    AJMP   LOOP
CASE2: CLR   P1.2
    AJMP   LOOP
CASE3: CLR   P1.3
    AJMP   LOOP
CASE4: CLR   P1.4
    AJMP   LOOP
CASE5: CLR   P1.5
    AJMP   LOOP
CASE6: CLR   P1.6
    AJMP   LOOP
CASE7: CLR   P1.7
    AJMP   LOOP


小弟是做一發一送
這是小弟的程式兩顆都一樣
但是小弟照大大的說法接
把a的第三腳接地
把b的第三腳接正
但是為何我把b的p2.1 on為零時
卻兩顆8051的1.都會亮
如果把b的第二支腳也接正時會出現亂亮的問題
但我不接75176時卻不會有這個問題
請大大幫幫小弟謝謝


[ 此文章被tgs0910在2006-04-03 18:42重新編輯 ]


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

你的 SCON 中的 REN 沒有設為 1 可以接收到任何資料嗎???
我不曉的你原本的 b 的第二腳 /RE 是否接地?
因為 485 有個特性自己送的資料自己會收到, 所以 b 的第二腳 /RE 應該接 High 才不會收到自己的資料
8051 的 P0, P2 為開集極(Open drain), 所以一定要 pull high (可用 4.7K 電阻接 Vcc)


獻花 x0 回到頂端 [9 樓] From:台灣中華電信 | Posted:2006-04-04 01:34 |

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