TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: SimonMG en 29 de Septiembre de 2006, 18:00:06
-
Compañeros del foro concretamente nesesito que si es posible que me muestren un programa en asembler de lo minimo que se nesesita para comunicarme por rs232 utilizon un pic16f876a agradeceria mucho que me ayudaran... saludos
:mrgreen:
-
MOVLW B'00100100' ;SELECCION TX DE 8 BITS,ALTA VELOCIDAD,MODO ASINCRONO
MOVWF TXSTA
MOVLW B'00000110' ;RC6 SALIDA SERIAL USART.
MOVWF PORTC
;SERIAL COMUNICACION
SERIAL BCF STATUS,5
BCF PIR1,TXIF
MOVLW B'11000000'
MOVWF INTCON
BSF STATUS,5
MOVLW B'00100101'
MOVWF TXSTA
MOVLW .12
MOVWF SPBRG
BCF STATUS,5
BSF RCSTA,SPEN
BSF STATUS,5
BSF TXSTA,TXEN
BCF STATUS,5
MOVF CONTA,W
ADDLW 30
MOVWF TXREG
ESPERE BTFSS PIR1,TXIF
GOTO ESPERE
MOVLW 0
MOVWF TXREG
EPE BTFSS PIR1,TXIF
GOTO EPE
MOVLW .32
MOVWF TXREG
ESPE BTFSS PIR1,TXIF
GOTO ESPE
MOVLW 0
MOVWF TXREG
EP BTFSS PIR1,TXIF
GOTO EP
MOVF DECENAS,W
ADDLW 30
MOVWF TXREG
RINO BTFSS PIR1,TXIF
GOTO RINO
MOVLW 0
MOVWF TXREG
P BTFSS PIR1,TXIF
GOTO P
MOVF UNIDAD,W
ADDLW 30
MOVWF TXREG
EST BTFSS PIR1,TXIF
GOTO EST
MOVLW .13
MOVWF TXREG
MAR BTFSS PIR1,TXIF
GOTO MAR
RETURN
MOVWF TXREG
ET BTFSS PIR1,TXIF
GOTO ET
MOVLW H'7F'
MOVWF TXREG
FUI BTFSS PIR1,TXIF
GOTO FUI
BCF STATUS,5
BCF STATUS,6
RETURN
END
-
Este esta bien????????????????????' quiero preguntar porque se me hace mas facil de entender
;************************************************************************
;* PROYECTO STARGATE. *
;* sg-echo-pic16f876-xx-0.asm. *
;* *
;* Jose Angel de Sande Tundidor <josejosejose@iespana.es> *
;* Juan Gonzalez <juan@iearobotics.com> *
;* Octubre-2003 *
;*----------------------------------------------------------------------*
;* Servidor de ECO. *
;* Servidor: sg-echo *
;* Implementado para el micro 16F876 en una tarjeta prototipo *
;*----------------------------------------------------------------------*
;* Se hace eco de todo lo recibido por el puerto serie. *
;* El caracter recibido ademas se saca por el puerto B para poderse *
;* visualizar con la tarjeta PCT-LED *
;*----------------------------------------------------------------------*
;* Licencia GPL *
;************************************************************************
;-- Establecer el PIC a emplear
LIST p=16f876
INCLUDE "p16f876.inc"
ORG 0
;-- Configuracion del puerto serie
BSF STATUS,5 ; Acceso al banco 1
MOVLW 0x19 ; Velocidad: 9600 baudios
MOVWF SPBRG
MOVLW 0x24
MOVWF TXSTA ; Configurar transmisor
BCF STATUS,5 ; Acceso al banco 0
MOVLW 0x90 ; Configurar receptor
MOVWF RCSTA
;-- Configurar puerto B para salida
BSF STATUS,5 ; Acceso al banco 1
CLRF TRISB ; Configurarlo para salida
;--- Comienzo del servidor
BCF STATUS,5 ; Banco 0
MOVLW 0xFF
MOVWF PORTB ; Valor inicial del puerto B
main
;-- Esperar a recibir un caracter
CALL leer_car
;-- Hacer eco
CALL enviar
;-- Sacar caracter por el puerto B
MOVWF PORTB
GOTO main
;**************************************************
;* Recibir un caracter por el SCI
;-------------------------------------------------
; SALIDAS:
; Registro W contiene el dato recibido
;**************************************************
leer_car
BTFSS PIR1,RCIF ; ¿RCIF=1?
GOTO leer_car ; no--> Esperar
;-- Leer el caracter
MOVFW RCREG ; W = dato recibido
RETURN
;*****************************************************
;* Transmitir un caracter por el SCI
;*---------------------------------------------------
;* ENTRADAS:
;* Registro W: caracter a enviar
;*****************************************************
;-- Esperar a que Flag de listo para transmitir esté a 1
enviar
wait
BTFSS PIR1,TXIF ; ¿TXIF=1?
goto wait ; No--> wait
;; -- Ya se puede hacer la transmision
MOVWF TXREG
RETURN
END
-
tambien quisiera saber como acoplar un programa de ADC con el programa anterior, pero por los momentos a ver si en que e posteado esta bueno... un millon de gracias por su ayuda y saludos :D
-
Te recomiendo, que en vez de estar esperando con un bucle, hasta que te llegue una interrupcion.
Habilites la Interrupcion por Recepcion.
De ser asi, si no me equivoco quedaria algo asi:
;-- Establecer el PIC a emplear
LIST p=16f876
INCLUDE "p16f876.inc"
ORG 0
GOTO INICIO
ORG 4
INTERRUPCION:
BTFSS PIR1,RXIF;Si no es Interrupcion por Rx
GOTO SALIR_INT
'Desabilita Interrupciones:
INTCON.7=0
movfw RCREG;Muevo dato Recibido a W
movwf TXREG;Muevo W a Registro de Tx
bcf PIR1,RXIF;Borro Flag de Interrupcion por Rx
SALIR_INT:
INTCON.7=0
retfie
INICIO:
;-- Configuracion del puerto serie
BSF STATUS,5 ; Acceso al banco 1
MOVLW 0x19 ; Velocidad: 9600 baudios
MOVWF SPBRG
MOVLW 0x24
MOVWF TXSTA ; Configurar transmision Continua
BCF STATUS,5 ; Acceso al banco 0
MOVLW 0x90 ; Configurar receptor
MOVWF RCSTA
;-- Configurar puerto B para salida
BSF STATUS,5 ; Acceso al banco 1
CLRF TRISB ; Configurarlo para salida
movlw b'0010000';Habilito Interrupcion por Rx
movwf PIE1
;--- Comienzo del servidor
BCF STATUS,5 ; Banco 0
MOVLW 0xFF
MOVWF PORTB ; Valor inicial del puerto B
;Colocar mis interrupciones
movlw b'11000000'
movwf INTCON
;Habilitar interrupcion:
bsf INTCON,7
main
clrwdt
GOTO main
end
-
oye!!! muchas gracias :-/ :-/ :-/ asi es mas fasil de entender... muchas gracias
-
Hola, puede que el mensaje de Yoel tenga un pequeño error?
ORG 0
GOTO INICIO
ORG 4
INTERRUPCION:
BTFSS PIR1,RXIF;Si no es Interrupcion por Rx
GOTO SALIR_INT
'Desabilita Interrupciones:
I
Por:
ORG 0
GOTO INICIO
ORG 4
INTERRUPCION:
BTFSS PIR1,RCIF;Si no es Interrupcion por Rx
GOTO SALIR_INT
'Desabilita Interrupciones:
Saludos,