MAX3100 <=> 8051 uC <=> IrDA 的疑問 |
尚未結案
|
justice31662
一般會員 發表:1 回覆:1 積分:0 註冊:2009-02-22 發送簡訊給我 |
;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
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
高手不敢當,這個問題也應該不用高手就可以解決.大家一起來討論吧!
首先下載的 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |