Programació en mpasm del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Exemple TA - Comunicació sèrie asíncrona per cable

En aquest exemple volem comunicar dos microcontroladors mitjançant una comunicació sèrie asíncrona.

Ens basarem en l'exemple EA. A l'emissor hi tindrem el programa d'aquest exemple però, addicionalment, enviarem per cable el mateix valor que enviem als LED. En el receptor, rebrem el valor i el mostrarem als LED. Així doncs, els LED de les dues plaques tindran la mateixa combinació que podrem variar amb el potenciòmetre de la targeta emissora.

Per estalviar energia, esperarem 0,6 s entre una lectura i la següent. Atès, doncs, que només hem d'enviar un caràcter cada cop i que els microcontroladors estaran desocupats quan s'enviï o es rebi no farem servir interrupcions.

Emissor

#include <p16F690.inc>
	__config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
	cblock 0x20
	Caracter		; Caràcter o codi a enviar
	Retard1			; Variables de retard	
	Retard2
	Retard3
	endc
	org 0
Inici
	bsf		STATUS,RP1	; Tria el banc 2
	movlw		b'00000101'
	movwf		ANSEL		; Configura AN0 i AN2 com entrada analògica
	clrf		ANSELH		; Desactiva les altres entrades analògiques
	bcf		STATUS,RP1
	bsf		STATUS,RP0	; Tria el banc 1
	movlw		0xFF		; Posa l'acumulador a FFh (tot uns)
	movwf		TRISA		; Posa tots els bits del port A com a entrada
	clrf		TRISC		; Tot el port C és de sortida
	clrf		TRISB		; Tot el port B és de sortida
	movlw		b'00010000'	; Posa el conversor a 1/8 de la freqüència
	movwf		ADCON1		; Copia W a la configuració del conversor A/D
	bsf		TXSTA,BRGH	; Configuració de velocitat
	bcf		BAUDCTL,BRG16	; Paràmetre de velocitat de 8 bits
	movlw		.25		; Velocitat de 9600 baud
	movwf		SPBRG		; Paràmetre de velocitat
	bcf		TXSTA,SYNC 	; Comunicació asíncrona
	bcf		TXSTA,TX9 	; Comunicació de 8 bits
	bcf		STATUS,RP0	; Tria el banc 0
	bsf		RCSTA,SPEN	; Activa comunicació sèrie
	bsf		STATUS,RP0	; Tria el banc 1
	bsf		TXSTA,TXEN 	; Activa comunicació
	bcf		STATUS,RP0	; Tria el banc 0
	movlw		b'00000001'	; activa el conversor A/D connectat a AN0
	movwf		ADCON0		; amb el resultat justificat per l'esquerra
Bucle
	nop				; espera un microsegon
	nop				; espera un microsegon
	nop				; espera un microsegon
	nop				; espera un microsegon
	nop				; espera un microsegon, en total 5
	bsf		ADCON0,GO	; Inicia la conversió
	btfsc		ADCON0,GO	; Quan el bit sigui 0 la conversió haurà acabat
	goto		$-1		; repetim la línia fins que deixi de ser 1
	swapf		ADRESH,w	; Permuta els nibbles dels bits superiors
	movwf		Caracter		; Copia el resultat a Caracter
	movwf		PORTC		; Copia el resultat sobre els LED
	call		EnviaL		; Ho envia
	movlw		.3
	call		Rets
	goto		Bucle
					;
					; Enviem caràcters a visualitzar
					;
EnviaL					
	movf		Caracter,w	; Agafa el caràcter
	movwf		TXREG		; L'envia
	nop			
	nop				; Espera 2 us
	btfss		PIR1,TXIF	; El registre TXREG ha quedat lliure?
	goto		$-1		; No, doncs esperem
	return				; Tornem al lloc des d'on hem vingut
Rets					; Funció de retard de 0,2 W s
	movwf		Retard3
Bucles
	decfsz		Retard1,f		
	goto		Bucles		
	decfsz		Retard2,f		
	goto		Bucles		
	decfsz		Retard3,f	
	goto		Bucles
	return
	end

Receptor

#include <p16F690.inc>
	__config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
	org 0
Inici
	bsf		STATUS,RP1	; Tria el banc 2
	movlw		b'00000101'
	movwf		ANSEL		; Configura AN0 i AN2 com entrada analògica
	clrf		ANSELH		; Desactiva les altres entrades analògiques
	bcf		STATUS,RP1
	bsf		STATUS,RP0	; Tria el banc 1
	movlw		0xFF		; Posa l'acumulador a FFh (tot uns)
	movwf		TRISA		; Posa tots els bits del port A com a entrada
	clrf		TRISC		; Tot el port C és de sortida
	clrf		TRISB		; Tot el port B és de sortida
	bsf		TXSTA,BRGH	; Configuració de velocitat
	bcf		BAUDCTL,BRG16	; Paràmetre de velocitat de 8 bits
	movlw		.25		; Velocitat de 9600 baud
	movwf		SPBRG		; Paràmetre de velocitat
	bcf		TXSTA,SYNC 	; Comunicació asíncrona
	bcf		STATUS,RP0	; Tria el banc 0
	bsf		RCSTA,SPEN	; Activa comunicació sèrie
	bcf		RCSTA,RX9 	; Comunicació de 8 bits
	bsf		RCSTA,CREN 	; Activa comunicació
Bucle
	btfss		PIR1,RCIF	; Ha arribat un caràcter?
	goto		$-1			; No, doncs esperem
	btfsc		RCSTA,FERR	; Hi ha hagut error de transmissió?
	goto		Bucle		; Sí, doncs esperem el següent caràcter
	movf		RCREG,w		; Llegeix el caràcter rebut	
	movwf		PORTC		; Copia el resultat sobre els LED
	goto		Bucle
	end

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.