色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

          作者: 時間:2012-10-27 來源:網(wǎng)絡 收藏

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

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


          ;R2,R3 是延時計數(shù)器
          ;R4 :脈沖電平寬度計時器,算法,計數(shù)26次(也就是26US)R4加1
          ;R5 :脈沖個數(shù)計數(shù)器
          ;內存數(shù)據(jù)定義
          SP_STATR EQU 01H
          SP_END EQU 00H
          ACK BIT 08H ;接收數(shù)據(jù)非應答標志
          BITCNT DATA 15H ;IIC數(shù)據(jù)計數(shù)器 ;SADDP:類型+地址
          BYTECNT DATA 16H ;IIC數(shù)據(jù)字節(jié)計數(shù)器 ;SCISTEP:串行通信進程
          SLVADR DATA 14H ;被控器地址,EEPROM的地址 ;SCILEN:后4位數(shù)據(jù)長度(幾個字節(jié))
          SUBADR DATA 17H ;被控器單元地址 ;SCICOM:前4位是命令
          RCVDAT DATA 18H ;接收數(shù)據(jù)緩沖區(qū) ;CRC :校驗寄存器
          XMTDAT DATA 19H ;發(fā)送數(shù)據(jù)緩沖區(qū) ;SCODE :校驗寄存器
          CYCLE DATA 22H ;循環(huán)計數(shù)器 ;RBUFSP:接收緩沖區(qū)指針
          DAT DATA 21H ;脈沖個數(shù)計數(shù)器 ;SCISP :發(fā)送數(shù)據(jù)緩沖區(qū)指針
          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 ;紅外線發(fā)射位
          WP BIT P0.0;P1.4 ;寫保護,為0時可讀寫,為1時不能寫
          SDA BIT P1.3 ;模擬IIC數(shù)據(jù)傳送位
          SCL BIT P1.2 ;模擬IIC時鐘控制狀態(tài)標志

          LED BIT P0.7 ;
          RECE BIT P0.6 ;串口接收發(fā)送位

          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 ;脈沖個數(shù)計數(shù)器清0
          MOV TMOD,#022H ;設置定時器0和1為方式2,定時控制方式,以運行控制位TR0,TR1啟動定時器
          MOV TH0,#00H ;加載計數(shù)初值
          MOV TL0,#00H ;保存計術數(shù)值,計時
          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) 的數(shù)字輸入功能
          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個字節(jié)(前4位是設備婁型,后4位是設備地址)
          ; 第2個字節(jié)(前4位是命令,后4位是數(shù)據(jù)字節(jié)數(shù))
          ; 第3~N個字節(jié)(EEPROM的地址)
          ; 最后一位是CRC
          ;接收前四位命令: 0111 7 是查詢設備狀態(tài)
          ; 0101 5 是學習紅外線指令命令
          ; 0110 6 是發(fā)送紅外線指令命令
          ;從機應答:
          ;發(fā)射前4位命令: 0111 7 命令已接受
          ; 0101 5 紅外碼學習正確
          ; 0000 紅外碼學習錯或超時
          ;接收后四位數(shù)據(jù)長度為1個字節(jié)0001
          ;數(shù)據(jù)字節(jié):為學習或發(fā)送的按鍵值(就是EEPROM 的地址)
          ;設備婁型,地址是01000000


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

          ;********************判斷紅外線碼學習還是發(fā)射**********************************

          ;取得EEPROM的高低字節(jié)地址
          MOV A,22H ;把數(shù)據(jù)中的按鍵值入A
          CJNE A,#04H,ORDER1 ;判斷是錯誤碼,還是正常按鍵值
          AJMP TTMM ;命令=4,則轉發(fā)送紅外碼子程序
          ORDER1:
          JNC TTM3 ;命令大于4,則置錯誤標志返回等待中斷
          JC TTMM ;命令小于4, 則順繼執(zhí)行
          TTMM:
          MOV B,#60H ;把96放入乘數(shù)B中
          MUL AB ;把接收到的鍵碼乘以96,取得學習碼EEPROM
          ;的按鍵地址
          MOV SUBADR,A ;把乘積的低字節(jié)入EEPROM的低字節(jié)地址
          MOV A,B ;把B 存A中
          RL A ;把乘積的高字節(jié)左移一位
          MOV SLVADR,#EEPROM
          MOV B,SLVADR
          ADD A,B ;把乘積的高字節(jié)與EEPROM的芯片地址相加
          MOV SLVADR,A ;后放入高字節(jié)
          CLR F0 ;清出錯標志
          MOV A,R5 ;命令前四位入A
          CJNE A,#05H,ORDER ;是學習紅外碼和發(fā)射碼嗎?不是置錯誤標記
          AJMP TTM1 ;
          ORDER:
          CJNE A,#06H,TTM3 ;是學習紅外碼嗎?
          TTMM1:
          LCALL LOP ;SUBADR=0則調用學習紅外碼子程序
          AJMP TTM2
          TTM1:
          LCALL LDD ;調用紅外線發(fā)射子程式
          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

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


          評論


          相關推薦

          技術專區(qū)

          關閉