久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2601|回復: 4
收起左側

以STC12單片機用最笨的方法產生最精準的紅外線遙控訊號

[復制鏈接]
ID:283954 發表于 2018-12-28 04:23 | 顯示全部樓層 |閱讀模式
     想用單片機通過紅外線向另一個單片機輸入控制訊號,所以就得自己寫個能根據NEC遙控碼的發射程序,首先是產生38K的載波,用11.0592m的晶振,在STC12的P3.4腳用T0定時器可獲得38.2K的載波,不是很準,應該可以用,接著就是用循環程序獲得450US, 560US, 900US, 1680US的定時,要通過計算來得到精確的定時是不可能的,只能用邏輯分析儀觀察P1.0的波形周期了,用簡單的循環也不能獲得精確的定時,得有大循環(2層),小循環(一層),加上無循環的NOP,不斷地試,這才得到精準的定時,這方法是很笨,因此花費了不少小時,這就是最后的結果了,至于如何編碼發射,那是很簡單的事了。


IR-1.jpg
IR-2.jpg
IR-4.jpg


;INFRA-RED TRANSMIITION FOR CRYSTAL 11.0592M

AUXR EQU 8EH
WAKE_CLKO EQU 08FH   

ORG 0000H

MOV WAKE_CLKO,#00000001B      ;ENABLE BRT(=4),T1(=2) T0(=1) HAVE CLOCK OUTPUT BRT@P1.0 T1@P3.5 T0@P3.4
MOV AUXR, #11111100B              ;T0x12,T1x12,UART_M0x6,BRTRUN,S2SMOD,BRTx12,EXTRAM,S1BRS
MOV TMOD, #00100010B            ;TIMER1 AS MOD2(8 BYTE AUTO RELOAD TIMER)
                                                ;GATE, C/T,M1,M0(T1) GATE, C/T,M1,MO(T0)

MOV TL0, #111                 ;Tx12 111=38.2K OUTPUT AT P3.4
MOV TH0, #111
SETB TR0                      ;RUN T0
SETB EA


START:
LCALL LEADINGBIT
LCALL ZEROBIT
LCALL ONEBIT
JMP START

LEADINGBIT:
SETB P1.0
SETB TR0
LCALL DELAY900 ;1
LCALL DELAY900 ;2
LCALL DELAY900 ;3
LCALL DELAY900 ;4
LCALL DELAY900 ;5
LCALL DELAY900 ;6
LCALL DELAY900 ;7
LCALL DELAY900 ;8
LCALL DELAY900 ;9
LCALL DELAY900 ;10
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.0
CLR TR0
LCALL DELAY450
LCALL DELAY450
LCALL DELAY450
LCALL DELAY450
LCALL DELAY450
LCALL DELAY450
LCALL DELAY450
LCALL DELAY450
LCALL DELAY450
LCALL DELAY450
NOP
NOP
NOP
NOP
NOP
RET

ZEROBIT:
SETB P1.0
SETB TR0
LCALL DELAY560
CLR P1.0
CLR TR0
LCALL DELAY560
RET

ONEBIT:
SETB P1.0
SETB TR0
LCALL DELAY560
CLR P1.0
CLR TR0
LCALL DELAY1680
RET

DELAY900: ;900.0000us ;11M
MOV R3,#100
DELAY900_A:
MOV R4, #23
DELAY900_B:
DJNZ R4, DELAY900_B
NOP
DJNZ R3,DELAY900_A
MOV R3, #9
DELAY900_C:
DJNZ R3, DELAY900_C
NOP

RET

DELAY560:   ;560.0000US ;11M
MOV R3,#100
DELAY560_A:
MOV R4, #13
DELAY560_B:
DJNZ R4, DELAY560_B
DJNZ R3,DELAY560_A
MOV R3, #90
DELAY560_C:
DJNZ R3, DELAY560_C
NOP
RET

DELAY1680: ; 1680.0000us 11M
MOV R3,#110
DELAY1680_A:
MOV R4, #40
DELAY1680_B:
DJNZ R4, DELAY1680_B
NOP
NOP
DJNZ R3, DELAY1680_A
MOV R3, #15
DELAY1680_C:
DJNZ R3, DELAY1680_C
NOP
NOP
NOP
RET

DELAY450: ; 450.0000us 11M
MOV R3,#100
DELAY450_A:
MOV R4, #10
DELAY450_B:
DJNZ R4, DELAY450_B
NOP
NOP
NOP
DJNZ R3, DELAY450_A
MOV R3, #14
DELAY450_C:
DJNZ R3, DELAY450_C
NOP
NOP
NOP
NOP
RET

END


IR-3.jpg

評分

參與人數 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:283954 發表于 2018-12-29 01:02 | 顯示全部樓層
終于把發送一個完整遙控碼的程序寫完了,原來發射完所有32BIT的碼后得加上一個560US載波的停止位,否則最后那個位是0的時候就會出錯,另外發現 CPL 33H 這個命令是無效的,而編譯軟件并沒有報錯,執行時 33H 根本沒有對補,而必須先把33H送進A,CPL A 后,再送回33H才行。

紅外線的傳輸速率是很有限的,因為一個周期是108MS,所以還得在傳送后DELAY,否則接收端無反應

START:
MOV A, #01010101B
LCALL SENTINFRA
MOV A, #10101010B
LCALL SENTINFRA
JMP START

SENTINFRA:            ;VALUE PUT A
MOV 32H, A            ;SAVE FOR RE-USE
MOV 33H, #11110000B   ;USER CODE
LCALL LEADINGBIT
;----------------USERCODE
MOV 30H, 33H
LCALL SENTBYTE
MOV A, 33H
CPL A
MOV 30H, A
LCALL SENTBYTE
;----------------SCANCODE
MOV 30H, 32H
LCALL SENTBYTE
MOV A, 32H
CPL A
MOV 30H, A
LCALL SENTBYTE
LCALL STOPBIT
LCALL DELAY3
RET

SENTBYTE:
MOV 31H, 30H
MOV 34H, #8
SENTBYTE1:
MOV A, 31H
RRC A
MOV 31H, A
JC BIT1
LCALL ZEROBIT
JMP BITEND
BIT1:
LCALL ONEBIT
BITEND:
DJNZ 34H, SENTBYTE1
RET

DELAY3:
MOV 56H, #255 ;
SLOWDOWN0:
MOV 55H, #100  ;255
SLOWDOWN:
MOV 57H, #1   ;1=3.64M 11=18M
SLOWDOWN2:
DJNZ 57H, SLOWDOWN2
DJNZ 55H, SLOWDOWN
DJNZ 56H, SLOWDOWN0
RET

回復

使用道具 舉報

ID:343102 發表于 2018-12-29 10:45 | 顯示全部樓層
用單片機通過紅外線向另一個單片機輸入控制訊號沒必要編碼,可以模擬串口,就像無線發射。
不過你的研究還是有用的,可以當紅外遙控器用。
回復

使用道具 舉報

ID:283954 發表于 2018-12-29 13:02 | 顯示全部樓層
我的那臺用STC12做的主機已經有標準的NEC紅外線接收設備,可以用標準的遙控器控制了,而兩個串口都已經被占用了,要想用另一個單片機給它下點控制命令只能通過紅外線了, 在摸懂了這個編碼后,就可以做另外的實驗,第一的想法就是要加快傳輸速率,一個碼要108MS實在太慢,那是因為是“遙控”,距離遠,如果發射管和接收管距離短,幾乎面對面,提高速率是完全可能的,正在構思。
回復

使用道具 舉報

ID:283954 發表于 2018-12-30 16:04 | 顯示全部樓層
這是寫好測試過的速率較快的紅外線遙控程序,一秒大概可送50個碼,很夠用了,發射與接收管距離30CM,直接讀取每個位的電平,模仿通用的反碼檢測,錯碼不多,應該可用,重要是要能標準的NEC碼共存共用,主機除了能用手動遙控器,也能用單片機發射編碼控制主機,辦法是在接收端的接收程序檢測9ms引導碼時若發現高電平就跳去快速接收的程序。

IR450JJJ.jpg

發射部分:

;INFRA-RED TRANSMIITION FOR CRYSTAL 11.0592M

AUXR EQU 8EH
WAKE_CLKO EQU 08FH   

ORG 0000H

MOV WAKE_CLKO,#00000001B      ;ENABLE BRT(=4),T1(=2) T0(=1) HAVE CLOCK OUTPUT BRT@P1.0 T1@P3.5 T0@P3.4
MOV AUXR, #11111100B          ;T0x12,T1x12,UART_M0x6,BRTRUN,S2SMOD,BRTx12,EXTRAM,S1BRS
MOV TMOD, #00100010B          ;TIMER1 AS MOD2(8 BYTE AUTO RELOAD TIMER)
                              ;GATE, C/T,M1,M0(T1) GATE, C/T,M1,MO(T0)

MOV TL0, #111                 ;Tx12 111=38.2K OUTPUT AT P3.4
MOV TH0, #111
SETB TR0                      ;RUN T0
SETB EA

START:
SETB P1.0
SETB TR0
LCALL DELAY900 ;1
LCALL DELAY450 ;2
LCALL DELAY185 ;5 3600+185
CLR P1.0
CLR TR0
LCALL DELAY900 ;1
LCALL DELAY450 ;2
LCALL DELAY185 ;5 3600+185
;INC 36H
MOV 36H, #10101010B
MOV 33H, 36H
LCALL BIT8START
LCALL SENT8BIT
MOV A, 33H
CPL A
MOV 33H, A
LCALL SENT8BIT
LCALL BIT8STOP
LCALL DELAY4
JMP START

SENT8BIT:
MOV 31H, 33H   ;STORE FOR RE-USE
MOV 34H, #8
SENT8BIT1:
MOV A, 31H
RRC A
MOV 31H, A
JC BIT8ONE
LCALL BIT8LOW
JMP SENTBIT8END
BIT8ONE:
LCALL BIT8HIGH
SENTBIT8END:
DJNZ 34H, SENT8BIT1
RET

BIT8LOW:
CLR P1.0
CLR TR0
LCALL DELAY450
RET

BIT8HIGH:
SETB P1.0
SETB TR0
LCALL DELAY450
RET

BIT8STOP:
CLR P1.0
CLR TR0
LCALL DELAY450
RET

BIT8START:
SETB P1.0
SETB TR0
LCALL DELAY450
RET

DELAY4:
MOV 56H, #255 ;
SLOWDOWN0:
MOV 55H, #35  ;255
SLOWDOWN:
MOV 57H, #1   ;1=3.64M 11=18M
SLOWDOWN2:
DJNZ 57H, SLOWDOWN2
DJNZ 55H, SLOWDOWN
DJNZ 56H, SLOWDOWN0
RET

DELAY900: ;900.0000us ;11M
MOV R3,#100
DELAY900_A:
MOV R4, #23
DELAY900_B:
DJNZ R4, DELAY900_B
NOP
DJNZ R3,DELAY900_A
MOV R3, #9
DELAY900_C:
DJNZ R3, DELAY900_C
NOP

RET

DELAY560:   ;560.0000US ;11M
MOV R3,#100
DELAY560_A:
MOV R4, #13
DELAY560_B:
DJNZ R4, DELAY560_B
DJNZ R3,DELAY560_A
MOV R3, #90
DELAY560_C:
DJNZ R3, DELAY560_C
NOP
RET

DELAY1680: ; 1680.0000us 11M
MOV R3,#110
DELAY1680_A:
MOV R4, #40
DELAY1680_B:
DJNZ R4, DELAY1680_B
NOP
NOP
DJNZ R3, DELAY1680_A
MOV R3, #15
DELAY1680_C:
DJNZ R3, DELAY1680_C
NOP
NOP
NOP
RET

DELAY450: ; 450.0000us 11M
MOV R3,#100
DELAY450_A:
MOV R4, #10
DELAY450_B:
DJNZ R4, DELAY450_B
NOP
NOP
NOP
DJNZ R3, DELAY450_A
MOV R3, #14
DELAY450_C:
DJNZ R3, DELAY450_C
NOP
NOP
NOP
NOP
RET

DELAY185: ; 185.0000us 11M
MOV R3,#100
DELAY185_A:
MOV R4, #3
DELAY185_B:
DJNZ R4, DELAY185_B
DJNZ R3, DELAY185_A
MOV R3, #58
DELAY185_C:
DJNZ R3, DELAY185_C
RET

DELAY1000: ;996.5us 11M
MOV R3,#110
DELAY1000_A:
MOV R4, #23
DELAY1000_B:
DJNZ R4, DELAY1000_B
NOP
NOP
;NOP 10065
DJNZ R3,DELAY1000_A
RET

DELAY2400: ;2409us 11M
MOV R3,#242
DELAY2400_A:
MOV R4, #25
DELAY2400_B:
DJNZ R4, DELAY2400_B
NOP
NOP
NOP
NOP
DJNZ R3,DELAY2400_A
RET

END

接收部分:

;THIS VERSION USE NEW IR AND USE 18M CRSTAL

ORG 0000H
ORG 0013H
LJMP EXT_INT1 ;EXTERNAL INTERRUPT1

ORG 0100H    ; PROGRAM START

MOV 95H, #00000000B  ;SETP2.7 AS HIGHOUTXURRENT FOR IR POWER
MOV 96H, #00010000B  ;SETP2.7 AS HIGHOUTXURRENT
SETB P2.7
SETB EX1             ;ENABLE EXTERNAL INTERRUT P3.3
CLR PX1              ;SET EXTERNAL INTERRUT PARITY TO LOW
CLR IE1              ;CLEAR EXTERNAL INTERRUT FLAG
SETB IT1             ;SET AS H TO L AS INTERRUT METHOD
SETB EA

START:
LCALL DELAY3
;LCALL DELAY3
JMP START

EXT_INT1:        ;USE FOR INFRA RED
CLR EX1          ;STOP THE INTERRUPT_1
LCALL INFRARED
SETB EX1         ;REOPEN EXTERNAL INTERRUPT 1
CLR IE1          ;CLEAR EXTERNAL INTERRUT FLAG
RETI

INFRARED:         ;21-12-2018 NO MORE USING R0
CPL P2.7
MOV DPH, #0
PUSH ACC
IR:               ;DETECT 9000US INIT LOW
MOV 62H,#2        ;TEST 5 TIMES 882uS=8820us
IR_SB1:
LCALL DELAY882    ;882us
DJNZ 62H,IR_SB1   ;
JB P3.3,IRNEW    ;IF HIGH THEN NEW
CPL P2.7
MOV P0, #0
IREXIT:
POP ACC
RET

IRNEW:           ;NEW CODE ;NO START BIT, ONE STOP BIT
CPL P2.7
LCALL DELAY800
LCALL DELAY800
CPL P2.7
JNB P3.3,IREXIT    ;IF HIGH THEN NEW
LCALL DELAY250     ;START BIT
CPL P2.7
MOV R7, #8
IRNEW1:
LCALL DELAY450
CPL P2.7
MOV C,P3.3       ;STORE P3.3 TO C
RLC A
DJNZ R7, IRNEW1
MOV 67H, A

MOV R7, #8
IRNEW2:
LCALL DELAY450
CPL P2.7
MOV C,P3.3              ;STORE P3.3 TO C
RLC A
DJNZ R7, IRNEW2
MOV 68H, A
;-----------------STOPBIT
MOV A, 67H
CPL A
CJNE A, 68H, IRNEWEXIT
MOV P1, 68H
SETB 25H    ;VALID CODE
IRNEWEXIT:
JMP IREXIT


;========18m

DELAY882: ;882us 18M
MOV R3,#100
DELAY882_A:
MOV R4, #39
DELAY882_B:
DJNZ R4, DELAY882_B
DJNZ R3,DELAY882_A
RET

DELAY1000: ;999.285us 18M
MOV R3,#110
DELAY1000_A:
MOV R4, #40
DELAY1000_B:
DJNZ R4, DELAY1000_B
DJNZ R3,DELAY1000_A
RET

DELAY2400: ;2397.85us 18M
MOV R3,#242
DELAY2400_A:
MOV R4, #44
DELAY2400_B:
DJNZ R4, DELAY2400_B
DJNZ R3,DELAY2400_A
RET

DELAY450: ;450us 18M
MOV R3,#100
DELAY450_A:
MOV R4, #19
DELAY450_B:
DJNZ R4, DELAY450_B
DJNZ R3,DELAY450_A
MOV R3, #29
DELAY450_C:
DJNZ R3, DELAY450_C
RET

DELAY250: ;250us 18M
MOV R3,#75
DELAY250_A:
MOV R4, #19
DELAY250_B:
DJNZ R4, DELAY250_B
DJNZ R3,DELAY250_A
RET

DELAY800: ;800us 18M
MOV R3,#100
DELAY800_A:
MOV R4, #26
DELAY800_B:
DJNZ R4, DELAY800_B
DJNZ R3,DELAY800_A
RET

DELAY3:
MOV 56H, #255 ;
SLOWDOWN0:
MOV 55H, #125 ;255
SLOWDOWN:
MOV 57H, #11   ;1=3.64M 11=18M
SLOWDOWN2:
DJNZ 57H, SLOWDOWN2
DJNZ 55H, SLOWDOWN
DJNZ 56H, SLOWDOWN0
RET

END
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天射天天干 | 国产一区二区三区四区在线观看 | 日韩午夜精品 | 中文字幕在线精品 | 伦理午夜电影免费观看 | 久草免费在线视频 | 亚洲三级在线 | 精品国产视频 | 欧美v免费 | 欧美日韩网站 | 91午夜在线 | 国产网站在线免费观看 | 欧美色综合一区二区三区 | 亚洲精品国产a久久久久久 午夜影院网站 | 日本特黄a级高清免费大片 国产精品久久性 | 国产精品欧美精品 | 欧美日韩不卡合集视频 | 国产视频精品免费 | 欧美性视频在线播放 | 久久久久久99 | 精品视频网 | 一区二区在线免费观看 | 国产精品综合 | 久久亚洲国产 | 亚洲人成在线观看 | 日韩成人 | 亚洲播放一区 | 精品av | 国产aⅴ爽av久久久久久久 | 毛片国产 | 欧美一区二区三区,视频 | 久久成人精品视频 | 国产精品美女www爽爽爽 | 国产精品亚洲精品久久 | 婷婷狠狠| 免费人成在线观看网站 | 91av视频在线免费观看 | 国产午夜亚洲精品不卡 | 久久中文字幕av | 在线视频成人 | 亚洲夜夜爽 |