#include<16f877A.h>
// fuses y ajuste del clock
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#use delay(clock=4M)
// canal de comunicacion : USART
#define TTL_TX PIN_C6
#define TTL_RX PIN_C7
#use RS232(baud=9600, xmit=TTL_TX, rcv=TTL_RX)
void main()
{
char rec;
printf("TyP_Serio_TTL\r\n");
do
{
if(kbhit())
{
rec=getc();
putc(rec);
#asm
ADDR_L equ 0x20
DATA_L equ 0x21
org 0x00
nop
nop
bcf STATUS,RP0 ;Ir banco 0
bcf STATUS,RP1
movlw b'01000001' ;A/D conversion Fosc/8
movwf ADCON0
bsf STATUS,RP0 ;Ir banco 1
bcf STATUS,RP1
clrf TRISA ;PORTA salida
clrf TRISB ;PORTB salida
clrf TRISC ;PORTC salida
clrf TRISD ;PORTD salida
clrf TRISE
movlw b'00001110' ;A/D Port AN0/RA0
movwf ADCON1
bsf TRISA,0 ;Canal AN0 como entrada
bcf TRISC,6 ;RC6/TX salida, pin de transmisión
movlw d'12' ;2400 baud rate Xtal=4Mhz
movwf SPBRG
bcf TXSTA,BRGH ;Selección de baja velocidad
bcf TXSTA,SYNC ;Modo asíncrono
bcf STATUS,RP0 ;Ir banco 0
bcf STATUS,RP1
bsf RCSTA,SPEN ;habilita el puerto serie
bsf STATUS,RP0 ;Ir banco 1
bcf STATUS,RP1
bcf TXSTA,TX9 ;8 bits de datos a transmitir
bsf TXSTA,TXEN ;Activa la transmisión serial, TXIF = 1
bcf STATUS,RP0 ;Ir banco 0
bcf STATUS,RP1
_adc
bsf ADCON0,GO ;Start A/D conversion
_espera
btfsc ADCON0,GO ;ADCON0 es 0? (la conversion esta completa?)
goto _espera ;No, ir _espera
movf ADRESH,W ;Si, W=ADRESH
movwf TXREG ;TXREG = W
movwf PORTC ;PORTC = W
_esperatx
btfss PIR1,TXIF ;Espera hasta que transmisión culminó
goto _esperatx
goto _adc ;Ir adc
#endasm
}
}
while(TRUE);
}