?? n6221b.asm
字號:
遙控器控制顯示0123456789abcdef數據保持
;***************************************************************************
;* sxj1974@163.com (51c51 test web) www.8951.com *
;* Create by :石學軍 www.51c51.com 更多例程請登陸網站 *
;***************************************************************************
org 00h
ORG 30H
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
START:
JB P3.7,$ ;等待遙控信號出現
SB:
MOV R4,#8 ;8毫秒為高電平錯誤
SBA:
MOV R5,#250
SBB:
JB P3.7,SXB1
DJNZ R5,SBB
DJNZ R4,SBA
MOV R4,#2
JMP SBC
SXB1:
MOV R5,#5
SXB2: ;去掉20US的尖峰干擾信號
JNB P3.7,SBB
DJNZ R5,SXB2
JMP START
SBC:
MOV R5,#250
SB1:
JB P3.7,SB2 ;2MS內不為高電平錯誤(監測9MS的低電平引導碼)
DJNZ R5,SB1
DJNZ R4,SBC
JMP START
SB2: ;去掉20US的尖峰干擾信號
MOV R5,#5
SB2_A:
JNB P3.7,SB1
DJNZ R5,SB2_A
MOV R4,#3
SB2_1:
MOV R5,#250
SB3: ;監測4.5MS高電平,如3MS內出現低電平錯誤
JNB P3.7,SXC
DJNZ R5,SB3
DJNZ R4,SB2_1
MOV R4,#2
JMP SB3_1
SXC: ;去掉20US的尖峰干擾信號
MOV R5,#5
SXC1:
JB P3.7,SB3
DJNZ R5,SXC1
JMP START
SB3_1: ;監測4.5MS高電平,如5MS內不為低電平錯誤
MOV R5,#250
SB3_2:
JNB P3.7,SB4
DJNZ R5,SB3_2
DJNZ R4,SB3_1
JMP START
SB4: ;去掉20US的尖峰干擾信號
MOV R5,#5
SB4_1:
JB P3.7,SB3_2
DJNZ R5,SB4_1
MOV R1,#1AH ;設定1AH為起始RAM區
MOV R2,#4
PP: MOV R3,#8
JJJJ:
MOV R5,#250
JJJJ2: ;1MS內不為低電平錯誤
JB P3.7,JJJJ3
DJNZ R5,JJJJ2
JMP START
JJJJ3:
LCALL YS1 ;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態
MOV C,P3.7 ;將P3.7引腳此時的電平狀態0或1存入C中
JNC UUU ;如果為0就跳轉到UUU
MOV R5,#250
JJJJ4:
JNB P3.7,UUU
NOP
DJNZ R5,JJJJ4
JMP START
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 ;接收完16位地址碼和8位數據碼和8位數據反碼,存放在1AH/1BH/1CH/1DH的RAM中
;以下對代碼是否正確和定義進行識別
MOV A,1AH ;比較高8位地址碼
XRL A,#00000000B ;判斷1AH的值是否等于00000000,相等的話A為0
JNZ EXIT ;如果不相等說明解碼失敗退出解碼程序
MOV A,1BH ;比較低8位地址
XRL A,#11111111B ;再判斷高8位地址是否正確
JNZ EXIT ;如果不相等說明解碼失敗退出解碼程序
LCALL YS3
MOV A,1CH ;比較數據碼和數據反碼是否正確?
CPL A
XRL A,1DH ;將1CH的值取反后和1DH比較 不同則無效丟棄,核對數據是否準確
JNZ EXIT ;如果不相等說明解碼失敗退出解碼程序
LCALL YS3
CLR P2.6 ;選中數碼管
CLR P3.3 ;解碼成功喇叭響?
AJMP BIJIAO
;判斷在118毫秒內是否有連發碼
AA: MOV R1,#25
XX: ACALL YS2
JNB P3.7,HH ;跳轉到判斷連發代碼是否正確的程序段
DJNZ R1,XX
EXIT: ;對所有端口清零
AJMP START
;連發碼判斷程序段-----------
HH: MOV R6,#4
S: ACALL YS1 ;調用882微秒延時子程序
JB P3.7,EXIT ;延時882微秒后判斷P3.7腳是否出現高電平如果有就退出解碼程序
DJNZ R6, S ;重復4次,目的是確認連發碼的低電平信號波形
JNB P3.7, $ ;等待高電?
LCALL YS3
AJMP AA
BIJIAO: MOV A,1CH ;按鍵數值判斷執
mov p1,a
CJNE A,#10h,TT1
MOV P0,#7EH ;數碼管顯示1
TT1: CJNE A,#03h,T2
MOV P0,#0A2H ;數碼管顯示2
T2: CJNE A,#01h,T3
MOV P0,#62H ;數碼管顯示3
T3: CJNE A,#06h,T4
MOV P0,#74H ;數碼管顯示4
T4: CJNE A,#09h,T5
MOV P0,#61H ;數碼管顯示5
T5: CJNE A,#1dh,T6
MOV P0,#21H ;數碼管顯示6
T6: CJNE A,#1fh,T7
MOV P0,#7AH ;數碼管顯示7
T7: CJNE A,#0dh,T8
MOV P0,#20H ;數碼管顯示8
T8: CJNE A,#19h,t9
MOV P0,#60H ;數碼管顯示9
T9: CJNE A,#1bh,t10
MOV P0,#28H ;數碼管顯示0
T10: CJNE A,#11h,t11
MOV P0,#30H ;數碼管顯示A
T11: CJNE A,#15h,t12
MOV P0,#25H ;數碼管顯示b
T12: CJNE A,#17h,t13
MOV P0,#0a9H ;數碼管顯示C
T13: CJNE A,#12h,t14
MOV P0,#26H ;數碼管顯示d
T14: CJNE A,#16h,t15
MOV P0,#0a1H ;數碼管顯示E
T15: CJNE A,#4ch,t16
MOV P0,#0b1H ;數碼管顯示f
t16: AJMP AA
YS1: MOV R4,#20 ;延時子程序1,精確延時882微秒
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;延時子程序2,精確延時4740微秒
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2 ;延時程序3,精確延時1000微秒
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -