關於紅外線訊號資料傳輸問題 |
缺席
|
btiy
一般會員 發表:15 回覆:31 積分:9 註冊:2005-08-18 發送簡訊給我 |
請問一下
若我將一個紅外線訊號接收到後
如何把它分成四個位元(34H 35H 36H 37H)或者其他
因為它是一個波形的型態,然後我透過RS-232將收到資料傳到電腦
像這樣我如何用組合語言寫
我硬體是89s51 我是有想說,如果我寫一段程式判斷它多少時間內若從高變低或低電高
這樣為一個1,然後過八個時間點後他可能收到分別為1或0這樣,然後
我再把它加起來這樣就可以成為上面所寫的34H
可是我認為這樣方式好笨,一定有其他的方式吧! 一直很困擾,也不知如何撰寫,找資料也找不到,所以求助各位高手 謝謝
|
penguin5
資深會員 發表:116 回覆:317 積分:431 註冊:2004-05-09 發送簡訊給我 |
|
src
高階會員 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
1、 紅外線發射時讀取時為(0)沒有線發射時讀取時為(1)。
2、 用timer設定約100us中斷一次,中段時讀取紅外線接收訊號,將收到的訊號右移至暫存器,八次為一位元組並將此位元組存到記憶體。
3、 中段時讀取紅外線接收訊號時,同時判斷讀取時為(1)的次數若超過50次表示訊號結束,並設定結束旗標。
4、 主程式中判斷結束旗標,若是則讀取儲存到記憶體的資料,將資料移至暫存器,用右移判斷位元,再經由RS232傳到PC,就可以看到紅外線訊號的內容。 5、 請參考http://myweb.hinet.net/home11/macgyvertek/
|
btiy
一般會員 發表:15 回覆:31 積分:9 註冊:2005-08-18 發送簡訊給我 |
引言: 1、 紅外線發射時讀取時為(0)沒有線發射時讀取時為(1)。 2、 用timer設定約100us中斷一次,中段時讀取紅外線接收訊號,將收到的訊號右移至暫存器,八次為一位元組並將此位元組存到記憶體。 3、 中段時讀取紅外線接收訊號時,同時判斷讀取時為(1)的次數若超過50次表示訊號結束,並設定結束旗標。 4、 主程式中判斷結束旗標,若是則讀取儲存到記憶體的資料,將資料移至暫存器,用右移判斷位元,再經由RS232傳到PC,就可以看到紅外線訊號的內容。 5、 請參考http://myweb.hinet.net/home11/macgyvertek/那也就是說當我接收到紅外線訊號時,他一定會變到0的狀態嗎? 因為他不是0101的在變換,難道他不會有特例嗎? 還有若真的是會這樣的話,那也就是說在程式中若判定他變為0時 ,在一個中斷時間記錄它的值,然後放到ACC中,下一個訊號近來後 先右旋一次後把值放進去ACC中,等到紀錄八次後,再把值放到暫存器。 如果這樣是對的話,但是我有一個問題了,這樣子的話要怎樣寫我就不懂了 可以教教我嗎?這樣類似的我沒寫過就不知道如何下手。 |
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
|
src
高階會員 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
引言:請參考http://myweb.hinet.net/home11/macgyvertek/ 以下是解紅外線波形程式碼,若有問題請與我連絡,因為非三言兩與可回答引言: 1、 紅外線發射時讀取時為(0)沒有線發射時讀取時為(1)。 2、 用timer設定約100us中斷一次,中段時讀取紅外線接收訊號,將收到的訊號右移至暫存器,八次為一位元組並將此位元組存到記憶體。 3、 中段時讀取紅外線接收訊號時,同時判斷讀取時為(1)的次數若超過50次表示訊號結束,並設定結束旗標。 4、 主程式中判斷結束旗標,若是則讀取儲存到記憶體的資料,將資料移至暫存器,用右移判斷位元,再經由RS232傳到PC,就可以看到紅外線訊號的內容。 5、 請參考http://myweb.hinet.net/home11/macgyvertek/那也就是說當我接收到紅外線訊號時,他一定會變到0的狀態嗎? 因為他不是0101的在變換,難道他不會有特例嗎? 還有若真的是會這樣的話,那也就是說在程式中若判定他變為0時 ,在一個中斷時間記錄它的值,然後放到ACC中,下一個訊號近來後 先右旋一次後把值放進去ACC中,等到紀錄八次後,再把值放到暫存器。 如果這樣是對的話,但是我有一個問題了,這樣子的話要怎樣寫我就不懂了 可以教教我嗎?這樣類似的我沒寫過就不知道如何下手。 red_rx equ p3.2 ; tx_flag equ 20h.0 ; first_flag equ 20h.1 ; tx_enable_flag equ 20h.2 ; invalid equ 20h.3 ; noise_flag equ 20h.4 ; data_buf equ 30h ; ;================================== org 0h ;程式起始位址 jmp start ; org 03h ;int0 中斷向量 jmp ext0_int ; org 0bh ;timer0 中斷向量 jmp t0_int ; org 23h ;RS232 中斷向量 jmp rs232int ; ;================================== start: mov sp,#70h ;設定堆疊指標 call init_rs232 ;RS232 初始化 timer0 int 初始化 ;=======initial data=============== setb ex0 ;enable ext0 setb it0 ;負緣觸發 clr first_flag clr tx_enable_flag ; ;================================== main: call tx_rs232 ; jmp main ; ;=======ext0_int=================== ext0_int: jb invalid,ext0_ret clr ex0 ;disable ext0 setb et0 ;enable t0 int setb tr0 ;start t0 setb tf0 ;set t0 overflow ext0_ret: clr invalid reti ;=======timer0 int================= t0_int: jb red_rx,data_hi clr c call save ; mov r1,#0 ; jmp t0_ret ; data_hi: cjne r0,#data_buf,normal ;消除雜訊 clr first_flag setb invalid setb ex0 jmp t0_ret normal: setb c call save ; inc r1 ; cjne r1,#50,t0_ret ;end of data clr et0 ;disable t0 int mov a,#0ah ; mov @r0,a ; clr first_flag ; clr et0 clr tr0 setb tx_enable_flag ; setb tx_flag ;enable tx jmp t0_ret t0_ret: reti ;=======save======================= save: jb first_flag,save_next ; setb first_flag ; mov r0,#data_buf ;read data_buf address mov r2,#8 mov r3,0 save_next: mov a,r3 rrc a mov r3,a djnz r2,save_ret mov r2,#8 mov @r0,a inc r0 save_ret: ret ;================================== tx_rs232: jnb tx_enable_flag,tx_ret ; jb first_flag,tx_next ; setb first_flag ; mov r0,#data_buf ;read data_buf address mov a,@r0 ;read first data mov r3,a mov r2,#8 ;8 bit tx_next: mov a,r3 rrc a mov r3,a jc tx_1 mov a,#30h jnb tx_flag,$ clr tx_flag mov sbuf,a ; jmp tx_2 tx_1: mov a,#31h jnb tx_flag,$ clr tx_flag mov sbuf,a ; tx_2: djnz r2,tx_next mov r2,#8 inc r0 ;read next data mov a,@r0 mov r3,a cjne a,#0ah,tx_next jnb tx_flag,$ clr tx_flag mov a,#0dh mov sbuf,a jnb tx_flag,$ clr tx_flag mov a,#0ah mov sbuf,a clr first_flag ; clr tx_enable_flag ; mov r5,#200 call delay setb invalid setb ex0 ;enable ext0 int tx_ret: ret ;=======RS232 INT================== rs232int: jbc ri,receive ; clr ti ; setb tx_flag ; jmp int_ret ; receive: clr ri int_ret: reti ;=======init_rs232================= init_rs232: mov tmod,#00100010B ;set tiMER1 MODE 2 tiMER0 MODE 2 anl pcon,#01111111B ;set SMOD=0 mov Th1,#0FDh ;set rate 9600 mov Th0,#(255-160) ; mov Tl0,#(255-160) ; setb tr1 ;start tiMER1 mov SCON,#01010000B ;set MODE 1 aND REN=1 mov IE,#10010000B ;ENaBLE INT aND COM_PORT ret ;=======delay===================== delay: ;tiME=R5*1ms mov R6,#5 ; DEL: mov R7,#107 ; djnz R7,$ ; djnz R6,DEL ; djnz R5,delay ; ret ;================================= end |
btiy
一般會員 發表:15 回覆:31 積分:9 註冊:2005-08-18 發送簡訊給我 |
引言:謝謝,我好好研究ㄧ下,看看你是用怎樣的方法引言:請參考http://myweb.hinet.net/home11/macgyvertek/ 以下是解紅外線波形程式碼,若有問題請與我連絡,因為非三言兩與可回答 發表人 - src 於 2005/09/09 06:02:00引言: 1、 紅外線發射時讀取時為(0)沒有線發射時讀取時為(1)。 2、 用timer設定約100us中斷一次,中段時讀取紅外線接收訊號,將收到的訊號右移至暫存器,八次為一位元組並將此位元組存到記憶體。 3、 中段時讀取紅外線接收訊號時,同時判斷讀取時為(1)的次數若超過50次表示訊號結束,並設定結束旗標。 4、 主程式中判斷結束旗標,若是則讀取儲存到記憶體的資料,將資料移至暫存器,用右移判斷位元,再經由RS232傳到PC,就可以看到紅外線訊號的內容。 5、 請參考http://myweb.hinet.net/home11/macgyvertek/那也就是說當我接收到紅外線訊號時,他一定會變到0的狀態嗎? 因為他不是0101的在變換,難道他不會有特例嗎? 還有若真的是會這樣的話,那也就是說在程式中若判定他變為0時 ,在一個中斷時間記錄它的值,然後放到ACC中,下一個訊號近來後 先右旋一次後把值放進去ACC中,等到紀錄八次後,再把值放到暫存器。 如果這樣是對的話,但是我有一個問題了,這樣子的話要怎樣寫我就不懂了 可以教教我嗎?這樣類似的我沒寫過就不知道如何下手。 |
tms
一般會員 發表:0 回覆:6 積分:1 註冊:2005-09-19 發送簡訊給我 |
|
src
高階會員 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
|
tms
一般會員 發表:0 回覆:6 積分:1 註冊:2005-09-19 發送簡訊給我 |
是的,我知了.先不論FIRMWARE之寫法,此次本人僅對IR RECEIVER此HARDWARE做簡述心得.
一般IR RECEIVER 3PINS採放大迴路與BPF設計.
放大迴路可允許遙控信號能更遠距傳送而BPF(Band Pass Filter)則可濾掉非正確範圍內之資料與載波(CARRIER DATAs),進而保留允許之信號,隨即整型後從信號腳輸出(接至MCU/CPU pin).
因市面上之遙控器並非都使用相同之CARRIER,故IR RECEIVER's BPF 亦有不同.(雖曾經有人倡導G-CODE).
原問題製造者應先確定所進行測試之REMOTE CONTROL & RECEIVER之資料是否MATCH,否則直接進行實驗或許會有怪怪的信號->DATA.
|
btiy
一般會員 發表:15 回覆:31 積分:9 註冊:2005-08-18 發送簡訊給我 |
引言: 是的,我知了.先不論FIRMWARE之寫法,此次本人僅對IR RECEIVER此HARDWARE做簡述心得. 一般IR RECEIVER 3PINS採放大迴路與BPF設計. 放大迴路可允許遙控信號能更遠距傳送而BPF(Band Pass Filter)則可濾掉非正確範圍內之資料與載波(CARRIER DATAs),進而保留允許之信號,隨即整型後從信號腳輸出(接至MCU/CPU pin). 因市面上之遙控器並非都使用相同之CARRIER,故IR RECEIVER's BPF 亦有不同.(雖曾經有人倡導G-CODE). 原問題製造者應先確定所進行測試之REMOTE CONTROL & RECEIVER之資料是否MATCH,否則直接進行實驗或許會有怪怪的信號->DATA.我現在遇到的問題是,就我所了解的當紅外線訊號接收到時它訊號一開始會先處於LOW一段時間所謂的(前導碼),然後HIGHㄧ段時間後才是真正的訊號,但是真的是所有的紅外線訊號(市售的遙控器訊號)都是這樣的嗎? 我知道要去把它訊完整訊號接收進來就要了解所有的紅外線訊號,但種是有些特例,認知的也有限,所以問問大家看大家經驗是怎樣的。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |