Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Del PIC al AVR


       



#21  
torresdelamora

Registrado: 06 Mar 2008
Mensajes: 35
Ubicación: Xalapa Veracruz Mexico
citar
segun yo el codigo que pides va mas o menos asi
Código: Seleccionar todo

                .include "1200def.inc"
                .def     gen=r16

                .org    $000   

Inicio:
                ldi     gen,$ff
                out     DDRB,gen ;el puerto B es salida
                ldi     gen,$00
                out     DDRD,gen ;el puerto D es entrada
Principal:
                in      gen,PIND ; Lee el valor de las variables de entrada
                andi    gen,$07 ; Se queda con los tres bits de entrada.
                add     PC,gen  ;Salta a la configuración adecuada.
Tabla:
                rjmp    Configuracion0
                rjmp    Configuracion1
                rjmp    Configuracion2
                rjmp    Configuracion3
                rjmp    Configuracion4
                rjmp    Configuracion5
                rjmp    Configuracion6
                rjmp    Configuracion7
Configuracion0:
                ldi      gen,$0A       ; (Configuración 0).
                rjmp     ActivaSalida
Configuracion1:
                ldi      gen,$09         ; (Configuración 1).
                rjmp     ActivaSalida
Configuracion2:
                ldi      gen,$23        ; (Configuración 2).
                rjmp     ActivaSalida
Configuracion3:
                ldi      gen,$0F       ; (Configuración 3).
                rjmp     ActivaSalida
Configuracion4:
                ldi      gen,$20       ; (Configuración 4).
                rjmp     ActivaSalida
Configuracion5:
                ldi      gen,$07       ; (Configuración 5).
                rjmp     ActivaSalida
Configuracion6:
                ldi      gen,$17       ; (Configuración 6).
                rjmp     ActivaSalida
Configuracion7:
                ldi      gen,$37       ; (Configuración 7).

ActivaSalida:

                out     PORTB,gen    ; Visualiza por el puerto de salida.
                rjmp    Principal

#22  Re: Del PIC al AVR
macraig

Registrado: 27 Abr 2007
Mensajes: 139
citar
Meta escribió:
Con el PIC 16F84A quiero hacer el mismo programa en ensamblador para el AVR AT90S1200, dice que estos dos microcontroladores serían los más parecidos.

Os dejo un código del 16F84A haber si hay alguien que sepa programarlo en asm para el AT90S1200. (También pueden hacerlo con otro lenguaje, peo preferiría en asm, gracias).

Tengo ganas de aprender los también los AVR, pero hay escasa información sobre ello y en Inglés.

Código: Seleccionar todo
;********************************** Indexado_01.asm *************************************
;
;   ===================================================================
;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;     E. Palacios, F. Remiro y L. López.      www.pic16f84a.com
;      Editorial Ra-Ma.  www.ra-ma.es
;   ===================================================================
;
; Implementar una tabla de la verdad mediante el manejo de tablas grabadas en ROM.
; Por ejemplo, la tabla será de 3 entradas y 6 salidas tal como la siguiente:
;
;       C  B     A  |   S5   S4   S3   S2   S1   S0
;       -----------|---------------------------
;       0   0   0   |   0    0    1    0    1    0   ; (Configuración 0).
;       0   0   1   |   0    0    1    0    0    1   ; (Configuración 1).
;       0   1   0   |   1    0    0    0    1    1   ; (Configuración 2).
;       0   1   1   |   0    0    1    1    1    1   ; (Configuración 3).
;       1   0   0   |   1    0    0    0    0    0   ; (Configuración 4).
;       1   0   1   |   0    0    0    1    1    1   ; (Configuración 5).
;       1   1   0   |   0    1    0    1    1    1   ; (Configuración 6).
;       1   1   1   |   1    1    1    1    1    1   ; (Configuración 7).
;
; Las entradas C, B, A se conectarán a las líneas del puerto A: RA2 (C), RA1 (B) y RA0 (A).
; Las salidas se obtienen en el puerto B:
; RB5 (S5), RB4 (S4), RB3 (S3), RB2 (S2), RB1 (S1) y RB0 (S0).
;
; ZONA DE DATOS **********************************************************************

   LIST      P=16F84A
   INCLUDE      <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

; ZONA DE CÓDIGOS ********************************************************************

   ORG    0               ; El programa comienza en la dirección 0.
Inicio
   bsf      STATUS,RP0         ; Acceso al Banco 1.
   clrf   TRISB            ; Las líneas del Puerto B se configuran como salida.
   movlw   b'00011111'         ; Las 5 líneas del Puerto A se configuran como entrada.
   movwf   TRISA
   bcf      STATUS,RP0         ; Acceso al Banco 0.
Principal
   movf   PORTA,W            ; Lee el valor de las variables de entrada.
   andlw   b'00000111'         ; Se queda con los tres bits de entrada.
   addwf   PCL,F            ; Salta a la configuración adecuada.
Tabla
   goto   Configuracion0
   goto   Configuracion1
   goto   Configuracion2
   goto   Configuracion3
   goto   Configuracion4
   goto   Configuracion5
   goto   Configuracion6
   goto   Configuracion7
Configuracion0
   movlw    b'00001010'         ; (Configuración 0).
   goto   ActivaSalida
Configuracion1
   movlw    b'00001001'         ; (Configuración 1).
   goto   ActivaSalida
Configuracion2
   movlw    b'00100011'         ; (Configuración 2).
   goto   ActivaSalida
Configuracion3
   movlw    b'00001111'         ; (Configuración 3).
   goto   ActivaSalida
Configuracion4
   movlw    b'00100000'         ; (Configuración 4).
   goto   ActivaSalida
Configuracion5
   movlw    b'00000111'         ; (Configuración 5).
   goto   ActivaSalida
Configuracion6
   movlw    b'00010111'         ; (Configuración 6).
   goto   ActivaSalida
Configuracion7
   movlw    b'00111111'         ; (Configuración 7).
ActivaSalida
   movwf   PORTB            ; Visualiza por el puerto de salida.
   goto    Principal

   END
   
;   ===================================================================
;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;     E. Palacios, F. Remiro y L. López.      www.pic16f84a.com
;      Editorial Ra-Ma.  www.ra-ma.es
;   ===================================================================


Se q C no te sirve, pero un poco para comparar asm con C, te dejo el mismo codigo en C... ;) lastimosamente el at90s1200 es un dispositivo ya algo antiguo, q no tiene soporte total en C (se puede, pero con algun truquito). Pero sirve en un AT90S2313 q es el siguiente en la lista...
/*
* Tabla de verdad
*
* (c) 2008 DAF
*
* $Id$
*/

/*
* Tabla de verdad de 3 entradas y 6 salidas.
*
* Entradas en: PD0, PD1, PD2
* Salidas en: PB0, PB1, PB2, PB3, PB4, PB5
*
* PD2 PD1 PD0 | PB5 PB4 PB3 PB2 PB1 PB0
* -----------|---------------------------
* 0 0 0 | 0 0 1 0 1 0 ; (Configuración 0)
* 0 0 1 | 0 0 1 0 0 1 ; (Configuración 1)
* 0 1 0 | 1 0 0 0 1 1 ; (Configuración 2)
* 0 1 1 | 0 0 1 1 1 1 ; (Configuración 3)
* 1 0 0 | 1 0 0 0 0 0 ; (Configuración 4)
* 1 0 1 | 0 0 0 1 1 1 ; (Configuración 5)
* 1 1 0 | 0 1 0 1 1 1 ; (Configuración 6)
* 1 1 1 | 1 1 1 1 1 1 ; (Configuración 7)
*
*/

// Nota: Este codigo se escribio para AT90s2313, pero funcionara en cualquier
// micro avr soportado por AVRGCC q disponga de los puertos utilizados

#include <avr/io.h> // Nombres y definiciones

// Tabla de valores.
unsigned char tabla[] = { 0x0A , //001010 (configuracion 0 en hexadecimal)
0x09 , //001001 (configuracion 1 en hexadecimal)
0x23 , //010011 (configuracion 2 en hexadecimal)
0x0F , //001111 (configuracion 3 en hexadecimal)
0x20 , //001001 (configuracion 4 en hexadecimal)
0x07 , //001001 (configuracion 5 en hexadecimal)
0x27 , //001001 (configuracion 6 en hexadecimal)
0x3F //001001 (configuracion 7 en hexadecimal)
};
//rutina principal
int main(void)
{
int entrada; // donde se coloca el dato leido del puerto d.
// Habilita el PB0-PB5 como salidas.
// Puede usarse tambien DDRB |= 0x3F; Mas corto pero menos explicito.
DDRB |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5);

while(1) //lazo sin fin
{
// lee el dato del puerto d y coloca la salida correspondiente.
// PD & 7 se asegura que solamente los bits PD0-PD3 sean tomados en cuenta.
entrada = PORTD & 0x07;

// coloca la salida correspondiente.
PORTB = tabla[entrada];
}
return 0;
}

#23  
robifaria

Registrado: 27 Abr 2008
Mensajes: 6
Ubicación: España
citar
Es cierto que programar en ensamblador da el máximo control sobre lo que queremos realizar y que jerarquicamente C es el siguiente lenguaje a tener en cuenta si queremos tener el máximo control del micro.
También es cierto que llegar a dominar estos lenguajes lleva mucho mas tiempo de aprendizaje que con el basic.
Es razonable pensar en estas opciones para proyectos de mediana a alta complejidad, pero si queremos hacer proyectos que involucren pantallas LCD, comunicaciones serie, I2C, leer pulsadores, activar relés, por ejemplo el Bascom es altamente aconsejable ya que el tiempo de aprendizaje es mucho menor.
No es cierto que el basic moderno como el de Bascom ( compatible en un 90% con Quick Basic) no es estructurado y que su código es un caos de saltos GOTO.
Es tan estructurado como el programador quiera (flexibilidad que otros lenguajes no tienen), si alguien es mal programador no es culpa del lenguaje.
En Bascom también se puede intercalar con el código basic ,código en lenguaje ensamblador que potencia muchísimo el desarrollo de aplicaciones complejas.
Antes de orientar a alguna persona a que se incline por tal o cual lenguaje de programación es importante que preguntemos a la persona para que lo va a utilizar y cual es su nivel de conocimientos.
Muchos aficionados como yo, lo que deseamos es ver destellar un led o leer la temperatura en una pantalla LCD y queremos desarrollar esto lo mas rápidamente posible.
Es verdad que el código compilado del basic no es tan compacto, pero a nuestro nivel nos da igual usar un ATMEGA8 que un ATMEGA32 o el mismisimo ATMEGA128, no nos dedicamos a producción en serie circuitos, solo tenemos algunas placas para experimentar y nos dá lo mismo que el codigo en vez de 2K ocupe 4K.
Bascom es un lenguaje de alto nivel y es fácil de entender, pocas líneas hacen mucho y es muy fácil modificar algún código de terceros para adaptarlo a nuestra necesidades.
En la página de de MCS encontrareis notas de aplicación para casi todo lo que se nos pueda ocurrir.
Bascom es gratuito para códigos de hasta 4K, suficiente para los pequeños micros de Atmel.
Es verdad, también se consigue por otros medios. Yo lo he comprado, no me pareció caro por la calidad del producto, es mi manera de apoyar y agradecer a su desarrolador por este excelente producto.
Seguiré usando Bascom, me gustaría que otras personas lo prueben y que publiquemos nuestros trabajos.
En estos momentos quiero aprender a programar en ensamblador y en C como curiosidad, no porque encuentre a Bascom deficiente o porque no cumpla mi expectativas, solo por curiosidad.
Mis respetuosos saludos a todos los integrantes del foro.

#24  
Meta

Registrado: 20 Ene 2008
Mensajes: 703
Ubicación: 16F84A
citar
Ahora ya no es aprender el má fácil, sino el más utilizado como el C si quiere hacer grander proyectos.

El ASM si quieres hacer cosas pequñas y entender mejor el PIC:

 Responder



Google
 


 Temas de interés 
No hay mensajes nuevos Entrada/Salida de audio a traves de USB
No hay mensajes nuevos Como separar señales, si son entrada y salida de datos
No hay mensajes nuevos Circuito acondicionador de entrada 4-40mA y salida 0-10 V
No hay mensajes nuevos Conectar salida video de camara a monitor video
No hay mensajes nuevos Circuito con reles para puerto paralelo con salida de 3.3v

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||