欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

    標題: STC15F104EA紅外遙控解碼記憶開關匯編語言程序范例 附原理圖 [打印本頁]

    作者: liu2454004961    時間: 2023-1-4 16:23
    標題: STC15F104EA紅外遙控解碼記憶開關匯編語言程序范例 附原理圖
    基于12T 51內核的紅外解碼匯編程序,移植到1T STC單片機上,需要修改頻率來達到比較精確的延時

    紅外遙控解碼記憶開關接線圖:


    單片機紅外遙控解碼記憶開關匯編語言源程序如下:
    1. ;;;;;;紅外遙控解碼記憶;;;;;開機同時,按住按鍵直到蜂鳴器叫一次再松開,按遙控器認定按鈕,待蜂鳴器叫一次后,完成解碼記憶
    2. ;;;;RC頻率30M,分頻系數1/16,采用15F104EA   ;;2015-4-16;;
    3. IAP_DATA    EQU 0C2H                ;IAP數據寄存器
    4. IAP_ADDRH   EQU 0C3H                ;IAP地址寄存器高字
    5. IAP_ADDRL   EQU 0C4H                ;IAP地址寄存器低字
    6. IAP_CMD     EQU 0C5H                ;IAP命令寄存器
    7. IAP_TRIG    EQU 0C6H                ;IAP命令觸發寄存器
    8. IAP_CONTR   EQU 0C7H                ;IAP控制寄存器
    9. CMD_IDLE    EQU 0                   ;空閑模式
    10. CMD_READ    EQU 1                   ;IAP字節讀命令
    11. CMD_PROGRAM EQU 2                   ;IAP字節編程命令
    12. CMD_ERASE   EQU 3                   ;IAP扇區擦除命令
    13. ENABLE_IAP  EQU 83H                  ;if SYSCLK<12MHz
    14. IAP_ADDRESS EQU 0000H               ;測試地址(15L204EA的EEPROM空間為1K,分兩個扇區,每個512字節)
    15. CLK_DIV     DATA    97H             ;RC頻率30M,分頻系數1/16,采用15F104EA
    16. ID          DATA    30H             ;燈組個數狀態值
    17. HONG        DATA    31H             ;紅外數據緩存區
    18. ANJIAN      BIT     26H.0           ;按鍵選擇標志
    19. FENG        BIT     P3.3           ;蜂鳴器
    20. KEY         BIT     P3.0            ;解碼記憶選擇開關
    21. PH          BIT     P3.4            ;紅外一體化接受頭
    22. SW          BIT     P3.5
    23.        ORG         0000H
    24.        AJMP        MAIN1
    25.        ORG         0040H
    26. MAIN1: MOV      CLK_DIV,#1        ;分頻設置
    27.        MOV   ID,#00H
    28.        MOV   P3,#0FFH
    29.        SETB  ANJIAN
    30.        JB    KEY,START1            ;按鍵判斷
    31.        MOV   R7,#50
    32. D4:    ACALL  YS3
    33.        DJNZ   R7,D4
    34.        JB     KEY,START1
    35.        CLR    FENG                 ;聲音延時
    36.        MOV   R7,#50
    37. D5:    ACALL  YS3
    38.        DJNZ   R7,D5
    39.        SETB   FENG
    40.        CLR    ANJIAN
    41. START1:MOV   DPTR,#IAP_ADDRESS     ;讀取EEPOM紅外數據到緩存區  ;設置ISP/IAP/EEPROM地址
    42.        LCALL IAP_READ                                          ;讀IAP數據
    43.        MOV   31H,A
    44. START:JB PH,$                       ;等待遙控信號出現
    45. SB:MOV R4,#8                 
    46. SBA:MOV R5,#250
    47. SBB:JB PH,SXB1
    48. DJNZ R5,SBB
    49. DJNZ R4,SBA
    50. MOV R4,#2
    51. JMP SBC
    52. SXB1: MOV R5,#5
    53. SXB2: JNB PH,SBB
    54. DJNZ R5,SXB2
    55. JMP EXIT
    56. SBC:MOV R5,#250
    57. SB1:JB PH,SB2                     ;2MS內不為高電平錯誤
    58. DJNZ R5,SB1
    59. DJNZ R4,SBC
    60. JMP EXIT
    61. SB2: MOV R5,#5
    62. SB2_A:JNB PH,SB1
    63. DJNZ R5,SB2_A
    64. MOV R4,#3
    65. SB2_1:MOV R5,#250
    66. SB3: JNB PH,SXC
    67. DJNZ R5,SB3
    68. DJNZ R4,SB2_1
    69. MOV R4,#2
    70. JMP SB3_1
    71. SXC:MOV R5,#5
    72. SXC1:JB PH,SB3
    73. DJNZ R5,SXC1
    74. JMP EXIT
    75. SB3_1:MOV R5,#250
    76. SB3_2:JNB PH,SB4
    77. DJNZ R5,SB3_2
    78. DJNZ R4,SB3_1
    79. JMP EXIT
    80. SB4: MOV R5,#5
    81. SB4_1:JB PH,SB3_2
    82. DJNZ R5,SB4_1
    83. MOV R1,#1AH                   ;設定1AH為起始RAM區
    84. MOV R2,#4
    85. PP: MOV R3,#8
    86. JJJJ:MOV R5,#250
    87. JJJJ2:JB PH,JJJJ3
    88. DJNZ R5,JJJJ2
    89. JMP EXIT
    90. JJJJ3:LCALL YS1
    91. MOV C,PH
    92. JNC UUU
    93. MOV R5,#250
    94. JJJJ4:JNB PH,UUU
    95. NOP
    96. DJNZ R5,JJJJ4
    97. JMP EXIT
    98. UUU: MOV A,@R1                 ;將R1中地址的給A
    99. RRC A                          ;將C中的值移入A中的最低位
    100. MOV @R1,A                      ;將A中的數暫存在R1中
    101. DJNZ R3,JJJJ                   ;接收地址碼的高8位
    102. INC R1                         ;對R1加1,換成下一個RAM
    103. DJNZ R2,PP                     ;以下對代碼是否正確和定義進行識別
    104. MOV A,1AH                      ;比較高8位地址碼
    105. XRL A,#00000000B               ;判斷1AH的值是否等于00000000,相等的話A為0
    106. JNZ EXIT                       ;如果不等解碼失敗退出
    107. MOV A,1BH                      ;比較低8位地址
    108. XRL A,#11111111B               ;再判高8位地址是否正確
    109. JNZ EXIT                       ;如果不相等說明解碼失敗退出
    110. LCALL YS3
    111. MOV A,1CH                      ;比較數據碼和數據反碼是否正確?
    112. CPL A
    113. XRL A,1DH                      ;將1CH的值取反后和1DH比較 不同則無效丟棄,核對數據是否準確
    114. JNZ EXIT                       ;如果不相等說明解碼失敗退出
    115.        JB ANJIAN,MAIN2
    116.        MOV   DPTR,#IAP_ADDRESS         ;設置ISP/IAP/EEPROM地址
    117.        LCALL IAP_ERASE                 ;扇區擦除
    118.        MOV   A,1CH
    119.        MOV   DPTR,#IAP_ADDRESS         ;設置ISP/IAP/EEPROM地址
    120.        LCALL IAP_PROGRAM               ;字節編程
    121.        CLR    FENG                     ;紅外數據寫入成功蜂鳴器叫一次指示
    122.        MOV   R7,#50
    123. D6:    ACALL  YS3
    124.        DJNZ   R7,D6
    125.        SETB   FENG
    126.        SETB   ANJIAN
    127.        MOV    31H,1CH                  ;;;寫入成功,建議關機重啟
    128. EXIT:   AJMP   START   
    129. MAIN2: MOV   A,31H
    130.        CJNE  A,1CH,EXIT               ;;;判斷紅外遙控次數決定遙控燈組個數;;;;
    131.        CPL   SW
    132.        LJMP  START

    133. IAP_IDLE:                           ;;;關閉IAP;;;
    134.     MOV   IAP_CONTR,#0              ;關閉IAP功能
    135.     MOV   IAP_CMD,#0                ;清除命令寄存器
    136.     MOV   IAP_TRIG,#0               ;清除觸發寄存器
    137.     MOV   IAP_ADDRH,#80H            ;將地址設置到非IAP區域
    138.     MOV   IAP_ADDRL,#0
    139.     RET

    140. IAP_READ:                           ;;;從ISP/IAP/EEPROM區域讀取一字節;;;
    141.     MOV   IAP_CONTR,#ENABLE_IAP     ;使能IAP
    142.     MOV   IAP_CMD,#CMD_READ         ;設置IAP命令
    143.     MOV   IAP_ADDRL,DPL             ;設置IAP低地址
    144.     MOV   IAP_ADDRH,DPH             ;設置IAP高地址
    145.     MOV   IAP_TRIG,#5AH             ;寫觸發命令(0x5a)
    146.     MOV   IAP_TRIG,#0A5H            ;寫觸發命令(0xa5)
    147.     NOP                             ;等待ISP/IAP/EEPROM操作完成
    148.     MOV   A,IAP_DATA                ;讀IAP數據
    149.     LCALL IAP_IDLE                  ;關閉IAP功能
    150.     RET

    151. IAP_PROGRAM:                       ;;;寫一字節數據到ISP/IAP/EEPROM區域;;;
    152.     MOV   IAP_CONTR,#ENABLE_IAP    ;使能IAP
    153.     MOV   IAP_CMD,#CMD_PROGRAM     ;設置IAP命令
    154.     MOV   IAP_ADDRL,DPL            ;設置IAP低地址
    155.     MOV   IAP_ADDRH,DPH            ;設置IAP高地址
    156.     MOV   IAP_DATA,A               ;寫IAP數據
    157.     MOV   IAP_TRIG,#5AH            ;寫觸發命令(0x5a)
    158.     MOV   IAP_TRIG,#0A5H           ;寫觸發命令(0xa5)
    159.     NOP                            ;等待ISP/IAP/EEPROM操作完成
    160.     LCALL IAP_IDLE                 ;關閉IAP功能
    161.     RET

    162. IAP_ERASE:                         ;;;扇區擦除;;;
    163.     MOV   IAP_CONTR,#ENABLE_IAP    ;使能IAP
    164.     MOV   IAP_CMD,#CMD_ERASE       ;設置IAP命令
    165.     MOV   IAP_ADDRL,DPL            ;設置IAP低地址
    166.     MOV   IAP_ADDRH,DPH            ;設置IAP高地址
    167.     MOV   IAP_TRIG,#5AH            ;寫觸發命令(0x5a)
    168.     MOV   IAP_TRIG,#0A5H           ;寫觸發命令(0xa5)
    169.     NOP                            ;等待ISP/IAP/EEPROM操作完成
    170.     LCALL IAP_IDLE                 ;關閉IAP功能
    171.     RET

    172. YS1: MOV R4,#20 ;延時子程序1, 882微秒
    173. D1: MOV R5,#20
    174. DJNZ R5,$
    175. DJNZ R4,D1
    176. RET

    177. YS3: MOV R4,#2 ;延時程序3, 1000微秒
    178. D3:MOV R5,#248
    179. DJNZ R5,$
    180. DJNZ R4,D3
    181. RET
    182. END
    復制代碼







    歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1