• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 學習型紅外遙控器匯編語言程序

    學習型紅外遙控器匯編語言程序

    作者: 時間:2012-10-27 來源:網絡 收藏

    ;************紅外線接收程序******************

    ;*********************************************
    ;器件地址
    EEPROM EQU 0A0H
    ;MODE EQU 070H ;高四位0111,是紅外線設備型號
    ;低四位 ,是紅外線設備的地址


    ;R2,R3 是延時計數器
    ;R4 :脈沖電平寬度計時器,算法,計數26次(也就是26US)R4加1
    ;R5 :脈沖個數計數器
    ;內存數據定義
    SP_STATR EQU 01H
    SP_END EQU 00H
    ACK BIT 08H ;接收數據非應答標志
    BITCNT DATA 15H ;IIC數據計數器 ;SADDP:類型+地址
    BYTECNT DATA 16H ;IIC數據字節計數器 ;SCISTEP:串行通信進程
    SLVADR DATA 14H ;被控器地址,EEPROM的地址 ;SCILEN:后4位數據長度(幾個字節)
    SUBADR DATA 17H ;被控器單元地址 ;SCICOM:前4位是命令
    RCVDAT DATA 18H ;接收數據緩沖區 ;CRC :校驗寄存器
    XMTDAT DATA 19H ;發送數據緩沖區 ;SCODE :校驗寄存器
    CYCLE DATA 22H ;循環計數器 ;RBUFSP:接收緩沖區指針
    DAT DATA 21H ;脈沖個數計數器 ;SCISP :發送數據緩沖區指針
    STU DATA 20H ;學習過的置0,沒有學習過的置1
    ER DATA 13H ;出錯標志位,為0則出錯,為1則是正確
    MODE DATA 09H ;高四位0111,是紅外線設備型號
    ;低四位 ,是紅外線設備的地址

    ;端口位定義
    IN BIT P1.4; P0.0 ;紅外線接收位
    BZ BIT P0.5 ;蜂鳴器輸出位
    OUT BIT P1.7 ;紅外線發射位
    WP BIT P0.0;P1.4 ;寫保護,為0時可讀寫,為1時不能寫
    SDA BIT P1.3 ;模擬IIC數據傳送位
    SCL BIT P1.2 ;模擬IIC時鐘控制狀態標志

    LED BIT P0.7 ;
    RECE BIT P0.6 ;串口接收發送位

    ORG 0000H
    AJMP MAIN
    ORG 000BH ;定時器TO0中斷入口地址
    AJMP LOPP
    ORG 0023H
    AJMP SINT ;串口中斷入口地址
    ORG 063H

    ;***************主程序******************************

    MAIN:
    MOV STU,#00H
    MOV SP,#0AH
    MOV P0M2,#080h
    CLR LED
    MOV DAT,#00H ;脈沖個數計數器清0
    MOV TMOD,#022H ;設置定時器0和1為方式2,定時控制方式,以運行控制位TR0,TR1啟動定時器
    MOV TH0,#00H ;加載計數初值
    MOV TL0,#00H ;保存計術數值,計時
    MOV TH1,#0FAH
    MOV TL1,#0FAH ;波特率為4800
    MOV SADEN,#0FFH
    MOV SCON,#0F0H ;串口工作方式3,多機通信控制,允許接收
    MOV TCON,#040H ;啟動T1定時
    MOV PCON,#00H ;波特率加倍
    MOV IEN0,#092H ;允許定時T0中斷,
    ;中斷總充許
    ;允許串行中斷

    MOV WDCON,#017H
    ; MOV MODE,#70H ;高四位0111,是紅外線設備型號
    ;低四位 ,是紅外線設備的地址
    LCALL GETADDR ;調用,檢查地址子程式
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    MOV PT0AD,#010H ;禁止CIN1A(P0.4) 的數字輸入功能
    ANL P0M2,#0EFH ;CIN1A(P0.4)僅為輸入功能
    ORL P0M1,#010H
    MOV CMP1,#028H ;正向輸入為CIN1A
    ;選擇內部1.23V作為參考電壓
    ;比較結果輸出到中斷
    ; SETB EC1 ;打開中比較器1中斷

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    SETB WP ;禁止寫EEPROM
    SETB TR1 ;啟動串行中斷,啟動TR1定時
    MOV ER,#00H
    ;;;;;;;;;@@@@@@@@@@@@@@@@@@@@;;;;;;;;;;;;
    LCALL LOP
    AJMP MAIN
    ;;;;;;;;;@@@@@@@@@@@@@@@@@@@@;;;;;;;;;;;;;

    AFFL:
    JBC B.7,AFFL1 ;中斷返回時,接受命令正確,則調用命令處理程式
    MOV WDRST,#01EH
    MOV WDRST,#0E1H
    AJMP AFFL ;等待中斷

    ;********************命令處理************************************************
    ;主機命令: 第1個字節(前4位是設備婁型,后4位是設備地址)
    ; 第2個字節(前4位是命令,后4位是數據字節數)
    ; 第3~N個字節(EEPROM的地址)
    ; 最后一位是CRC
    ;接收前四位命令: 0111 7 是查詢設備狀態
    ; 0101 5 是學習紅外線指令命令
    ; 0110 6 是發送紅外線指令命令
    ;從機應答:
    ;發射前4位命令: 0111 7 命令已接受
    ; 0101 5 紅外碼學習正確
    ; 0000 紅外碼學習錯或超時
    ;接收后四位數據長度為1個字節0001
    ;數據字節:為學習或發送的按鍵值(就是EEPROM 的地址)
    ;設備婁型,地址是01000000


    AFFL1:
    CLR LED
    CLR ES ;串行中斷關閉
    CLR TR1
    MOV R5, SUBADR

    ;********************判斷紅外線碼學習還是發射**********************************

    ;取得EEPROM的高低字節地址
    MOV A,22H ;把數據中的按鍵值入A
    CJNE A,#04H,ORDER1 ;判斷是錯誤碼,還是正常按鍵值
    AJMP TTMM ;命令=4,則轉發送紅外碼子程序
    ORDER1:
    JNC TTM3 ;命令大于4,則置錯誤標志返回等待中斷
    JC TTMM ;命令小于4, 則順繼執行
    TTMM:
    MOV B,#60H ;把96放入乘數B中
    MUL AB ;把接收到的鍵碼乘以96,取得學習碼EEPROM
    ;的按鍵地址
    MOV SUBADR,A ;把乘積的低字節入EEPROM的低字節地址
    MOV A,B ;把B 存A中
    RL A ;把乘積的高字節左移一位
    MOV SLVADR,#EEPROM
    MOV B,SLVADR
    ADD A,B ;把乘積的高字節與EEPROM的芯片地址相加
    MOV SLVADR,A ;后放入高字節
    CLR F0 ;清出錯標志
    MOV A,R5 ;命令前四位入A
    CJNE A,#05H,ORDER ;是學習紅外碼和發射碼嗎?不是置錯誤標記
    AJMP TTM1 ;
    ORDER:
    CJNE A,#06H,TTM3 ;是學習紅外碼嗎?
    TTMM1:
    LCALL LOP ;SUBADR=0則調用學習紅外碼子程序
    AJMP TTM2
    TTM1:
    LCALL LDD ;調用紅外線發射子程式
    TTM2:
    JB F0,TTM3 ;調用子程序出錯,置錯誤標記
    SETB ES ;打開串行中斷
    SETB TR1
    MOV ER,#05H ;調用子程式正確,則置正確標記
    AJMP AFFL ;返回等待中斷
    TTM3:
    MOV ER,#00H
    SETB ES ;串行中斷打開
    SETB TR1
    CLR LED
    AJMP AFFL ;出錯返回等待中斷
    ;***********************************************************************
    ; 紅外線接收存EEPROM程序
    ;***********************************************************************

    由于程序太大,帖子無法全部貼出 請點這里下載程序的完整版本: http://www.51hei.com/ziliao/file/STC89C52學習型遙控器.rar

    塵埃粒子計數器相關文章:塵埃粒子計數器原理
    蜂鳴器相關文章:蜂鳴器原理


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 平塘县| 富平县| 三河市| 霍州市| 陵川县| 和田县| 岢岚县| 土默特左旗| 辽源市| 海晏县| 江源县| 柞水县| 庄浪县| 壶关县| 正宁县| 乐业县| 克东县| 万宁市| 阿城市| 婺源县| 沽源县| 菏泽市| 沁源县| 茶陵县| 韶关市| 大邑县| 五华县| 邹平县| 德阳市| 柳州市| 乌海市| 北票市| 咸阳市| 武乡县| 华安县| 广南县| 肃南| 万盛区| 买车| 连平县| 盐边县|