Programació en ASM del PIC 16F690 amb PICkit 2

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

Registre de desplaçament

Un registre de desplaçament és un circuit integrat que ens permet controlar vuit sortides reals a partir de només tres potes del microcontrolador. Podem enviar els vuit bits un darrera l'altre fent servir dues potes del microcontrolador, una per enviar els bits (DS) i una com a rellotge o sincronisme (SH_CP). Primer enviem el valor que correspon al bit 7, després el del bit 6 i així successivament fins arribar al bit 0. Quan ja hem enviat tots els bits, podem copiar simultàniament els valors dels vuit bits sobre les sortides activant una altra pota (ST_CP).

A continuació es descriuen les diferents potes del registre de desplaçament 74HC595:

Registre

Número pota Nom Funció                         Número pota Nom Funció
1 Q1 Sortida 1 9 Q7' Sortida del registre per entrar al registre següent
2 Q2 Sortida 2 10 MR Reset Quan el posem a zero, posa a zero tots els bits del registre
3 Q3 Sortida 3 11 SH_CP Clock Quan s'activa, fa córrer el registre i copia DS sobre la posició 0
4 Q4 Sortida 4 12 ST_CP Latch Quan s'activa, copia el registre sobre les sortides
5 Q5 Sortida 5 13 OE Output enable Quan es posa a 1, desconnecta les sortides
6 Q6 Sortida 6 14 DS Data Entrada de dades
7 Q7 Sortida 7 15 Q0 Sortida 0
8 GND Alimentació 0 V 16 VCC Alimentació +5 V

En el següent diagrama es mostra com connectar el registre per controlar vuit LED.

Connexió del registre

A continuació hi ha una funció que envia el contingut de l'adreça Sortida a un registre de desplaçament.

	cblock 0x20
...
Port			; Bits a enviar al port B
Sortida			; Valors a enviar al registre de desplaçament
Compta			; Variable per comptar els bits
...
	endc
...
					;
					; Envia 8 bits a un registre de desplaçament
					; Els bits estan a la variable Sortida
					; Al final de la funció, el valor de Sortida queda corromput
					; Si es vol conservar, cal copiar-lo a una altra variable
					;
EnviaR8				; Envia 8 bits a un registre de desplaçament
	bcf	Port,5		; S'assegura que Clock està desactivat
	bcf	Port,6		; S'assegura que Latch està desactivat
				; En cas contrari, els bits enviats es copiarien immediatament a les sortides
	movf	Port,w		; Agafa el valor de Port
	movwf	PORTB		; I el posa al port B
	movlw	.8		; Número de bits a enviar
	movwf	Compta		; Variable per comptar els bits
BucleR8
	bcf	Port,4		; Desactiva Data. Si toca activar-ho, ja ho farem
	rlf	Sortida,f	; Fa sortir el bit de més a l'esquerra cap a C i roda els altres a l'esquerra
	btfsc	STATUS,C	; Mira si el bit de l'esquerra era un 1
	bsf	Port,4		; Si era 1, activa Data
	movf	Port,w		; Agafa el valor de Port. El valor que ha canviat és Data
	movwf	PORTB		; I el posa al port B
	bsf	Port,5		; Activa Clock, forçant a llegir el bit
	movf	Port,w		; Agafa el valor de Port. El valor que ha canviat és Clock
	movwf	PORTB		; I el posa al port B
	bcf	Port,5		; Desactiva Clock
	movf	Port,w		; Agafa el valor de Port. El valor que ha canviat és Clock
	movwf	PORTB		; I el posa al port B
	decfsz	Compta		; Decrementa Compta
	goto	BucleR8		; Si Compta no és zero, repeteix el bucle
	bsf	Port,6		; Torna a activar Latch. Els valors es copiaran a la sortida del registre
	movf	Port,w		; Agafa el valor de Port. El valor que ha canviat és Latch
	movwf	PORTB		; I el posa al port B
	return
	end

Els registres de desplaçament es poden posar en cadena. Així, si en posem dos podrem controlar setze sortides amb només tres potes del microcontrolador. La pota Q7' del primer registre ens dóna el valor que hem d'entrar a la pota DS del segon. Per tant, el primer valor que entrem acabarà a la sortida 15 i el darrer a la sortida 0.

En el següent esquema es mostra com connectar dos registres per controlar setze LED.

Connexió de dos registres

Seguint el mateix criteri, podem encadenar tants registres com sigui necessari.

 

 

Licencia de Creative Commons
This obra by Oriol Boix is licensed under a Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported License.