TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: enero0022 en 24 de Abril de 2008, 18:29:22
-
alguien tendra por ahi algun ejemplo de un programa en ensamblador para programar un reloj de tiempo real ya que tengo
que activar una valvula una vez al dia de lunes a viernes el reloj puede ser pcf8583 o bien el ds1307 muchas gracias
-
Como se nota que no usaste el buscador
-
Tiempo real es que recibas información dentro del intervalo de tiempo definido por el programador.
Después hay tres clases creo recordar....
En el subforo de ASM encontrarás multitud de ejemplos, como ya te han comentado, al respecto.
Suerte!!! ;)
-
MOVLW 0X00
MOVWF SEGUNDOS
MOVLW 0X10
MOVWF DATO
MOVLW 0X07
MOVWF DIRECCION
CALL WRITE_RTC
MOVF SEGUNDOS,W
MOVWF DATO
CLRF DIRECCION
CALL WRITE_RTC
MOVF MINUTOS,W
MOVWF DATO
MOVLW 0X01
MOVWF DIRECCION
CALL WRITE_RTC
MOVF HORAS,W
MOVWF DATO
MOVLW 0X02
MOVWF DIRECCION
CALL WRITE_RTC
;////////////RUTINAS PARA OPERACIONES CON EL DS1307//////////////////
WRITE_RTC
CALL SEND_START
MOVLW 0XD0
CALL SEND_BYTE
MOVF DIRECCION,W
CALL SEND_BYTE
MOVF DATO,W
CALL SEND_BYTE
CALL SEND_STOP
RETURN
READ_RTC
CALL SEND_START
MOVLW 0XD0
CALL SEND_BYTE
MOVF DIRECCION,W
CALL SEND_BYTE
CALL SEND_START2
MOVLW 0XD1
CALL SEND_BYTE
CALL LEER_BYTE
CALL SEND_STOP
RETURN
;#####################################
;##### RUTINAS DEL PROTOCOLO I2C
;#####################################
;////////////RUTINA PARA ENVIAR UN START//////////////////
SEND_START
BCF PIR1,SSPIF
BANKSEL SSPCON2 ; SELECCIONA EL BANCO 1 DE RAM
BSF SSPCON2,SEN ; ACTIVA SECUENCIA DE INICIO
BANKSEL PIR1 ; REGRESA AL BANCO 0 DE RAM
BTFSS PIR1,SSPIF ; FIN DE SECUENCIA DE INICIO ??
GOTO $-1 ; NO, SEGUIR ESPERAR
RETURN
;////////////RUTINA PARA ENVIAR UN RE-START//////////////////
SEND_START2
BANKSEL SSPCON2
BSF SSPCON2,1 ; ACTIVA SECUENCIA RE-INICIO
BTFSC SSPCON2,1
GOTO $-1 ; NO, SEGUIR ESPERANDO
BANKSEL PORTC
RETURN
;////////////RUTINA PARA ENVIAR UN STOP//////////////////
SEND_STOP
NOP
BANKSEL PIR1
BCF PIR1,SSPIF
BANKSEL SSPCON2 ; PASA AL BANCO 1
BSF SSPCON2,PEN ; ACTIVA SECUENCIA DE STOP
BANKSEL PIR1 ; REGRESA AL BANCO 0
BTFSS PIR1,SSPIF ; FIN DE SECUENCIA DE STOP ??
GOTO $-1 ; NO, SEGUIR ESPERADO
RETURN
;////////////RUTINA PARA ENVIAR UN BYTE Y ESPERA DE ACK////////////
SEND_BYTE
BCF PIR1,SSPIF
MOVWF SSPBUF ; BYTE A TRANSMITIR PASA AL BUFFER DE SALIDA
BTFSS PIR1,SSPIF ; TERMINO DE TRANSMITIR??
GOTO $-1 ; NO, SEGUIR ESPERANDO
BANKSEL SSPCON2 ; SELECCIONA EL BANCO 0
MOVLW .40
MOVWF AUX_ACK
SIG_ACK
BTFSS SSPCON2,ACKSTAT ; MIRA EL ESTADO DEL BIT ACK
GOTO SALE_SEND
DECFSZ AUX_ACK,F
GOTO SIG_ACK
GOTO ERROR_I2C ; ERROR!!
SALE_SEND
NOP
BANKSEL PORTC
RETURN
;////////////RUTINA PARA RECIBIR UN BYTE Y ENVIAR UN NOACK////////////
LEER_BYTE
BCF PIR1,SSPIF ; BORRA LA BANDERA DEL MÓDULO MSSP
BANKSEL SSPCON2 ; SELECCIONA PÁGINA 1
BSF SSPCON2,RCEN ; ACTIVA EL MODO RECEPTOR
BANKSEL PIR1 ; SELECCIONA PÁGINA 0
BTFSS PIR1,SSPIF ; RECIBIDOS LOS 8 BITS ??
GOTO $-1 ; NO, SEGUIR ESPERADO
MOVF SSPBUF,W ; MOVER LOS DATOS RECIBIDO
MOVWF RECIBO ; AL REGISTRO DATOS PARA USARLOS LUEGO
BCF PIR1,SSPIF
BANKSEL SSPCON2
BSF SSPCON2,ACKDT ; ACTIVA GENERACIÓN DE ACK DEL MAESTRO
BSF SSPCON2,ACKEN
BANKSEL PIR1
BTFSS PIR1,SSPIF ; SE ENVIÓ ACK?
GOTO $-1
RETURN
ERROR_I2C
BANKSEL PORTC
CALL SEND_STOP
MOVLW 0X88
MOVWF INTCON
RETURN