Re: y a quoi dans une alarme chinoise ? |
Objet : Re: y a quoi dans une alarme chinoise ? par swakk sur 22/10/2010 19:13:27 ;PT2240 DECODE PROGRAM ;*****************************?????? ROLL RLF W_ADD3,1 RLF W_ADD2,1 RLF W_ADD1,1 RETLW 00H ;**************************???????30us BOUNCE1 MOVLW D'08' MOVWF R4 ABCD DECFSZ R4,1 GOTO ABCD RETLW 00H ;************************** ;********************************* ; CATCH CODE ;********************************* CATCH_CODE CLRF TMR0 MOVLW B'00000111' OPTION RESTART_0 CLRWDT MOVLW D'100' SUBWF TMR0,0 BTFSC STATUS,C GOTO CODE_FAIL JACK_1 MOVLW D'60' MOVWF R1 ;1 ;80d->4.62ms RESTART_1 CALL BOUNCE1 ;?????????????????????30us??? BTFSC PORTC,0 GOTO RESTART_0 ;6.8ms?????????2.2??????????????????????????????? DECFSZ R1 ;1 ?0????????2.2ms???????,?????? GOTO RESTART_1 ;2 ;******************************* RESTART_1_1 ;HAVE BOUNCE CLRWDT CALL BOUNCE1 ;???????????30us*256????????????????????? INCFSZ R1 ;??????????????????25.3ms?????? GOTO RESTART_1_2 ;2 ;????????????? GOTO RESTART_0 ;2 RESTART_1_2 BTFSS PORTC,0 ; GOTO RESTART_1_1 ;2 ;******************************* CLRF R1 ???????????????? CLRF W_ADD1 ????? CLRF W_ADD2 CLRF W_ADD3 ; CLRF DATA_0 ;???? MOVLW D'24' MOVWF COMMAND ;??????20???+4???? ;******************************* ;//////////////////////////////// ;******************************* ;//////////////////////////////// RESTART_2 ;"1" JUMP CALL BOUNCE1 INCFSZ R1 ;??????????30*256us,?????????????? GOTO RESTART_2_1??????25.3ms?????? GOTO RESTART_0 RESTART_2_1 BTFSC PORTC,0 ;????????R1*30us,??????? GOTO RESTART_2 ; ;******************************* ;;;;; MOVLW D'30' ;???????????????????0??1?30*R1? SUBWF R1,W ;30*30=900us??????????????????????????? BTFSC 3,0 GOTO RESTART_0 ;;;;; CLRF R1 RESTART_3 ;"0" JUMP "1"=30US ;??????????? ; INCF R1 ;1 BTFSC PORTC,0 ;1 GOTO RE_JUMPOUT ;2 CALL BOUNCE1 ;30 INCFSZ R1 ;1 GOTO RESTART_3 ;2 GOTO RESTART_0 ;********************************** RE_JUMPOUT MOVLW D'3' ;????????????????3*30us=90us?????????????????? SUBWF R1,W BTFSC 3,0 GOTO RTC_1 GOTO RESTART_0 ;********************************** RTC_1 MOVLW D'30' ;????????????????30*30us=900us?????????????????? SUBWF R1,W BTFSC 3,0 GOTO RESTART_0 ;**************************** ; senser is "1" change"c" ;**************************** CHECK_C MOVLW D'9' ;?????????0??1? SUBWF R1,0 ;PT2240B"1"???????200us???"0"?????800us???????30*13=390us BTFSS 3,0 ;??390us????????1 GOTO SET_1 CLRC GOTO CHECK_C_END SET_1 SETC CHECK_C_END ;**************************** CALL ROLL ;?????? CLRF R1 CLRWDT DECFSZ COMMAND,1 ;??????24??,????????? GOTO RESTART_2 ;****************************** P_END ;????????????PT2240B???????????? movlw d'30' movwf r1 ;?992a????????????????????????????????? pp0 ;???????? call bounce1 decfsz r1 goto pp0 MOVLW D'60' ; MOVWF R1 ;1 pp1 CALL BOUNCE1 ;2+90 BTFSC PORTC,0 ;1 GOTO RESTART_0 ;2 DECFSZ R1 ;1 GOTO pp1 MOVF W_ADD3,0 ;????????????????????????????w_add1~3?? MOVWF DATA_0 ;?????w_add3??????????data_0???????data_0?? MOVLW B'11110000' ; ????????? ANDWF W_ADD3,1 MOVLW B'00001111' ANDWF DATA_0,1 ............... CODE_FAIL ;???? CLRF DATA_0 INCF FAILTIME,1 MOVLW D'6' ;d'4' SUBWF FAILTIME,0 BTFSS STATUS,C GOTO RX_END CLRF FAILTIME BCF W_TEST,0 CLRF KEYTIME RX_END GOTO CHECK_KEY_END en traduit google ================ ; PT2240 PROGRAMME DECODE Ajoutez le code reçu ;***************************** ROLL RLF W_ADD3, 1 RLF W_ADD2, 1 RLF W_ADD1, 1 RETLW 00H ;************************** Procédures Delay, environ 30US BOUNCE1 D'MOVLW 08 ' MOVWF R4 ABCD DECFSZ R4, 1 GOTO ABCD RETLW 00H ;************************** ;********************************* ; CATCH CODE ;********************************* CATCH_CODE CLRF TMR0 MOVLW B'00000111 ' OPTION RESTART_0 CLRWDT MOVLW D'100 ' SUBWF TMR0, 0 STATUT BTFSC, C GOTO CODE_FAIL JACK_1 D'MOVLW 60 ' MOVWF R1; 1; 4.62ms-80d> RESTART_1 APPEL BOUNCE1; Il s'agit d'un processus de temporisation, y compris la mise en œuvre de la directive, le temps passé à un total de 30US PORTC BTFSC, 0 GOTO RESTART_0; 6.8ms faible long, où la valeur de 2,2 est juste un test, si plus de la, vous pouvez à la mise en œuvre de, ou autrement signal invalide. DECFSZ R1; 1 à 0, qui a été une longue attente pour les signaux de faible niveau 2.2ms, vous pouvez effectuer à GOTO RESTART_1 2; ;******************************* RESTART_1_1; ONT BOUNCE CLRWDT APPEL BOUNCE1; attendre semble élevé, et si oui 30US * 256 temps, il n'est pas élevé pour elle, avant de faire INCFSZ R1, ou pas, recommencer, mais cette fois le temps d'attente est toujours 25.3ms GOTO RESTART_1_2; 2; se produire dans le délai prévu à haute GOTO RESTART_0 2; RESTART_1_2 PORTC BTFSS, 0; GOTO RESTART_1_1 2; ;******************************* CLRF R1; d'attendre jusqu'à ce que le secondaire, de pré-code prêt pour la collecte. CLRF W_ADD1; bits d'adresse clair CLRF W_ADD2 CLRF W_ADD3 ; CLRF DATA_0; clair bits de données D'MOVLW 24 ' MOVWF COMMAND; numéro de code reçus: 20 bits de données d'adresse 4 ;******************************* ;//////////////////////////////// ;******************************* ;//////////////////////////////// RESTART_2; "1" JUMP APPEL BOUNCE1 INCFSZ R1; Si un site étendu à plus de 30 ° * 256us, alors ce code n'est pas un code valide, recommencer, GOTO RESTART_2_1; temps ou temps d'attente dans 25.3ms GOTO RESTART_0 RESTART_2_1 BTFSC PORTC, 0; comptage du temps de haute R1 30US *, si l'arrivée de faible GOTO RESTART_2; ;******************************* ;;;;; MOVLW D'30 '; attendre faible, faible pour aller à différencier le code est 0 ou 1,30 * R1, SUBWF R1, W; 30 * 30 = 900us est la limite supérieure, si le haut est supérieure à cette valeur, a été le signal invalide, recommencer BTFSC 3,0 GOTO RESTART_0 ;;;;; CLRF R1 RESTART_3; "0" JUMP "1" = 30US, ou dans le faible niveau d'attente. ; INCF R1, 1 PORTC BTFSC, 0, 1 RE_JUMPOUT GOTO, 2 APPEL BOUNCE1, 30 INCFSZ R1, 1 GOTO RESTART_3 2; GOTO RESTART_0 ;********************************** RE_JUMPOUT D'MOVLW 3 '; fixer des limites, si le haut est égale ou inférieure à 3 * 30US = 90us, puis le code n'est pas un code valide, recommencer SUBWF R1, W BTFSC 3,0 GOTO RTC_1 GOTO RESTART_0 ;********************************** RTC_1 MOVLW D'30 '; fixer la limite supérieure, si le niveau élevé égale ou supérieure à 30 * 30US = 900us, puis le code n'est pas un code valide, recommencer SUBWF R1, W BTFSC 3,0 GOTO RESTART_0 ;**************************** ; Senser est "1" le changement "c" ;**************************** CHECK_C D'MOVLW 9 '; ont un code valide, la distinction entre un 0 ou 1, SUBWF R1, 0; PT2240B "1" de haut niveau est généralement autour de 200 US, «0» où la distinction entre valeur élevée pour le * 30 13 = 800us 390us BTFSS 3,0; le signal haute ne dépasse pas 1 390us GOTO SET_1 CRCL GOTO CHECK_C_END SET_1 SETC CHECK_C_END ;**************************** Appel; enregistrer le code reçu CLRF R1 CLRWDT DECFSZ COMMAND, 1; voir s'il ya fermeture de plus de 24 mètres, sinon, le code de nouveaux revenus GOTO RESTART_2 ;****************************** P_END; Voici la phase finale de vérification pour voir les informations PT2240B, la seconde moitié d'un code donné movlw d'30 ' movwf r1; est 992a de la dépression. Lors de la vérification, si le faible est trop court, puis le code est reçu dans ce groupe d'abandonner, pp0; alors à tout recommencer appel bounce1 decfsz r1 goto pp0 MOVLW D'60 '; MOVWF R1, 1 pp1 APPEL BOUNCE1, 2 90 PORTC BTFSC, 0, 1 GOTO RESTART_0 2; DECFSZ R1, 1 GOTO pp1 MOVF W_ADD3, 0; dans le code de collecte, et ne traitait pas de code séparé et bits de données, puis toutes les commandes passées w_add1 ~ 3 ans, MOVWF DATA_0, ici, dans la seconde moitié de la valeur de la déplacer dans w_add3 data_0, alors maintenant où data_0 MOVLW B'11110000 '; valeur est le bit d'information. ANDWF W_ADD3, 1 MOVLW B'00001111 ' ANDWF DATA_0, 1 ............... CODE_FAIL; reçu code d'échec CLRF DATA_0 FAILTIME INCF, 1 D'MOVLW 6 '; d'4' FAILTIME SUBWF, 0 STATUT BTFSS, C GOTO RX_END CLRF FAILTIME W_TEST BCF, 0 CLRF KeyTime RX_END GOTO CHECK_KEY_END |