# Programas especializados en Asm para PIC



## ELIUSM (Ago 14, 2007)

Hola a todos!
Aquí hice un pequeño compendio de mis programas en assembler para PIC, que tienen la función de ser un programa ejemplo que cumplen una sola función, para que sean simples de usar e incrustar en otros programas hechos por ustedes. Los ordené y comenté bien, para que todos los entiendan. Esta vez presento algo simple y nada nuevo, pero tal vez alguien más tenga interés en colaborar con programas del mismo tipo, que cumplan otras funciones.

Ah, esta vez presento, hacer un puerto SPI en un 16F84A, leer y grabar la memoria EEPROM del PIC, y por último cómo usar una tabla de datos hecha dentro de la memoria de programa del PIC. Espero que les gusten, y que les sirva a los principiantes y talvez a expertos.

La gracia es que son programas probados, osea, estoy seguro de que funcionan porque los he visto funcionar.

Prontamente pienso subir un programa para leer teclados matriciales.

Alguien aportaría con programas similates?

Saludos!!


----------



## ELIUSM (Ago 14, 2007)

Hola denuevo! Les tengo el programa para usar teclados matriciales.

Para que aporten, se me ocurren los siguientes temas. Podrían publicar programas que cumplen las siguientes funciones:

- Para usar puerto I2C para pics que no tienen ese puerto, y PICs que si lo tengan.
- Lo mismo para SPI (uno que sea para PIC que si lo tenga, ya que ya publiqué uno que simula el puerto
- y para todos los periféricos que hay en PICs: ADC, puerto USB, puerto paralelo, etc.
- un programa que use las interrupciones que se pueden usar en un PIC
- uno que use el famoso TMR0

... etc.
Gracias!


----------



## Fogonazo (Ago 15, 2007)

Muchas gracias por "Semejante aporte ! ! ! ! !"
Creo que algunas decenas de User´s te lo agradeceran tambien.


----------



## ELIUSM (Ago 16, 2007)

Hola denuevo!
Bien, como se habrán fijado, son programas donde vienen subrrutinas bien definidas hechas especialmente para que solo baste con que sean llamadas para cumplir con una tarea.

Alguien podría hacer lo mismo para leer y escribir tarjetas MMC o SD? Hay otro tema dando vueltas por allí donde se describe, pero si alguien pudiera subir un programa en ASM bien comentado con subrutinas claras que escriban o lean de la tarjeta? No tengo tanto tiempo como para hacerlo, igual aporté con los programas que están hasta ahora.

Pueden hacer programas donde se muestre como inicializar en forma correcta las interrupciones con GIE, y como inicializar en forma correcta todos los periféricos existentes de cualquier PIC?

Gracias!!


----------



## smither (May 27, 2009)

De verdad gracias!
He trabajado con los pics. sin embargo cada dia se aprenden mas cosas..
bueno debo realizar una comunicación serial o usb......ja es q debo comunicar un glucometro con un pic para de ahi comunicarloa un celular...
cualquier ayuda vale..

gracias y saludos!


----------



## Chico3001 (May 27, 2009)

https://www.forosdeelectronica.com/f24/control-dispositivos-traves-modulo-usb-pic18f2550-17458/
https://www.forosdeelectronica.com/f24/links-usb-3455/

Si ocupas el buscador encuentras mas opciones...  saludos...


----------



## smither (May 28, 2009)

La información esta de lujo.....gracias por la ayuda ... entre mas trabajo me doy cuenta q los foros son una bendición ..
La comunicación glucometro-micro-celular no esta facil...cualquier ayudita se les agradece

saludos!


----------



## fernandob (May 28, 2009)

este estaba buscando , saludos y gracias che ......


----------



## arnaldo11 (Ago 25, 2009)

ola necesito saber como hago un programa que haga un archivo y lo envie a traves del puerto serie 
gracias....


----------



## ELIUSM (Ago 25, 2009)

Tienes que tirar solo el contenido del archivo y un programa en el computador haría de eso, un archivo.

Los programas que sirven son por ejemplo, el HiperTerminal o el "Terminal.exe"

Saludos


----------



## edmundo2009 (Oct 16, 2009)

orale semejante aporte muy bueno y gracias...


----------



## arnaldo11 (Oct 17, 2009)

hola muchachos tengo una pregunta
ojala puedan respondermela 
me gustaria saber como puedo saber el tamaño de un archivo que yo mismo cree y despues dividirlo en bloques osea que me arroje por ejemplo los dos primeros byte.
esto es en assembler porsupúesto gracias.


----------



## schppcss (Nov 15, 2009)

$Grax man !! tan filetes los ejemplos ....


----------



## osac99 (Dic 12, 2009)

Hola como van me gustaria saber si alguien tiene algun codigo para la inicializacion de una pantalla grafica 128x64 con controlador KS0108. Trabajo unicamente en asm.


----------



## menloparck (Dic 15, 2009)

bueno estoy haciendo lo que necesitas para targeta sd dame unos dias y terminoque es parte de mi proyecto por cierto buen aporte


----------



## osac99 (Dic 16, 2009)

hola como van alli les cargo un programa en asm.
El programa sirve para el control de un dimmer mediante un pot o dos pulsantes, espero que les siva ya que usa PWM y conversor ADC.
Todo el programa es manejado con interrupciones, esta probado y funciona
Espero que les sea de utilidad


```
==============================================================================================
;PROGRAMA DE UN DIMMER VARIADO DESDE UN POTENCIOMETRO
;O DESDE EL TECLADO MATRICIAL
;------------------------------------------------------------------
;CONEXION
;=====================================================================
;EL POT Cconectado a ra0
;pulsantes conectadoa al PORTB,0 PORTB,1 y PORTB,2 
;EL PORTB,0 Y PORTB,1 SIVEN PARA LA INTENSIDAD DEL LED.
;EL PORTB,2 SIVE PARA SELECCIONAR CON QUE SE DESEA VARIAR LA INTENSIDAD
;CON EL POT O CON LOS PULSANTES
;==============================================================================================
list p=18f452
#include <p18f452.inc>

;============================================================================
;ZONA DE DECLARACION DE SIMBOLOS Y VARIABLES.
;============================================================================
;RAM de Display auxiliar (para conteo)

tecla = 0x06
flag =  0x07
temp=	0x08
nlamp=	0x09
cont=	0xa
compara = 0x0b

;vectores de reset e interrupcion
	
	org 0
	goto inicio
	org 0x18
	goto interrupt	;vector de IT (baja priorodad)


inicio
		movlb 0
		;---------------------------------------
		;CONFIGURACION DEL PUERTO B
		;----------------------------------------
		clrf PORTB			;LIMPIO EL PORTB
		movlw 0x07			;CARGON 0X03 AL W
		movwf TRISB			;PORTB.0 AL PORTB.1 SON ENTRADAS
	 	bcf   INTCON2,7		;ACTIVO PULL-UPS
	 	;--------------------------------------
		clrf PORTC 			;PORTC = 0000 0000 (inicialmente)
		movlw b'11111110'
		movwf TRISC 		;PORTC,1 ES SALIDA 
		;---------------------------------------
		;==============================================
		;Temporizadores
		;===============================================
		;RCON (No prioridades)
		bcf	 RCON,7
		; Timer 0
		;configiracion del timer0
		
		movlw b'01100000'
		movwf INTCON
		movlw b'01000101'
		movwf T0CON
		clrf  TMR0L
		clrf  TMR0H
		;-----------------------------------
		; Timer 2
		;sirve para el PWM
		;------------------------------------
		clrf	T2CON	;limpio T2
		clrf	TMR2			
		;-----------------------------------
		;Configuracion del PWM
		movlw	d'249'
		movwf	PR2				;F=1Kh
		clrf	CCP1CON			;CCP module apagado
		bsf	CCP1CON, CCP1M3		;Modo PWM
		bsf	CCP1CON, CCP1M2		;Modo PWM
		movlw	0x00			; Valor inicial
		movwf	CCPR1L			; CU
		;-----------------------------------------
		;CONFIGURACION DEL A/D
		movlw	B'00001110'	;RA0 es entrada analogica
		movwf	ADCON1		;ADRESH

		movlw	B'00000000'	; AN1; F/2
		movwf	ADCON0		; A/D deshabilitado

		bcf	PIR1,ADIF	; Limpio bandera A/D interrupt
		bsf	PIE1,ADIE	; Enable A/D interrupt
	
		bsf	INTCON,PEIE	; Enable peripheral interrupts
		;-------------------------------------------		
		;Inicia Timer
		bsf T0CON,7				;enciendo timer 0
		bsf T2CON,TMR2ON		;enciendo timer 2
		
		; Interrupciones On
		bsf INTCON,GIE			;GIE = 1!
		;-----------------------------------------	
again
			goto again
		
;============================================
; SUBRUTINA DE INTERRUPCION
;=============================================
interrupt
		
		;preguntar por las banderas respectivas
		;¿interrumpió el timer0?
		btfsc INTCON,TMR0IF
			goto int_timer0
		btfss PIR1,ADIF			;interrumpio el CONVERSOR A/D
			goto no_it			;no hubo interrupcion
		;cuando el conversor interrupte cargo el valor del AD al CCPR1L
		movff	ADRESH,CCPR1L	;tomo el valor A/D
		goto back_AD		;salgo del conversor

;--------------------------------
;Atencion al timer 1
int_timer0
		btfss	PORTB,2		;selector entre POT y el teclado
			call teclado
		call conv_AD
		goto back_tmr0
;--------------------------------
back_tmr0
		bcf INTCON,TMR0IF		;limpia bandera del tmr0
		goto no_it
;----------------------------------------
back_AD
		bcf	ADCON0,0		;apago AD
		bcf ADCON0,1		;paro conversor
		goto no_it
;--------------------------------------
no_it	
		retfie 1
		
;----------------------------------------------
; SUBRUTINA TECLADO
;---------------------------------------------
teclado
	btfss	PORTB,1
		goto down
	btfsc	PORTB,0
		return 
	movf	CCPR1L,W
	sublw	0xFF
	btfsc	STATUS,Z
		return 
	incf	CCPR1L
	return

down
	movf	CCPR1L,W
	btfsc	STATUS,Z
		return	
	decf	CCPR1L
	return 	
;-----------------------------------------------------
conv_AD
		bsf	ADCON0,0	;prendo AD
		bsf ADCON0,2	;go conversor
		return
		

		end
```


----------



## cesquivel (Feb 27, 2010)

Hola Foro espero esten bien, quería diseñar un programa similar al que cumple la función de arriba poro estoy utilizando lengujae C y compilando en MikroC... lo que necesito que haga mi programa es que a partir del convertidor A/D me varie la frequencia del modulo de PWM... en mikrcoC vienen varios programas de ejemplo sencillos para echar a andar el modulo PWM y el AD, pero no se como linkear que el valor de AD sea determinado valor de frecuencia... Si alguien pudiera comentar se los agradecería demasiado... un saludo!


----------



## jaikem (May 9, 2010)

que tal, disculpen soy nuevo en esto..... y pues necesito que el pic 18f452 me lea una combinacion de 2 bits y lo que este en el puerto C me lo compare y me de un resultado en el puerto D. 

ya configure los puetos, y por lo pronto me seria de mucha ayuda que me leyera lo que hay en un puerto y me lo refleje en el otro
pero intente poniendo lo siguiente..

movlw portC
movwf port D


----------



## hersamu (May 13, 2010)

gracias brooo good aporte  estoy deacuerdo los foros son una bendicion


----------



## sammaael (May 13, 2010)

bueena no habia visto esto!!! de gran ayuda a todos quines nos gusta el assembler


----------



## sAhkl (Jul 15, 2010)

osac99 dijo:


> hola como van alli les cargo un programa en asm.
> El programa sirve para el control de un dimmer mediante un pot o dos pulsantes, espero que les siva ya que usa PWM y conversor ADC.
> Todo el programa es manejado con interrupciones, esta probado y funciona
> Espero que les sea de utilidad
> ...






------------------------------------------------
*
NECESITO   AYUDAAAAAAAAAAAAAAAAAA*
 lo queme y lo probe , nada no pasa nada , quisiera saber como hago para generar el pwm en un *pic18f452* y de donde tomo la señal y como la saco? ???????????????????


----------



## cerebroo (Jul 17, 2010)

Hola..
En el programa hay algunas cosas que corregir... y creo que deberias revisarlo antes de quemarlo...
Trata de ver donde hay cosas que modificar porque sí las hay...yo estoy decodificando todo este codigo para adentrarme en la familia 18f, ya que hay poca info en ASM.

Saludos.


----------



## Jonathan1065 (Mar 13, 2011)

Mani tengo un problema con las interrupciones esto es lo que tengo:

	BTFSS	INTCON,INTF
	GOTO	MAIN_PROG
	INCF	VAR4
	MOVLW	6
	XORWF	VAR4,W
	BTFSS	STATUS,Z
	GOTO	SALIR
	GOTO	EFECTO

EFECTO

PARTE1	MOVLW	1
	XORWF	VAR4,W
	BTFSS	STATUS,Z
	GOTO	PARTE2
	GOTO	EFECTO_1

PARTE2


SALIR	BCF	INTCON,INTF
	BCF	INTCON,RBIF
	MOVF	PORTB,W

retfie

esto lo que quiero hacer es un secuenciador de luces con cambio de efecto y cambio de frecuenciaa.......................

y estoy un poco enredado sera que me puedes ayudar con esto..................... o decirme como se inicia con esto....................


----------

