Microcontroladores HC908 freescale motorola

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.
 
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.
 
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
 
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
 
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


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???
 
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.
**
** ###################################################################
*
 
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.
 
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.
 
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.
 
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
 
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
 
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
 
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.....
 
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
 
Última edición:
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
 
Última edición:
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.
 
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
 
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
 
Última edición:
Atrás
Arriba