全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2328
推到 Plurk!
推到 Facebook!

MAX3100 <=> 8051 uC <=> IrDA 的疑問

尚未結案
justice31662
一般會員


發表:1
回覆:1
積分:0
註冊:2009-02-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-22 22:59:30 IP:92.13.xxx.xxx 訂閱
;IrDA CODE FOR MAX-3100 UART-8051 based
;MAX-3100 UART demonstration and test code for the 8051 that
;8051 and IrDA sides run at 9600 baud. All receivers are polled
;Palmtop for IrDA and PC running a terminal program. The primary
;***************************************************************
PCON EQU 87H

IRQ EQU P3.2 ;(irq) polled in this code
TX1 EQU 10H ;transmit regs
TX2 EQU 11H
RX1 EQU 12H ;receive regs
RX2 EQU 13H

ORG 0000H
AJMP BEGIN


BEGIN:MOV SP,#70H ;initialize stack
CLR SCLK ;clear sclk-normally low
;initialize 8051 internal uart
MOV TMOD,#20H ;t1 baud
MOV TH1,#253 ;reload value baud 9600/xtal 5.5M
MOV SCON,#50H ;uart-m1,tx and rx
MOV PCON,#80H ;double baud rate bit
MOV TCON,#40H ;start baud timer
;intialize max3100 uart-irda mode at 9600 baud
MOV TX1,#0E4H ;high byte of config-R ints
MOV TX2,#0CAh ;9600 baud irda mode and two stops
ACALL UTLK ;send to uart-write config
;*************MAIN ROUTINE LOOP**********************************
LOOP: JNB IRQ,URCV ;data avail from 3100 uart?
NRECV:
JBC RI,RCV51 ;check for 8051 rcv-tx out irda
AJMP LOOP ;hang here forever
;byte received from 3100 uart-get it and send out 8051 uart
URCV: MOV TX1,#0 ;read data
MOV TX2,#0 ;read data
ACALL UTLK ;send to 8051 uart-get data to rx
MOV A,RX2 ;get data to acc
MOV SBUF,A ;send out on RS-232 side 9600 baud
LJMP LOOP ;back to top
;byte received from 8051 uart-get it and send out 3100 uart
RCV51:MOV A,SBUF ;data from 8051 uart
MOV TX1,#80H ;tx data
MOV TX2,A ;data to irda
ACALL UTLK ;send to uart-send data out IrDA
LJMP LOOP ;back to top
;***************************************************************
;SUBROUTINES
;UTLK-talk to uart-main routine
; send 16 bits from TX1 TX2 and rev 16 to RX1 RX2
UTLK: CLR CS ;activate cs
MOV A,TX1 ;get high byte
ACALL BYT8 ;send out
MOV RX1,A ;get received 1
MOV A,TX2 ;get high byte
ACALL BYT8 ;send out
MOV RX2,A ;get received 2
SETB CS ;set CS high
RET ;DONE
;**************************
;BYT8-shift out & in 8 bits with spi clocking-from and to acc
BYT8: MOV R4,#8 ;8 bits to send
SETB DIN ;make sure din is input
B8LP: RLC A ;get msb of acc to carry
MOV DOUT,C ;put out on pin
SETB SCLK ;clock high-clock
MOV C,DIN ;get data after clk high
CLR SCLK ;clock low
MOV ACC.0,C ;put in lsbit of a
DJNZ R4,B8LP ;loop til 8 bits
RET ;done
;end of code
END
附加檔案:49a16852c1e1d_max3100.asm
編輯記錄
justice31662 重新編輯於 2009-03-04 15:55:56, 註解 無‧
justice31662 重新編輯於 2009-03-04 16:10:11, 註解 無‧
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-04 09:17:48 IP:61.229.xxx.xxx 訂閱
高手不敢當,這個問題也應該不用高手就可以解決.大家一起來討論吧!
首先下載的 MAX3100.pdf 研讀了以後發現,
他的接續方法有很多種.

我認為要驗證你的硬體應該為

PC[A](RS232) --> MAX3223(或MAX232) --> 8051 uC --> MAX3100 --> 紅外線 --->

(IrDA) PC[B]

找一台含有 IrDA 的 PC[B] 執行 Hyperterminal 看看可否收到資料.
MAX 提供的 Source Code 先假設理應沒有問題.

===================引 用 justice31662 文 章===================
;IrDA CODE FOR MAX-3100 UART-8051 based
;MAX-3100 UART demonstration and test code for the 8051 that
;8051 and IrDA sides run at 9600 baud. All receivers are polled
;Palmtop for IrDA and PC running a terminal program. The primary
;***************************************************************
PCON EQU 87H

IRQ EQU P3.2 ;(irq) polled in this code
TX1 EQU 10H ;transmit regs
TX2 EQU 11H
RX1 EQU 12H ;receive regs
RX2 EQU 13H

ORG 0000H
AJMP BEGIN


BEGIN:MOV SP,#70H ;initialize stack
CLR SCLK ;clear sclk-normally low
;initialize 8051 internal uart
MOV TMOD,#20H ;t1 baud
MOV TH1,#253 ;reload value baud 9600/xtal 5.5M
MOV SCON,#50H ;uart-m1,tx and rx
MOV PCON,#80H ;double baud rate bit
MOV TCON,#40H ;start baud timer
;intialize max3100 uart-irda mode at 9600 baud
MOV TX1,#0E4H ;high byte of config-R ints
MOV TX2,#0CAh ;9600 baud irda mode and two stops
ACALL UTLK ;send to uart-write config
;*************MAIN ROUTINE LOOP**********************************
LOOP: JNB IRQ,URCV ;data avail from 3100 uart?
NRECV:
JBC RI,RCV51 ;check for 8051 rcv-tx out irda
AJMP LOOP ;hang here forever
;byte received from 3100 uart-get it and send out 8051 uart
URCV: MOV TX1,#0 ;read data
MOV TX2,#0 ;read data
ACALL UTLK ;send to 8051 uart-get data to rx
MOV A,RX2 ;get data to acc
MOV SBUF,A ;send out on RS-232 side 9600 baud
LJMP LOOP ;back to top
;byte received from 8051 uart-get it and send out 3100 uart
RCV51:MOV A,SBUF ;data from 8051 uart
MOV TX1,#80H ;tx data
MOV TX2,A ;data to irda
ACALL UTLK ;send to uart-send data out IrDA
LJMP LOOP ;back to top
;***************************************************************
;SUBROUTINES
;UTLK-talk to uart-main routine
; send 16 bits from TX1 TX2 and rev 16 to RX1 RX2
UTLK: CLR CS ;activate cs
MOV A,TX1 ;get high byte
ACALL BYT8 ;send out
MOV RX1,A ;get received 1
MOV A,TX2 ;get high byte
ACALL BYT8 ;send out
MOV RX2,A ;get received 2
SETB CS ;set CS high
RET ;DONE
;**************************
;BYT8-shift out & in 8 bits with spi clocking-from and to acc
BYT8: MOV R4,#8 ;8 bits to send
SETB DIN ;make sure din is input
B8LP: RLC A ;get msb of acc to carry
MOV DOUT,C ;put out on pin
SETB SCLK ;clock high-clock
MOV C,DIN ;get data after clk high
CLR SCLK ;clock low
MOV ACC.0,C ;put in lsbit of a
DJNZ R4,B8LP ;loop til 8 bits
RET ;done
;end of code
END
編輯記錄
aki 重新編輯於 2009-03-04 09:21:11, 註解 無‧
justice31662
一般會員


發表:1
回覆:1
積分:0
註冊:2009-02-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-04 16:23:24 IP:92.8.xxx.xxx 訂閱
終於看到有人回復了><!!
感謝aki的回覆
我已上傳我驗證硬體的方法電路圖 (不知為什麼, 請用PDF打開"49a16852c1e1d_max3100.asm") 檔案在第一樓
可不可以幫我看看, 這樣接有沒有錯?
我認為是8051 Assembly的問題, 照成無法接收到正確的IrDA訊號

謝謝
系統時間:2024-05-02 23:02:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!