版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、;紅外線遙控讀碼機(jī),用本實(shí)例配合本站套件可讀出任何6121或6122(CD6121/CD6122/SC6121/SC6122)及其兼容芯片的紅外線遙控器的用戶碼、鍵碼。;本例是一個(gè)紅外線遙控接收解碼程序,程序中數(shù)碼管顯示用的是定時(shí)器中斷法的動(dòng)態(tài)掃描;動(dòng)態(tài)顯示二位數(shù)碼管的方法,中斷法,我們以3MS中斷一次從而交換兩位數(shù)碼管輪流點(diǎn)亮。;對(duì)準(zhǔn)實(shí)驗(yàn)板紅外線接收頭輕按要測(cè)定的遙控器的待測(cè)按鍵一次,此時(shí)實(shí)驗(yàn)板的中間兩位數(shù)碼管將顯示該鍵的鍵碼,;(顯示為16進(jìn)制的),輕觸實(shí)驗(yàn)板的S10此時(shí)顯示器切換為顯示當(dāng)前遙控器用戶碼的低8位, 輕觸實(shí)驗(yàn)板的S11此時(shí)顯示器切換為顯示當(dāng)前遙控器用戶碼的高8位,;輕觸實(shí)驗(yàn)板
2、的S9此時(shí)顯示再一次回到顯示當(dāng)前鍵的鍵碼.;注意:所有的顯示均為16進(jìn)制,'A'顯示為'A','B'顯示為'b','C'顯示為'c','D'顯示為'd','E'顯示為'E','F'顯示為'F'.;注意6121的遙控器發(fā)射碼依次為:同步頭(引導(dǎo)碼)+32位數(shù)據(jù)碼(用戶碼低8位+用戶碼高8位+鍵碼+鍵碼的反碼);引導(dǎo)碼是由9MS的高電平加4.5MS的低電平構(gòu)成,我們接收到的剛好反相為9MS的低電平加4.5MS
3、的高電平.;數(shù)據(jù)碼'0'是由560US的高電平加560US的低電平構(gòu)成,接收時(shí)反相為560US的低電平加560US的高電平構(gòu)成.;數(shù)據(jù)碼'1'是由560US的高電平加1.69MS的高電平構(gòu)成,接收時(shí)反相為560US的低電平加1.69MS的高電平構(gòu)成.;程序文件名:“MCD-RMT.ASM"*RTCC EQU 01H ;定義定時(shí)器0地址PC EQU 02H ;定義程序計(jì)數(shù)器低字節(jié)寄存器地址STATUS EQU 03H ;定義狀態(tài)寄存器地址PORTA EQU 05H ;定義RA口數(shù)據(jù)寄存器地址PORTB EQU 06H ;定義RB口數(shù)據(jù)寄存器地址PORTC
4、 EQU 07H ;定義RC口數(shù)據(jù)寄存器地址INTCON EQU 0BH ;定義中斷控制寄存器OPTION_REG EQU 81H ;TRISA EQU 85H ;定義RA口方向控制寄存器TRISB EQU 86H ;定義RB口方向控制寄存器TRISC EQU 87H ;定義RC口方向控制寄存器ADCON1 EQU 9FH ;定義ADC模塊控制寄存器1的地址;-STATUSC EQU 0 ;定義進(jìn)位標(biāo)志位位地址Z EQU 2 ;定義0標(biāo)志位位地址RP0 EQU 5 ;寄存器體選;-INTCONT0IF EQU 2 ;定時(shí)器0溢出中斷標(biāo)志位T0IE EQU 5 ;定時(shí)器0溢出中斷允許/禁止GIE
5、 EQU 7 ;總中斷允許/禁止;-RMT EQU 1 ;遙控接收輸入腳位地址(RA。1);-BITIN EQU 7 ;遙控接收數(shù)據(jù)位位標(biāo)志;-CNT0 EQU 20H ;用戶臨時(shí)寄存器1CNT1 EQU 21H ;用戶臨時(shí)寄存器2CNT2 EQU 22H ;用戶臨時(shí)寄存器3CNT3 EQU 23H ;用戶臨時(shí)寄存器4TABADD EQU 24H ;數(shù)碼管顯示碼取碼用寄存器FLAGS EQU 25H ;顯示位選標(biāo)志位DISPBUF_H EQU 26H ;顯示器高位DISPBUF_L EQU 27H ;顯示器低位W_TEMP EQU 2BH ;W現(xiàn)場(chǎng)保護(hù)寄存器STATUS_TEMP EQU 2C
6、H ;STATUS現(xiàn)場(chǎng)保護(hù)寄存器CSR0 EQU 2DH ;遙控鍵碼反碼寄存器CSR1 EQU 2EH ;遙控器鍵碼寄存器CSR2 EQU 2FH ;遙控器用戶碼高8位寄存器CSR3 EQU 30H ;遙控器用戶碼低8位寄存器FLAGS2 EQU 31H ;臨時(shí)寄存器CSR0A EQU 32H ;遙控接收32位數(shù)據(jù)暫存寄存器CSR1A EQU 33H ;遙控接收32位數(shù)據(jù)暫存寄存器CSR2A EQU 34H ;遙控接收32位數(shù)據(jù)暫存寄存器CSR3A EQU 35H ;遙控接收32位數(shù)據(jù)暫存寄存器;- ORG 0000H NOP ;放置一條ICD必須的空操作指令 GOTO MAIN ORG 00
7、04H GOTO TMR0SERV ;定時(shí)器中斷,掃描數(shù)碼管 ORG 0008H;-CONVERT MOVWF PC ;將W寄存器內(nèi)的7段顯示碼地址放入PC TABLE ;PC執(zhí)行新地址指令, 跳到相對(duì)的地址執(zhí)行? RETLW 0C0H ;0 ;RETLW指令,將七段顯示碼存入W后返回 RETLW 0F9H ;1 RETLW 0A4H ;2 RETLW 0B0H ;3 RETLW 099H ;4 RETLW 092H ;5 RETLW 082H ;6 RETLW 0F8H ;7 RETLW 080H ;8 RETLW 090H ;9 RETLW 088H ;A RETLW 083H ;b RE
8、TLW 0A7H ;c RETLW 0A1H ;d RETLW 086H ;E RETLW 08EH ;F;- -TMR0SERV MOVWF W_TEMP ;現(xiàn)場(chǎng)保護(hù) SWAPF STATUS,W ;用SWAPF才不會(huì)影響標(biāo)志位 MOVWF STATUS_TEMP ;將W和STATUS存入各保護(hù)寄存器 MOVLW 0FFH MOVWF PORTC ;先熄滅所有數(shù)碼管以免閃爍 BSF PORTA,4 BSF PORTA,5 BSF PORTA,0 BSF PORTA,2 BSF PORTA,3 MOVLW TABLE MOVWF TABADD ;將轉(zhuǎn)換表的首地址存入TABADD MOVFW D
9、ISPBUF_L ;計(jì)數(shù)值(W)與轉(zhuǎn)換表的起始地址相加 BTFSS FLAGS,1 MOVFW DISPBUF_H ADDWF TABADD,W CALL CONVERT ;存入W后調(diào)用轉(zhuǎn)換表子程序 MOVWF PORTC ;送RC口顯示 BTFSS FLAGS,1 ;根據(jù)標(biāo)志位選擇是點(diǎn)亮那一個(gè)數(shù)碼管 BCF PORTA,3 BTFSC FLAGS,1 BCF PORTA,2 COMF FLAGS,1 MOVLW .155 ;送定時(shí)器初值 MOVWF RTCC BCF INTCON,T0IF ;清定時(shí)器0溢出中斷標(biāo)志位 SWAPF STATUS_TEMP,W ;恢復(fù)中斷前STATUS,W的值
10、MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W ;(用SWAPF才不會(huì)影響STATUS的值) RETFIE;-MAIN CLRF PORTA CLRF PORTB ;初始化IO口 BSF STATUS,RP0 ;設(shè)置寄存器體1 MOVLW 07H MOVWF ADCON1 ;設(shè)置RA口全部為普通數(shù)字IO口 MOVLW 0C2H ;將RMT設(shè)置為輸入,其它所有IO口設(shè)置為輸出 MOVWF TRISA MOVLW 0FFH ;RB口全部為輸入 MOVWF TRISB MOVLW 00H ;RC口全部為輸出 MOVWF TRISC MOVLW 04H MOVWF
11、 OPTION_REG ;預(yù)分頻器分配給定時(shí)器0,分頻比1:32;開啟RB口弱上拉. BCF STATUS,RP0 ;恢復(fù)寄存器體0 MOVLW .155 MOVWF RTCC ;定時(shí)器送初值(255-155)*32US=3.2MS,每3.2MS一次中斷 MOVLW 0FFH ;先讓數(shù)碼管全部不顯示 MOVWF PORTC CLRF DISPBUF_L ;數(shù)碼管先顯示00 CLRF DISPBUF_H BCF INTCON,T0IF BSF INTCON,T0IE ;定時(shí)器0溢出中斷允許 BSF INTCON,GIE ;總中斷允許;-LOOP BTFSS PORTB,1 ;是否按下S9 GOT
12、O KEY1 ;跳轉(zhuǎn)鍵處理 BTFSS PORTB,2 ;是否按下S10 GOTO KEY2 ;跳轉(zhuǎn)鍵處理 BTFSS PORTB,3 ;是否按下S11 GOTO KEY3 ;跳轉(zhuǎn)鍵處理 BTFSS PORTA,RMT ;是否有遙控器按下 GOTO RCV ;跳轉(zhuǎn)遙控接收程序 GOTO LOOP ;反復(fù)檢測(cè);-KEY1 ;將鍵碼送顯示 CLRF CNT0 ;消除鍵抖動(dòng) MOVLW .100 MOVWF CNT1 KEY1_A BTFSC PORTB,1 INCF CNT0,1 BTFSS PORTB,1 CLRF CNT0 BTFSC CNT0,3 GOTO LOOP DECFSZ CNT1,
13、1 GOTO KEY1_A SWAPF CSR1,W ;鍵碼值高低位交換,先處理高位 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_H ;存入寄存器 MOVFW CSR1 ;鍵碼值低位處理 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_L ;存入寄存器 BTFSS PORTB,1 ;等待鍵釋放 GOTO $-1 GOTO LOOP;-KEY2 ;將用戶碼低8位送顯示 CLRF CNT0 ;消除鍵抖動(dòng) MOVLW .100 MOVWF CNT1KEY2_A BTFSC PORTB,2 INCF CNT0,1 BTFSS PORTB,2 CLRF CNT0 BTFS
14、C CNT0,3 GOTO LOOP DECFSZ CNT1,1 GOTO KEY2_A SWAPF CSR3,W ;用戶碼低8位 高低位交換,先處理高位 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_H ;存入寄存器 MOVFW CSR3 ;用戶碼低8位 低位處理 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_L ;存入寄存器 BTFSS PORTB,2 ;等待鍵釋放 GOTO $-1 GOTO LOOP;-KEY3 ;將用戶碼高8位送顯示 CLRF CNT0 MOVLW .100 ;消除鍵抖動(dòng) MOVWF CNT1KEY3_A BTFSC PORTB,3 I
15、NCF CNT0,1 BTFSS PORTB,3 CLRF CNT0 BTFSC CNT0,3 GOTO LOOP DECFSZ CNT1,1 GOTO KEY3_A SWAPF CSR2,W ;顯示值高低位交換,先處理高位 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_H ;存入寄存器 MOVFW CSR2 ;顯示值低位處理 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_L ;存入寄存器 BTFSS PORTB,3 ;等待鍵釋放 GOTO $-1 GOTO LOOP ;-RCV BTFSC PORTA,RMT GOTO LOOP ;是干擾退出 MOVLW .4
16、 MOVWF CNT1 ;4*256*10us CLRF CNT2 CLRF CNT0RCV1 ;先檢測(cè)引導(dǎo)碼的9MS低電平 GOTO $+1 ;每一個(gè)循環(huán)10US NOP BTFSC PORTA,RMT INCF CNT2,1 BTFSS PORTA,RMT CLRF CNT2 BTFSC CNT2,3 ;高電平大于8*10US=80US則為有效高電平,否則是一些干擾信號(hào) GOTO RCV2 DECFSZ CNT0,1 GOTO RCV1 DECFSZ CNT1,1 GOTO RCV1 GOTO LOOP ;低電平大于4*256*10US=10.24MS則是錯(cuò)誤脈沖RCV2 MOVLW .3
17、 SUBWF CNT1,0 ;低電平小于2*256*10US=5.12MS則是錯(cuò)誤脈沖 SKPNC GOTO LOOP MOVLW .3 MOVWF CNT1 ;3*256*10us CLRF CNT2 CLRF CNT0RCV3 GOTO $+1 ;每一個(gè)循環(huán)10US NOP BTFSS PORTA,RMT INCF CNT2,1 BTFSC PORTA,RMT CLRF CNT2 BTFSC CNT2,3 ; 低電平大于8*10US=80US則為有效低電平,否則是一些干擾信號(hào) GOTO RCV4 DECFSZ CNT0,1 GOTO RCV3 DECFSZ CNT1,1 GOTO RCV3
18、 GOTO LOOP ;高電平大于3*256*10US=7.68MS則是錯(cuò)誤的RCV4 MOVLW .3 SUBWF CNT1,0 ;高電平小于1*256*10US=2.56MS則是錯(cuò)誤的 SKPNC GOTO LOOP MOVLW .32 MOVWF CNT2 ;接收數(shù)據(jù)共32位,16位用戶碼,8位控制碼加8位控制碼的反碼RCV5 CLRF CNT3 MOVLW .170 ;低電平大于256-170=86*10US=860US錯(cuò)誤 MOVWF CNT0 MOVLW .56 MOVWF CNT1 ;高電平大于256-56=200*10US=2MS錯(cuò)誤RCV5_HI GOTO $+1 NOP B
19、TFSC PORTA,RMT INCF CNT3,1 BTFSS PORTA,RMT CLRF CNT3 BTFSC CNT3,2 ;高電平大于8*10US=80US則為有效高電平 GOTO RCV6 INCFSZ CNT0,1 GOTO RCV5_HI ;低電平大于860US則是錯(cuò)誤的 GOTO LOOPRCV6 CLRF CNT3RCV6_LO GOTO $+1 NOP BTFSS PORTA,RMT INCF CNT3,1 BTFSC PORTA,RMT CLRF CNT3 BTFSC CNT3,3 ;低電平大于10*8US=80US則是有效低電平 GOTO COMPARE INCFSZ
20、 CNT1,1 GOTO RCV6_LO ;高電平大于256-56=200*10US=2MS錯(cuò)誤 GOTO LOOPCOMPARE MOVLW .170 SUBWF CNT0,1 ;CNT0的值減初始值等于實(shí)際低電平計(jì)數(shù)值 MOVLW .56 SUBWF CNT1,1 ;CNT1的值減初始值等于實(shí)際高電平計(jì)數(shù)值 MOVFW CNT1 ADDWF CNT0,1 ;將高低電平的計(jì)數(shù)加在一起并存入CNT0,通過比較高低電平總的時(shí)間來(lái)確定是1還是0 SKPNC GOTO LOOP ;總的值大于255(即時(shí)間大于255*10US=2.55MS)則錯(cuò)誤 MOVLW .70 SUBWF CNT0,0 SKP
21、C GOTO LOOP ;總的時(shí)間小于70*10US=700US則是錯(cuò)誤的 MOVLW .130 ;130*10=1.3MS SUBWF CNT0,0 SKPNC GOTO COMPARE_H ;時(shí)間大于1.3MS轉(zhuǎn)去確定是否1 BCF FLAGS2,BITIN ;時(shí)間在700US-1.3MS之間則是0 GOTO MOVDATA ;送數(shù)COMPARE_H MOVLW .160 SUBWF CNT0,0 SKPC GOTO LOOP ;小于160*10US=1.6MS,則錯(cuò)誤 MOVLW .230 SUBWF CNT0,0 SKPNC GOTO LOOP ;大于230*10US=2.3MS,則錯(cuò)
22、誤 BSF FLAGS2,BITIN ;時(shí)間在1.6MS-2.3MS之間則是1 MOVDATA RRF CSR0A,1 ;將每一位移入相應(yīng)寄存器 RRF CSR1A,1 RRF CSR2A,1 RRF CSR3A,1 BCF CSR0A,7 BTFSC FLAGS2,BITIN ;接收當(dāng)前位送入CSR0.7 BSF CSR0A,7 DECFSZ CNT2,1 ;是否接收完32位 GOTO RCV5 MOVFW CSR0A ;將臨時(shí)寄存器中的數(shù)存回相應(yīng)寄存器 MOVWF CSR0 MOVFW CSR1A MOVWF CSR1 MOVFW CSR2A MOVWF CSR2 MOVFW CSR3A
23、MOVWF CSR3 COMF CSR0,0 ;比較鍵碼的反碼取反后是否等于鍵碼 XORWF CSR1,0 BNZ LOOP ;不等于則接收到的是錯(cuò)誤的信息 ;將鍵碼送顯示 SWAPF CSR1,W ;顯示值高低位交換,先處理高位 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_H ;存入寄存器 MOVFW CSR1 ;顯示值低位處理 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_L ;存入寄存器 GOTO LOOP;- END;*; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下:; 1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的
24、”記事本”; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點(diǎn)需要注意,一是注釋前面的; 分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下.; 2.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB; 并進(jìn)入MPLAB的桌面.; 3.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將; 用記事本創(chuàng)建的源文件加入到該項(xiàng)目中.; 4.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目; 文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).; 5.ICD參數(shù)設(shè)置:通過菜單命令Project>Edit Project或者Option>Development Mode,將開發(fā)模式設(shè)置為; ”MPLAB ICD Debugger”,點(diǎn)擊OK按鈕,打開ICD
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版風(fēng)力發(fā)電場(chǎng)建設(shè)施工合同模板3篇
- 課題申報(bào)書:大學(xué)生學(xué)習(xí)成本認(rèn)知的形成發(fā)展機(jī)制與干預(yù)策略研究
- 課題申報(bào)書:大數(shù)據(jù)支持城市內(nèi)澇災(zāi)害治理的困境與多部門協(xié)同機(jī)制研究
- 2025版林業(yè)資源開發(fā)與林地承包經(jīng)營(yíng)權(quán)投資合同3篇
- 2024年財(cái)產(chǎn)貸款合同抵押版
- 2024年版股權(quán)轉(zhuǎn)讓合同模板及注意事項(xiàng)
- 2024年跨境電商服務(wù)平臺(tái)合作協(xié)議
- 2024年離婚法律文件:合同書步驟詳解版B版
- 2025年度二零二五版光伏發(fā)電項(xiàng)目投資回報(bào)及還款協(xié)議范本3篇
- 2025至2030年中國(guó)方形蛋糕軟盒行業(yè)投資前景及策略咨詢研究報(bào)告
- 新《安全生產(chǎn)法》解讀PPT課件
- E車E拍行車記錄儀說明書 - 圖文-
- 人才梯隊(duì)-繼任計(jì)劃-建設(shè)方案(珍貴)
- WLANAP日常操作維護(hù)規(guī)范
- 《健身氣功》(選修)教學(xué)大綱
- 王家?guī)r隧道工程地質(zhì)勘察報(bào)告(總結(jié))
- GE公司燃?xì)廨啓C(jī)組支持軸承結(jié)構(gòu)及性能分析
- 《昆明的雨》優(yōu)質(zhì)課一等獎(jiǎng)(課堂PPT)
- 油氣田地面建設(shè)工程ppt課件
- 電動(dòng)蝶閥安裝步驟說明
- 全自動(dòng)電鍍流水線操作說明書(共12頁(yè))
評(píng)論
0/150
提交評(píng)論