; list p=16c54a, f=inhx8m ;*********************************************************** ;*** IMPOSTAZIONI: CPU: PIC16C54A-04/P o /LP ;*** WD: Disattivato ;*** Oscillatore: LP ;*** Quarzo: 32768Hz ;*** Equivalenza: MC145026 con 6n8 e 47K ;*********************************************************** 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 01FF ;F84 EQU 03FF ;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 ZERO STATUS,2 #define ATTIVADIP PORTA,4 INIZ ORG 0000H GOTO MAIN TRASM ORG 0004H CLRW ;BSF TRISBIT ;TRIS TRIS PORTA ;CLRF PORTA ;BCF TRISBIT ;/TRIS ;BSF BASSOA ;******* MOVLW 28 MOVWF CONT_2 CALL TASTO XORLW 90 BZ NIENTE CALL MC1450 CALL MC1450 CALL MC1450 PREMUTO 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 PRANCOR COMF PORTB,0 ANDLW B'11110000' ;*****AGGIUNTO*****CAMBIATO BNZ PRANCOR ;SE ZERO VAI A PRANCOR CALL CODICE GOTO NIENTE ;RETLW 00 ;FIE ;SLEEP MAIN BCF STATUS,6 BCF STATUS,7 MOVLW B'00000000' ;Imposta I/O Port A TRIS PORTA ;MOVWF PORTA CALL CODICE MOVLW B'00011001' ;Imposta USCITE PREDEFINITE PORTA MOVWF PORTA;******* ;BSF PULL ;******* ;BSF BASSOA ;******* NIENTE COMF PORTB,0 NOP NOP ANDLW 0F0 BTFSS ZERO GOTO TRASM GOTO NIENTE ;SL SLEEP ; NOP ; GOTO SL CODICE MOVLW B'11111111' ;Imposta I/O Port B: TUTTI INGRESSI TRIS PORTB ;MOVWF PORTB 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 MOVLW B'11110000' ;*****AGGIUNTO***** TRIS PORTB ;MOVWF PORTB ;*****AGGIUNTO***** CLRF PORTB RETLW 0 TASTO MOVLW B'00001111' ;*****AGGIUNTO***** TEORICAMENTE INUTILE TRIS PORTB ;MOVWF PORTB ;86 ;*****AGGIUNTO***** TEORICAMENTE INUTILE MOVLW 90 ;CLRW ;IDENTIFICA COLONNA (PASSIVO) CLRF COLONNA ; TEORICAMENTE INUTILE CLRF PORTB BTFSS PORTB,3 ;CONTROLLA BIT 3 MOVLW 0 BTFSS PORTB,2 ;CONTROLLA BIT 2 MOVLW 1 BTFSS PORTB,1 ;CONTROLLA BIT 1 MOVLW 3 BTFSS PORTB,0 ;CONTROLLA BIT 0 MOVLW 2 MOVWF COLONNA XORLW 90 BZ NOTAST MOVLW B'11110000' ;BSF TRISBIT ;TRIS ;Scambia righe e colonne TRIS PORTB ;per identificare la riga ;BCF TRISBIT ;/TRIS MOVLW 90 ; CLRW ;IDENTIFICA RIGA (PASSIVO) CLRF PORTB BTFSS PORTB,7 ;CONTROLLA BIT 7 MOVLW 0 BTFSS PORTB,6 ;CONTROLLA BIT 6 MOVLW 4 BTFSS PORTB,5 ;CONTROLLA BIT 5 MOVLW 8 BTFSS PORTB,4 ;CONTROLLA BIT 4 MOVLW 0C ADDWF COLONNA,1 ;Ora COLONNA contiene il codice del tasto che ha svegliato il Micro XORLW 90 BZ NOTAST CLRF PORTB RETLW 0 NOTAST MOVLW B'11110000' TRIS PORTB CLRF PORTB ;MOVLW 90 ;MOVWF COLONNA RETLW 90 MC1450 MOVF ALTO,0 MOVWF ALT MOVF BASSO,0 MOVWF BAS MOVF COLONNA,0 MOVWF COL ;DECF COL,1 ;************************************* MOVLW 018 ;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