Programació en mpasm del PIC 16F690

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

Dau electrònic

Programa del grup 5

El programa del grup 5 fa sonar una melodia mentre es mostra una seqüència de LED. Quan es prem el polsador, fa una melodia més curta i mostra el nombre aleatori. Aquest nombre roman visible fins que es prem el polsador que torna a activar la seqüència de LED i la melodia. El potenciòmetre permet variar la velocitat de la seqüència de LED i la melodia que l'acompanya.

El programa d'aquest grup és el següent:

#include <p16F690.inc>
	__config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
	cblock 0x20
Port
Port0
Retard1
Retard2
Visualit 	; Una variable per al comptador que canvia els LED
ValPR2		; Aquí hi guardarem el valor de PR2
ValCCPR1L	; Aquí hi guardarem el valor de CCPR1L
ValDC1B		; Aquí hi guardarem el valor de DC1B
ValCCP1CON	; Aquí hi guardarem el valor de CCP1CON
	endc
	org 0
Inici
	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 		TRISB 			; Posa tots els bits del port C com a sortida
	clrf 		TRISC	 		; Limpia el TRISB
	movlw		b'10000000'		; Configuració de Timer0
						; Com a temporitzador basat en rellotge
						; 111 - Factor d'escala de 256
						; I resistències de pull-up desactivades (valor per defecte)
	movwf		OPTION_REG		; Ho guarda al registre de configuració del Timer0
	bcf 		STATUS,RP0		; Tria el banc 0
	bsf		STATUS,RP0		; Tria el banc 1
	movlw		b'00100000'		; Definim com volem les E/S del port C
	movwf		TRISC			; RC5 (sortida del PWM) com a entrada
	bcf		STATUS,RP0		; Tria el banc 0
	clrf		PORTC			; Desactiva les sortides del port C
	movlw		b'00001100'		; Configura el PWM, bits P1M (bits 7-6) a 00 mode senzill
						; DC1B = 00 (bits 5-4) els dos bits de menys pes són 0
						; CCP1M = 11xx en mode senzill els bit 0 i 1 no afecten
	movwf		ValCCP1CON		; Ho guarda per fer-ho servir més tard
	movwf		CCP1CON			; Ho posa com a configuració del PWM
	movlw		b'0000001'		; Configura el Timer 2
						; bits T2KCPS (bits 1-0) a 11 prescalat de 16
						; bit 2 (TMR2ON) a 0, Timer aturat
						; Postscaler TOUTPS (bits 6-3) no afecten al PWM
	movwf		T2CON			; Ho posa com a configuració del Timer 2
	call 		Limpiar
	call		Retard
	call 		Retard
	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			; Posa tots els bits del port C com a sortida
	movlw		b'00010000'
	movwf		ADCON1			; Posa el conversor a 1/8 de la freqüència
	bcf		STATUS,RP0
	bsf		STATUS,RP1		; Tria el banc 2
	movlw		b'00000001'
	movwf		ANSEL			; Posa AN0 com entrada analògica
	bcf		STATUS,RP0
	bcf		STATUS,RP1		; Tria el banc 0
	movlw		b'00000001'		; activa el conversor A/D connectat a AN0
	movwf		ADCON0			; amb el resultat justificat per l'esquerra
	movlw		b'00001000'		; Activa el bit 3
	movwf		Visualit		; Ho copia sobre la variable Visualit
Bucleinicio
	call 		Limpiar
	call 		Retard
	btfsc		PORTA,3			; Mira si està activada l'entrada A3
	goto		$-1			; repetim la línia fins que es deixi el polsador
	goto		Serpiente		; Repetim-ho...
Serpiente
	call 		Retard
	call 		Bit1
	call 		Lanegra
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit4
	call 		Micor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit7
	call 		Facor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit8
	call 		Solnegra
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit5
	call 		Facor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit2
	call 		Micor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit3
	call 		Renegra
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit6
	call 		Recor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit9
	call 		Facor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit1
	call 		Lanegra
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit4
	call 		Solcor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit7
	call 		Facor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit8
	call 		Minegra
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit5
	call 		Micor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit2
	call 		Facor
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit3
	call 		Solnegra
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit6
	call 		Lanegra
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	call 		Bit9
	call 		Fanegra
	call 		Potenciometre
	btfss 		PORTA,3 		; Mira si està activada l'entrada A3
	goto 		Yoigo
	goto 		Serpiente
Potenciometre
	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 0
	movf		ADRESH,w		; Copia els bits superiors a l'acumulador
	addlw		1			; Li suma 1 i tenim la durada variable del cicle
	movwf		Retard2			; Ho copia a la variable Retard2
	return
Retard
	decfsz 		Retard1,f 		; Decrementa la variable 1
			 			; si dona zero, no es fa la instrucció següent
	goto 		Retard 			; Salta, excepte si el resultat ha estat zero
	decfsz 		Retard2,f 		; Decrementa la variable 2
	goto 		Retard 			; Salta, excepte si el resultat ha estat zero
	return
Bit1
	movlw 		b'1000000'		; Copia Port a l'acumulador
	movwf 		PORTB 			; I ho guarda al PORTB
	return
Bit4
	movlw 		b'10010000' 		; Copia Port a l'acumulador
	movwf 		PORTC 			; I ho guarda al PORTB
	return
Bit7
	movlw 		b'01010000' 		; Copia Port a l'acumulador
	movwf 		PORTB 			; I ho guarda al PORTB
	return
Bit8
	movlw 		b'10000000' 		; Copia Port a l'acumulador
	movwf 		PORTC 			; I ho guarda al PORTB
	return
Bit5
	movlw 		b'00100000' 		; Copia Port a l'acumulador
	movwf 		PORTB 			; I ho guarda al PORTB
	return
Bit2
	movlw 		b'01000000' 		; Copia Port a l'acumulador
	movwf 		PORTC 			; I ho guarda al PORTB
	return
Bit3
	movlw 		b'10010000' 		; Copia Port a l'acumulador
	movwf 		PORTB 			; I ho guarda al PORTB
	return
Bit6
	movlw 		b'01010000' 		; Copia Port a l'acumulador
	movwf 		PORTC 			; I ho guarda al PORTB
	return
Bit9
	movlw 		b'10000000' 		; Copia Port a l'acumulador
	movwf 		PORTB 			; I ho guarda al PORTB
	return
Limpiar
	movlw 		b'00000000'
	movwf 		PORTB
	movlw 		b'00000000'
	movwf 		PORTC
	movlw 		b'00000000'
	movwf 		PORTA
	return
Lanegra
	movlw		.141			; Valor que correspon aproximadament a la3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.71			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.0			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	return
Minegra
	movlw		.189			; Valor que correspon aproximadament a mi3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.95			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.0			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	return
Micor
	movlw		.189			; Valor que correspon aproximadament a mi3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.95			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.0			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota1		; Toca la nota configurada
	return
Fanegra
	movlw		.178			; Valor que correspon aproximadament a fa3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.89			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	return
Facor
	movlw		.178			; Valor que correspon aproximadament a fa3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.89			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota1		; Toca la nota configurada
	return
Solnegra
	movlw		.158			; Valor que correspon aproximadament a sol3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.79			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	return
Solcor
	movlw		.158			; Valor que correspon aproximadament a sol3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.79			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota1		; Toca la nota configurada
	return
Renegra
	movlw		.212			; Valor que correspon aproximadament a re3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.106			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	return
Recor
	movlw		.212			; Valor que correspon aproximadament a re3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.106			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota1		; Toca la nota configurada
	return
TocaNota1
	movf		ValPR2,w		; Valor de PR2 per a la nota desitjada
	bsf		STATUS,RP0		; Tria el banc 1
	bsf		TRISC,5			; Posem RC5 (sortida del PWM) com a entrada
	movwf		PR2			; Ho posem com a comparació al Timer 2
	bcf		STATUS,RP0		; Tria el banc 0
	movf		ValCCP1CON,w		; Agafa la configuració de CCP1CON
	andlw		b'11001111'		; Posa els bits que corresponen a DC1B a zero per precaució
	movwf		ValCCP1CON		; I ho torna a guardar
	swapf		ValDC1B,w		; Agafa el valor que ha d'anar a DC1B
						; I el guarda, permutat, a W
						; Els dos bits han de quedar a les posicions 4-5
	andlw		b'00110000'		; Posa els altres sis bits a zero per precaució
	iorwf		ValCCP1CON,w		; I ho afegeix a CCP1CON
	movwf		CCP1CON			; Ho posa com a configuració del PWM
	movf		ValCCPR1L,w		; Valor de CCPR1L
	movwf		CCPR1L			; Registre que ens dona l'amplada de tON
	bcf		PIR1,TMR2IF		; Desactiva el bit d'interrupció del Timer 2
	bsf		T2CON,TMR2ON		; Activa el Timer 2
						; No convé engegar el PWM fins que el Timer 2 no ha fet un cicle
	btfss		PIR1,TMR2IF		; Espera l'activació del bit d'interrupció del Timer 2
	goto		$-1
	bsf		STATUS,RP0		; Tria el banc 1
	bcf		TRISC,5			; Posem RC5 (sortida del PWM) com a sortida
	bcf		STATUS,RP0		; Tria el banc 0
	call		Retard			; Espera 0,2 s
	bsf		STATUS,RP0		; Tria el banc 1
	bsf		TRISC,5			; Posem RC5 (sortida del PWM) com a entrada
						; Fem silenci
	bcf		STATUS,RP0		; Tria el banc 0
	call 		Limpiar
	return
TocaNota2
	movf		ValPR2,w		; Valor de PR2 per a la nota desitjada
	bsf		STATUS,RP0		; Tria el banc 1
	bsf		TRISC,5			; Posem RC5 (sortida del PWM) com a entrada
	movwf		PR2			; Ho posem com a comparació al Timer 2
	bcf		STATUS,RP0		; Tria el banc 0
	movf		ValCCP1CON,w		; Agafa la configuració de CCP1CON
	andlw		b'11001111'		; Posa els bits que corresponen a DC1B a zero per precaució
	movwf		ValCCP1CON		; I ho torna a guardar
	swapf		ValDC1B,w		; Agafa el valor que ha d'anar a DC1B
						; I el guarda, permutat, a W
						; Els dos bits han de quedar a les posicions 4-5
	andlw		b'00110000'		; Posa els altres sis bits a zero per precaució
	iorwf		ValCCP1CON,w		; I ho afegeix a CCP1CON
	movwf		CCP1CON			; Ho posa com a configuració del PWM
	movf		ValCCPR1L,w		; Valor de CCPR1L
	movwf		CCPR1L			; Registre que ens dona l'amplada de tON
	bcf		PIR1,TMR2IF		; Desactiva el bit d'interrupció del Timer 2
	bsf		T2CON,TMR2ON		; Activa el Timer 2
						; No convé engegar el PWM fins que el Timer 2 no ha fet un cicle
	btfss		PIR1,TMR2IF		; Espera l'activació del bit d'interrupció del Timer 2
	goto		$-1
	bsf		STATUS,RP0		; Tria el banc 1
	bcf		TRISC,5			; Posem RC5 (sortida del PWM) com a sortida
	bcf		STATUS,RP0		; Tria el banc 0
	call		Retard			; Espera 0,2 s
	call		Retard			; Espera 0,2 s
	bsf		STATUS,RP0		; Tria el banc 1
	bsf		TRISC,5			; Posem RC5 (sortida del PWM) com a entrada
						; Fem silenci
	bcf		STATUS,RP0		; Tria el banc 0
	call 		Limpiar
	return
TocaNota3
	movf		ValPR2,w		; Valor de PR2 per a la nota desitjada
	bsf		STATUS,RP0		; Tria el banc 1
	bsf		TRISC,5			; Posem RC5 (sortida del PWM) com a entrada
	movwf		PR2			; Ho posem com a comparació al Timer 2
	bcf		STATUS,RP0		; Tria el banc 0
	movf		ValCCP1CON,w		; Agafa la configuració de CCP1CON
	andlw		b'11001111'		; Posa els bits que corresponen a DC1B a zero per precaució
	movwf		ValCCP1CON		; I ho torna a guardar
	swapf		ValDC1B,w		; Agafa el valor que ha d'anar a DC1B
						; I el guarda, permutat, a W
						; Els dos bits han de quedar a les posicions 4-5
	andlw		b'00110000'		; Posa els altres sis bits a zero per precaució
	iorwf		ValCCP1CON,w		; I ho afegeix a CCP1CON
	movwf		CCP1CON			; Ho posa com a configuració del PWM
	movf		ValCCPR1L,w		; Valor de CCPR1L
	movwf		CCPR1L			; Registre que ens dona l'amplada de tON
	bcf		PIR1,TMR2IF		; Desactiva el bit d'interrupció del Timer 2
	bsf		T2CON,TMR2ON		; Activa el Timer 2
						; No convé engegar el PWM fins que el Timer 2 no ha fet un cicle
	btfss		PIR1,TMR2IF		; Espera l'activació del bit d'interrupció del Timer 2
	goto		$-1
	bsf		STATUS,RP0		; Tria el banc 1
	bcf		TRISC,5			; Posem RC5 (sortida del PWM) com a sortida
	bcf		STATUS,RP0		; Tria el banc 0
	call		Retard			; Espera 0,2 s
	call		Retard			; Espera 0,2 s
	call		Retard			; Espera 0,2 s
	call		Retard			; Espera 0,2 s
	bsf		STATUS,RP0		; Tria el banc 1
	bsf		TRISC,5			; Posem RC5 (sortida del PWM) com a entrada
						; Fem silenci
	bcf		STATUS,RP0		; Tria el banc 0
	call 		Limpiar
	return
Yoigo
	call 		Retard
	movlw		.238			; Valor que correspon aproximadament a do3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.119			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	call		Retard			; Espera 0,2 s
	movlw		.189			; Valor que correspon aproximadament a mi3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.95			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.0			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	movlw		.212			; Valor que correspon aproximadament a re3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.106			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota3		; Toca la nota configurada
	call		Retard			; Espera 0,2 s
	call		Retard			; Espera 0,2 s
	call		Retard			; Espera 0,2 s
	call		Retard			; Espera 0,2 s
	call		Retard			; Espera 0,2 s
	movlw		.238			; Valor que correspon aproximadament a do3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.119			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	call		Retard			; Espera 0,2 s
	movlw		.189			; Valor que correspon aproximadament a mi3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.95			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.0			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota2		; Toca la nota configurada
	movlw		.238			; Valor que correspon aproximadament a do3
	movwf		ValPR2			; Ho posem com a valor de PR2
	movlw		.119			; Valor que correspon a un cicle del 50 %
	movwf		ValCCPR1L		; Valor de CCPR1L
	movlw		.2			; Valor dels bits de menys pes del CCP
	movwf		ValDC1B			; Valor de DC1B
	call		TocaNota3		; Toca la nota configurada
	goto 		Aleatorio
Aleatorio
	call 		Retard
	movf		TMR0,w			; Copia el Timer0 a l'acumulador
	andlw		b'00000111'		; Posa a zero els quatre bits inferiors
	btfsc		STATUS,Z
	goto		Aleatorio
	movwf		Visualit
	xorlw		b'00000111'
	btfsc		STATUS,Z
	goto		Aleatorio
Comparar
	movf		Visualit,w
	xorlw		b'00000001'
	btfsc		STATUS,Z
	goto 		numero1
	movf		Visualit,w
	xorlw		b'00000010'
	btfsc		STATUS,Z
	goto 		numero2
	movf		Visualit,w
	xorlw		b'00000011'
	btfsc		STATUS,Z
	goto 		numero3
	movf		Visualit,w
	xorlw		b'00000100'
	btfsc		STATUS,Z
	goto 		numero4
	movf		Visualit,w
	xorlw		b'00000101'
	btfsc		STATUS,Z
	goto 		numero5
	movf		Visualit,w
	xorlw		b'00000110'
	btfsc		STATUS,Z
	goto 		numero6
numero1
	call 		Bit5
	btfsc		PORTA,3			; Mira si està activada l'entrada A3
	goto		$-1			; repetim la línia fins que es deixi el polsador
	goto		Bucleinicio		; Repetim-ho...
numero2
	movlw		b'11000000'		; Copia Port a l'acumulador
	movwf		PORTB			; I ho guarda al PORTB
	btfsc		PORTA,3			; Mira si està activada l'entrada A3
	goto		$-1			; repetim la línia fins que es deixi el polsador
	goto		Bucleinicio		; Repetim-ho...
numero3
	movlw		b'11100000'		; Copia Port a l'acumulador
	movwf		PORTB			; I ho guarda al PORTB
	btfsc		PORTA,3			; Mira si està activada l'entrada A3
	goto		$-1			; repetim la línia fins que es deixi el polsador
	goto		Bucleinicio		; Repetim-ho...
numero4
	movlw		b'11000000'		; Copia Port a l'acumulador
	movwf		PORTB			; I ho guarda al PORTB
	movlw		b'00010000'		; Copia Port a l'acumulador
	movwf		PORTB			; I ho guarda al PORTB
	btfsc		PORTA,3			; Mira si està activada l'entrada A3
	goto		numero4			; repetim la línia fins que es deixi el polsador
	goto		Bucleinicio		; Repetim-ho...
numero5
	movlw		b'11100000'		; Copia Port a l'acumulador
	movwf		PORTB			; I ho guarda al PORTB
	movlw		b'00010000'		; Copia Port a l'acumulador
	movwf		PORTB			; I ho guarda al PORTB
	btfsc		PORTA,3			; Mira si està activada l'entrada A3
	goto		numero5			; repetim la línia fins que es deixi el polsador
	goto		Bucleinicio		; Repetim-ho...
numero6
	movlw		b'11000000'		; Copia Port1 a l'acumulador
	movwf		PORTB			; I ho guarda al PORTB
	movlw		b'00010000'		; Copia Port2 a l'acumulador
	movwf		PORTC			; I ho guarda al PORTB
	movlw		b'00010000'		; Copia Port a l'acumulador
	movwf		PORTB			; I ho guarda al PORTB
	movlw		b'00000000'		; Copia Port2 a l'acumulador
	movwf		PORTC			; I ho guarda al PORTB
	btfsc		PORTA,3			; Mira si està activada l'entrada A3
	goto		numero6			; repetim la línia fins que es deixi el polsador
	goto		Bucleinicio		; Repetim-ho...
	end

 

 

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