Вы находитесь на странице: 1из 24

Universidad Autnoma de Nuevo Len

Facultad de Ingeniera Mecnica y Elctrica

Microcontroladores
Proyecto 1
Argel Daz Garza 1601338
Elihu Emmanuel Escalera Rodrguez 1596688
Homero Aranda Hernndez 1588973

M1
Semestre Enero-Junio
Ing. Sal Montes de Oca Luna

Cd. Universitaria, 04 de Mayo de 2016

Proyecto:
Dos contadores de 0 al 99 que cuenten cada que reciban un pulso de su
respectivo push button.
Se debe dejar libres los pines PB0 y PB1, el SCI y 2 entradas el ADC
Retardo de 1 ms
Lista de materiales:
1 Protoboard
1 Computadora o Laptop
1 Programa Freescale CodeWarrior
1 BDM interface
1 Microcontrolador MC9S08SE8
7 Resistencias de 330 ohm
4 Resistencias de 100 ohm
4 Transistores 2N2222A
4 Displays Catodo Comun
Cable para protoboard
Para esto se dise un programa con el cual cada par de displays aumentaban de
forma unitaria al recibir una seal procedente de un push botton de forma manual,
conectados al comn de estos displays se encontraban 4 transistores haciendo el
trabajo de conmutadores y asi activar cada uno de los display en el momento en
que fuera requerido, estos se encontraban conectados en el colector, teniendo en
el emisor a tierra y la base dirigida hacia el microcontrolador.

Marco Terico
Transistor 2N2222. Es un transistor de silicio y baja potencia, diseado para
aplicaciones de amplificacin lineal y conmutacin. Uno de sus principales
fabricantes es la Philips Semiconductors. Identificado tambin como PN2222 por
otros fabricantes.
Descripcin

Es un transistor de silicio de mediana potencia con una polaridad npn, construido


mediante el proceso de base epitaxial y designado para aplicaciones de
amplificacin lineal y conmutacin. Puede amplificar pequeas corrientes a
tensiones pequeas o medias y trabajar a frecuencias medianamente altas. Es
fabricado en diferentes formatos, los ms comunes son los TO-92,TO-18,SOT-23,
y SOT-223.
Principales caractersticas

Voltaje colector emisor en corte 60V (Vceo)

Corriente de colector constante 800mA (Ic)

Potencia total disipada 500mW(Pd)

Ganancia o hfe 35 mnima

Frecuencia de trabajo 250 Mhz (Ft)

Encapsulado de metal TO-18

Estructura NPN

Su complementario PNP es el Transistor 2N2907

Display Catodo Comun.


El displays segmentos, es un componente que se utiliza para la representacin
de nmeros en muchos dispositivos electrnicos. Cada vez es ms frecuente
encontrar LCDs en estos equipos (debido a su bajsima demanda de energa),
todava hay muchos que utilizan el display de 7 segmentos por su simplicidad.
Este elemento se ensambla o arma de manera que se pueda activar cada
segmento (diodo LED) por separado logrando de esta manera combinar los
elementos y representar todos los nmeros en el display (del 0 al 9). El display
de 7 segmentos ms comn es el de color, por su facilidad de visualizacin.
El display ctodo comn tiene todos los nodos de los diodos LED unidos y
conectados a tierra. Para activar un segmento de estos hay que poner el nodo
del segmento a encender a Vcc (tensin de la fuente) a travs de una
resistencia para limitar el paso de la corriente.

Diagramas de los componentes

Transistor 2N2222A

Display de Ctodo Comn.

Microcontrolador MC9S08SE8

Asignacin de pines del microcontrolador.


PTC6 = Pin B del display
PTC7= Pin A del display
PTC5= Pin C del display
PTC4= Pin D del diaplay
PTC3=Pin E del display
PTC2= Pin F del display
PTC1= Pin G del display
PTB6= Al switch 1
PTB7= Al Switch 2
PTA0= Al transistor 2
PTA1= Al transistor 1
PTA2= Al transistor 4
PTA3= Al transistor 3

Diagrama de Flujo

Cdigo en Ensamblador
; Include derivative-specific definitions
INCLUDE 'derivative.inc'
;
; export symbols
;
XDEF _Startup
ABSENTRY _Startup

;
; variable/data section
;
ORG

RAMStart

ExampleVar: DS.B 1

ORG

ROMStart

DC.B

DISPLAYS:
DC.B %11111100 ;0
DC.B %01100000 ;1
DC.B %11011010 ;2
DC.B %11110010 ;3
DC.B %01100110 ;4
DC.B %10110110 ;5
DC.B %10111110 ;6

; Insert your data definition here

DC.B %11100000 ;7
DC.B %11111110 ;8
DC.B %11110110 ;9

_Startup:
LDHX #RAMEnd+1

; initialize the stack pointer

TXS
CLI

; enable interrupts

U1 EQU $B0
para unas etiquetas que nosotros elegimos

; Declaramos direcciones

D1 EQU $B1
U2 EQU $B3
D2 EQU $B4
ENTRADAS EQU $B5
BOTON1 EQU $B6
CON1 EQU $B8
CON2 EQU $B9
CON3 EQU $BA
CON4 EQU $BB

JSR DECLARACIONES
MOV #$0,U1
MOV #$0,D1
MOV #$0,U2
MOV #$0,D2
MOV #$0,ENTRADAS
MOV #$0,BOTON1

;Brincamos a la etiqueta de declaraciones


;Cargamos un 0 a las etiqetas anteriores

MOV #$9,CON1
MOV #$9,CON2
MOV #$9,CON3
MOV #$9,CON4

mainLoop:
JSR BARRIDO
impresin del codigo en los displays

;Brincamos al barrido, que es la

LDA PTBD
AND #$C0
CMP ENTRADAS
BEQ mainLoop
STA ENTRADAS
AND #$40
CMP BOTON1
BEQ SW1
STA BOTON1

BRCLR 6,PTBD,CONTADOR1
etiqueta CONTADOR1

;Si el bit 6 del PTBD es cero, se salta a la

feed_watchdog
BRA mainLoop

;Brincamos al mainLoop

SW1:
BRCLR 7,PTBD,CONTADOR2
etiqueta CONTADOR1
feed_watchdog

;Si el bit 6 del PTBD es cero, se salta a la

BRA mainLoop

CONTADOR1: JSR CONT1


CONT1
BRA mainLoop

CONTADOR2: JSR CONT2


CONT2
BRA mainLoop

CONT1:
CON1

LDA CON1

CMP #$0
BNE UNIDADES1
UNIDADES1
BRA RSTU1

UNIDADES1: INC U1
DEC CON1

;Brincamos al mainLoop

;Brincamos a la etiqueta de
;Brincamos al mainLoop

;Brincamos a la etiqueta de
;Brincamos al mainLoop

;Cargamos el acumulador con


;Comparamos con 0
;Mientras no sea cero, brincamos a
;Brincamos a RSTU1

;Incrementamos uno U1
;Decrementamos uno CON1

RTS

DECENAS1:

INC D1

DEC CON2

;Incrementamos uno D1
;Decrementamos uno CON2

RTS

RSTU1:

LDA #$0

;Cargamos A con 0

STA U1

;Lo almacenamos en U1

LDA #$9

;Cargamos A con 9

STA CON1

;Lo almacenamos en CON1

LDA CON2

;Cargamos CON2 en el acumulador

CMP #$0

;Comparamos con un 0

BNE DECENAS1
DECENAS1
BRA RESTD1

RESTD1:
con 0

LDA #$0

;Mientras no sea cero, saltamos a


;Saltamos a RESTD1

;Cargamos el acumulador

STA D1

;Lo almacenamos en D1

LDA #$9

;Cargamos el acumulador con 9

STA CON2

;Lo almacenamos en CON2

RTS

CONT2:
LDA CON3
que hay en CON3

;Cargamos el acumulador con lo

CMP #$0

;Lo comparamos con 0

BNE UNIDADES2
UNIDADES2

;Mientras no sea cero, brincamos a

BRA RSTU2

UNIDADES2: INC U2
DEC CON3

;Brincamos a RSTU2

;Incrementamos uno U2
;Decrementamos uno CON3

RTS

DECENAS2: INC D2
DEC CON4
RTS

;Incrementamos uno D2
;Decrementamos uno CON4

RSTU2:
con 0

LDA #$0

;Cargamos el acumulador

STA U2

;Lo almacenamos en U2

LDA #$9

;Cargamos el acumulador con 9

STA CON3
LDA CON4
en CON4

;Lo almacenamos en CON3


;Cargamos el acumulador con lo que hay

CMP #$0

;Lo comparamos con 0

BNE DECENAS2
DECENAS2

;Mientras no sea cero, brincamos a

BRA RESTD2

RESTD2:
con 0

;Brincamos a RESTD2

LDA #$0

;Cargamos el acumulador

STA D2

;Lo almacenamos en D2

LDA #$9

;Cargamos el acumulador con 9

STA CON4

;Lo almacenamos en CON4

RTS

DECLARACIONES:
LDA #$0

;Declaramos el puerto B

STA PTBDD

;como entrada

LDA #$C0

;Declaramos resistencias de Pull Up

STA PTBPE

;a bit 6 y bit 7 del puerto B

LDA #$FF

;Declaramos el puerto BC

STA PTCDD

;como salida

LDA #$0F

;Declaramos los bits del 0 al 3 del puerto

A
STA PTADD

;Como salidas

RTS
BARRIDO:
feed_watchdog
;Encendemos el display U1
CLRH

;Borramos el registro HX

CLRX

LDA #$1

;Cargamos 1 al PTAD para polarizar el transistor de U1

STA PTAD
LDX U1
LDHX $E000,X

STX PTCD
BSR RETARDO

;Cargamos X con U1
;Cargamos HX con la direccion $E000+X

;Lo cargamos al PTCD


;Brincamos a un retardo

;Encendemos el display D1

CLRH

;Borramos el registro HX

CLRX
LDA #$2

;Cargamos 2 al PTAD para polarizar el transistor de D1

STA PTAD
LDX D1
LDHX $E000,X

;Cargamos X con D1
;Cargamos HX con la direccion $E000+X

STX PTCD
BSR RETARDO

;Lo cargamos al PTCD


;Brincamos a un retardo

;Encendemos el display U2
CLRH

;Borramos el registro HX

CLRX
LDA #$4

;Cargamos 4 al PTAD para polarizar el transistor de U2

STA PTAD
LDX U2
LDHX $E000,X

STX PTCD
BSR RETARDO

;Cargamos C con U2
;Cargamos HX con la direccion $E000+X

;Lo cargamos al PTCD


;Brincamos a un retardo

;Encendemos el display D2

CLRH

;Borramos el registro HX

CLRX
LDA #$8

;Cargamos 8 en PTAD para polarizar el transistor de D2

STA PTAD
LDX D2
LDHX $E000,X

STX PTCD
BSR RETARDO

;Cargamos X con D2
;Cargamos HX con la direccion $E000+X

;Lo cargamos al PTCD


;Brincamos a un retardo

RTS

;Volvemos a la subrutina

RETARDO: LDHX #$FF

;Cargamos HX con FF

CICLO: feed_watchdog

LDA #$1

;Cargamos A con 1

CICLO2: DECA

;Decrementamos A

BNE CICLO2
AIX #-1

;Si no es 0 saltamos al CICLO2


;Si es 0 restamos 1 a X

CPHX #0

;Comparamos HX con 0

BNE CICLO

;Si no es 0 Saltamos a CICLO

RTS

;Regresamos a la subrutina

RETARDO2: LDHX #$3FFF

CICLO4: feed_watchdog

LDA #$1

CICLO3: DECA
BNE CICLO3
AIX #-1
CPHX #0
BNE CICLO4

RTS

;**************************************************************
;* spurious - Spurious Interrupt Service Routine.
;*

(unwanted interrupt)

*
*

;**************************************************************
spurious:

; placed here so that security value

NOP

; does not change all the time.

RTI

;**************************************************************
;*

Interrupt Vectors

;**************************************************************
ORG $FFFA

DC.W spurious

DC.W spurious

; SWI

DC.W _Startup

; Reset

Cdigo

Conclusiones.-

Luego de la realizacin de este proyecto y durante el mismo, lo ms sencillo de


realizar o al menos lo que pareci ser lo ms sencillo fue el armar las
conexiones en el protoboard pues solo debamos guiarnos de los datasheets
para poder disear el circuito, donde s se encontraron una serie de
inconvenientes y problemas, fue durante el diseo del programa de
funcionamiento pues nos topamos con problemas en cosas como las
interrupciones o el que no contara cuando deba, o algunas situaciones
similares y creo que el poder resolver esos detalles fue el mayor reto dentro de
este proyecto, ya que en ocasiones pareciera que es ms difcil encontrar el
error en el programa que en si resolverlo.

Вам также может понравиться