el lenguaje que manejo es ensamblador, estoy usando el pic 16F877A, yo realice el programa pero no obtuve los resultados que esperaba.
yo me quiero comunicar con un generador de tonos, es el W91082. es un Chip de 8 pines de los cuales voy a manipular 3 para su funcionamiento, ellos son:
el Chip enable CE, no es mas que el hablilitador del chip, que funciona cuando este se pone a cero, el Clock que debe estar configurado para leer la Data en flancos descendentes, y la Data que es la informacion..
En el programa que hice preguntaba por una señal alta (BTFSS)un pin que estaba relacionado con un numero en binario que es el destinado a enviarse al generador de tonos y dependiendo si estaba en uno o en cero saltaba a transmitir o bajaba a preguntar por el siguiente numero. los numeros a transmitir eran del uno al cuatro y los pines que use fueron, RC2, RC1, RC0 y RB4.
en transmitir lo que hice fue descargar los numeros binarios y colocarlos en el registro SSPBUF para su salida.
te anexo el programa que realice para que lo veas y me puedas sugerir que puedo hacer..
LIST P= 16F877A
#INCLUDE "P16F877A.INC"
DIGITO EQU 27H
REG1 EQU 28H
REG2 EQU 29H
REG3 EQU 30H
ORG 00h
GOTO CONFIGU
CONFIGU BCF STATUS,6
BSF STATUS,5 ;paso al banco 1 para configurar puertos
MOVLW B"10001110"
MOVWF ADCON1 ;decirle al micro que voy a utilizar E/S digitales para PORTA y PORTE
MOVLW B"00001111"
MOVWF TRISA
MOVLW B"00010011"
MOVWF TRISB
MOVLW B"10000111"
MOVWF TRISC
CLRF TRISD ;puerto D como salida
CLRF TRISE ;puerto E como salida
MOVLW .207 ;se carga .207 en W para XT 4Mhz
MOVWF SPBRG ;se carga el valor en el registro SPBRG con lo que se trabaja a 1200 baudios
BCF STATUS,6
BCF STATUS,5 ;devuelta al banco 0
CLRF DIGITO
BSF SSPCON,SSPEN
BSF SSPCON,SSPM0
BCF SSPCON,CKP
CLRF PORTA ;limpia puerto A
CLRF PORTB ;limpia puerto B
CLRF PORTC ;limpia puerto c
CLRF PORTD ;limpia puerto D
BCF STATUS,6
BSF STATUS,5 ;paso al banco 1 para configura
BCF SSPSTAT,CKE
BCF STATUS,6
BCF STATUS,5
INICIO BSF PORTD,1
BCF PORTB,7
BTFSS PORTC,2
GOTO TXDOS
MOVLW B"00000001"
MOVWF DIGITO
GOTO TRANSMITIR
TXDOS BTFSS PORTC,1
GOTO TXTRES
MOVLW B"00000010"
MOVWF DIGITO
GOTO TRANSMITIR
TXTRES BTFSS PORTC,0
GOTO TXCUATRO
MOVLW B"00000011"
MOVWF DIGITO
GOTO TRANSMITIR
TXCUATRO BTFSS PORTB, 4
GOTO INICIO
MOVLW B"00000100"
MOVWF DIGITO
GOTO TRANSMITIR
TRANSMITIR BCF PORTD, 1
BSF PORTB,7
MOVF DIGITO, W
MOVWF SSPBUF
CALL DELAY
GOTO INICIO
DELAY MOVLW B"00010100"
MOVWF REG3
TERCERO MOVLW B"11111111"
MOVWF REG2
SEGUNDO MOVLW B"11111111"
MOVWF REG1
PRIMERO DECFSZ REG1
GOTO PRIMERO
DECFSZ REG2
GOTO SEGUNDO
DECFSZ REG3
GOTO TERCERO
RETURN
END
El delay lo coloque porque puse unes led que encendieran y apagaran cuando habilitaba para transmitir y deshabilitaba..
agradezco cualquier ayuda que me puedas brindar..