Unidad II: Modelo de programacion, terminales Tuesday, February 10, 2009 6:30 PM
• • •
• •
•
• • •
Freescale - Formerly Motorola HCS08 core ○ HC= Freescale 64 LQFP Case 840F 10 mm2 8 bits ○ S08QE • 64kB X 1024 • 96kB • 128kB ○ 08JL ○ 08GP ○ 08AP ○ 08AZ ○ 08JB Compatibles con MCF51QE ○ Para mejorar o incrementar desempeño ○ Arquitectura basada en 32 bits ○ Compatibilidad pin a pin ○ Solo se compila no cambios adicionales ○ Se denominan Flexis por la flexibilidad ○ Cold Fire Modelo de programación: Forma en que se encuentran los regustros del CPU Se tienen 5 registros Hay registros de 8 y 16 bits
Modos de direccionamiento Thursday, February 12, 2009 6:52 PM
IN H
INM
DI R
EX T
IX
IX1
IX2
SP1
SP2
IX+ I X1 +
IM M/ DI R
DI R/ DI R
D I IR/I X+ X+ /DI R
R EL
I nh er en te
Inme diato
D E ire xte cto ndi do
I nd ex ad o (N
Inde xado con desp laza mien
Inde xado con desp laza mien
Stac k point er con desp
Stac k point er con desp
Mo do con pos tincr
S olo M OV
So lo M O V
S olo MO V
Re lat iv o
S olo MO V
o to off de 8 set bits )
to de 16 bits
A punt aa una local idad de me mori a con oper acio n
S olo se us an un a ve z
#= Modo de direc ciona mien to inme diato
Se asi gn a el val or en un a loc ali da d de me mo ria
La dir ecc ion del op era nd o es de 16 bit s
Ap unt aa un a loc ali da d de me mo ria sin op era cio n
A punt aa una local idad de me mori a con oper acio n
CL RA ; a< $0 0
LDA #$3F ;A<$3F
LD A $3 F ;A <(3F )
LD A $2 53 F; A <($2 53 F)
LD A ,X ; El val or de H: X es el ap unt ad or y po ne en A el val or
LDA LDA $50, $155 X 0,X ; ;Se sum aa H:X 0x50 y pone el valor en A
laza mien to de 8 bits
laza em mien ent to o de 16 bits Se utili za par a hac er bar rido s de tabl a
LDA $50, SP ;SP de 16 bits y va al acu mula dor de 8 bits
LDA $155 0, SP ; Ahor a con 16 bits
CB EQ ,X+ ,eti que ta ; Co mp ara ry brin car si es igu al, si si va a etiq uet a
CB EQ $5 0, X+, eti qu eta
M OV #3 F,$ 30 ;Po ne 3F al se g me nt o de me mo ria 30
M O V $3 F, $3 0; Se m ue ve lo qu e co nti en e 3F a la 30
MO V $3 0,X +; Mu eve lo qu e hay en loc alid ad 30 aX y se inc re me nta en
MO V X+, $3 0; Mu eve lo qu e hay en loc alid ad Xa 30 e inc re me nta aX
1 CL RX ;x <$0 0
ADD #$D 5 ;A
AD D $D 5; A($ D5 )
DE CA ;A
CMP #$FF ; A$FF (Solo modi fica CCR -ban deras -)
CM P $F F; A($F F) *C CR
SUB #$FF ; A
SU B $F F; A< -A ($F F)
CPX #$36 ;X<X$36 (Solo modi fica CCR -ban deras -)
CP X $3 6; X($3 6) *C CR
AD D $3 AD 5; A< A+ ($3 AD 5)
CP X $4 B3 6
CPHX #$13 FS ; H:X< -$36 (Solo modi fica CCR -ban deras -)
CP HX #1 3F 5; H: X($1 3F 5) *C CR Es ext en did o, no dir ect o
Instrucciones Thursday, February 19, 2009 6:26 PM
Se encuentran los siguientes datos almacenados en memoria ROM DATA 1: DC.B $4D, $49, $43, $52, $4F,$53, $20, $41 DC.B $52, $45, $20, $46, $55, $4E, $21, $21 DATA 2: DC.B $FA, $29, $22, $0F, $25, $08, $4A, $2E, $10 DC.B $18, $21, $1D, $10, $30, $FF, $FF Y se tienen las siguientes variables declaradas en memoria RAM BUFFER1: DS.B $10 ; Reserva 16 localidades BUFFER2: DS.B $10 ; Reserva 16 localidades BUFFER3: DS.B $10 ; Reserva 16 localidades org $RAMStart Contador DS.B 1 main_loop: MOV #$10, contador contar el numero de bytes CLRH CLRX Etiqueta1 LDA DATA1,X STA BUFFER1,X LDA DATA2,X BUFFER2 STA BUFFER2,X
;Inicializar una localidad de memoria para
;Mover un byte de de DATA1 a BUFFER1 ;Obterner un byte de DATA2 y guardarlo en
INCX ;Incrementar apuntador DEC contador ;Decrementar contador - rel="nofollow"> Se agrego un contador por solicitud en procedimiento BNE Etiqueta1 ;Si el contador no es igual a 0 brincar a etiqueta1 MOV #$10,contador ;Reiniciar el contador de numero de bytes LDHX #$0000 ;Igual a CLRH, CLRX Etiqueta2 LDA BUFFER1,X ;Obtener el valor de BUFFER1 ADD BUFFER1,X ;Sumar con valor de BUFFER2 STA BUFFER3,X ;Almacenar el resultado en BUFFER3 ORA #$20 ;Realizar OR con $20 STA BUFFER4,X ;Almacenar el valor en BUFFER4 INCX ;Incrementar apuntador DEC contador ;Decrementar contador BNE Etiqueta2 ;Si el contador es diferente de 0, brincar a Etiqueta BRA* ;Fin, quedarse aqui Construir un programa en ASM que realice lo siguiente ○ Inicializar BUFFER1 con los 16 bytes almacenados en DATA1 e inicializar BUFFER2 con los 16 bytes almacenados en DATA2 ○ Suma cada byte de BUFFER1 con el correspondiente de BUFFER2 y almacenar resultado en BUFFER3 ○ Hacer una OR de cada byte de BUFFER3 con $20 y almacenar el resultado en BUFFER4 main_loop: MOV #$10, contador ; Inicializar una localidad de memoria para contar el numero de bytes
Convertir un numero empaquetado de 8 bits a un desempaquetado 0x80 -> 128 0x64 -> 100 0x10 -> 16 0x20 -> 32 Hex FF Cent 02 Dec 05 Uni 05
Preguntas Friday, February 27, 2009 10:01 PM
1. For compatibility with older M68HC05 MCUs, the HCS08 resets the stack pointer to $00FF. In the
MC9S08GB60, it is usually best to reinitialize the stack pointer to the top of the RAM ($107F) so the direct page RAM ($0080–$00FF) can be used for frequently accessed RAM variables and bit-addressable program variables. Include the following 2-instruction sequence in your reset initialization routine (where RamLast is equated to $107F in the equate file provided by Freescale). a. Was the code changed to RAMEnd+1? 1. The I bit in the condition code register (CCR) is set to block maskable interrupts until the user program has a chance to initialize the stack pointer (SP) and system control settings. SP is forced to $00FF at reset, but this is almost never where the stack should be located in an HCS08 system. Normally, SP should be changed during reset initialization a. Why on CW is set to 17FF? (LDHX #RAMEnd+1 TXS CLI) 1. What about pshh & pshx???? (Same to pulh & x)
Complemento @2 Thursday, March 05, 2009 6:33 PM
6
000 0110 111 1001 1111 1010
1. La diferencia entre branch & jump es que branch solamente puede ser de a. 0x7F = 0111 1111 - 127 a. 0x80 = 1000 0000 - -128
Puertos Thursday, March 19, 2009 6:20 PM
•
Paralelo puede ser de 4,8 o mas bits
Conexión μC con LCD Tuesday, March 24, 2009 6:36 PM
• • •
En el programa de ejemplo se escribe en el puerto F Lineas adicionales al purto G?? Samsun g
KS066
Hitachi • •
HD4478 0
En el programa de ejemplo se escribe en el puerto F Lineas adicionales al purto G??
DB7 . . . DB0 RS f/n E PTF7 . . . PTF0 PTG2 f/n PTG0
VDD
VSS
VD
+5v
Tierra
Contraste
Práctica 1b Friday, March 27, 2009 4:49 PM
1. Antes de comenzar a elaborar su programa, escriba manualmente la forma en que trabaja el ordenamiento por el método de la burbuja. Use los números de DATOS_ADC para mostrar, paso por paso, cómo funciona el ordenamiento con esos valores. Consiste en ciclar repetidamente a través de la lista, comparando elementos adyacentes de dos en dos. Si un elemento es mayor que el que está en la siguiente posición se intercambian 1. for (i=1; i
lista[j+1]) 4. temp = lista[j]; 5. lista[j] = lista[j+1]; 6. lista[j+1] = temp; 2. Escriba la serie de instrucciones que utilizaría para acceder, uno por uno, a los valores de DATOS_ADC, y realizar la operación OR-exclusiva con $20. LDHX #DATOS_ADC ; Recuperar un dato de la lista CLR I CLR J Ciclo: MOV X+,$A0 LDA $A0 EOR #$20 ; hacer la OR exclusiva con $20. PSHA CPHX #DATOS_ADC + $10 BNE Ciclo a. Al comparar los números, ¿cuál bandera del CCR le dará la indicación de que alguno de ellos es mayor? (considere a los números SIN signo) Carry, zero b. ¿Cuál instrucción de brinco (branch) le permitirá tomar la decisión de intercambiar o no los números comparados, con base en la bandera del punto anterior?
CMP $A0 BHS Cambio c. Escriba la(s) instrucción(es) que le permitirían acceder exactamente a los dos elementos que quedaron a la mitad de la lista. AIS #-8 PULA PULX