找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4928|回復(fù): 0
收起左側(cè)

單片機(jī)紅外遙控解碼ASM匯編程序

[復(fù)制鏈接]
ID:216499 發(fā)表于 2017-7-2 14:07 | 顯示全部樓層 |閱讀模式
51系列單片機(jī)做的紅外遙控解碼
0.png

單片機(jī)匯編語言源程序如下:
  1. /**紅外遙控解碼范例**/
  2. /**作者:田開坤**/
  3. /**較網(wǎng)上可以下載到的程序相比,本代碼考慮了解碼過程容易死機(jī)的問題,采取辦法解決了,可以解碼失敗,但決不死機(jī)**/

  4. DQ      equ     0ebh            ;P4.3定義接口,參考STC89C51數(shù)據(jù)手冊
  5. EX2     equ     0c2h            ;外部中斷2,參考STC89C51數(shù)據(jù)手冊
  6. SEG1    equ     0ffech          ;數(shù)碼管1(最右)
  7. SEG2    equ     0ffedh          ;數(shù)碼管2
  8. SEG3    equ     0ffeeh          ;數(shù)碼管3
  9. SEG4    equ     0ffefh          ;數(shù)碼管4(最左)
  10. BYT_DLY equ     5FH             ;延時(shí)函數(shù)參數(shù)變量
  11. DA_BUF  equ     40H             ;解碼出的數(shù)據(jù)緩沖區(qū),包括41H


  12.                 ORG 0000h
  13.                 LJMP main

  14.                 ORG 003bh       ;外部中斷2入口地址,參考STC89C51數(shù)據(jù)手冊
  15.                 LJMP EINT3

  16.                 ORG 40h
  17. main:           MOV SP,#60h
  18.                 SETB EA
  19.                 SETB EX2
  20.                 SJMP [        DISCUZ_CODE_1        ]nbsp;         ;原地踏步,等中斷解碼


  21. //中斷接收解碼模塊

  22. EINT3:          CLR EA//關(guān)閉
  23.                 MOV R6,#10
  24. SB:             MOV BYT_DLY,#13 ;834uS
  25.                 ACALL DELAY     ;調(diào)用834微秒延時(shí)子程序
  26.                 JB DQ,EXIT      ;延時(shí)834微秒后判斷DQ腳是否出現(xiàn)高電平如果有就退出解碼程序
  27.                 DJNZ R6, SB     ;重復(fù) 10 次,目的是檢測在 9000 微秒內(nèi)如果出現(xiàn)高電平就退出解碼程序
  28. ;-------------------------------;以上完成對遙控信號 起始碼 的 9000 微秒的初始低電平信號的識別!!!!!

  29.                 JNB DQ, [        DISCUZ_CODE_1        ]nbsp;      ;等待,避開 起始碼 低電平
  30.                 JB DQ,[        DISCUZ_CODE_1        ]nbsp;        ;避開結(jié)果碼


  31. /*;測試按鍵一次有多少位低電平,不同遙控器不一樣*/
  32. /*;電工電子中心投影遙控器只有32位,這對后邊程序參數(shù)設(shè)置關(guān)系重大
  33.                 CLR A
  34. ADDLOOP:        JNB DQ,$
  35.                 ADD A,#1
  36.                 MOV P1,A
  37.                 JB DQ,cADD
  38.                 sjmp $
  39. */

  40.                 MOV R7,#16      ;忽略前16位系統(tǒng)識別碼 (即地址碼)
  41. AAQQ:           JNB DQ,[        DISCUZ_CODE_1        ]nbsp;       ;通過低電平段
  42.                 ;JB DQ,[        DISCUZ_CODE_1        ]nbsp;       ;以下6行代碼可以用本行替換,但這樣容易出現(xiàn)死機(jī)。
  43.                 MOV R6,#255
  44. CTN2:           JNB DQ,DER7     ;等待有效低電平到來,避開 結(jié)果碼 高電平
  45.                 MOV BYT_DLY,#3  ;42uS
  46.                 ACALL DELAY     ;調(diào)用42微秒延時(shí)子程序,延時(shí)太短,計(jì)數(shù)器R6不夠大,延時(shí)太長,會錯(cuò)過最佳檢測點(diǎn)
  47.                 DJNZ R6,CTN2                     
  48.                 LJMP EXIT       ;防止死機(jī)
  49. DER7:           DJNZ R7,AAQQ

  50.                 MOV R1,#DA_BUF  ;設(shè)定1AH為起始RAM區(qū)
  51.                 MOV R2,#2       ;接收從DA_BUF到DA_BUF+1的2個(gè)內(nèi)存,用于存放操作碼 (即數(shù)據(jù)碼) 和操作反碼
  52. PP:             MOV R3,#8       ;每組數(shù)據(jù)為8位
  53. JJJJ:           JNB DQ,[        DISCUZ_CODE_1        ]nbsp;       ;等待通過數(shù)據(jù)碼的低電平信號,等高電平到來后出去;
  54.                 MOV BYT_DLY,#13 ;834uS
  55.                 ACALL DELAY     ;高電平開始后用840(560<t<1125,)微秒的時(shí)間尺去判斷信號此時(shí)的高低電平狀態(tài)
  56.                 MOV C,DQ        ;將DQ引腳此時(shí)的電平狀態(tài)0或1存入C中
  57.                 JNC UUU         ;如果為0就跳轉(zhuǎn)到UUU
  58.                 ;JB DQ,[        DISCUZ_CODE_1        ]nbsp;       ;以下6行代碼可以用本行替換,但這樣容易出現(xiàn)死機(jī)。
  59.                 MOV R6,#255
  60. CTN3:           JNB DQ,UUU      ;等待有效低電平到來,避開 結(jié)果碼 高電平
  61.                 MOV BYT_DLY,#3  ;42uS
  62.                 ACALL DELAY     ;調(diào)用840微秒延時(shí)子程序
  63.                 DJNZ R6,CTN3            
  64.                 LJMP EXIT       ;防止死機(jī)

  65. UUU:            MOV A,@R1       ;將R1中地址的給A
  66.                 RRC A           ;將C中的值0或1移入A中的最低位
  67.                 MOV @R1,A       ;將A中的數(shù)暫時(shí)存放在R1數(shù)值的內(nèi)存中
  68.                 DJNZ R3,JJJJ    ;接收滿8位換一個(gè)內(nèi)存

  69.                 INC R1          ;對R1中的值加1,換下一個(gè)RAM
  70.                 DJNZ R2,PP      ;接收完8位數(shù)據(jù)碼和8位數(shù)據(jù)反碼,存放在1AH/1BH中                          

  71.                 MOV A,DA_BUF
  72.                 CPL A           ;對1AH取反后和1BH比較
  73.                 CJNE A,DA_BUF+1,EXIT    ;如果不等表示接收數(shù)據(jù)發(fā)生錯(cuò)誤,放棄
  74.                                 
  75.                 MOV R7,DA_BUF   ;將按鍵的鍵值通過數(shù)碼管顯示出來!
  76.                 ACALL DISP
  77.                 CLR P1.0        ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功               
  78.                 MOV BYT_DLY,#50
  79.                 ACALL DELAY
  80.                 SETB P1.0       ;蜂鳴器停止
  81. EXIT:           SETB EA
  82.                 reti


  83. ;-------------------------延時(shí)子程序---------------------------------
  84. ;晶振22.1184M

  85. DELAY:          PUSH    BYT_DLY
  86. DEL31:          PUSH    BYT_DLY
  87. DEL32:          DJNZ    BYT_DLY,DEL32
  88.                 POP     BYT_DLY
  89.                 DJNZ    BYT_DLY,DEL31
  90.                 POP     BYT_DLY
  91.                 DJNZ    BYT_DLY,DELAY
  92.                 RET

  93. //數(shù)碼管顯示,數(shù)據(jù)由R7傳入
  94. DISP:           mov dptr,#ledmap
  95.                 mov a,r7
  96.                 anl a,#0fh
  97.                 movc a,@a+dptr
  98.                 mov dptr,#SEG1
  99.                 cpl a
  100.                 movx @dptr,a

  101.                 mov dptr,#ledmap
  102.                 mov a,r7
  103.                 swap a                                 
  104.                 anl a,#0fh
  105.                 movc a,@a+dptr
  106.                 mov dptr,#SEG2
  107.                 cpl a
  108.                 movx @dptr,a

  109.                 mov dptr,#SEG3
  110.                 mov a,#0ffh
  111.                 movx @dptr,a
  112.                 mov dptr,#SEG4         
  113.                 movx @dptr,a  
  114.                 ret

  115. ledmap: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,00

  116.                 END
復(fù)制代碼

所有資料51hei提供下載:
紅外遙控解碼ASM.7z (12.52 KB, 下載次數(shù): 32)


回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表