Programació en mpasm del PIC 16F690

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

Dau electrònic

Programa del grup 4

Quan es prem el polsador, el programa del grup 4 fa una seqüència de LED mentre sona una melodia. Quan acaba la seqüència de LED, toca uns tons addicionals amb els LED apagats i, finalment, mostra el número aleatori. El sistema incorpora dues melodies diferents i amb el potenciòmetre es pot triar quina de les dues ha de sonar.

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
Visualit 	; Una variable on guardem el que mostraran els LED
Polsador
Numero
PortbB
PortcC
m		;retard per al bucle amb intermitencia
n
g
l
Retard1		; Variables de retard
Retard2
Intermitent1	; variables d'intermitencia
Intermitent2
Retard4
Retard3
FreqNota	; Aquí hi guardarem el valor de PR2
LongCicle	; Aquí hi guardarem el valor de CCPR1L
Bitspes		; Aquí hi guardarem el valor de DC1B
ValCCP1CON	; Aquí hi guardarem el valor de CCP1CON
Durada
	endc
	org 0
Inici
	bcf 		PORTC,0
	bcf 		PORTC,1
	bcf 		PORTC,2
	bcf 		PORTC,3
	bsf 		STATUS,RP0 		; Tria el banc 1
	movlw 		b'00100000' 		; Desactivem brunzidor
	movwf 		TRISC 			; Posa tots els bits del port C com a sortida
	bcf 		STATUS,RP0 		; Tria el banc 0
	btfsc 		PORTA,3 		; Mira si està desactivada l'entrada A3
	goto 		$-1
Bucle
Inicii
	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
Num
	call 		tornemasis
Num2
	decf 		Numero,f
	movf 		Numero,w
	xorlw 		b'00000000'
	btfsc 		STATUS,Z
	call 		tornemasis
	btfss 		PORTA,3 		; Mira si està desactivada l'entrada A3
	goto 		Num2
Comparacions
	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
	movf		ADRESH,w		; Copia els bits superiors a l'acumulador
	subwf		.5,w			; W = variable - W
	btfsc		STATUS,C		; C = 1 si variable >= W
	goto		Animacio1		; variable > W
	subwf		.15,w			; W = variable - W
	btfss		STATUS,C		; C = 1 si variable >= W
	goto		Animacio2		; variable > W
	goto		Animacio3
Inicianimacio
Animacio1
	movlw 		.50
	movwf 		l
	bsf 		STATUS,RP0 		; Tria el banc 1
	clrf 		TRISB
	clrf 		TRISC
	bcf 		STATUS,RP0 		; Tria el banc 0
	movlw 		b'00000000'
	movwf 		PORTB
	movwf 		PORTC
	call 		RetM
	movlw 		b'01000000'
	movwf 		PORTB 			; primera animació activada
	call 		Sol
	movlw		.2
	movwf		Durada
	call		Iniciso			; Toca la nota configurada
	call 		Temps
	bcf		T2CON,TMR2ON
	call 		Blanca
	movlw 		b'01000000'
	movwf 		PORTC 			; s'activa la segona animacio
	call 		Iniciso
	call 		Temps
	bcf		T2CON,TMR2ON
	call 		Negra
	call 		Fa
	movlw 		b'01000000'
	movwf 		Intermitent1 		; Intermitent1='01000000'
	movlw 		b'10010000'
	movwf 		Intermitent2 		; Intermitent2='10010000'
	movlw 		.6
	movwf 		g
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Corxera
	call 		Sol
	movlw 		b'00000000'
	movwf 		PORTC
	movlw 		b'01000000'
	movwf 		Intermitent1
	movlw 		b'01010000'
	movwf 		Intermitent2 		; Intermitent2='10010000'
	movlw 		.6
	movwf 		g
	call		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call 		Blanca
	call 		Blanca
	call 		Sol
	movlw 		.9			; negra
	movwf 		g
	movlw 		b'10010000'
	movwf 		Intermitent1
	movlw 		b'10000000'
	movwf 		Intermitent2
	call	 	TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Negra
	call 		Fa
	movlw 		.6			; per a que passin 0.4
	movwf 		g
	movlw 		b'01010000'
	movwf 		Intermitent1
	movlw 		b'10000000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call 		Corxera
	call 		Sol
	movlw 		.9			; per a que passin 0.4
	movwf 		g
	movlw 		b'10000000'
	movwf 		Intermitent1
	movlw 		b'01010000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Blanca
	call 		Blanca
	call 		Sol
	movlw 		.9			; per a que passin 0.4
	movwf 		g
	movlw 		b'10000000'
	movwf 		Intermitent1
	movlw 		b'10010000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call 		Negra
	call 		Fa
	movlw 		.9			; per a que passin 0.4
	movwf 		g
	movlw 		b'01010000'
	movwf 		Intermitent1
	movlw 		b'01000000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Negra
	movlw 		b'00000000'
	movwf 		PORTC
	movwf 		PORTB
	call 		Mibemoll
	movlw		.3
	movwf		Durada
	call 		TocaNota
	call 		Temps
	bcf		T2CON,TMR2ON
	goto 		Mostrem
Animacio2
	movlw 		.50
	movwf 		l
	bsf 		STATUS,RP0 		; Tria el banc 1
	clrf 		TRISB
	clrf 		TRISC
	bcf 		STATUS,RP0 		; Tria el banc 0
	movlw 		b'00000000'
	movwf 		PORTB
	movwf 		PORTC
	call 		RetM
	call 		Do
	movlw		.2
	movwf		Durada
	call		Iniciso
	call 		Temps
	bcf		T2CON,TMR2ON
	movlw 		b'01000000'
	movwf 		PORTB 			; primera animació activada
	call 		Re
	movlw		.2
	movwf		Durada
	call		Iniciso			; Toca la nota configurada
	call 		Temps
	bcf		T2CON,TMR2ON
	movlw 		b'01000000'
	movwf 		PORTC 			; s'activa la segona animacio
	call 		Mi
	movlw		.3
	movwf		Durada
	call 		Iniciso
	call 		Temps
	bcf		T2CON,TMR2ON
	call 		Re
	movlw 		b'01000000'
	movwf 		Intermitent1 		; Intermitent1='01000000'
	movlw 		b'10010000'
	movwf 		Intermitent2 		; Intermitent2='10010000'
	movlw 		.3
	movwf 		g
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Mi
	movlw		.6
	movwf		Durada
	movlw 		b'00000000'
	movwf 		PORTC
	movlw 		b'01000000'
	movwf 		Intermitent1
	movlw 		b'01010000'
	movwf 		Intermitent2 		; Intermitent2='10010000'
	movlw 		.3
	movwf 		g
	call 		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call 		Fa
	movlw 		.6			; negra
	movwf 		g
	movlw 		b'10010000'
	movwf 		Intermitent1
	movlw 		b'10000000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Mi
	movlw		.6
	movwf		Durada
	movlw 		.3			; per a que passin 0.4
	movwf 		g
	movlw 		b'01010000'
	movwf 		Intermitent1
	movlw 		b'10000000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call 		Fa
	movlw		.6
	movwf		Durada
	movlw 		.3			; per a que passin 0.4
	movwf 		g
	movlw 		b'10000000'
	movwf 		Intermitent1
	movlw 		b'01010000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Sol
	movlw		.6
	movwf		Durada
	movlw 		.6			; per a que passin 0.4
	movwf 		g
	movlw 		b'10000000'
	movwf 		Intermitent1
	movlw 		b'10010000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call		Sol
	movlw 		.3			; per a que passin 0.4
	movwf 		g
	movlw 		b'01010000'
	movwf 		Intermitent1
	movlw 		b'01000000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	movlw 		b'10010000'
	movwf 		PORTC
	movlw		.2
	movwf		Durada
	call 		Sol
	call 		TocaNota
	call 		Temps
	bcf		T2CON,TMR2ON
	movlw 		b'01000000'
	movwf 		PORTB
	call 		La
	call 		TocaNota
	call 		Temps
	bcf		T2CON,TMR2ON
	movlw 		b'00000000'
	movwf 		PORTC
	call 		TocaNota
	call 		Temps
	bcf		T2CON,TMR2ON
	movlw 		b'00000000'
	movwf 		PORTB
	movlw		.5
	movwf		Durada
	call 		Re
	call 		TocaNota
	call 		Temps
	bcf		T2CON,TMR2ON
	goto 		Mostrem
Animacio3
	movlw 		.50
	movwf 		l
	bsf 		STATUS,RP0 		; Tria el banc 1
	clrf 		TRISB
	clrf 		TRISC
	bcf 		STATUS,RP0 		; Tria el banc 0
	movlw 		b'00000000'
	movwf 		PORTB
	movwf 		PORTC
	call 		RetM
	movlw 		b'01000000'
	movwf 		PORTB 			; primera animació activada
	call 		La
	movlw		.2
	movwf		Durada
	call		Iniciso			; Toca la nota configurada
	call 		Temps
	bcf		T2CON,TMR2ON
	call 		Negra
	movlw 		b'01000000'
	movwf 		PORTC 			; s'activa la segona animacio
	call 		Iniciso
	call 		Temps
	bcf		T2CON,TMR2ON
	call 		Negra
	movlw 		b'01000000'
	movwf 		Intermitent1 		; Intermitent1='01000000'
	movlw 		b'10010000'
	movwf 		Intermitent2 		; Intermitent2='10010000'
	movlw 		.12
	movwf 		g
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Negra
	movlw 		b'00000000'
	movwf 		PORTC
	movlw 		b'01000000'
	movwf 		Intermitent1
	movlw 		b'01010000'
	movwf 		Intermitent2 		; Intermitent2='10010000'
	movlw 		.9
	movwf 		g
	call 		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call 		Corxera
	call 		Si
	movlw 		.3			;negra
	movwf 		g
	movlw 		b'10010000'
	movwf 		Intermitent1
	movlw 		b'10000000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Negra
	call 		Mi
	movlw 		.9			; per a que passin 0.4
	movwf 		g
	movlw 		b'01010000'
	movwf 		Intermitent1
	movlw 		b'10000000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call 		Corxera
	movlw 		.3			; per a que passin 0.4
	movwf 		g
	movlw 		b'10000000'
	movwf 		Intermitent1
	movlw 		b'01010000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Negra
	movlw 		.9			; per a que passin 0.4
	movwf 		g
	movlw 		b'10000000'
	movwf 		Intermitent1
	movlw 		b'10010000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentC
	bcf		T2CON,TMR2ON
	call 		Corxera
	movlw 		.3			; per a que passin 0.4
	movwf 		g
	movlw 		b'01010000'
	movwf 		Intermitent1
	movlw 		b'01000000'
	movwf 		Intermitent2
	call 		TocaNota
	call 		AnimaciointermitentB
	bcf		T2CON,TMR2ON
	call 		Negra
	movlw 		b'00000000'
	movwf 		PORTC
	movwf 		PORTB
	movlw		.3
	movwf		Durada
	call 		TocaNota
	call 		Temps
	bcf		T2CON,TMR2ON
Mostrem
	call 		RetM
	movlw		.1
	movwf		Durada
	call 		Do
	call 		Iniciso
	call 		Temps
	call 		Mi
	call 		TocaNota
	call 		Temps
	call 		Sol
	call 		TocaNota
	call 		Temps
	call 		Doo
	call 		TocaNota
	call 		Temps
	call 		Do
	call 		TocaNota
	call 		Temps
	bcf		T2CON,TMR2ON
Bucle2
	bsf 		STATUS,RP0 		; Tria el banc 1
	clrf 		TRISB
	clrf 		TRISC
	bcf 		STATUS,RP0 		; Tria el banc 0
	movlw 		b'00000000'
	movwf 		PORTB
	movwf 		PORTC
						; NUM 1
	movf 		Numero,w
	xorlw 		.1
	btfsc 		STATUS,Z
	goto 		Valor1
						; NUM2
	movf 		Numero,w
	xorlw 		.2
	btfsc 		STATUS,Z
	goto 		Valor2
						; NUM3
	movf 		Numero,w
	xorlw 		.3
	btfsc 		STATUS,Z
	goto 		Valor3
						; NUM4
	movf 		Numero,w
	xorlw 		.4
	btfsc 		STATUS,Z
	goto 		Valor4
						; NUM5
	movf 		Numero,w
	xorlw 		.5
	btfsc 		STATUS,Z
	goto 		Valor5
						; NUM6
	movf 		Numero,w
	xorlw 		.6
	btfsc 		STATUS,Z
	goto 		Valor6
Valor1
	bcf 		PORTC,5
	movlw 		b'00100000'
	movwf 		PORTB
	btfsc 		PORTA,3 		; Mira si està desactivada l'entrada A3
	goto 		$-1
	goto 		Num2
Valor2
	bcf 		PORTC,5
	movlw 		b'11000000'
	movwf 		PORTB
	btfsc 		PORTA,3 		; Mira si està desactivada l'entrada A3
	goto 		$-1
	goto 		Num2
Valor3
	bcf 		PORTC,5
	movlw 		b'11100000'
	movwf 		PORTB
	btfsc 		PORTA,3 		; Mira si està desactivada l'entrada A3
	goto 		$-1
	goto 		Num2
Valor4
	bcf 		PORTC,5
	bsf 		STATUS,RP0 		; Tria el banc 1
	clrf 		TRISB
	bcf 		STATUS,RP0 		; Tria el banc 0
Bucle4
	movlw 		b'11000000'
	call 		RetB
	movlw 		b'00010000'
	movwf 		PORTB
	call 		RetB
	movlw 		b'00000000'
	movwf 		PORTB
	movwf 		PORTC
	btfsc 		PORTA,3 		; Mira si està desactivada l'entrada A3
	goto		Bucle4
	goto 		Num2
Valor5
	bcf 		PORTC,5
	bsf 		STATUS,RP0		; Tria el banc 1
	clrf 		TRISB
	bcf 		STATUS,RP0 		; Tria el banc 0
Bucle5
	movlw 		b'11100000'
	movwf 		PORTB
	call 		RetB
	movlw 		b'00010000'
	movwf 		PORTB
	call 		RetB
	movlw 		b'00000000'
	movwf 		PORTB
	movwf 		PORTC
	btfsc 		PORTA,3 		; Mira si està desactivada l'entrada A3
	goto 		Bucle5
	goto 		Num2
Valor6
	bcf 		PORTC,5
	bsf 		STATUS,RP0 		; Tria el banc 1
	clrf 		TRISB
	clrf 		TRISC
	bcf 		STATUS,RP0 		; Tria el banc 0
	movlw 		b'00000000'
	movwf 		PORTC
Bucle6
	movlw 		b'01000000'
	movwf 		PORTB
	nop
	movlw 		b'10010000'
	movwf 		PORTB
	movwf 		PORTC
	nop
	movlw 		b'01010000'
	movwf 		PORTC
	movwf 		PORTB
	nop
	movlw 		b'10000000'
	movwf 		PORTB
	nop
	movlw 		b'00000000'
	movwf 		PORTB
	movwf 		PORTC
	btfsc 		PORTA,3 		; Mira si està desactivada l'entrada A3
	goto 		Bucle6
	goto 		Num2
AnimaciointermitentB				; Animació intermitent en el PORTB
	movf 		Intermitent1,w
	movwf 		PORTB
	call 		Retus
	movf 		Intermitent2,w
	movwf 		PORTB
	call 		Retus
	decfsz 		l,f
	goto 		AnimaciointermitentB
	movlw 		.50
	movwf 		l
	decfsz 		g,f
	goto 		AnimaciointermitentB
	return
AnimaciointermitentC				; Animació intermitent en el PORTC
	movf 		Intermitent1,w
	movwf 		PORTC
	call 		Retus
	movf 		Intermitent2,w
	movwf 		PORTC
	call 		Retus
	decfsz 		l,f
	goto 		AnimaciointermitentC
	movlw 		.50
	movwf 		l
	decfsz 		g,f
	goto 		AnimaciointermitentC
	return
tornemasis 					;funció que retorna la variable Numero a 6 cada vegada que arriba a 0
	movlw 		.6
	movwf 		Numero
	return
Iniciso
	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
	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'00000011'		; 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
TocaNota
	movf		FreqNota,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		Bitspes,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		LongCicle,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
	
	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
	bsf		STATUS,RP0		; Tria el banc 1
	bcf		STATUS,RP0		; Tria el banc 0
	return
RetM						; Funció de retard de 0,2 s
	decfsz		Retard1,f
	goto		RetM
	decfsz		Retard2,f
	goto		RetM
	return
RetB						; Retard de 5ms
	movlw		.7
	movwf		n
B1
	decfsz 		m,f
	goto 		B1
	decfsz 		n,f
	goto 		B1
	return
Retus						; Funció de retard de 3 us
	movwf		Retard1
Bucleus
	decfsz		Retard1,f
	goto		Bucleus
	return
RetA						; Funció de retard de 10 ms
	movwf		Retard2
Buclems
	decfsz		Retard1,f
	goto		Buclems
	decfsz		Retard2,f
	goto		Buclems
	return
Temps
	movlw		high TempsVal		; Carrega la part alta de l'adreça
	movwf		PCLATH			; Ho posa a la part alta de PC
	movlw		low TempsVal		; Carrega la part baixa de l'adreça
	addwf		Durada,w
	movwf		PCL			; Modifica el valor de PCL
TempsVal
	goto 		Semicorxera
	goto 		Corxera
	goto 		Negra
	goto 		Blanca
	goto 		Corxeraimitja
	goto 		BlancaNegra
Do
	movlw		.238
	movwf		FreqNota
	movlw		.119
	movwf		LongCicle
	movlw		.2
	movwf		Bitspes
	return
Re
	movlw		.212
	movwf		FreqNota
	movlw		.106
	movwf		LongCicle
	movlw		.2
	movwf		Bitspes
	return
Mi
	movlw		.189
	movwf		FreqNota
	movlw		.95
	movwf		LongCicle
	movlw		.0
	movwf		Bitspes
	return
Fa
	movlw		.178
	movwf		FreqNota
	movlw		.89
	movwf		LongCicle
	movlw		.2
	movwf		Bitspes
	return
Sol
	movlw		.158
	movwf		FreqNota
	movlw		.79
	movwf		LongCicle
	movlw		.2
	movwf		Bitspes
	return
La
	movlw		.141
	movwf		FreqNota
	movlw		.71
	movwf		LongCicle
	movlw		.0
	movwf		Bitspes
	return
Si
	movlw		.126
	movwf		FreqNota
	movlw		.63
	movwf		LongCicle
	movlw		.2
	movwf		Bitspes
	return
Doo
	movlw		.118
	movwf		FreqNota
	movlw		.59
	movwf		LongCicle
	movlw		.2
	movwf		Bitspes
	return
Mibemoll
	movlw		.200
	movwf		FreqNota
	movlw		.100
	movwf		LongCicle
	movlw		.2
	movwf		Bitspes
	return
Semicorxera
	call 		RetB
	return
Corxera
	call 		RetA
	return
Negra
	call 		RetA
	call 		RetA
	return
Blanca
	call 		RetA
	call 		RetA
	call 		RetA
	call 		RetA
	return
Corxeraimitja
	call 		RetA
	call 		RetB
	return
BlancaNegra
	call 		RetA
	call 		RetA
	call 		RetA
	call 		RetA
	call 		RetA
	call 		RetA
	return
	end

 

 

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