?? n6221c.asm
字號:
;********************************************************************************
;30路遙控開關,按0-30個鍵分別點亮p0.0-p3.5的燈,32鍵全滅. *
;可以用此外接驅動后控制30路開關! 遙控器端口p3.7 *
;********************************************************************************
;* 日期: 2007-3-25 *
;* 版本: 3.0 *
;* 作者: 深圳學林電子有限公司 專業(yè)8051單片機教學站 *
;* 郵箱: sxj1974@163.com *
;* 網站: http://www.51c51.com http://www.8951.com 更多例程請登陸網站 *
;********************************************************************************
;* 硬件:此程序在本公司xlisp系列單片機實驗儀運行通過 *
;********************************************************************************
;* 【版權】 Copyright(C)深圳學林電子有限公司 www.51c51.com All Rights Reserved *
;* 【聲明】 此程序僅用于學習與參考,引用請注明版權和作者信息! *
;********************************************************************************
org 00h
ORG 30H
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
START:
JB P3.7,$ ;等待遙控信號出現(xiàn)
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內不為高電平錯誤(監(jiān)測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: ;監(jiān)測4.5MS高電平,如3MS內出現(xiàn)低電平錯誤
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: ;監(jiān)測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區(qū)
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微秒的時間尺去判斷信號此時的高低電平狀態(tài)
MOV C,P3.7 ;將P3.7引腳此時的電平狀態(tài)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中的數(shù)暫時存放在R1中
DJNZ R3,JJJJ ;接收地址碼的高8位
INC R1 ;對R1中的值加1,換成下一個RAM
DJNZ R2,PP ;接收完16位地址碼和8位數(shù)據(jù)碼和8位數(shù)據(jù)反碼,存放在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 ;比較數(shù)據(jù)碼和數(shù)據(jù)反碼是否正確?
CPL A
XRL A,1DH ;將1CH的值取反后和1DH比較 不同則無效丟棄,核對數(shù)據(jù)是否準確
JNZ EXIT ;如果不相等說明解碼失敗退出解碼程序
LCALL YS3
AJMP BIJIAO
;判斷在118毫秒內是否有連發(fā)碼
AA: MOV R1,#25
XX: ACALL YS2
JNB P3.7,HH ;跳轉到判斷連發(fā)代碼是否正確的程序段
DJNZ R1,XX
EXIT: ;對所有端口清零
AJMP START
;連發(fā)碼判斷程序段-----------
HH: MOV R6,#4
S: ACALL YS1 ;調用882微秒延時子程序
JB P3.7,EXIT ;延時882微秒后判斷P3.7腳是否出現(xiàn)高電平如果有就退出解碼程序
DJNZ R6, S ;重復4次,目的是確認連發(fā)碼的低電平信號波形
JNB P3.7, $ ;等待高電?
LCALL YS3
AJMP AA
BIJIAO: MOV A,1CH ;按鍵數(shù)值判斷執(zhí)
CJNE A,#10h,TT1
clr p0.0
TT1: CJNE A,#03h,T2
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p0.1
T2: CJNE A,#01h,T3
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p0.2
T3: CJNE A,#06h,T4
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p0.3
T4: CJNE A,#09h,T5
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p0.4
T5: CJNE A,#1dh,T6
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p0.5
T6: CJNE A,#1fh,T7
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p0.6
T7: CJNE A,#0dh,T8
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p0.7
T8: CJNE A,#19h,t9
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p1.0
T9: CJNE A,#1bh,t10
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p1.1
T10: CJNE A,#11h,t11
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p1.2
T11: CJNE A,#15h,t12
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p1.3
T12: CJNE A,#17h,t13
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p1.4
T13: CJNE A,#12h,t14
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p1.5
T14: CJNE A,#16h,t15
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p1.6
T15: CJNE A,#4ch,t16
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p1.7
T16: CJNE A,#40h,t17
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p2.0
T17: CJNE A,#48h,t18
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p2.1
T18: CJNE A,#04h,t19
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p2.2
T19: CJNE A,#00h,t20
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p2.3
T20: CJNE A,#02h,t21
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p2.4
T21: CJNE A,#05h,t22
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p2.5
T22: CJNE A,#54h,t23
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p2.6
T23: CJNE A,#4dh,t24
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p2.7
T24: CJNE A,#0ah,t25
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p3.0
T25: CJNE A,#1eh,t26
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p3.1
T26: CJNE A,#0eh,t27
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p3.2
T27: CJNE A,#1ah,t28
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p3.3
T28: CJNE A,#1ch,t29
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p3.4
T29: CJNE A,#14h,t31
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
clr p3.5
T31: CJNE A,#0ch,t32
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
t32: 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 + -