?? sp0604_實驗13_紅外遙控器技術.asm
字號:
//|******************************************|
//| AT89S52,fosc=22.1184MHz |
//| Author: Sun An-Qing |
//| Date: 2005/11/22 |
//| www.supermcu.com |
//| glsaq@sina.com.cn |
//| 版權所有,供學習使用,請勿商業用途 |
//|******************************************|
//|******************************************|
//| SP_Lab_013:紅外遙控器 |
//| (ASM) |
//|******************************************|
//|******************************************|
//|紅外遙控器信號通過P3.2口接收,由INT0的中斷|
//|完成信號接收與處理,定時器T0產生精確定時,|
//|通過P3.7口給出紅外遙控器解碼成功提示信號。|
//|******************************************|
ORG 0000H
AJMP MAIN
ORG 0003H ;外部中斷P3.2腳INT0入口地址
AJMP INTT0 ;轉入外部中斷服務子程序(解碼程序)
ORG 0030H
MAIN: SETB EA
SETB IT0
SETB EX0
AJMP $
;******************以下為進入P3.2腳外部中斷子程序,也就是解碼程序*******************
INTT0: CLR EA ;暫時關閉CPU的所有中斷請求
MOV R6,#5
SB: ACALL YS1 ;調用882微秒延時子程序
JB P3.2,EXIT ;延時882微秒后判斷P3.2腳是否出現高電平如果有就退出解碼程序
DJNZ R6, SB ;重復 5 次,目的是檢測在 4410 微秒內如果出現高電平就退出解碼程序
;---------------以上完成對遙控信號引導碼的 4500 微秒的初始低電平信號的識別!!!!!
JNB P3.2, $ ;等待高電平避開 4.5 毫秒低電平引導脈沖
ACALL YS2 ;延時4.74毫秒避開 4.5 毫秒的結果碼
;---------------以上是對引導碼的 4500 微秒高電平的初始識別!!!!!
;-------------------------------------------------------------------------
MOV R7,#16 ;忽略前16位系統識別碼 (即地址碼)
JJJJA: JNB P3.2,$ ;等待地址碼第一位的高電平信號
LCALL YS1 ;高電平開始后用882微秒的時間延時去判斷信號此時的高低電平狀態
;MOV C,P3.2 ;將P3.2引腳此時的電平狀態 0或1 存入C中
;JNC UUUA ;如果為0就跳轉到UUUA
JNB P3.2,UUUA
LCALL YS3 ;檢測到高電平1的話延時1毫秒等待脈沖高電平結束
UUUA: DJNZ R7,JJJJA
;--------------------------------------------------------------------------
MOV R1,#1AH ;設定1AH為起始RAM區
MOV R2,#2 ;接收從1AH到1BH的2個內存,用于存放操作碼 (即數據碼) 和操作反碼
PP: MOV R3,#8 ;每組數據為8位
JJJJ: JNB P3.2,$ ;等待 數據碼 第一位的高電平信號
LCALL YS1 ;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態
MOV C,P3.2 ;將P3.2引腳此時的電平狀態0或1存入C中
JNC UUU ;如果為0就跳轉到UUU
LCALL YS3 ;檢測到高電平1的話延時1毫秒等待脈沖高電平結束
UUU: MOV A,@R1 ;將R1中地址的給A
RRC A ;將C中的值0或1移入A中的最低位
MOV @R1,A ;將A中的數暫時存放在R1數值的內存中
DJNZ R3,JJJJ ;接收滿8位換一個內存
INC R1 ;對R1中的值加1,換下一個RAM
DJNZ R2,PP ;接收完8位數據碼和8位數據反碼,存放在1AH/1BH中
MOV A,1AH
CPL A ;對1AH取反后和1BH比較
CJNE A,1BH,EXIT ;如果不等表示接收數據發生錯誤,放棄
;---------------------------------------------------------------------
MOV A,1AH
CPL A
MOV P0,A ;將按鍵的鍵值通過P1口的8個LED顯示出來!
CLR P3.7 ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功
LCALL YS2
LCALL YS2
LCALL YS2
SETB P3.7 ;蜂鳴器停止
EXIT: SETB EA ;允許中斷
RETI ;退出解碼子程序
;-------------------------延時子程序---------------------------------
YS1: MOV R4,#8 ;延時子程序1,精確延時882微秒
D1: MOV R5,#49
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;延時子程序2,精確延時4740微秒
D2: MOV R5,#217
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2;延時程序3,精確延時1000微秒
D3: MOV R5,#227
DJNZ R5,$
DJNZ R4,D3
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -