Sei sulla pagina 1di 3

AUTÓMATAS PROGRAMABLES

L E C C I Ó N 13

Módulo de control por medio de un


Instrumento Unilazo Programable
Parte 2: Distribución de Periféricos y Código Fuente del PIC

Nos acercamos al final de este curso de “autómatas


programables” que comenzamos en Saber Nº 204,
estamos describiendo desde la edición anterior, la
forma de realizar el control del autómata por medio de
un Instrumento Unilazo Programable. Ya especificamos
los componentes que usará el SPLI microcontrolado que
proponemos, resta ahora definir qué patas usaremos
como entradas y salidas y cuál será el programa a grabar
en el PIC, a los efectos de establecer el circuito final. De
este tema nos ocuparemos en esta nota.

Sobre un trabajo del Ing. Fernando Ventura Gutiérrez


(fer_ventura@universia.edu.pe)
y la coordinación de M. en C. Ismael Cervantes de Anda, Docente ESCOM IPN

DISTRIBUCIÓN DE PERIFÉRICOS rrupción por cambio de estado para que pueda identi-
ficar la tecla presionada.
Entradas análogas
Se ha definido que se va a usar todo el puerto A y Display
E del PIC 16F877 para el Convertidor “Análogo - Digi- Se está haciendo trabajar a este display con el pro-
tal”, ya que no se pueden configurar de otra manera tocolo de comunicación I2C (SCL pin 18 y SDA pin 23),
estas entradas análogas. aprovechando las características de comunicación que
tiene el 16F877 con este protocolo.
Teclado
Se está usando el puerto B para poder tomar datos Convertidor Análogo - Digital
del teclado, se está configurando este puerto de la si- La entrada del dato digital del convertidor “Análogo
guiente manera: - Digital” está conectado de forma directa al puerto D
(RD7 - RD0), ya que éste es el puerto PSP (Puerto Pa-
RB0 - RB3 (pines: 33 - 36) como salidas ralelo Esclavo, Paralell Slave Port).
RB4 - RB7 (pines: 37 - 40) como entradas digitales
Código fuente
En las entradas digitales se está activando la inte- En la tabla 1 se reproduce el código fuente que se-

Saber Electrónica

93
Curso de Autómatas Programables
rá grabado en el PIC 16F877. Si Ud. no quiere “tipear” de cualquier computadora, pero si Ud. quiere profundi-
dicho programa, puede bajarlo de nuestra web: www- zar el tema, con la misma clave, puede bajar el archi-
.webelectronica.com.ar, haciendo click en el ícono vo: “soft877.doc” donde encontrará todo lo necesario
password e ingresando la clave PLC16F877. El archi- para “entender” el programa de este PLC.
vo se llama “plc877.asm”. Recuerde que para poder En la próxima edición culminaremos este curso
bajar archivos debe ser socio del Club SE, que se pue- dando el circuito final del autómata y realizando consi-
de hacer socio desde la misma web y que es gratuito. deraciones finales. Recuerde que en cualquier momen-
El código fuente incluye los programas para mane- to Ud. puede bajar de nuestra web el curso completo
jo de periféricos. Por cuestiones didácticas, en este con la clave auto220.
curso no hemos incluído la “lógica” para la construc-
ción del software que permite el manejo del PLC des- ¡Hasta el mes próximo!

Tabla 1: movlw 0xFF call TRANS_A_B


Código Fuente para el PIC 16F877 call BANCO_0 call TRANS_SP_A
movwf KEY_P call FPS24
LIST P=16F877 clrf FILA call TRANS_A_D
RADIX HEX bsf FILA,0 call TRANS_K1_B
clrf POS_CUR call FPM24
INCLUDE <P16F877.INC> call TRANS_A_GN
INCLUDE <MATH16.INC> call DEFAULT_PA call TRANS_C_A
call CALC_K1 call TRANS_BE_B
DECENA EQU 0x6A call CALC_K2 call FPS24
UNIDAD EQU 0x6B call CONF_INT bcf STATUS,Z
DECIMA EQU 0x6C ;--------------------------
CENTESIMA EQU 0x6D Call BANCO_0 movlw 0xFF
clrf TMR1H andwf AEXP,0
ORG 0x00 clrf TMR1L btfsc STATUS,Z
goto INICIO bcf PIR1,0 clrf AARGB0
movlw b'00110001' call TRANS_AE_B
ORG 0x04 movwf T1CON call FPS24
bcf INTCON,GIE movlw 0x03 bcf STATUS,Z
movwf PAUSA movlw 0xFF
btfsc INTCON,RBIF andwf AEXP,0
goto TECLA BUC_P call BANCO_0 btfsc STATUS,Z
btfsc INTCON,T0IF clrf AARGB0
goto TIMER_0 btfss PIR1,0 movlw 0x80
goto BUC_P movwf BEXP
ORG 0x20 bcf PIR1,0 movlw 0x40
decfsz PAUSA movwf BARGB0
INICIO goto BUC_P clrf BARGB1
call INI_PORTS movlw 0x03 bcf STATUS,Z
call INI_I2C movwf PAUSA movlw 0xFF
call Start_cond bcf INTCON,GIE andwf AEXP,0
call SendWrtAddr btfss SCREEN,0 btfss STATUS,Z
goto SKIP_UNO call FPM24
; ---------------------------------------- call TRANS_D_B
call BANCO_0 call TRANS_SP_A call FPA24
clrf SCREEN movlw 0x83 call TRANS_K2_B
bsf SCREEN,0 movwf BEXP call FPM24
call CLS movlw 0x20 call TRANS_GN_B
call BANCO_0 movwf BARGB0 call TRANS_SP_B
movlw 0x4A call FPA24
movwf COMANDO clrf BARGB1
call SEND_C call FPM24 call BANCO_0
call BANCO_0 call DISP_5 btfsc AARGB0,7
movlw 0x43 call FLOAT_ASCII goto CARGA_0
movwf COMANDO call TRANS_IN_A bsf STATUS,C
call SEND_C movlw 0x83 bcf STATUS,Z
call BANCO_0 movwf BEXP movlw 0x81
movlw 0x51 movlw 0x20 subwf AEXP,0
movwf COMANDO movwf BARGB0 btfsc STATUS,C
call SEND_C clrf BARGB1 goto SI_SUP
call BANCO_0 call FPM24 btfss STATUS,Z
movlw 0x53 call DISP_6 goto NO_SUP
movwf COMANDO call FLOAT_ASCII bcf STATUS,Z
call SEND_C ;-------------------------- movlw 0x20
call BANCO_0 SKIP_UNO subwf AARGB0,0
movlw 0x46 call ANALOG_IN btfss STATUS,C
movwf COMANDO call CONV_PF
call SEND_C call TRANS_A_IN ; Continúa en la siguiente página

Saber Electrónica

94
Distribución de Periféricos y Código Fuente del PIC
; viene de la página anterior bsf ADCON0,ADON movlw 0x77
call BANCO_1 movwf BEXP
goto SI_SUP bsf movlw 0x20
btfss STATUS,Z OPTION_REG,NOT_RBPU movwf BARGB0
goto NO_SUP movlw b'11110000' movlw 0x28
bcf STATUS,Z movwf TRISB movwf BARGB1
movlw 0x00 call FPM24
subwf AARGB1,0 movlw b'00011000' RETURN
btfss STATUS,C movwf TRISC
goto SI_SUP clrf INTCON FLOAT_ASCII
btfss STATUS,Z RETURN call BANCO_0
goto NO_SUP movlw 0x85
SI_SUP BANCO_0 bcf STATUS,RP0 movlw 0x48
movlw 0x81 bcf STATUS,RP1 movwf BARGB0
movwf Y_EXP return clrf BARGB1
movwf AEXP call FPM24
movlw 0x20 BANCO_1 bsf STATUS,RP0 call INT24
movwf Y_B0 bcf STATUS,RP1 clrf BARGB0
movwf AARGB0 return clrf BEXP
movlw 0x00 movlw 0x0A
movwf Y_B1 BANCO_2 bcf STATUS,RP0 movwf BARGB1
movwf AARGB1 bsf STATUS,RP1 ;----------------
goto LAB_1 return call FXD1616U
CARGA_0 clrf AEXP movf REMB1,W
clrf AARGB0 BANCO_3 bsf STATUS,RP0
clrf AARGB1 bsf STATUS,RP1 movwf CENTESIMA
NO_SUP return movlw 0x30
call TRANS_A_Y addwf CENTESIMA,1
LAB_1 CALC_K1 ;----------------
call FXD1616U
movlw 0x84 call TRANS_KP_A
movf REMB1,W
movwf BEXP call TRANS_TN_B
movwf DECIMA
movlw 0x4C call FPM24
movlw 0x30
movwf BARGB0 call TRANS_T_B
addwf DECIMA,1
clrf BARGB1 call FPM24
;----------------
call FPM24 call TRANS_KP_B
call FXD1616U
call INT2416 call FPA24
movf REMB1,W
movf AARGB1,0 call TRANS_A_K1
movwf UNIDAD
movwf PORTD RETURN
movlw 0x30
call TRANS_BE_AE
addwf UNIDAD,1
call TRANS_CE_BE CALC_K2
call FXD1616U
call TRANS_DE_CE call TRANS_KP_A movf REMB1,W
bsf INTCON,GIE call TRANS_TV_B movwf DECENA
goto BUC_P call FPM24 movlw 0x30
CONF_INT call BANCO_0 addwf DECENA,1
call BANCO_1 movlw 0x81 movf DECENA,0
bcf OPTION_REG,T0CS movwf BEXP movwf LETRA
bcf OPTION_REG,PSA movlw 0x40 call WrtData
bcf OPTION_REG,PS2 clrf BARGB1 call BANCO_0
bsf OPTION_REG,PS1 call FPD24 movf UNIDAD,0
bsf OPTION_REG,PS0 call TRANS_T_B movwf LETRA
clrf INTCON call FPD24 call WrtData
bsf INTCON,RBIE call TRANS_A_K2 call BANCO_0
bsf INTCON,T0IE RETURN movlw 0x2E
bsf INTCON,GIE movwf LETRA
RETURN ANALOG_IN call WrtData
call BANCO_0
INI_PORTS bsf ADCON0,GO_DONE call BANCO_0
call BANCO_0 movf DECIMA,0
clrf PORTA BUC_AN movwf LETRA
clrf PORTB btfsc ADCON0,GO_DONE call WrtData
clrf PORTC goto BUC_AN call BANCO_0
clrf PORTD RETURN movf CENTESIMA,0
bsf ADCON0,ADCS1 movwf LETRA
bcf ADCON0,ADCS0 CONV_PF call WrtData
bcf ADCON0,CHS2 call BANCO_0 RETURN
bcf ADCON0,CHS1 movf ADRESH,0
bcf ADCON0,CHS0 movwf AARGB0 ; Librerias usadas
call BANCO_1 call BANCO_1 INCLUDE <TRANSF.ASM>
movlw b'10001110' movf ADRESL,0 INCLUDE <FP24.A16>
movwf ADCON1 call BANCO_0 INCLUDE <TECLADO.ASM>
movwf TRISA movwf AARGB1 INCLUDE <I2C.ASM>
clrf TRISD call FLO24 INCLUDE <FXD66.A16>
call BANCO_0 call BANCO_0 END

Saber Electrónica

95

Potrebbero piacerti anche