;---------SUBRUTINA TONO1 Autor:Prof:Bolaños D------------------------------- ; salida sonora por pin RB7 ;---------------------------------------------------------------------------- ;registros necesarios para subrutina tono1 ; tf1 ; tf2 ; ts1 ; ts2 ; ts3 ; ctperi ; frecu ; durac ;-------------------------------------------------------------------------- ;subrutina tono1 -antes de llamarla se debe cargar el regist frecu (1 a 80) ;y el registro durac (de 0 a 255)- ;el valor de frecu 1 (agudos) a 80 (graves) determina la frecuencia. ;el valor de durac (hasta 255) determina la duración. NO es igual para todas ;las frecuencias ;--------------------------------------------------------------------------- ; ;Ejemplo de uso de la subrutina ; movlw d'3' ; movwf frecu ; movlw d'10' ; movwf durac ; call tono1 ;--------------------------------------------------------------------------- tono1 clrf ts1 clrf ts2 clrf ts3 rt1 incf ts1,1 rt2 incf ts2,1 rt3 call periodo incf ts3,1 movf durac,0 xorwf ts3,0 ;lo guardo en w porque no me interesa guardarlo en otro lado btfss status,2 ;junto con la intruccion anterior ve si ts2 es igual a durac goto rt3 clrf ts3 movf durac,0 xorwf ts2,0 ;lo guardo en w porque no me interesa guardarlo en otro lado btfss status,2 ;junto con la intruccion anterior ve si ts2 es igual a durac goto rt2 clrf ts2 movf durac,0 xorwf ts1,0 ;lo guardo en w porque no me interesa guardarlo en otro lado btfss status,2 ;junto con la intruccion anterior ve si ts1 es igual a durac goto rt1 return ;----------------------------------------------------------------------------- periodo clrf ctperi bajo bcf portb,7 ;semiciclo bajo (cero) de la onda cuadrada.Esta intrucc selec ;salida sonora-siendo en este caso RB7- call semiciclo ;determina la duracion de este semiciclo incf ctperi,1 movf frecu,0 xorwf ctperi,0 ;lo guardo en w porque no me interesa guardarlo en ctperi btfss status,2 goto bajo clrf ctperi alto bsf portb,7 ;semiciclo alto (uno) de la onda cuadrada.Esta intrucc ;selec salida sonora. call semiciclo incf ctperi,1 movf frecu,0 xorwf ctperi,0 ;lo guardo en w porque no me interesa guardarlo en ctperi btfss status,2 goto alto return ;-------------------------------------------------------------------------------- semiciclo clrf tf1 clrf tf2 retf1 incf tf1,1 retf2 incf tf2,1 btfss tf2,1 ;determina la duracion del semiciclo T/2 (controla la frec) goto retf2 clrf tf2 btfss tf1,1 ;determina la duracion del semiciclo T/2 (controla la frec) goto retf1 return ;------------FIN SUBRUTINA TONO1-----------------------------------------------