Escolar Documentos
Profissional Documentos
Cultura Documentos
SALIDA
DDR 7 6 5 4 3 2 1
7 6 5 4 3 2 1
POR 7 6 5 4 3 2 1
x
Tx
Entrada y alta
impedancia
Salida 0
Entrada y Pull-Up
Salida 1
Escribir en los
prticos
NEMNICO
INSTRUCCIN
FUNCIN
IN
IN Rd, PINx
IN Rd, PORTx
IN Rd, DDRx
SBIC
SBIC PINx,b
SBIS
SBIS PINx,b
SBIC
SBIC PORTx,b
SBIS
SBIS PORTx, b
SBIC
SBIC DDRx,b
SBIS
SBIS DDRx,b
OUT
OUT PORTx, Rr
SBI
SBI PORTx,b
CBI
CBI PORTx, b
Bit para desactivar el PULL-UP de todos los pines de todos los puertos, se
encuentra en el registro de control de MCU conocido como, MCUCR.
Resetear este bit, implica configurar el PUD con 0L.
Modo sleep
Restas
Nemnico
Instruccin
SUB
SUB Rd, Rr
SBC
SBC Rd, Rr
SUBI
SUBI Rd, K
SBCI
SBCI Rd, K
SBIW
SBIW Rd: Rd+1,K
Funcin
Rd=Rd-Rr
Rd=Rd-Rr-c
Rd=Rd-k
Rd=Rd-k-c
Rd+1:Rd=Rd+1:Rd-k
; R21=$29
; R21=R21-18 = 29-
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Formato:
SBC Rd, Rr
; R18=$E7
; R19=$27
; R20=$96
; R21=$12
; R18=R18-R20= 62-96 = CChex C=1
; R19=R19-R21-C=27-12-1 =14
hex
10
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Multiplicacin
Nemnico
Instruccin
Aplicacin
Byte1
Byte2
Byte alto
del
resultado
Byte bajo
del
resultado
MUL
MUL Rd, Rr
Nmeros sin
signo
Rd
Rr
R1
R0
MULS
MULS Rd, Rr
Nmeros
con signo
Rd
Rr
R1
R0
MULSU
MULSU Rd, K
Nmeros sin
signo con
nmeros
con signo
Rd
Rr
R1
R0
11
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Operaciones lgicas
Nemnico
Instruccin
Resultado
Funcin
AND
AND Rd, Rr
Rd=Rd.Rr
AND
ANDI
ANDI Rd, k
Rd=Rd.k
AND inmediata
OR
OR Rd, Rr
Rd=Rd v k
OR
ORI
ORI Rd, K
Rd=Rd v k
OR inmediata
EOR
EOR Rd, Rr
Rd=Rd+Rr
OR Exclusiva
NEG
NEG Rd
SBR
SBR Rd, K
Rd=Rd v k
SER
SER Rd
Rd=0xFF
Complemento a 2
12
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Operaciones lgicas
AND
X
OR
X.Y
EX-OR
X.Y
X.Y
13
Intrucciones de Uc ATmega164p
Instrucciones aritmticas y Lgicas
Operaciones lgicas
o
Ejemplo 1:
LDI
R21,0x35
ANDI R21,0x0F
R20=0x05 0011
0000
0000
; R21=$35
; R21=R21 AND 0x0F
0101
1111
0101
14
Intrucciones de Uc ATmega164p
Directivas adicionales
Directiva
Funcin
.BYTE
VALOR
.DSEG
.CSEG
.DW
Segmento
SRAM
CODIGO
15
Intrucciones de Uc ATmega164p
Manejo del Stack
Nemnico
PUSH
Instruccin
PUSH Rr
POP
POP Rr
Funcin
Guardar un registro
en el STACK.
Rr=Registro de
propsito General
Retorna un valor
almacenado en el
STACK.
Rr=Registro de
propsito General
16
Intrucciones de Uc ATmega164p
Ejercicios:
.DB
0x4D
0x49
0x43
0x52
0x51
0x50
0x53
MICROPROCESADOS=15 posiciones
17
Intrucciones de Uc ATmega164p
Ejercicios:
18
Intrucciones de Uc ATmega164p
Barrido de displays: Consiste en mostrar valores en forma secuencial
Intrucciones de Uc ATmega164p
Barrido de displays:
Los displays se activarn con la
corriente que proporcionen los
pines del puerto (Puerto 2). Es
recomendable emplear
amplificadores de corriente para
garantizar la activacin del display
considerando que la corriente que
provee cada pin del puerto es
baja. La amplificacin puede ser
realizada mediante transistores.
En el grfico se muestra la
conexin de un arreglo de 4
displays del tipo ctodo comn.
o Las salidas 1,2,3,4 se conectarn al
puerto (Puerto2)que controla la
activacin de los displays.
o Las salidas ABDCEFG se conectarn
al puerto (Puerto1) encargado de
activar los 7 segmentos de los
displays,
20
Intrucciones de Uc ATmega164p
Barrido de displays: (Circuito propuesto para la prctica de Laboratorio)
21
Intrucciones de Uc ATmega164p
Barrido de displays: (Circuito propuesto para la prctica de Laboratorio)
Si se considera que:
o Las salidas para la activacin de los
4 dgitos se conectan al PORTB.
Slo se emplearn 4 bits del
registro de salida del puerto para el
proceso de activacin.
o Las salidas del Control de
Segmentos se conectan al PORTA.
o Se han definido 4 dgitos para
mostrar los resultados de la
multiplicacin. (o de cualquier
operacin)
dmil : miles
dcen: centenas
ddec: decenas
duni: Unidades
o Se realiza la siguiente subrutina
para el barrido de displays.
22
Intrucciones de Uc ATmega164p
Barrido de displays: (Circuito propuesto para la prctica de Laboratorio)
Subrutina_barrido:
OUT PORTA, DMIL
OUT PORTB, 0b00000001
CALL RETARDO
OUT PORTB, OB00000000
23
Intrucciones de Uc ATmega164p
24
9
25
Restas Sucesivas:
2. Este mtodo consiste en realizar restas sucesivas de cada dgito que forma el
nmero. Las restas se realizan hasta obtener un resultado negativo,
1.
6.
2.
7.
3.
8.
4.
9.
5.
10.
Fin de la resta ya
que el resultado
es negativo 26
Restas Sucesivas:
Miles
1.
6.
2.
7.
3.
8.
En total se realiz la
resta 9 veces, este valor
9 representa la
conversin del primer
dgito.
Dgito miles = 9
4.
9.
5.
10.
27
Restas Sucesivas:
Centenas
6.
2.
7.
3.
8.
4.
9.
5.
10.
Fin de la resta ya
que el resultado
es negativo 29
Restas Sucesivas:
Centenas
1.
6.
2.
7.
3.
8.
En total se realiz la
resta 9 veces, este valor
9 representa la
conversin del segundo
dgito.
Dgito centenas = 9
4.
9.
5.
10.
30
Restas Sucesivas:
Decenas
Valor a restar = 99
Valor a considerar en la resta por Dgito
decenas = 10
31
6.
2.
7.
3.
8.
4.
9.
5.
10.
Fin de la resta ya
que el resultado
es negativo 32
Restas Sucesivas:
Decenas
1.
6.
2.
7.
3.
8.
4.
9.
5.
10.
En total se realiz la
resta 9 veces, este valor
9 representa la
conversin del tercer
dgito.
Dgito decenas = 9
33
Restas Sucesivas:
Decenas
Valor a restar = 9
Valor a considerar en la resta por Dgito
unidades= 1
34
6.
2.
7.
3.
8.
4.
9.
5.
10.
Fin de la resta ya
que el resultado
es negativo 35
Restas Sucesivas:
Unidades
1.
6.
2.
7.
3.
8.
4.
9.
5.
10.
En total se realiz la
resta 9 veces, este valor
9 representa la
conversin del cuarto
dgito.
Dgito unidades = 9
36
Restas Sucesivas:
Resultado Final
El resultado final ser igual al nmero de veces que se
realiz la resta con resultados positivos en cada dgito.
Nmero de
restas con
resultados
positivos
Miles
Centenas
Decenas Unidades
9
Para programar una subrutina que realice este mtodo, ser deber
realizar las operaciones en nmeros binarios. Las restas sucesivas pueden
estar integradas en un lazo y se definir un contador que almacenar el
Nmero de restas con resultados positivos.
Cuando llegue a un resultado negativo de la resta debe realizar un salto
al siguiente dgito y proceder a realizar la respectiva suma para
transformar el resultado negativo a positivo y as obtener el valor inicial
para las restas sucesivas del respectivo dgito.
37
38
SUBRUTINA_BCD_SEGMENTOS
; Guardo en el Stack los siguientes valores
PUSH R20
PUSH ZH
PUSH ZL
; Proceso a la lectura de los valores que tengo
almacenada en la tabla para el DIGBCD0
LDS R20, DIGBCD0
; DIGBCD0=R20
LDI ZH,HIGH(TABLA_7SEG<<1)
LDI ZL,LOW(TABLA_7SEG<<1)
ADD ZL,R20
CLR R20
ADC ZH,R20
LPM R20,Z
STS DIGBCD0 ,R20
39
0b00111111,
0b01011011,
0b01100110,
0b01111101,
0b01111111,
0b00000110
0b01001111
0b01101101
0b00000111
0b01101111
;
;
;
;
;
0,1
2,3
4,5
6,7
8,9
42