# Microcontroladores HC908 freescale motorola



## jorge andrada (Oct 29, 2010)

Hola a todos los programadores, y con todo respeto a los que progrman otras marcas de microcontroladores, como ya lo sabran en internet hay muchisima informacion de otros microcontroladores, pero sobre motorola y la familia hc908 no hay casi nada. 

yo propongo crear un  tema en dodne todos lo que trabajamos con freescale motorola hc908 podamos darnos una mano en cuestiones de estos microcontroladores, porque esta familia es nueva y tiene muy buenas funciones, yo vengo trabajando con esta familia hace 4 años, pero como es este tema nunca dejamos de aprender y no podemos saber todo, y la mayoria de la veces que tenemos que hacer algun trabajo involucra algo de lo que no sabemos y ai el problema que no hay mucha informacion sobre estos micros. 

ojala este tema tenga trascendencia ya que tengo varias cosas para ayudar y varias preguntas tambien. desde ya gracias a todos y saludos.


----------



## darth_vader (Mar 8, 2011)

El HC908 es muy buen microprocesador, lo prefiero ante cualquier PIC de 8 bits. Tiene una arquitectura ideal para programar en lenguaje C. Son mucho mas organizados los de Freescale que los de Microchip. 

Lo que me da bronca de Microchip :enfadado: es que para configurar algo tenes que estar buscando varios registros por todo el manual, no son organizados. En cambio estos Freescale solo tenes que mirar el capitulo que necesitas y listo. Lo único malo es que no se consiguen tan facilmente como los PIC. 

Y ni hablar de la instrucciones de hardware, los pic tienen una sola página , estos hc908 tienen como 3 hojas de instrucciones. Yo los prefiero lejos. Ahora estoy investigando los de Texas y los de Atmel, tienen una arquitectura interesante también.


----------



## bombu29 (Mar 9, 2011)

yo empeze con esto hace 3 dias, tenia el programador hace bastante pero no agarraba una y entonces me habia resignado... hasta que estos ultimos dias instale el codewarrior y pude hacer prender un led y ver la forma que se programan... ahora estoy intentando configurar con processor expert lo del pwm, mi idea es variar la intensidad de un led, pero la verdad que todavia no tuve exito.
tengo el micro qy4


----------



## curioso207 (Mar 9, 2011)

la verdad si hay informacion en el sitio freesacale.com pero el problema es que generalmente lo que enseñan los maestros es la marca que tienen a la mano y la verdad es que freescale tiene el dominio de la industria automotriz esa es la razon de porque no todos usan esa marca ademas de que los progrogramadores anteriormente eran muy caros despues cuando comenzo la familia hc08 comenzaron a poder programarse desde el puerto serial sin necesidad de un programador especial yo trabajo con ellos sin problema y con otras familias asi como varias marcas y la verdad es muy comodo trabajar con freescale y con especto al led hechale un vistazo 


http://cache.freescale.com/files/microcontrollers/doc/app_note/AN2475.pdf?fsrch=1&sr=6

solo desconecta el transistor aplicale voltaje de cero a 5 vdc con un potenciometro al adc y veras como varia el pwm


pd consejo el modo expert es para cuando conoces el periferico generalmente mucha gente cre que como es un wizar es nomas de habilitar opciones y jala pero como todo es necesario conocer el periferico para poder trabajarlo

saludos


----------



## bombu29 (Mar 9, 2011)

curioso207 dijo:


> la verdad si hay informacion en el sitio freesacale.com pero el problema es que generalmente lo que enseñan los maestros es la marca que tienen a la mano y la verdad es que freescale tiene el dominio de la industria automotriz esa es la razon de porque no todos usan esa marca ademas de que los progrogramadores anteriormente eran muy caros despues cuando comenzo la familia hc08 comenzaron a poder programarse desde el puerto serial sin necesidad de un programador especial yo trabajo con ellos sin problema y con otras familias asi como varias marcas y la verdad es muy comodo trabajar con freescale y con especto al led hechale un vistazo
> 
> 
> http://cache.freescale.com/files/microcontrollers/doc/app_note/AN2475.pdf?fsrch=1&sr=6
> ...




gracias por la informacion pero tengo que compiar todo ese codigo ?? no hay forma configurarlo con el processor expert y despues manejarlo mediante programacion en c???


----------



## curioso207 (Mar 10, 2011)

este es el ejemplo mas simple de un pwm con un tiempo de togle de 3.125ms estudialo para que veas como funciona insisto te recomiendo que estudies la seccion del modulo pwm para que comprendas que se habilito y que se hizo porque de este es el codigo que se genere ya lo probe y funciona en 3 dias como dices no creo que alcances todavia a captar la parte de este modulo 

solo modifica el codigo para que con el adc decremetes el valor de comparacion de timer que habilito en el codigo y tendras lo que estabas buscando


Saludos 




#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */


#ifdef __cplusplus
 extern "C"
#endif
void MCU_init(void); /* Device initialization function declaration */

void main(void) {
  MCU_init(); /* call Device Initialization */

  /* include your code here */



  for(; {
     __RESET_WATCHDOG(); //by default, COP is disabled with device init. When enabling, also reset the watchdog. */
  } /* loop forever */
  /* please make sure that you never leave main */
}




/*
** ###################################################################
**     This code is generated by the Device Initialization Tool.
**     It is overwritten during code generation.
**     USER MODIFICATION ARE PRESERVED ONLY INSIDE EXPLICITLY MARKED SECTIONS.
**
**     Project   : pwm
**     Processor : MC68HC908QY4CP
**     Version   : Component 01.078, Driver 01.01, CPU db: 2.87.147
**     Datasheet : MC68HC908QY4/D Rev. 5 07/2005, MC68HLC908QY4/D Rev. 3 07/2005
**     Date/Time : 10/03/2011, 10:27 a.m.
**     Abstract  :
**         This bean "MC68HC908QY4_P_DW" provides initialization of the 
**         CPU core and shared peripherals.
**     Settings  :
**         Clock setting
**             Internal clock      : 12800 kHz
**             Initialization interrupt priority : 1
**             Stop instruction enabled : no
**             LVI module          : yes
**
**             Source clock        : Internal Clock
**             Internal bus clock  : 3.2 MHz
**     Contents  :
**         Function "MCU_init" initializes selected peripherals
**
**     Copyright : 1997 - 2009 Freescale Semiconductor, Inc. All Rights Reserved.
**     
**     http      : www.freescale.com
**     mail      : support@freescale.com
** ###################################################################
*/

#ifndef __pwm_H
#define __pwm_H 1

/* Include shared modules, which are used for whole project */


/* User declarations and definitions */
/*   Code, declarations and definitions here will be preserved during code generation */
/* End of user declarations and definitions */

#ifdef __cplusplus
extern "C" {
#endif
extern void MCU_init(void);
#ifdef __cplusplus
}
#endif
/*
** ===================================================================
**     Method      :  MCU_init (component MC68HC908QY4_P_DW)
**
**     Description :
**         Device initialization code for selected peripherals.
** ===================================================================
*/

__interrupt void isrINT_ADC(void);
/*
** ===================================================================
**     Interrupt handler : isrINT_ADC
**
**     Description :
**         User interrupt service routine. 
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/



__interrupt void isrINT_TIMOvr(void);
/*
** ===================================================================
**     Interrupt handler : isrINT_TIMOvr
**
**     Description :
**         User interrupt service routine. 
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/



__interrupt void isrINT_TIMCH0(void);
/*
** ===================================================================
**     Interrupt handler : isrINT_TIMCH0
**
**     Description :
**         User interrupt service routine. 
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/






/* END pwm */

#endif
/*
** ###################################################################
**
**     This file was created by Processor Expert 3.07 [04.34]
**     for the Freescale HC08 series of microcontrollers.
**
** ###################################################################
*/



/*
** ###################################################################
**     This code is generated by the Device Initialization Tool.
**     It is overwritten during code generation.
**     USER MODIFICATION ARE PRESERVED ONLY INSIDE INTERRUPT SERVICE ROUTINES
**     OR EXPLICITLY MARKED SECTIONS
**
**     Project   : pwm
**     Processor : MC68HC908QY4CP
**     Version   : Component 01.078, Driver 01.01, CPU db: 2.87.147
**     Datasheet : MC68HC908QY4/D Rev. 5 07/2005, MC68HLC908QY4/D Rev. 3 07/2005
**     Date/Time : 10/03/2011, 10:27 a.m.
**     Abstract  :
**         This bean "MC68HC908QY4_P_DW" provides initialization of the 
**         CPU core and shared peripherals.
**     Settings  :
**         Clock setting
**             Internal clock      : 12800 kHz
**             Initialization interrupt priority : 1
**             Stop instruction enabled : no
**             LVI module          : yes
**
**             Source clock        : Internal Clock
**             Internal bus clock  : 3.2 MHz
**     Contents  :
**         Function "MCU_init" initializes selected peripherals
**
**     Copyright : 1997 - 2009 Freescale Semiconductor, Inc. All Rights Reserved.
**     
**     http      : www.freescale.com
**     mail      : support@freescale.com
** ###################################################################
*/

/* MODULE MCUinit */

#include <MC68HC908QY4.h>              /* I/O map for MC68HC908QY4CP */
#include "MCUinit.h"

/* User declarations and definitions */
/*   Code, declarations and definitions here will be preserved during code generation */
/* End of user declarations and definitions */


/*
** ===================================================================
**     Method      :  MCU_init (component MC68HC908QY4_P_DW)
**
**     Description :
**         Device initialization code for selected peripherals.
** ===================================================================
*/
void MCU_init(void)
{

/*** ### MC68HC908QY4_P_DW "Cpu" init code ... ***/
/*** PE initialization code after reset ***/
/* System clock initialization */

  /* Common initialization of the write once registers */
  /* CONFIG1: COPRS=0,LVISTOP=0,LVIRSTD=0,LVIPWRD=0,LVI5OR3=0,SSREC=0,STOP=0,COPD=0 */
  CONFIG1 = 0x00;                                      
  /* CONFIG2: IRQPUD=0,IRQEN=0,OSCOPT1=0,OSCOPT0=0,RSTEN=0 */
  CONFIG2 = 0x00;                                      
  OSCTRIM = *(unsigned char*far)0xFFC0; /* Initialize OSCTRIM register from a non volatile memory */
  /* Common initialization of the CPU registers */
  /* PTAPUE: OSC2EN=0,PTAPUE0=0 */
  PTAPUE &= (unsigned char)~0x81;                     
  /* ### Init_TIM init code */
  /* TSC: TOF=0,TOIE=0,TSTOP=1,TRST=1,PS2=0,PS1=0,PS0=0 */
  TSC = 0x30;                          /* Stop and reset counter */
  TCH0 = 0x00U;                        /* Compare 0 value setting */
  (void)(TSC0 == 0);                   /* Channel 0 int. flag clearing (First part) */
  /* TSC0: CH0F=0,CH0IE=0,MS0B=1,MS0A=0,ELS0B=0,ELS0A=1,TOV0=0,CH0MAX=0 */
  TSC0 = 0x24;                         /* Int. flag clearing (2nd part) and  channel contr. register setting */
  TMOD = 0xFFFFU;                      /* Period value setting */
  (void)(TSC == 0);                    /* Overflow int. flag clearing (first part) */
  /* TSC: TOF=0,TOIE=0,TSTOP=0,TRST=0,PS2=0,PS1=0,PS0=0 */
  TSC = 0x00;                          /* Int. flag clearing (2nd part) and timer contr. register setting */
  /* ### Init_COP init code */
  COPCTL = 0xFF;                       /* Clear WatchDog counter */
  /* ### Init_ADC init code */
  /* ADICLK: ADIV2=0,ADIV1=1,ADIV0=0 */
  ADICLK = 0x40;                                      
  /* ADSCR: COCO=0,AIEN=0,ADCO=1,CH4=0,CH3=0,CH2=0,CH1=0,CH0=1 */
  ADSCR = 0x21;                                      
  /* ### */
  /* Common peripheral initialization - ENABLE */
  /* KBSCR: ACKK=1,IMASKK=0 */
  KBSCR = (KBSCR & (unsigned char)~0x02) | (unsigned char)0x04;
  asm CLI;                             /* Enable interrupts */
} /*MCU_init*/


/*
** ===================================================================
**     Interrupt handler : isrINT_ADC
**
**     Description :
**         User interrupt service routine. 
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
__interrupt void isrINT_ADC(void)
{
  /* Write your interrupt code here ... */

}
/* end of isrINT_ADC */


/*
** ===================================================================
**     Interrupt handler : isrINT_TIMOvr
**
**     Description :
**         User interrupt service routine. 
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
__interrupt void isrINT_TIMOvr(void)
{
  /* Write your interrupt code here ... */

}
/* end of isrINT_TIMOvr */


/*
** ===================================================================
**     Interrupt handler : isrINT_TIMCH0
**
**     Description :
**         User interrupt service routine. 
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
__interrupt void isrINT_TIMCH0(void)
{



     __RESET_WATCHDOG();


  /* Write your interrupt code here ... */

}
/* end of isrINT_TIMCH0 */



/* Initialization of the CPU registers in FLASH */



#ifndef UNASSIGNED_ISR
  #define UNASSIGNED_ISR 0xFFFF        /* Unassigned interrupt service routine */
#endif

extern void _Startup(void);            /* reset interrupt service routine */

void (* const _vect[])() @0xFFDE = {   // Interrupt vector table
        isrINT_ADC,                    /* Int.no.  0 INT_ADC (at FFDE)               Used */
        UNASSIGNED_ISR,                /* Int.no.  1 INT_KBI (at FFE0)               Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  2 Reserved2 (at FFE2)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  3 Reserved3 (at FFE4)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  4 Reserved4 (at FFE6)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  5 Reserved5 (at FFE8)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  6 Reserved6 (at FFEA)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  7 Reserved7 (at FFEC)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  8 Reserved8 (at FFEE)             Unassigned */
        UNASSIGNED_ISR,                /* Int.no.  9 Reserved9 (at FFF0)             Unassigned */
        isrINT_TIMOvr,                 /* Int.no. 10 INT_TIMOvr (at FFF2)            Used */
        UNASSIGNED_ISR,                /* Int.no. 11 INT_TIMCH1 (at FFF4)            Unassigned */
        isrINT_TIMCH0,                 /* Int.no. 12 INT_TIMCH0 (at FFF6)            Used */
        UNASSIGNED_ISR,                /* Int.no. 13 Reserved13 (at FFF8)            Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 14 INT_IRQ (at FFFA)               Unassigned */
        UNASSIGNED_ISR,                /* Int.no. 15 INT_SWI (at FFFC)               Unassigned */
        _Startup                       /* Int.no. 16 INT_RESET (at FFFE)             Reset vector */
};


/* END MCUinit */

/*
** ###################################################################
**
**     This file was created by Processor Expert 3.07 [04.34]
**     for the Freescale HC08 series of microcontrollers.
**
** ###################################################################
*


----------



## bombu29 (Mar 10, 2011)

gracias mañana lo voy a ver con tiempo y despues subo las dudas


----------



## maritenz (Mar 11, 2011)

Me parece muy buena idea de crear un grupo de los que usamos HC908, la verdad que hay muy poca info y poca gente a la que recurrir cuando no sabes como hacer algo. Yo uso estos micros desde mediados de 2007 cuando estaba en el penúltimo año de la escuela. Ahora estoy en la facultad no tengo mucho tiempo para hacer cosas con ellos pero de vez en cuando hago algun proytecto. Personalmente los programo en assembler. Nunca entendi como hacer funcionar el PWM, y otro proyecto que siempre tube y nunca pude realizar porque no se como hacerlo es grabar información en el micro cuando este esta corriendo el programa. Seria como un almacenamiento de datos mietras el micro esta en funcionamiento.


----------



## jorge andrada (Mar 11, 2011)

si eso que dices de guardar datos en la memoria no volatil se llama almacenamiento en la meoria flash, la verdad nunca lo hice a eso todabia, pero tambien estoy interesado en hacerlo, pero como alguien dijo anteriormente, en el manual de los hc08 tiene muy bien detallado la informacion, y se que hay unos registros que se los manipula desde la rom monitor, que es el modulo ROM, seria cuestion de ponerse a hecharle manos creo yo, por lo menos asi me paso con el modulo TIM, timer y con el modulo ADC, conversor analogico digital, ahora me encuentro estudindolo al puerto SCI, que es el modulo de transmision serial, esto en eso y luego les cuento como sigo. muchos no les llevan el apunte a estos micros pero son muy buenos y potentes, yo tambien los programo en assembler y con WinIde, pero tambien me quiero poner a parenderlos a programar en cy con CodeWarrior.    
yo particularmene creo qe si se lo aprende bien a fondo a estos micros y todos sus modulitos se puede decir ue caasi todo es posible.
aparte tambien tienen modulo SPI que es el tipo de comunicacion que tienen muchos dispositivos, y ambine las memorias SD, esi que esto nos permite trabajar con memorias SD y guardar datos en ella, y lo mejor que tiene motorola, es que cuando cambia de fmilia siempre busca mantener las compatibilidades de las familias anteriores, por eso es por ejemplo que tenemos el registro HX dividio den dos partes, la alta H y la baja X. cada una de 8 bits, entonces podemos hutilizar 16 bits, y estan separados para que pueda correr un programa de la familia vieja de HC705, que solo era de 8 bits.
y tambien hay un micro que es compatible pin a pin con cada varios de la familia anterior, y esto sera asi tambien para que cuando salga una familia nueva nos sea facil migrar un programa directamente a la nuea familia.
asi como esto tienen muchas cosas buenas.
eso si cuando se los va a poner en ambientes industriales a estos micros hay que ponerle muy buenas etapas de filtrado.

sigamos aportando.  lo ideal seria de apoco y entre todos subir ejemplos de manejo de cada modulo, asi podamos tener como una guia para hacer nuestros proyectos,

saludos a todos, y ya voy a preparar algunos programitas para manejar los modulos que voy aprendiendo o que se.


----------



## maritenz (Mar 11, 2011)

Si quieren yo tengo programas funcionando para hacer andar un lcd con bus de 8 y 4 linea de datos, tambien tengo un programa para enviar y recibir datos seriales, esto seria para comunicacion entre 2 micros por una sola linea.


----------



## jorge andrada (Mar 11, 2011)

de una la verdad me vendria de 10 que pases un programita para transmision serial, cual micro utilizas? yo tengo varios,   QY4,  QT4,  JL3, y JL8, que este ultimo trae modulo SCI.
saves que el otra vueltas hice funcionar un display LCD de caracteres, con 4 y 8 lineas, y anduvo bastante bien, pero parece que tenia que retocar algunos tiempos porque cuando lo dejaba correr por mucho tiempo al mismo programa de manera ciclica, este en un determinado tiempo escribia caracteres erroneos. pero lo princpal funciono de 10,   por otra parte tengo un LCD grafico, o mejordicho un GLCD de 64 x 128, le hice que aparezca un recuadro algo asi como un marco pero parece que tambien tengo problemas en los tiempos porque aveces luego de prenderlo y apagarlo un par de veces se corre el recuadro, al final lo deje archivado para cuando me haga de paciencia nuevamente.

la verdad como te dije me vendria de 10 un programita de ejemplo de transmision serial.  
bye bye


----------



## bombu29 (Mar 12, 2011)

la verdad que intente conseguir micros motorola aca en mi ciudad yo soy de Rosario Argentina y no encontre en ningun lado solamente encontre quien los vende en bsas asi que me resigne a los pic


----------



## pandacba (Mar 12, 2011)

darth_vader dijo:


> El HC908 es muy buen microprocesador, lo prefiero ante cualquier PIC de 8 bits. Tiene una arquitectura ideal para programar en lenguaje C. Son mucho mas organizados los de Freescale que los de Microchip.
> 
> Lo que me da bronca de Microchip :enfadado: es que para configurar algo tenes que estar buscando varios registros por todo el manual, no son organizados. En cambio estos Freescale solo tenes que mirar el capitulo que necesitas y listo. Lo único malo es que no se consiguen tan facilmente como los PIC.
> 
> Y ni hablar de la instrucciones de hardware, los pic tienen una sola página , estos hc908 tienen como 3 hojas de instrucciones. Yo los prefiero lejos. Ahora estoy investigando los de Texas y los de Atmel, tienen una arquitectura interesante también.


Te Has bajado las notas de aplicación de microchip?, por la forma que hablas diria que no ya que hay toneladas de domuentos para todos los micros, es el sitio que más documentación tiene al respecto.......... y si de investigar se trata y te falta un montón, tenes los micros como el ST-9 de Thompson, los de Philips muy buenos, tenes los de Rabitt, te falta Motorola, los de intel, los de Thosiba y solo te estoy mencionando algunos


----------



## jorge andrada (Mar 12, 2011)

tienes razon panda, pero como abras leido anteriormente esto se trata de los microcontroladores HC908 de frescaler, no necesitamos propagandas de otros micros, porque esto es para los que trabajamos con freescaler HC908, y para darnos una manos entre nosotros ya que tenemos poca informacion, entendes? yo por ejemplo no entre en un foro de pic u otro micro a decir las ventajas que tiene este micr HC908.

asi que porfavor no nos desviemos y como puse clarramente antes esto es para darnos una mano los que trabajamos con motorola HC908, o lo que quieran trabajar con motorola HC908, asi que retomemos a lo que estabamos y continuemos comentando de nestros micros.

*******************
* volviendo al tema de: * 
*********************************
* MC68HC908-----  Freescale   - Motorola *
*********************************

luego voy a enumerar todos los modulos que tienen estos micros HC908 y vamos a tataar de poner ejemplos de cada uno de los moodulitos, y tambien con la explicacion e los registros.
tambien seria interesante explicar los sets de instrucciones de forma mas detallada que la del manual. yo si tengo infrmacion de eso asi que me voy a poner a buscarla y la subo.   
una ves que veamos caada modulo y luego los sets de instrucciones, quedaria por ver manipulacion de tablas.  y con esto ya estariamos bastante completos, y por supuesto sacaremos las dudas que vayan surgiendo.....


----------



## maritenz (Mar 12, 2011)

Aqui dejo lo prometido:
Programa para el Tx.

*******************************************************************************
SEND       BSET       TX,B               ;PULSO SINCRONISMO
           JSR        RE4MS             ;FIN DEL PULSO SINCRONISMO
           BRCLR      7,DATO,L11
           JSR        PULSO1
           BRA        F1
L11        JSR        PULSO0
F1         BRCLR      6,DATO,L22
           JSR        PULSO1
           BRA        F2
L22        JSR        PULSO0
F2         BRCLR      5,DATO,L3
           JSR        PULSO1
           BRA        F3
L3         JSR        PULSO0
F3         BRCLR      4,DATO,L4
           JSR        PULSO1
           BRA        F4
L4         JSR        PULSO0
F4         BRCLR      3,DATO,L5
           JSR        PULSO1
           BRA        F5
L5         JSR        PULSO0
F5         BRCLR      2,DATO,L6
           JSR        PULSO1
           BRA        F6
L6         JSR        PULSO0
F6         BRCLR      1,DATO,L7
           JSR        PULSO1
           BRA        F7
L7         JSR        PULSO0
F7         BRCLR      0,DATO,L8
           JSR        PULSO1
           BRA        F8
L8         JSR        PULSO0
F8         BCLR       TX,B
LAZO       BIL        LAZO
           CLI
           RTS
*******************************************************************************
RE4MS      MOV        #$F0,M1
           MOV        #$02,M2
A7         DEC        M1
           NOP
           BNE        A7
           DEC        M2
           BNE        A7
           RTS
*******************************************************************************
PULSO0     BCLR       TX,B
           JSR        RE05MS
           BSET       TX,B
           JSR        RE1MS
           RTS
*******************************************************************************
PULSO1     BCLR       TX,B
           JSR        RE1MS
           BSET       TX,B
           JSR        RE05MS
           RTS
*******************************************************************************
RE05MS     MOV        #$46,M3
A1         DEC        M3
           BNE        A1
           NOP
           RTS
*******************************************************************************
RE1MS      MOV        #$8D,M3
A5         DEC        M3
           BNE        A5
           NOP
           NOP
           NOP
           RTS
*******************************************************************************

Programa de recepcion

*******************************************************************************
RRX             CLR     FLAG            ;RECEPCION DEL BIT DE SINCRONISMO
                MOV     #$30,M4         ;DE APROXIMADAMENTE 4 MILISEG
LAZOA           JSR     RET50MS
                BRCLR   RX,B,RET15
                DEC     M4
                LDA     M4
                CMP     #$00
                BNE     LAZOA

                JSR     RDATO1          ;LLAMAMOS SUBRRUTINA RECEPCION DEL BIT
                LDA     VBT             ;ESTO SIRVE PARA SABER SI EL BIT FUE RECIBIDO
                CMP     #$01            ;CORRECTAMENTE, SINO SALTA CON UN RTS
                BNE     RET15           ;PARA CONTINUAR CON EL PROGRAMA
                LDA     DATO            ;CARGAMOS EL DATO PARA SABER SI ES UN 1 0 UN 0
                CMP     #$01
                BEQ     A115            ;SALTA SI ES UN 1
                BCLR    7,DATO          ;recepcion del bit 7

MARITO          JSR     RDATO1          ;LLAMAMOS SUBRRUTINA RECEPCION DEL BIT
                LDA     VBT             ;ESTO SIRVE PARA SABER SI EL BIT FUE RECIBIDO
                CMP     #$01            ;CORRECTAMENTE, SINO SALTA CON UN RTS
                BNE     RET15           ;PARA CONTINUAR CON EL PROGRAMA
                LDA     DATO            ;CARGAMOS EL DATO PARA SABER SI ES UN 1 0 UN 0
                CMP     #$01
                BEQ     A22             ;SALTA SI ES UN 1
                BCLR    6,DATO          ;recepcion del bit 6

MARITO1         JSR     RDATO1          ;LLAMAMOS SUBRRUTINA RECEPCION DEL BIT
                LDA     VBT             ;ESTO SIRVE PARA SABER SI EL BIT FUE RECIBIDO
                CMP     #$01            ;CORRECTAMENTE, SINO SALTA CON UN RTS
                BNE     RET15           ;PARA CONTINUAR CON EL PROGRAMA
                LDA     DATO            ;CARGAMOS EL DATO PARA SABER SI ES UN 1 0 UN 0
                CMP     #$01
                BEQ     A33             ;SALTA SI ES UN 1
                BCLR    5,DATO          ;recepcion del bit 5

MARITO2         JSR     RDATO1          ;LLAMAMOS SUBRRUTINA RECEPCION DEL BIT
                LDA     VBT             ;ESTO SIRVE PARA SABER SI EL BIT FUE RECIBIDO
                CMP     #$01            ;CORRECTAMENTE, SINO SALTA CON UN RTS
                BNE     RET15           ;PARA CONTINUAR CON EL PROGRAMA
                LDA     DATO            ;CARGAMOS EL DATO PARA SABER SI ES UN 1 0 UN 0
                CMP     #$01
                BEQ     A4              ;SALTA SI ES UN 1
                BCLR    4,DATO          ;recepcion del bit 4

MARITO3         JSR     RDATO1          ;LLAMAMOS SUBRRUTINA RECEPCION DEL BIT
                LDA     VBT             ;ESTO SIRVE PARA SABER SI EL BIT FUE RECIBIDO
                CMP     #$01            ;CORRECTAMENTE, SINO SALTA CON UN RTS
                BNE     RET15           ;PARA CONTINUAR CON EL PROGRAMA
                LDA     DATO            ;CARGAMOS EL DATO PARA SABER SI ES UN 1 0 UN 0
                CMP     #$01
                BEQ     A5              ;SALTA SI ES UN 1
                BCLR    3,DATO          ;recepcion del bit 3

MARITO4         JSR     RDATO1          ;LLAMAMOS SUBRRUTINA RECEPCION DEL BIT
                LDA     VBT             ;ESTO SIRVE PARA SABER SI EL BIT FUE RECIBIDO
                CMP     #$01            ;CORRECTAMENTE, SINO SALTA CON UN RTS
                BNE     RET4            ;PARA CONTINUAR CON EL PROGRAMA
                LDA     DATO            ;CARGAMOS EL DATO PARA SABER SI ES UN 1 0 UN 0
                CMP     #$01
                BEQ     A6              ;SALTA SI ES UN 1
                BCLR    2,DATO          ;recepcion del bit 2

MARITO5         JSR     RDATO1          ;LLAMAMOS SUBRRUTINA RECEPCION DEL BIT
                LDA     VBT             ;ESTO SIRVE PARA SABER SI EL BIT FUE RECIBIDO
                CMP     #$01            ;CORRECTAMENTE, SINO SALTA CON UN RTS
                BNE     RET4            ;PARA CONTINUAR CON EL PROGRAMA
                LDA     DATO            ;CARGAMOS EL DATO PARA SABER SI ES UN 1 0 UN 0
                CMP     #$01
                BEQ     A7              ;SALTA SI ES UN 1
                BCLR    1,DATO          ;recepcion del bit 1

MARITO6         JSR     RDATO1          ;LLAMAMOS SUBRRUTINA RECEPCION DEL BIT
                LDA     VBT             ;ESTO SIRVE PARA SABER SI EL BIT FUE RECIBIDO
                CMP     #$01            ;CORRECTAMENTE, SINO SALTA CON UN RTS
                BNE     RET4            ;PARA CONTINUAR CON EL PROGRAMA
                LDA     DATO            ;CARGAMOS EL DATO PARA SABER SI ES UN 1 0 UN 0
                CMP     #$01
                BEQ     A8              ;SALTA SI ES UN 1
                BCLR    0,DATO          ;recepcion del bit 0
MARITO7         MOV     #$FF,FLAG

RET4            RTS
******************************************************************************
A1              BSET    7,DATO
                JMP     MARITO
A2              BSET    6,DATO
                JMP     MARITO1
A3              BSET    5,DATO
                JMP     MARITO2
A4              BSET    4,DATO
                JMP     MARITO3
A5              BSET    3,DATO
                JMP     MARITO4
A6              BSET    2,DATO
                JMP     MARITO5
A7              BSET    1,DATO
                JMP     MARITO6
A8              BSET    0,DATO
                JMP     MARITO7
******************************************************************************
RDATO1          CLR     VBT             ;BORRAMOS LA MEM PARA EL BIT SIGUIENTE
                BRSET   RX,B,RDATO1     ;SUBRRUTINA PARA RECIBIR BIT
                MOV     #$06,M4         ;PRIMERO SINCRONIZAMOS CUANDO ESTA EN 0
B1              BRSET   RX,B,AHA        ;LUEGO PREGUNTAMOS 8 VECES SI ESTA EN 0
                JSR     RET50MS         ;SINO SALIMOS, SI ESTA EN 0 8 VECES CONTINUAMOS
                DEC     M4              ;Y PREGUNTAMOS SI ESTA EN 0 O 1
                BNE     B1              ;SI ESTA EN 0 PREGUNTAMOS OTRAS 8 VECES Y SI ESTA EN 1
                JSR     RET50MS         ;PREGUNTAMOS 16 VECES
                JSR     RET50MS         ;ASI SABEMOS SI ES EL BIT ES UN 1 O UN 0
                BRCLR   RX,B,B2         ;SI ES UN 1 LA MEMORIA SE PONE EN 1
                MOV     #$0C,M4         ;Y SI ES UN 0 LA MEMORIA SE PONE EN 0
B3              BRCLR   RX,B,AHA
                JSR     RET50MS
                DEC     M4
                BNE     B3
                CLR     DATO
                MOV     #$01,VBT
                RTS

AHA             RTS

B2              MOV     #$06,M4
B4              BRSET   6,D,AHA
                JSR     RET50MS
                DEC     M4
                BNE     B4
                JSR     RET50MS
                JSR     RET50MS
                MOV     #$05,M4
B5              BRCLR   RX,B,AHA        ;PREGUNTAR SI ESTA EN UNO EL BIT ENTRANTE
                JSR     RET50MS
                DEC     M4
                BNE     B5
                MOV     #$01,DATO
                MOV     #$01,VBT

                RTS
********************************************************************
RET50MS         MOV     #$06,M2         ;RETARDO DE 50 MICRO SEGUNDOS
                NOP
                NOP
COLO1           DEC     M2
                BNE     COLO1
                RTS
*******************************************************************************

Bueno trato de explicarlo un poco. El progrma del TX primero envia un pulso de sincronismo de 4mS, luego si es un cero el bit a enviar primero va 0,5mS en cero y luego 1mS en alto. si es un 1 el bit a enviar se envia 1mS en cero y 0,5 mS en uno.

El programa RX comprueba varias veces si lo que se recibe es un byte con el formato definido del envio. Si tienes alguna duda preguntas a mi.

No se como poner el codigo. Avisen y arreglo para que asi se entienda


----------



## jorge andrada (Mar 13, 2011)

maritenz la verdad se nota que esta muy bien elaborado tu programa, tengo algunas pequeñas dudas, por ejemplo este programa es para utilizzar cualquier de entrada salida de cualquier micro de los HC908?, no es utilizando el modulo SCI que es el modulo que tiene TX y RX, cierto? lo estoy intentando hacer correr a tu programa para probar la transmision, la verdad me parecio muy bueno, pero tambien ya que tengo varios MC68HC908JL8, y este micro posee un modulo de transmision serial, y tiene lols registros y banderas para manejarlo, pero no lo se utilizar asi que voy a utilizar el que vos hiciste y luego tratar de aprender a utilizar el modulo SCI. cuando lo haga lo boy a subir.

otra pregunta es que cristal utilizas? o utilizas el oscilador interno?

que micro utilizaste? y a que distancia mas o menos los pusiste el uno del otro?
gracias por tu aporte saludos


----------



## valdo 132 (Mar 13, 2011)

ayuda para poder realizar un programa para realizar una matriz de led ayuda por favor


----------



## jorge andrada (Mar 13, 2011)

se que a eso se lo hace con tablas, si se puede hacer de manera convencional con los puertos de salidas pero se que es mucho mas manejable y puedes hacer mas cosas con tablas. aunque yo nunca trabaje con tablas.
para que te podamos ayudar especifica un poco mejor que es exactamente lo que quieres hacer.
cuantos leds de cuanto la matriz?
que necesitas escribir en los leds o que quieres mostrar etc. 
y con que micro-controlador trabajas tu.


----------



## valdo 132 (Mar 13, 2011)

trabajo con el mc68hc908qy4  y mc68hc908qb8 , pues la matriz la quiero hacer de 8x8  y poder desplegar letras y ponerlas en corrimiento para poder observar un mensaje. 
y como se trabaja con tablas ya que no e escuchado de eso ya que nosotros hemos realizado pocas practicas con estos micros


----------



## curioso207 (Mar 14, 2011)

bueno el manejo de tablas es facil pero debes tener cuidado de como uses las instrucciones generalmente se utiliza con el registro hx y tienes que cargar de manera indirecta al acumulador la no me voy a concentrar mucho en el programa pero la  instruccion seria asi en el code warrior 


; se define el origen de la tabla en tu programa y la direccion donde comienza



       ORG  $4000															   
TABLA_KEY

             DC.B $EE,$31  ; 1 ; PA4 PA0
             DC.B $ED,$34  ; 2 ; PA4 PA1
             DC.B $EB,$37  ; 3 ; PA4 PA2
             DC.B $E7,$2A  ;* A ; PA4 PA3
             DC.B $DE,$32  ; 4 ; PA5 PA0
             DC.B $DD,$35  ; 5 ; PA5 PA1
             DC.B $DB,$38  ; 6 ; PA5 PA2
             DC.B $D7,$30  ; B ; PA5 PA3
             DC.B $BE,$33  ; 7 ; PA5 PA0
             DC.B $BD,$36  ; 8 ; PA6 PA1
             DC.B $BB,$39  ; 9 ; PA6 PA2
             DC.B $B7,$23  ;# C ; PA6 PA3
             DC.B $7E,$41  ;A   ;$C  ; F ; PA7 PA0
             DC.B $7D,$42  ;B;$D  ; E ; PA7 PA1
             DC.B $7B,$43  ;C;$E  ; F ; PA7 PA2
             DC.B $77,$44  ;D ;$F  ; D ; PA7 PA3

;///////////////////////////////////////////////////////////////////////////////



              LDHX    #TABLA_KEY       ;apuntamos en el registro x la  direccionde la tabla y comenzamos 
                                                ; la  rutina                   
              MOV     #$0C,TEMP_KEY                     



;                        
CHECA_TABLA_KEY:
               LDA   ,X
               CMP   VALOR_KEY
               BNE   DIF                  
IGUAL:         INCX
               LDA  ,X
               STA  VALOR_KEY
               STA  VALOR
               BRA  TECLA_OK



DIF:           INCX
               INCX
               DBNZ  TEMP_KEY,CHECA_TABLA_KEY
               CLR   VALOR_KEY

TECLA_OK:      

               LDA      VALOR_KEY
              RTS



esto es un ejemplo de como podemos apuntara una tabla de datos mediante el registro HX

Saludos

LDA ,X es la que carga el valor en el acumulador 
A y ahi queda el dato para manipularlo


----------



## maritenz (Mar 14, 2011)

el programa que hice es independiente del SCI, lo podes usar con cualquier micro, por eso defini al bit RX y TX para que cuando defina las variables le asignes ese nombre a un bit, si quieres otro puerto diferente al b, vas a tener que cambiarlo manualmente. Creo que se puede usar cualquier cristal, los ciclos estan adaptados perfectamente. La distancia realmente no la se, pero si es una linea sin mucho ruido puede ser mayor que un metro, es cuestion de probar. Este programa yo lo utilizo para enviar datos por RF pero tengo muchas complicaciones con los circuitos.


----------



## curioso207 (Mar 14, 2011)

yo pienso que no puede usar cualquier cristal permiteme explicate porque:

si te fijas el retardo de tiempo en milisegundos esta dado decrementando un registro y en caso que usaras un timer tambien te afectaria el variar el cristal 
recuerda que al usar un cristal de mayor frecuencia incrementas la velocidad del micro asi como de sus perifericos y si lo bajas se hace mas lento 

en cuanto a las distancias ponle 2 max232  y tendras un alcance mayor para que te alcance mas distancia y si quisieras 1 kilometro ponle entonces un convertidor de rs485 creo que era el 75ls176 este ultimo es altamente inmune al ruido recuerda usar 2 uno en un extremo atravez de un cable y el otro al final y podras comunicarte a distancia

aun cuando usaras los timers del micro al cambiarle el cristal su frecuencia base cambia por lo tanto el programa o te corre mas rapido o mas lento
saludos


----------



## valdo 132 (Mar 14, 2011)

ok gracias por la informacion , pero yo casi no se programar en ensamblador , nosotros trabajamos en lenguaje C, por que lo poco que vi de ensamblador se me complico mucho y gracias por la explicacion de la tabla.
saludos y que estes bien


----------



## curioso207 (Mar 15, 2011)

en lenguaje c es mas facil entonces no hay mucho que explicar


----------



## maritenz (Mar 16, 2011)

curioso207 dijo:


> yo pienso que no puede usar cualquier cristal permiteme explicate porque:
> 
> si te fijas el retardo de tiempo en milisegundos esta dado decrementando un registro y en caso que usaras un timer tambien te afectaria el variar el cristal
> recuerda que al usar un cristal de mayor frecuencia incrementas la velocidad del micro asi como de sus perifericos y si lo bajas se hace mas lento
> ...



Si te fijas bien no uso el timer en ningun momento, trabajo con los ciclos del micro. Obviamente que si cambias el cristal en uno lo tenes que cambiar en el otro. Los dos deben llevar cristales iguales, sino no funcionaria. Mientras cumplas la condicion de cristales iguales en los dos micros el programa funciona correctamente.


----------



## jorge andrada (Mar 16, 2011)

voy a tratar de utilizar el cristal que me recomeinda en la hoja de datos de motorola frescaler, que si mal no recuerdo es un cristal de 9.83 MHz o 9.083, o ago asi, no lo recuerdo bien ya me jijare en el manual.

de todas maneras aparte de hace correr este programa que puedo utilizar cualquier pin I/O, para TX/RX, me gustaria utilizar el modulo SCI que es el modulo que trae el micro porque yo lo tengo que comunicar con la PC, y  con el cristal anteriormente mensionado y el modulo SCI en el manual dice que funciona bien, aparte me ahorro un poco de espacio de memoria.

porque el programa que me pasaste esta bueno, pero para comunicar micro con micro como tu bien lo aclaraste, como yo aparte de comunicar micro con micro tambien necesito comunicar a una PC se me lo complica, otra ventaja que tengo de trabajar con el modulio SCI es que si por algun motivo el programa principal se demora por algo o tiene algun llamado de interrupcion no me afectara en mi transmision, aparte yo lo pongo a correr al programa principal de trabajo y cuando llegue un dato realizo un pedido de interrupcion del sci y el programa en ese momento s va a atender al SCI, y luego continua, oprque tengo que hacerlo vastante extenso al programa principal por las aplicaciones que va a tener.

me gustaria mucho si alguien tienne algun programita de ejemplo del modulito SCI que este probado, para que me lo pase, porque algo estoy haciendo mal  no funca.
por ahora pruebo en comunicar micro con micro para descartar las configuraciones y problemas de la PC.

mientras voy trabajando con el programita que me paso el colega.

despues tengo otro pequeño inconveniente que es parte del mismo programa principal:

tego ue manejar tablas.
tengo un concepto de ello pero no lo tengo en claro, segun eleido, las tablas vienne a ser como una especia de subrrutina, en donde se setean los datos a escribir.
y que cada ves que se la llama carga el dato al ACC, (acumulador) e incrementa algo en algo, eje y luego sale, es coo una subrrutina que buelve con un dato especifico, cuando se la llma  de nuevo esta debido al incremento vuelve con el dato siguiente.
mis dudas son:
siempre con el dato que vuelve es con el suiguiente? no puede volver con cualquiera que yo necesite? por ejemplo yo tengo una tabla en odne  tengo los daos para generar desde el 0 al 9, pero en un momento necesito el 3 y en otro el 1 y en otro el 8 por ejemplo, se utiliza la tabla para eso tmbien.
otra duda: como son las instrucciones para que funcione una tabla? yo trabajo con WinIde y en assembler. se que tengo que hacer algo en la ram pero no lo tengo en claro como reservar el lugar en la ram para la tabla.
busco buco estudio pero no me cierran las cosas, en algo me enrredo, si alguien me puede dar una mano en estas dos cositas, seria genial.  desde ya gracias


----------



## maritenz (Mar 17, 2011)

Las tablas yo las entiendo como un lugar donde vos pones datos y despues los vas a buscar segun la posicion. Por ejemplo en una entrada tenes un sensor de temperatura, convertis esa temperatura en el registo ADR te va a quedar el valor binario de la temperatura, entonces vos vas a la tabla buscas ese valor y lo mostras si queres o haces otra cosa. 

Para usar las tablas debes definir el lugar de la memoria flash en la que empiezan (pones  ORG $F800 por ejemplo). En la fila siguiente le pones un nombre si queres. le das tab y pones la instruccion FCB otra vez tab y empezas a escirbir los datos ($ si es hexadecimal,%si esbinario, ' ' si es codigo ASCII). Por cada fila solo puede haber ocho columnas, el compilador no te permite mas.

Para usar las tablas desde el programa. Primero debes cargar el registro H y X con el valor del comienzo de tabla (LDHX #$F800 por el ejemplo anterior). Luego te tenes que mover al registro X la posicion que deseas buscar (LDX POSICION por ejemplo). Por ultimo cargas al Acumulador el valor contenido en la posicion del X (LDA ,X). Despues pones el valor en la memoria que quieras con la instruccion STA.

Te dejo las instrucciones y una tabla de ejemplo. Cualquier duda consultame. 

LDHX    #$F800
           LDX     POSICION
           LDA     ,X
           STA    MEMORIA

ORG     $F900

PWMH    FCB     $00,$00,$00,$01,$01,$01,$02,$02
            FCB     $03,$03,$03,$04,$04,$05,$05,$05
            FCB     $06,$06,$07,$07,$07,$08,$08,$08
            FCB     $09,$09,$0A,$0A,$0A,$0B,$0B,$0C
            FCB     $0C,$0C,$0D,$0D,$0E,$0E,$0E,$0F
            FCB     $0F,$10,$10,$10,$11,$11,$11,$12
            FCB     $12,$13,$13,$13,$14,$14,$15,$15
            FCB     $15,$16,$16,$17,$17,$17,$18,$18
            FCB     $19,$19,$19,$1A,$1A,$1A,$1B,$1B
            FCB     $1C,$1C,$1C,$1D,$1D,$1E,$1E,$1E
            FCB     $1F,$1F,$20,$20,$20,$21,$21,$21
            FCB     $22,$22,$23,$23,$23,$24,$24,$25
            FCB     $25,$25,$26,$26,$27


----------



## curioso207 (Mar 17, 2011)

hace tiempo publique un ejemplo de comunicacion a 9600 con ese cristal.
checalo en el foro 
saludos


----------



## jorge andrada (Mar 17, 2011)

maritenz muy buena tu explicacion sobre las tablas y muy bueno tu ejemplo, tengo unas dudas nomas. de tdas maneras ya me estoy poniendo a programam r para empezar a meterle mano a las tablas, gracias.


osea que la la tabla mas grande que yo puedo hacer es de 128 bytes, cierto? 
porque en el registro X solo puedo direccionar con 8 bits. no es asi?
a la tabla solamente la puedo hacer en la ram? no en la flash?
o sea que solamente puedo utilizar el espacio disponble que el micro tiene reservado como la memoria ram, o sea que no le puedo asignar una direccion que pertenezca a la flash.

se puede cargar una tabla en la memoria flash?


*********
curioso ya me voy a fijar en dodne esta lo que me dices ese rog que anda a 9600 b.
muchas gracias muy buenos los aportes.

JAJA ME RETARCTO LUEGO DE UN RATO QUE ME PUSE A EXPERIMENTAR Y ANALIZAR LE COMPRENDI MEJOR. lo que si quisiera saber para qu sirve ponerle el nombre? que puedo hacer varias tablas y llamar a cualquiera? no verdad? solo una yu llamo las direcciones.
gracias la verdad muy buena tu explicacion.


----------



## maritenz (Mar 17, 2011)

Las tablas van en memoria flash, poner la direccion es para vos estar seguro del origen de la tabla para poderlo cargar en el registro H y X. La verdad que no se la cantidad de valores maximos que podes trabajar con las tablas, pero supongo que seran 256 datos, es el maximo valor que podes obtener con 8 bits. Espero haber aclarado tus dudas. Ah, el nombre es para que se vea bonito nada mas! jaja no es necesario. Consulta si tienes mas dudas.


----------



## jorge andrada (Mar 19, 2011)

MARITENZ ya pude hacer correr la tabla muy buena tu enseñanza, mas claro que eso imposible. gracias ahora ya puedo hacer una tabla y poner los datos que quiera, esta muy bueno, gracias.

ahora lo unico que me queda es aprendr a manejar el modulo SCI.

saludos gracias


----------



## maritenz (Mar 19, 2011)

Que bueno haber podido ayudar a alguien en una de las cosas que mas me gusta, que son los micros y la programación. Todos los dias son de aprender con los micros, siempre hay algo que te hace falta y tenes que arreglartelas como puedes porque en internet hay poca info de micros motorola. Me alegra que hayas creado el post este para ayudarnos entre nosotros.

Yo estoy con un proyecto en el cual necesito escribir en la memoria flash mientras corre el programa. Si tienes alguna idea de eso te agradeceria. Porque en el manual sale el diagrama de flujo de como hacerlo, pero hay una nota importantisima que dice que no se puede grabar en flash mientras se esta corriendo un programa desde la flash. Por lo que se hay dos formas: copiar el algoritmo a la ram ( no se como hacerlo); y la otra manipular la rom, pero no hay mucha info de eso. Le voy a estar muy agradecido a cualquiera que pueda ayudarme.


----------



## jorge andrada (Mar 19, 2011)

mira yo casi no lo vi a eso, pero tengo entendido que al programa lo escribes normalmente en la flash como de costumbre, pero hay que reservar un espacio de memoria flash destinada para escribirla durnte el trabajo del micro.
y para escribir en la flash hay que hacerlo utilizando el modulo ROM, que es el modulo ROm Monitor, este es el modulo destinado a la programa cion en el micro, es mas cuando gabamos el micro o lo borramos normalmente es este modulo el que maneja todo la escritura y borrado de la flash.
ya me voy a poner a verlo mas en profundidad asi te doy una mano con eso.
se que tiene un registro el modulo ROM en dodne esos datos escritos en ese registro se guardan en un espacio reservado ya por el usuario de flash. ya me voy a fijar bien


----------



## maritenz (Mar 19, 2011)

jorge aca hay un ejemplo y en otros lados tambien, pero el problema que tengo es que no puedo hacerlo correr en el simulador, porque cuando voy a las subrrutinas de la ROM se resetea el micro. Me gustaria probarlo antes de hacerlo funcionar en la realidad. te dejo el link para que veas

http://www3.fi.mdp.edu.ar/electronica/accesoporcatedras/sistemdigdocs/PROG_Flash_JLK.pdf


----------



## jorge andrada (Mar 20, 2011)

hola maritenz, vos me decis que todavia no lo haces correr al programa en el micro? si no que solamente lo simulas? yo te diria que pruebes hacer un programita chico de prueba y lo hagas correr directamente desde tu micro.
por ejemplo pones ocho leds que esten conectados todos al puerto B y un pulsador y haces un programa que por ejemplo tu tienes un dato en el programa, ej. 10011011 y a eso lo haces que lo guarde en la flash y luego puede ser que cuando pulses el pulsador el pc usque en una direccion de flash y te lo escriba en el puerto b, si se te prenden los leds correspondientes a tu dato significa que la transferencia se hace bien, de lo contrario tendras otro dato o nada.

porque es complicado que un programador te simule si es que tiene que afectar registros de flash, me parece que este programa esta bien pero prob asi, ya voy a tratar de hacer lo  mismo yo. saludos


----------



## maritenz (Mar 21, 2011)

Ya hice mi prube, lo hice correr en el micro al programa. Hice que guardara unos datos que yo define en las 4 primeras posiciones de la tabla. Logro borrar bien, pero el problema aparece cuando quiero escribir. Hasta ahora logre escibir un dato en la primera posicion de la tabla. Cuando quiero escribir otro dato en la siguente posicion no se escribe ahi sino 32 lugares despues del inicio de la tabla. Para ver los resultados obtenidos coloco el micro en la placa programadora y hago como que lo voy a grabar, pero entre todas las opciones que tiene el programa para grabar te permite ver lo que hay en la flash.


----------



## jorge andrada (Mar 22, 2011)

por las dudas te fijaste bien si no estas poniendo mal alguna instruccion en el incremento de (X),
o tal vez te este quedando basura en el registro (X) luego de guardar los priemros datos? digo por el tipo de problema que me dices, porque es quien le dice al pc adonde va a escribir, por lo menos ahora no se te lo resetea cierto? solo que se te corre 32 lugares la segunda escritura cierto?
vos lo podes subir al programa que vos hiciste? o es tal cual al que me pasaste primero? al del ejemplo?

otra pregunta por las dudas: que micro estas utilizando? podrias escribirle el nombre completo?


----------



## maritenz (Mar 22, 2011)

Ahi te dejo el programa que yo hice a partir de dos ejemplos que encontre al X lo incremento con in INCX, pero en el ejemplo del link que te pase lo hace con un AIX a lo mejor sea eso. El microcontrolador que uso es MC68HC908JK3. Con este programa logre borrar perfectamente toda la tabla, segun dice el manual se borra de a 64 bytes y se debe grabar de a 32 bytes, yo pienso que por eso el otro dato que escribo se graba 32 lugares mas adelante de la tabla.


```
******************************************************************************************
******************************************************************************************
*************************** PROGRAMA PARA GRABAR EN FLASH JK3 ****************************
******************************************************************************************
******************************************************************************************
************************** ASIGNACION DE VARIABLES Y POSICIONES **************************
******************************************************************************************
B            EQU            $01
D            EQU            $03
DDRB         EQU            $05
DDRD         EQU            $07
CONFIG1      EQU            $1F
FLCR         EQU            $FE08               ;REGISTRO DE CONTROL FLASH
FLSPR        EQU            $FE09               ;REGISTRO DE PROTECCION DEL BLOQUE DE FLASH
FLTCR        EQU            $FE0A
CLAVE0       EQU            $A0
CLAVE1       EQU            $A1
CLAVE2       EQU            $A2
CLAVE3       EQU            $A3
AUX0         EQU            $A4
AUX1         EQU            $A5
AUX2         EQU            $A6
AUX3         EQU            $A7
DATOG        EQU            $A8
******************************************************************************************
************************* RUTINAS ROM PARA EL MANEJO DE LA FLASH *************************
******************************************************************************************
GETBYTE      EQU           $FC00               ;Sub-Rutina en ROM TX/RX un Byte x port
RDVRRNG      EQU           $FC03               ;Sub-Rutina en ROM lectura y verif. de un rango
ERARNGE      EQU           $FC06               ;Sub-Rutina en ROM borrado row / mass Flash
PRGRNGE      EQU           $FC09               ;Sub-Rutina en ROM escritura datos en FLASH
DELNUS       EQU           $FC0C               ;Sub-Rutina en ROM DELAY "N" microsegundos
PAGINA       EQU           $EC00               ;Primera dir de la primera página de Flash
RAM          EQU           $0080               ;Dirección de inicio de la RAM
Rutinas_Rom  EQU           RAM+8               ;RAM para uso del "MONITOR ROM"


******************************************************************************************
;RAM p/uso en prog/erase flash, Rutinas ROM.
;Estas variables deben estar en estas direcciones NO CAMBIAR!!!!!!!
             ORG           Rutinas_Rom
CTRLBYT      RMB           1                    ;BIT 6 -> MASS FLAG, 1 -> mass er
CPUSPD       RMB           1                    ;CPU speed -> 4 x Fop aprox.
LADDR        RMB           2                    ;Dirección de FLASH
DATA         RMB           1                    ;Dato a escribir en la Flash ($008C)
TEMPORAL     RMB           1                    ;Buffer temporal para guardar datos por ejemplo el X
******************************************************************************************
             ORG           PAGINA              ;TABLA PARA GRABADO DE DATOS
             FCB           $01,$03,$07,$08,$03,$01,$07,$06
             FCB           $01,$03,$07,$08,$03,$01,$07,$06
             FCB           $01,$03,$07,$08,$03,$01,$07,$06
             FCB           $01,$03,$07,$08,$03,$01,$07,$06
             FCB           $01,$03,$07,$08,$03,$01,$07,$06
             FCB           $01,$03,$07,$08,$03,$01,$07,$06
             FCB           $01,$03,$07,$08,$03,$01,$07,$06
             FCB           $01,$03,$07,$08,$03,$01,$07,$06
******************************************************************************************
             ORG           $ED00                ;ORIGEN DEL PROGRAMA
******************************************************************************************
INICIO       MOV           #$01,CONFIG1         ;DESACTIVO PERRO GUARDIAN
             RSP                                ;Reset del STACK
             LDA           #$FF
             STA           FLSPR               ;Se quita la protección de la FLASH toda
             SEI                               ;ELIMINO INTERRUPCIONES
             CLR           DATOG

             NOP
             JSR           borrar_pagina
             MOV           #$54,DATOG
             JSR           ESCRIBO_FLASH
         INCX
         MOV           #$54,DATOG
         JSR           ESCRIBO_FLASH    
I2           BRA           I2



******************************************************************************************
************************************** SUBRRUTINAS ***************************************
******************************************************************************************
Borrar_Pagina:
             MOV           #00,CTRLBYT           ; CTRLBYT = 0 -> MASS ERASE -> P.E
             MOV           #10,CPUSPD            ; CPUSPD=10 -> 4xFop -> 4x 2,45
             LDHX          #PAGINA               ;H:X = A la primera dir de la Pagina ($EC00)
             JSR           ERARNGE               ;Rutina ROM que borra un rango de la Flash
             NOP                                 ;Debo estar seguro de que X=0 cuando entre en
             NOP                                 ;la rutina de escribir en la FLASH para que el dato
             NOP                                 ;se guarde en el vector 0 al inicio del array.
             CLRX
             RTS                                 ;Retorno de Subrutina
******************************************************************************************
Escribo_Flash:
             STX           TEMPORAL              ;GUARDO EL INDICE DEL X EN EL TEMPORAL
             MOV           #00,CTRLBYT           ;CTRLBYT = 0 -> MASS ERASE = 0
             MOV           #10,CPUSPD            ;CPUSPD=10 -> 4xFop -> 4x 2,45
             LDHX          #PAGINA               ;H:X = $EC00 (Primer vector de la Pagina)
             LDX           TEMPORAL              ;RECUPERO EL INDICE DEL X EN EL TEMPORAL
             STHX          LADDR                 ;completa a la rutina ROM PRGRNGE (H=$EC y X=offset)
             LDA           DATOG
             STA           DATA
             LDA           #$FF                  ;Debo escribir cualquier cosa
             STA           FLSPR                 ;en el registro "FLBPR" antes...JSR           PRGRNGE               ;Rutina ROM, DATA contiene lo que se escribirá en la Flash
             NOP
             NOP
             RTS                                 ;Retorno de Subrutina
******************************************************************************************

             ORG           $FFFE                 ;VECTORES DE RESET
RESET        DW            INICIO
             END
```


----------



## darth_vader (Mar 23, 2011)

pandacba dijo:


> y si de investigar se trata y te falta un montón,  te falta Motorola,


 
Motorola es Freescale


----------



## maritenz (Mar 23, 2011)

Jorge ya logre solucionar el problema, como te decia en el comentario anterior para grabar se hace de a 32 bloques, por lo tanto el X salta 32 lugares, lo que hice fue puse la instruccion AIX  #-1F para grabar en la segunda posicion y luego un AIX  #-1E para la tercera y asi suscesivamente le vas restando uno al valor que pones en AIX. Para mi caso es suficiente con guardar 4 valores por lo cual no es mucho problema, la cuestion seria si quieres grabar 64 valores. Hay que encontrar una forma mas eficiente de hacerlo. Se me ocurren algunas, pero con este programa asi estoy satisfecho, si en algun momento me hace falta guardar mas datos lo optimizare. Te dejo el programa ya funcionando asi si lo quieres lo guardas. Otra cosa los datos que grabe son aleatorios son para probar el funcionamiento. 


```
******************************************************************************************
******************************************************************************************
*************************** PROGRAMA PARA GRABAR EN FLASH JK3 ****************************
******************************************************************************************
******************************************************************************************
************************** ASIGNACION DE VARIABLES Y POSICIONES **************************
******************************************************************************************
B            EQU            $01
D            EQU            $03
DDRB         EQU            $05
DDRD         EQU            $07
CONFIG1      EQU            $1F
FLCR         EQU            $FE08               ;REGISTRO DE CONTROL FLASH
FLSPR        EQU            $FE09               ;REGISTRO DE PROTECCION DEL BLOQUE DE FLASH
FLTCR        EQU            $FE0A
CLAVE0       EQU            $A0
CLAVE1       EQU            $A1
CLAVE2       EQU            $A2
CLAVE3       EQU            $A3
AUX0         EQU            $A4
AUX1         EQU            $A5
AUX2         EQU            $A6
AUX3         EQU            $A7
DATOG        EQU            $A8
******************************************************************************************
************************* RUTINAS ROM PARA EL MANEJO DE LA FLASH *************************
******************************************************************************************
GETBYTE      EQU           $FC00               ;Sub-Rutina en ROM TX/RX un Byte x port
RDVRRNG      EQU           $FC03               ;Sub-Rutina en ROM lectura y verif. de un rango
ERARNGE      EQU           $FC06               ;Sub-Rutina en ROM borrado row / mass Flash
PRGRNGE      EQU           $FC09               ;Sub-Rutina en ROM escritura datos en FLASH
DELNUS       EQU           $FC0C               ;Sub-Rutina en ROM DELAY "N" microsegundos
PAGINA       EQU           $EC00               ;Primera dir de la primera página de Flash
RAM          EQU           $0080               ;Dirección de inicio de la RAM
Rutinas_Rom  EQU           RAM+8               ;RAM para uso del "MONITOR ROM"


******************************************************************************************
;RAM p/uso en prog/erase flash, Rutinas ROM.
;Estas variables deben estar en estas direcciones NO CAMBIAR!!!!!!!
             ORG           Rutinas_Rom
CTRLBYT      RMB           1                    ;BIT 6 -> MASS FLAG, 1 -> mass er
CPUSPD       RMB           1                    ;CPU speed -> 4 x Fop aprox.
LADDR        RMB           2                    ;Dirección de FLASH
DATA         RMB           1                    ;Dato a escribir en la Flash ($008C)
TEMPORAL     RMB           1                    ;Buffer temporal para guardar datos por ejemplo el X
******************************************************************************************
             ORG           PAGINA              ;TABLA PARA GRABADO DE DATOS
             FCB           $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
             FCB           $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
             FCB           $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
             FCB           $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
             FCB           $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
             FCB           $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
             FCB           $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
             FCB           $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
******************************************************************************************
             ORG           $ED00                ;ORIGEN DEL PROGRAMA
******************************************************************************************
INICIO       MOV           #$01,CONFIG1         ;DESACTIVO PERRO GUARDIAN
             RSP                                ;Reset del STACK
             LDA           #$FF
             STA           FLSPR               ;Se quita la protección de la FLASH toda
             MOV           #$00,CTRLBYT
             MOV           #$0A,CPUSPD         ;Frecuencia para la rutina DELNUS (9.8304MHz 10Mhz ($0A)
             SEI                               ;ELIMINO INTERRUPCIONES
             CLR           DATOG

             NOP
             JSR           borrar_pagina
             MOV           #$15,DATOG
             JSR           ESCRIBO_FLASH
             AIX           #-1F                 ;POSICIONO AL X EN EL SEGUNDO LUGAR DE LA TABLA
         MOV           #$26,DATOG
         JSR           ESCRIBO_FLASH
             AIX           #-1E                 ;POSICIONO AL X EN EL SEGUNDO LUGAR DE LA TABLA
             MOV           #$59,DATOG
         JSR           ESCRIBO_FLASH
             AIX           #-1D                 ;POSICIONO AL X EN EL SEGUNDO LUGAR DE LA TABLA
             MOV           #$DC,DATOG
         JSR           ESCRIBO_FLASH
             
I2           BRA           I2                   ;LAZO INFINITO 



******************************************************************************************
************************************** SUBRRUTINAS ***************************************
******************************************************************************************
Borrar_Pagina:
             MOV           #00,CTRLBYT           ; CTRLBYT = 0 -> MASS ERASE -> P.E
             MOV           #10,CPUSPD            ; CPUSPD=10 -> 4xFop -> 4x 2,45
             LDHX          #PAGINA               ;H:X = A la primera dir de la Pagina ($EC00)
             JSR           ERARNGE               ;Rutina ROM que borra un rango de la Flash
             NOP                                 ;Debo estar seguro de que X=0 cuando entre en
             NOP                                 ;la rutina de escribir en la FLASH para que el dato
             NOP                                 ;se guarde en el vector 0 al inicio del array.
             CLRX
             RTS                                 ;Retorno de Subrutina
******************************************************************************************
Escribo_Flash:
             STX           TEMPORAL              ;GUARDO EL INDICE DEL X EN EL TEMPORAL
             MOV           #00,CTRLBYT           ;CTRLBYT = 0 -> MASS ERASE = 0
             MOV           #10,CPUSPD            ;CPUSPD=10 -> 4xFop -> 4x 2,45
             LDHX          #PAGINA               ;H:X = $EC00 (Primer vector de la Pagina)
             LDX           TEMPORAL              ;RECUPERO EL INDICE DEL X EN EL TEMPORAL
             STHX          LADDR                 ;completa a la rutina ROM PRGRNGE (H=$EC y X=posicion)
             LDA           DATOG
             STA           DATA
             LDA           #$FF                  ;Debo escribir cualquier cosa
             STA           FLSPR                 ;en el registro "FLBPR" antes...
             JSR           PRGRNGE               ;Rutina ROM, DATA contiene lo que se escribirá en la Flash
             NOP
             NOP
             RTS                                 ;Retorno de Subrutina
******************************************************************************************

             ORG           $FFFE                 ;VECTORES DE RESET
RESET        DW            INICIO
             END
```


----------



## jorge andrada (Mar 23, 2011)

que bien que lo solucionaste, y gracias por pasarlo al programa, de 10 ahora me voy a pner a intentar manejarlo al modulo SCI aver si puedo mandar datos serial.
te felicito por solucionar tu programa, de esa manera te das cuenta que aprendes muchas cosas mas intentando solucionarlo.


----------



## rotamel (Ago 27, 2011)

maritenz dijo:


> Si quieren yo tengo programas funcionando para hacer andar un lcd con bus de 8 y 4 linea de datos, tambien tengo un programa para enviar y recibir datos seriales, esto seria para comunicacion entre 2 micros por una sola linea.



Hola Martinez me gustaria que me pase los programas ya que soy nuevo en el tema y no consigo nada de informacion en la web

Buenas soy nuevo en esto de los micros, si alguien me puede ayudar para poder empezar a programar en C se lo voy agradecer


----------



## tier29 (Ago 31, 2011)

Hola Amigos,
Quisiera saber si me pueden ayudar con un pequeño problema que tengo con el micro ap16 en interrupciones por IRQ, resulta que tengo 5 microcontroladores conectados en cascada por medio de la referencia de cero voltios para cuando activo un relevo me de una interrupción al mismo tiempo en cada micro, la aplicación funcionó muy bien, pero al cabo de unos días empezaron a fallar los microcontroladores, aleatoriamente uno de los cinco no responde a la interrupción y ésto me ha pasado en los cinco micros, entonces quisiera saber si existe algún filtro o un diodo a algo a así que pueda colocar entere el pin de IRQ y 0V para mejorar la estabilidad de éstos microcontroladores.
Thanks in advance


----------



## curioso207 (Sep 6, 2011)

probablemente se te esta perdiendo datos porque muchas veces al interrumpir los micros mucha gente se olvida de salvar el registro de estatus asi como los acumuladores y registros indices checa estas opciones y de no ser asi se te esta metiendo ruido a tu micro que puede ser una causa pero por lo que veo tambien en tus lineas ¿reseteaste la bandera de interrupcion al atenderla? estos micros son muy estables y eso lo tengo bien checado


----------



## juanma2468 (Sep 8, 2011)

Hola gente, alguien tiene idea si es posible simular el micro MC68HC908JK3 en algun programa como el Proteus o el Multisim, yo trabajo con el WinIDE pero para un trabajo en particular que estoy realizando me gustaria poderlo simular ya que la tarea que tiene que desarrollar el micro no es viable visualizarla en el WinIDE, solo podria hacerlo en un simulador, sin antes tirarme hacer el PCB final. Si alguien tuviese el archivo del micro para alguno de esos programas que mencione o sabe de algun programa de simulacion que por defould lo contenga agradecido estaria si me lo pudieran informar, desde ya muchas gracias.


----------



## tier29 (Sep 9, 2011)

Hola Curioso

la rutinas de inicio y de interrupción

void IRQ_Init(void)
{
// INTSCR1_MODE1 = 1; //Low-Level-Triggered

  INTSCR1_MODE1 = 0; //interrupcion en flanco de bajada
  INTSCR1_ACK1 = 1;  //limpiar las banderas
  INTSCR1_IMASK1 = 0; //desenmascara o habilita la interrupcion
}

interrupt 2 void IRQ_ISR(void)
{
  INTSCR1_ACK1 = 1;  //limpiar las banderas
  IRQ_INT_FLAG = 1;

}


----------



## curioso207 (Sep 14, 2011)

aqui tienes una porcion de la inicializacion de la interrupcion este con esto podras interrumpir el chip en los pines como cuando quieres un tec


```
; Common initialization of the CPU registers 
  ; ### Init_KBI init code 
        ; KBSCR: IMASK=1 
        BSET    $01,KBSCR
        ; KBIER: KBIE7=0,KBIE6=0,KBIE5=0,KBIE4=0,KBIE3=1,KBIE2=1,KBIE1=1,KBIE0=1 
        MOV     #$0F,KBIER                                        
        ; KBSCR: MODE=0 
        BCLR    $00,KBSCR
        ; KBSCR: ACK=1 
        BSET    $02,KBSCR
        ; KBSCR: IMASK=0 
        BCLR    $01,KBSCR
  ; ### 
        CLI                            ; Enable interrupts 
        RTS


isrINT_KBD:
  ; Write your interrupt code here ... 

        BSET    $02,KBSCR
        ; KBSCR: IMASK=0 
        BCLR    $01,KBSCR
        
 
        RTI
; end of isrINT_KBD

esto seria para el pin irq 

                                      ; ### Init_IRQ init code
                                     ; ** Initialize pin IRQ1 **
                                     ; Disable all IRQ requests
                                     ; INTSCR1: IMASK1=1
        BSET    $01,INTSCR1
                                     ; Set falling edge
                                     ; INTSCR1: MODE1=0
        BCLR    $00,INTSCR1
                                     ; Clear IRQ flag
                                     ; INTSCR1: ACK1=1
        BSET    $02,INTSCR1
                                     ; Enable IRQ requests
                                     ; INTSCR1: IMASK1=0
        BCLR    $01,INTSCR1
                                     ; ###
        ;CLI                          ; Enable interrupts
        RTI
```
saludos


----------



## egp (Sep 17, 2011)

Hola a todos.

Tengo que hacer un programa para 908GZ60 que recibira señales desde largas lineas de 110V AC y lineas de 24V CC.
Luego de pasarlas por diodo rectificador, capacitor tantalio, divisor resistivo, capacitor 100nf, optoacoplador y resistencia pullup entran al micro. Estas señales pueden ser pulsos de 10ms a 100ms como minimo.
¿Cuantas veces se deben leer y con que tiempo para confirmar la señal y el programa no se confunda con un ruido?

¿Hay algun tutorial para eso?

Gracias


----------



## Chico3001 (Sep 18, 2011)

Los picos de ruido de que amplitud esperas que sean?, la confirmacion es para detectar que la señal es estable?

dices que ya pusiste varias cosas, desafortunadamente aveces eso puede interferir aun mas en vez de purificar la señal, asi que necesitariamos ver tu circuito

De entrada si el problema es por voltaje entonces te recomiendo colocar diodos TVS de 5V en la entrada, son identicos a los Zener, pero soportan potencias mayores en tiempos mas cortos

Por otro lado si el problema es que llega un tren de pulsos antes de la señal constante entonces lo que se hace es activar un timer, llega un 1, esperas un tiempo "X" (lo suficiente para dejar pasar el ruido pero no tanto para que se termine la señal a medir) y vuelves a medir, ese tiempo varia mucho segun tu aplicacion, asi que necesitamos mas datos para determinar el optimo


----------



## Mushotoku (Nov 17, 2011)

Hola a todos. 
Les quería hacer una pregunta: ¿como puedo hacer 4 veces LSR en un variable de 2 bytes? ¿Lo puedo hacer directamente? Me confunde un poco el tema de los bits de carry.

Gracias.


----------



## cupajuti (Nov 18, 2011)

Mushotoku dijo:


> Hola a todos.
> Les quería hacer una pregunta: ¿como puedo hacer 4 veces LSR en un variable de 2 bytes? ¿Lo puedo hacer directamente? Me confunde un poco el tema de los bits de carry.
> 
> Gracias.




Hola! Prueba así:

El código sería el siguiente:

lsr variableH ;esto desplaza el byteH cayendo bit0 en carry y "mete cero" por el bit7
ror variableL ;esto desplaza byteL metiendo el carry en bit7. Bit0 cae al carry, pero ;;;;;;;;;;;;;;;;;;;;;;;;;;después será sobreescrito al repetir este par de instrucciones.

...y lo haces cuatro veces. Espero que esté claro.
La clave está en que lsl o lsr "meten ceros y tiran al carry" lo que corresponda, mientras que ror o rol "meten carry y tiran al carry", como si los bit fueran dando vueltas (en realidad, eso hacen!)


----------



## javiercj (Ene 4, 2012)

darth_vader dijo:


> El HC908 es muy buen microprocesador, lo prefiero ante cualquier PIC de 8 bits. Tiene una arquitectura ideal para programar en lenguaje C. Son mucho mas organizados los de Freescale que los de Microchip.
> 
> Lo que me da bronca de Microchip :enfadado: es que para configurar algo tenes que estar buscando varios registros por todo el manual, no son organizados. En cambio estos Freescale solo tenes que mirar el capitulo que necesitas y listo. Lo único malo es que no se consiguen tan facilmente como los PIC.
> 
> Y ni hablar de la instrucciones de hardware, los pic tienen una sola página , estos hc908 tienen como 3 hojas de instrucciones. Yo los prefiero lejos. Ahora estoy investigando los de Texas y los de Atmel, tienen una arquitectura interesante también.



hola amigos.

Pues al contrarios que vosotros no tengo experiencia mucha en estos micros motorolla mc68hc908.

Y he llegado a un puntos de deseperacion ya que no consigo leer ni tampoco escribir ningun micro motorolla ni de esta familia ni de otras hc11 o hc12

Espero vuestra ayuda.

he intentado con todo tipo de programadores con el upa-usb nada, con el xprog-m tampoco

necesito que pines son los necesarios para poder leer el micro y podelo escribir

LLevo unos 9 meses con ellos y nada no hay forma uso estos micros en centralitas de airbag de automocion.

por favor ayuda gracias


----------



## gonpa (Nov 20, 2013)

Hola amigos programadores de freescale, yo estoy usando los MC9S08GT32A en lenguaje C con codewarrior y me vino la necesidad de hacer en un archivo .h unas tablas pero no se como implementarlas en C con codewarrior! pueden ayudarme? 

Estuve migrando mis rutinas de Atmel a freescale, cuando llegue a las rutinas de las pantallas graficas de 128x64 tuve la necesidad de cargar tablas...y no se implementarlas con codewarrior. me ayudan?

Saludos! y desde ya gracias!


----------



## damianpart (Oct 21, 2014)

Me gustaria conseguir algo de información sobre la comunicación en serie del JL8. Estoy intentando comunicar un modulo bluetooth HC 06 con este micro pero la verdad que no sé mucho de comunicacion en serie, lo que me dificulta mucho la programación. Muchas gracias


----------

