; list p=16c84, f=inhx8m TMR0 EQU 01 STATUS EQU 03 PORTA EQU 05 PORTB EQU 06 INITCON EQU 0B ALTO EQU 0C BASSO EQU 0D COLONNA EQU 0E ;TASTO PREMUTO COL EQU 0F BAS EQU 10 ALT EQU 11 CONT EQU 12 ;CONTATORE GENERICO CONT_1 EQU 13 CONT_2 EQU 14 INTERNO EQU 02 ESTERNO EQU 12 FINEMEM EQU 03FF ;***** 1FF PER IL PIC16C554 ***** ;PULL EQU 00 ;BIT DEL PORT A CHE VIENE USATO COME PULL ;USCITA EQU 01 ;BIT DEL PORT A CHE VIENE USATO COME USCITA ;ALTOA EQU 02 ;BIT DEL PORT A CHE PONE ALTO IL DIP-SWITCH ;BASSOA EQU 03 ;BIT DEL PORT A CHE PONE BASSO IL DIP-SWITCH #define PULL PORTA,0 #define USCITA PORTA,1 #define ALTOA PORTA,2 #define BASSOA PORTA,3 #define CARRY STATUS,0 #define GIE INITCON,7 #define EEIE INITCON,6 #define TOIE INITCON,5 #define INTB0 INITCON,4 #define INTB47 INITCON,3 #define RILTMR INITCON,2 #define RILB0 INITCON,1 #define RILB47 INITCON,0 #define TRISBIT STATUS,5 #define ATTIVADIP PORTA,4 INIZ ORG 0000H BCF GIE ;Disativa momentaneamente tutti gli interrupt GOTO MAIN TRASM ORG 0004H BSF TRISBIT ;TRIS CLRF PORTA BCF TRISBIT ;/TRIS ;BSF BASSOA ;******* MOVLW 28 MOVWF CONT_2 CALL TASTO CALL MC1450 CALL TASTO CALL MC1450 CALL TASTO CALL MC1450 PREMUTO CALL TASTO CALL MC1450 DECF CONT_2,1 ;Se ha già trasmesso 40 codici si blocca per non scaricare la batteria BZ OLTRE ;Si suppone che i tasti si siano premuti in tasca. COMF PORTB,0 ANDLW B'11110000' ;*****AGGIUNTO*****CAMBIATO BNZ PREMUTO ;SE ZERO VAI A PREMUTO OLTRE CALL CODICE CLRF PORTB BSF INITCON,3 BCF RILB47 BSF GIE RETFIE ;SLEEP MAIN ;BCF GIE ;Disativa momentaneamente tutti gli interrupt BCF STATUS,6 BCF STATUS,7 BSF TRISBIT ;TRIS MOVLW B'00000000' ;Imposta I/O Port A MOVWF PORTA BSF 01,07 ;Disattiva Pull-Up Port B BCF TRISBIT ;/TRIS CALL CODICE ;MOVLW B'10001000' ;MOVWF INITCON MOVLW B'00011001' ;Imposta USCITE PREDEFINITE PORTA MOVWF PORTA;******* ;BSF PULL ;******* ;BSF BASSOA ;******* ;SL5 MOVLW 010 ; MOVWF COLONNA ;SL4 MOVLW 06 ; MOVWF CONT_1 ;SL3 CALL MC1450 ; DECFSZ CONT_1,1 ; GOTO SL3 ; DECFSZ COLONNA,1 ; GOTO SL4 ; GOTO SL5 ; MOVLW 05 MOVWF CONT_1 SL2 CLRF PORTB DECFSZ CONT_1,1 GOTO SL2 BCF INTB0 BCF TOIE BSF INTB47 BCF RILB47 BSF GIE SL SLEEP NOP GOTO SL CODICE BSF TRISBIT ;TRIS MOVLW B'11111111' ;Imposta I/O Port B: TUTTI INGRESSI MOVWF PORTB BSF 01,07 ;Disttiva Pull-Up interno Port B BCF TRISBIT ;/TRIS BSF ALTOA ;Alimenta il Dip Switch BCF BASSOA BCF PULL ;Pull BASSO per RB3-RB7 MOVLW B'11111000' ANDWF PORTB,0 ;AND CON F8 MOVWF BASSO BSF PULL ;Pull ALTO per RB3-RB7 ;Viene lasciato attivo MOVLW B'11111000' ANDWF PORTB,0 ;AND CON F8 MOVWF ALTO BCF ALTOA ;Disattiva il Dip Switch BSF BASSOA BSF TRISBIT ;TRIS ;*****AGGIUNTO***** MOVLW B'11110000' ;*****AGGIUNTO***** MOVWF PORTB ;*****AGGIUNTO***** BSF 01,07 ;Disattiva Pull-Up Port B;*****AGGIUNTO***** BCF TRISBIT ;/TRIS RETURN TASTO BSF TRISBIT ;TRIS ;*****AGGIUNTO***** TEORICAMENTE INUTILE MOVLW B'11110000' ;*****AGGIUNTO***** TEORICAMENTE INUTILE MOVWF PORTB ;86 ;*****AGGIUNTO***** TEORICAMENTE INUTILE BCF 01,07 ;Attiva Pull-Up Port B BCF TRISBIT ;/TRIS ;*****AGGIUNTO***** TEORICAMENTE INUTILE CLRW ;IDENTIFICA COLONNA (PASSIVO) CLRF COLONNA ; TEORICAMENTE INUTILE CLRF PORTB BTFSS PORTB,7 ;CONTROLLA BIT 7 MOVLW 0 BTFSS PORTB,6 ;CONTROLLA BIT 6 MOVLW 1 BTFSS PORTB,5 ;CONTROLLA BIT 5 MOVLW 2 BTFSS PORTB,4 ;CONTROLLA BIT 4 MOVLW 3 MOVWF COLONNA BSF TRISBIT ;TRIS ;Scambia righe e colonne SWAPF PORTB,1 ;per identificare la riga BCF TRISBIT ;/TRIS CLRW ;IDENTIFICA RIGA (PASSIVO) CLRF PORTB BTFSS PORTB,0 ;CONTROLLA BIT 3 MOVLW 0 BTFSS PORTB,1 ;CONTROLLA BIT 2 MOVLW 0C BTFSS PORTB,2 ;CONTROLLA BIT 1 MOVLW 8 BTFSS PORTB,3 ;CONTROLLA BIT 0 MOVLW 4 IORWF COLONNA,1 ;Ora COLONNA contiene il codice del tasto che ha svegliato il Micro BSF TRISBIT ;TRIS ;*****AGGIUNTO*****CON CAMBIO SOPRA MOVLW B'11110000' ;*****AGGIUNTO***** MOVWF PORTB ;*****AGGIUNTO***** BSF 01,07 ;Disattiva Pull-Up Port B ;*****AGGIUNTO***** BCF TRISBIT ;/TRIS ;*****AGGIUNTO***** CLRF PORTB RETURN MC1450 MOVF ALTO,0 MOVWF ALT MOVF BASSO,0 MOVWF BAS MOVF COLONNA,0 MOVWF COL ;DECF COL,1 ;************************************* MOVLW 00F ;18 MOVWF CONT RIT NOP ;CALL PAUSA2 NOP DECFSZ CONT,1 GOTO RIT MOVLW 05 MOVWF CONT CINQUE BSF USCITA RLF ALT,1 ;Viene trasmesso il codice (Vedi specifiche Motorola) BTFSS CARRY BCF USCITA ;CALL ZERO NOP;BTFSC CARRY NOP;CALL UNO NOP ;BC Z1 NOP NOP ;NOP ;FORSE DA RIMETTERE NOP Z1 NOP ;NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BCF USCITA NOP NOP NOP BSF USCITA RLF BAS,1 ;Viene trasmesso il codice (Vedi specifiche Motorola) BTFSS CARRY BCF USCITA ;CALL ZERO NOP;BTFSC CARRY NOP;CALL UNO NOP ;BC Z2 NOP NOP ;NOP ;FORSE DA RIMETTERE NOP Z2 NOP ;NOP ;NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BCF USCITA DECFSZ CONT,1 GOTO CINQUE MOVLW 04 MOVWF CONT QUATTRO BSF USCITA RRF COL,0 ;Viene trasmesso il codice (Vedi specifiche Motorola) BTFSS CARRY BCF USCITA ;CALL ZERO NOP;BTFSC CARRY NOP;CALL UNO NOP ;BC Z3 NOP NOP ;NOP ;FORSE DA RIMETTERE NOP Z3 NOP ;NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BCF USCITA NOP NOP NOP BSF USCITA RRF COL,1 ;Viene trasmesso il codice (Vedi specifiche Motorola) BTFSS CARRY BCF USCITA ;CALL ZERO NOP;BTFSC CARRY NOP;CALL UNO NOP ;BC Z4 NOP NOP ;NOP ;FORSE DA RIMETTERE NOP Z4 NOP ;NOP ;NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BCF USCITA DECFSZ CONT,1 GOTO QUATTRO RETURN ORG FINEMEM GOTO MAIN END