Академический Документы
Профессиональный Документы
Культура Документы
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
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
Estructura NPN
Transistor 2N2222A
Microcontrolador MC9S08SE8
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
DC.B %11100000 ;7
DC.B %11111110 ;8
DC.B %11110110 ;9
_Startup:
LDHX #RAMEnd+1
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
MOV #$9,CON1
MOV #$9,CON2
MOV #$9,CON3
MOV #$9,CON4
mainLoop:
JSR BARRIDO
impresin del codigo en los displays
LDA PTBD
AND #$C0
CMP ENTRADAS
BEQ mainLoop
STA ENTRADAS
AND #$40
CMP BOTON1
BEQ SW1
STA BOTON1
BRCLR 6,PTBD,CONTADOR1
etiqueta CONTADOR1
feed_watchdog
BRA mainLoop
;Brincamos al mainLoop
SW1:
BRCLR 7,PTBD,CONTADOR2
etiqueta CONTADOR1
feed_watchdog
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
;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
LDA CON2
CMP #$0
;Comparamos con un 0
BNE DECENAS1
DECENAS1
BRA RESTD1
RESTD1:
con 0
LDA #$0
;Cargamos el acumulador
STA D1
;Lo almacenamos en D1
LDA #$9
STA CON2
RTS
CONT2:
LDA CON3
que hay en CON3
CMP #$0
BNE UNIDADES2
UNIDADES2
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
STA CON3
LDA CON4
en CON4
CMP #$0
BNE DECENAS2
DECENAS2
BRA RESTD2
RESTD2:
con 0
;Brincamos a RESTD2
LDA #$0
;Cargamos el acumulador
STA D2
;Lo almacenamos en D2
LDA #$9
STA CON4
RTS
DECLARACIONES:
LDA #$0
;Declaramos el puerto B
STA PTBDD
;como entrada
LDA #$C0
STA PTBPE
LDA #$FF
;Declaramos el puerto BC
STA PTCDD
;como salida
LDA #$0F
A
STA PTADD
;Como salidas
RTS
BARRIDO:
feed_watchdog
;Encendemos el display U1
CLRH
;Borramos el registro HX
CLRX
LDA #$1
STA PTAD
LDX U1
LDHX $E000,X
STX PTCD
BSR RETARDO
;Cargamos X con U1
;Cargamos HX con la direccion $E000+X
;Encendemos el display D1
CLRH
;Borramos el registro HX
CLRX
LDA #$2
STA PTAD
LDX D1
LDHX $E000,X
;Cargamos X con D1
;Cargamos HX con la direccion $E000+X
STX PTCD
BSR RETARDO
;Encendemos el display U2
CLRH
;Borramos el registro HX
CLRX
LDA #$4
STA PTAD
LDX U2
LDHX $E000,X
STX PTCD
BSR RETARDO
;Cargamos C con U2
;Cargamos HX con la direccion $E000+X
;Encendemos el display D2
CLRH
;Borramos el registro HX
CLRX
LDA #$8
STA PTAD
LDX D2
LDHX $E000,X
STX PTCD
BSR RETARDO
;Cargamos X con D2
;Cargamos HX con la direccion $E000+X
RTS
;Volvemos a la subrutina
;Cargamos HX con FF
CICLO: feed_watchdog
LDA #$1
;Cargamos A con 1
CICLO2: DECA
;Decrementamos A
BNE CICLO2
AIX #-1
CPHX #0
;Comparamos HX con 0
BNE CICLO
RTS
;Regresamos a la subrutina
CICLO4: feed_watchdog
LDA #$1
CICLO3: DECA
BNE CICLO3
AIX #-1
CPHX #0
BNE CICLO4
RTS
;**************************************************************
;* spurious - Spurious Interrupt Service Routine.
;*
(unwanted interrupt)
*
*
;**************************************************************
spurious:
NOP
RTI
;**************************************************************
;*
Interrupt Vectors
;**************************************************************
ORG $FFFA
DC.W spurious
DC.W spurious
; SWI
DC.W _Startup
; Reset
Cdigo
Conclusiones.-