Practicas Con MC68HC908QY4
Practicas Con MC68HC908QY4
Practicas Con MC68HC908QY4
Practica #1
D?
LED0
D?
LED0
D?
LED0
D?
U1 VCC
1 LED0
VDD D?
S? 4 2
PTA5/OSC1/AD3/KBI5 PTB7
5 3
PTA4/OSC2/AD2/KBI4 PTB6
SW-PB 8 6
PTA3/RST/KBI3 PTB5
9 7 LED0
PTA2/IRQ/KBI2 PTB4
GND 12 10
S? PTA1/AD1/TCH1/KBI1 PTB3 D?
13 11
PTA0/AD0/TCH0/KBI0 PTB2 GND
14
PTB1
SW-PB 16 15
VSS PTB0
GND MC68HC908QY4CP LED0
GND D?
LED0
D?
LED0
#include <hidef.h> /* for EnableInterrupts macro */
#include <startup.h>
void main(void) {
inicializacion();
PTB= 0xFF;
}else{
PTB = 0x00;
void inicializacion(){
El mismo esquematico
Programa
#include <startup.h>
void main(void) {
inicializacion();
for(;;){
if (PTA_PTA0 == 0){
retardo(20000);
val=val+1;
PTB=val;
/* loop forever */
}
void inicializacion() {
}
Practica 3
Mismo esquematico
Programa
#include <startup.h>
/////variables////////
};
///////funciones//////
void inicializacion(void);
////////programa principal////////////
void main(void) {
inicializacion();
for(;;){
if ( PTA_PTA0 == 0 )
secDerecha();
else if ( PTA_PTA1 == 0 )
secIzquierda();
else
void inicializacion() {
CONFIG2 = 0x00;
void secDerecha() {
int cuenta;
retardo( 20000 );
}
void secIzquierda() {
int cuenta;
retardo( 20000 );
}
Practica 4
D?
LED0
D?
LED0
D?
LED0
D? DS?
10 1
a K GND
9 6
b K
U1 VCC 8
c
1 LED0 5
VDD D? d
4
S? e
4 2 2
PTA5/OSC1/AD3/KBI5 PTB7 f
5 3 3
PTA4/OSC2/AD2/KBI4 PTB6 g
SW-PB 8 6 7
PTA3/RST/KBI3 PTB5 DP
9 7 LED0
PTA2/IRQ/KBI2 PTB4
GND 12 10 Dpy Amber-CC
S? PTA1/AD1/TCH1/KBI1 PTB3 D?
13 11
PTA0/AD0/TCH0/KBI0 PTB2 GND
14
PTB1
SW-PB 16 15
VSS PTB0
GND MC68HC908QY4CP LED0
GND D?
LED0
D?
LED0
Programa
#include <startup.h>
void inicializacion(void);
void main(void) {
inicializacion();
for(;;){
if(PTA_PTA0 == 0){
retardo(24000);
val=val+1;
if ( PTA_PTA1 == 0 ){
retardo(24000);
val=val-1;
PTB=segmentos(val);
/* loop forever */
void inicializacion(){
CONFIG1=0x09;
CONFIG2=0x00;
OSCTRIM=0x80;
PTAPUE=0x3F;
switch (val){
case 0:
valseg=0x3F;
break;
case 1:
valseg=0x06;
break;
case 2:
valseg=0x5B;
break;
case 3:
valseg=0x4F;
break;
case 4:
valseg=0x66;
break;
case 5:
valseg=0x6D;
break;
case 6:
valseg=0x7D;
break;
case 7:
valseg=0x07;
break;
case 8:
valseg=0x7F;
break;
case 9:
valseg=0x6F;
break;
return valseg;
}
Practica 5 y 6
R? U? R? CA
Res2 Res2
1K 1K
Q?
Opto TRIAC Triac
GND
DS?
Lamp
K?
U2
18 1
OUT1 IN1
17 2
OUT2 IN2
16 3 VCC
OUT3 IN3
15 4
OUT4 IN4
14 5
OUT5 IN5
13 6
OUT6 IN6
12 7 Relay-DPST
OUT7 IN7
11 8
OUT8 IN8
10 9
VCC K GND
ULN2803A
D?
GND
D Zener
GND
Esquema para relevador
ULN2803A
D?
D Zener
VCC
R?
GND RPot
1K U1 VCC
1
VDD
S? GND4 2
PTA5/OSC1/AD3/KBI5 PTB7
5 3
PTA4/OSC2/AD2/KBI4 PTB6
SW-PB 8 6
PTA3/RST/KBI3 PTB5
9 7
PTA2/IRQ/KBI2 PTB4
12 10
S? PTA1/AD1/TCH1/KBI1 PTB3
13 11
PTA0/AD0/TCH0/KBI0 PTB2
14
PTB1
SW-PB 16 15
VSS PTB0
MC68HC908QY4CP
GND
Programa, aquí se utilizo el ADC del micro para activar una salida a partir de que rebasa los 2.5
volts en el AN3, pin 4
#include <startup.h>
byte result;
void inicializacion(void);
void main(void) {
inicializacion();
for(;;){
ADSCR = 0x23;
result = ADR;
PTB=result;
if(result>0x7F){
PTA_PTA0=1;
}else{
PTA_PTA0=0;
/* loop forever */
}
void inicializacion(){
CONFIG1=0x09;
OSCTRIM=0x80;
DDRA = 0x1B;
DDRB = 0xFF;
ADICLK = 0x40;
ADSCR = 0x23;
}
Practica 7
Esquematico
U?
1 S? S? S?
VDD
DS?
5 2 4 SW-PB SW-PB SW-PB
DP PTB7 PTA5/OSC1/AD3/KBI5
10 3 5
g PTB6 PTA4/OSC2/AD2/KBI4
9 6 8
f PTB5 PTA3/RST/KBI3
1 7 9
e PTB4 PTA2/IRQ/KBI2
2 10 12
d PTB3 PTA1/AD1/TCH1/KBI1 S? S? S?
4 11 13
c PTB2 PTA0/AD0/TCH0/KBI0
8 6 14
K b PTB1
3 7 15 16 SW-PB SW-PB SW-PB
K a PTB0 VSS
Dpy Blue-CC MC68HC908QY4CP
S? S? S?
#include <startup.h>
void inicializacion(void);
void main(void) {
inicializacion();
PTB=0x00;
for(;;) {
PTA_PTA0=1;
if((PTA_PTA3==1)&&(PTA_PTA0==1)){
PTB=0x06;
retardo(24000);
if((PTA_PTA4==1)&&(PTA_PTA0==1)){
PTB=0x5B;
retardo(24000);
if((PTA_PTA5==1)&&(PTA_PTA0==1)){
PTB=0x4F;
retardo(24000);
PTA_PTA0=0;
PTA_PTA1=1;
if((PTA_PTA3==1)&&(PTA_PTA1==1)){
PTB=0x66;
retardo(24000);
if((PTA_PTA4==1)&&(PTA_PTA1==1)){
PTB=0x6D;
retardo(24000);
if((PTA_PTA5==1)&&(PTA_PTA1==1)){
PTB=0x7D;
retardo(24000);
}
PTA_PTA1=0;
PTA_PTA2=1;
if((PTA_PTA3==1)&&(PTA_PTA2==1)){
PTB=0x07;
retardo(24000);
if((PTA_PTA4==1)&&(PTA_PTA2==1)){
PTB=0x7F;
retardo(24000);
if((PTA_PTA5==1)&&(PTA_PTA2==1)){
PTB=0x67;
retardo(24000);
PTA_PTA2=0;
void inicializacion(){
CONFIG1=0x09;
OSCTRIM=0x80;
DDRA = 0x07;
DDRB = 0xFF;
}
Practica 8
Esquematico, el que vemos anteriormente, con el uln2803 y las salidas al motor PP , la dirección la
controlas por los dipswitch de a0 y a1, y la velocidad mediante el potenciómetro, dependiendo del
valor analógico mayor es la velocidad
S?
GND SW-PB
S?
SW-PB
VCC
R? U? VCC VCC P?
RPot 1 U?
1K VDD 1
1 18
IN1 OUT1 2
4 2 2 17
PTA5/OSC1/AD3/KBI5 PTB7 IN2 OUT2 3
5 3 3 16
PTA4/OSC2/AD2/KBI4 PTB6 IN3 OUT3 4
8 6 4 15
PTA3/RST/KBI3 PTB5 IN4 OUT4 5
GND 9 7 5 14
PTA2/IRQ/KBI2 PTB4 IN5 OUT5
12 10 6 13 Header 5
PTA1/AD1/TCH1/KBI1 PTB3 IN6 OUT6
13 11 7 12
PTA0/AD0/TCH0/KBI0 PTB2 IN7 OUT7
14 8 11
PTB1 IN8 OUT8
16 15
VSS PTB0
9 10
GND COM D
MC68HC908QY4CP
GND ULN2803A
D?
GND
D Zener
VCC
Programa
#include <startup.h>
const unsigned char leds[] = {
};
void inicializacion(void);
void main(void) {
inicializacion();
for(;;) {
ADSCR = 0x23;
valor = ADR;
valor = valor*200;
if(PTA_PTA0 == 0)
secDerecha();
else if (PTA_PTA1 == 0)
secIzquierda();
else
} /* loop forever */
}
void inicializacion(){
CONFIG1= 0x09;
OSCTRIM = 0x80;
void secDerecha() {
int cuenta;
retardo( valor );
void secIzquierda() {
int cuenta;
retardo( valor );
}
Practica 9
J?
U? VCC U? C? VCC 1
1 1 2 6
2
Programa, lo que va a hacer, es mediante la interrupción externa, nosotros vamos a poder contar
los pulsos que nos va a indicar un optointerruptor, y cada segundo, se va a desplegar la velocidad
en la computadora mediante la hyperterminal
Código
#include <startup.h>
unsigned char flag=0;
void delay_baudio(void);
void inicializacion(void);
void Configurar_Timer(void);
void Transmitir_Caracter(void);
void main(void) {
inicializacion();
Configurar_Timer();
EnableInterrupts;
PTB=0x00;
for(;;) {
} /* loop forever */
void inicializacion() {
void Configurar_Timer(void){
TSC1 = 0;
TMODL = 0xFF;
///////////interrupcion externa////////////////
interrupt 2 void cargar_dato_serie( void ) {
flag++;
INTSCR_ACK = 1;
////////////INTERRUPCION TIMER///////////////
Caracter=flag;
Transmitir_Caracter();
flag=0;
/*******************************************************/
/* Subrutina que maneja el Tranmisor */
/*******************************************************/
void Transmitir_Caracter(void){
__RESET_WATCHDOG();
bit =0;
delay_baudio();
do{
PTB_PTB0 = 1; //Pongo TX en 1
delay_baudio();
else
PTB_PTB0 = 0; //Pongo TX en 0
delay_baudio();
bit++;
}while(bit <=7);
delay_baudio();
__RESET_WATCHDOG();
}
void delay_baudio(void){
for(tiempo_bit=0;tiempo_bit <=10;tiempo_bit++){