Anda di halaman 1dari 17

Contenido

Captulo 1: Introduccin .................................................................................................................. 1


1.1 Concepto de microcontrolador ............................................................................................. 2
1.2 Lnea AVR ............................................................................................................................... 2
1.3 Conceptos Bsicos ................................................................................................................. 5
1.4 Programacin ensamblador y lenguaje C .............................................................................. 5
Captulo 2: Arquitectura bsica de un microcontrolador ................................................................ 6
2.1 Elementos bsicos en un microcontrolador 6 hrs ................................................................. 6
Captulo 3: Lenguaje Ensamblador y conjunto de instrucciones 7 hrs.......................................... 14
Captulo 4: Perifricos 6 hrs........................................................................................................... 15
Captulo 5: Interrupciones 7 hrs .................................................................................................... 15
Captulo 6: Temporizadores 7hrs ................................................................................................... 15

Captulo 7: Comunicacin Serial 6 hrs ........................................................................................... 15


Captulo 8: Conversin Analgica Digital 9 hrs .............................................................................. 15

Captulo 1: Introduccin
1.1 Concepto de microcontrolador
Un microcontrolador (MCU o C, abreviatura de unidad de microcontrolador) es un pequeo

ordenador ( SoC,

circuito integrado que contiene un ncleo de procesador (CPU), unidades de


de entrada / salida perifricos. La memoria del programa
en forma de RAM ferroelctrica flash, NOR u OTP ROM tambin se incluye a menudo en el chip, as como
una tpicamente pequea cantidad de memoria RAM. Estas partes estn interconectadas dentro del

small computer) en un solo

memoria (RAM Y ROM) y perifricos programables

microcontrolador, y en conjunto forman lo que se le conoce como microcomputadora. Los microcontroladores


estn diseados para aplicaciones embebidas, en contraste con los microprocesadores utilizados
en ordenadores personales u otras aplicaciones de propsito general que consisten en varios chips discretos.
Se puede decir con toda propiedad que un microcontrolador es una microcomputadora completa encapsulada
en un circuito integrado.

Figura 1

Los microcontroladores siguen una secuencia de instrucciones guardada en la memoria. A este conjunto de
instrucciones se le llama programa. Tpicamente el tamao de los programas debe ser menor que el tamao de
la memoria disponible en el chip, ya que sera costoso proporcionar memoria externa expandible. Dependiendo
de la marca y tipo de microcontrolador, el fabricante define los comandos, estableciendo un lenguaje
ensamblador de bajo nivel y un compilador para lenguajes de alto nivel.
Existe una gran variedad de modelos de microcontroladores: Freescale, Intel, Atmel, Renesas, Toshiba, Analog
Devices, Texas Instruments, entre muchos otros.

1.2 Lnea AVR


Para el curso de microcontroladores, se ha seleccionado la lnea AVR de Atmel. AVR se desarroll en el ao 1996
por Atmel Corporation. La arquitectura del AVR fue desarrollado por Alf-Egil Bogen y Vegard Wollan. AVR debe
su nombre a sus desarrolladores y significa Alf-Egil Bogen Vegard Wollan RISC microcontrolador, tambin
conocido como avanzada de RISC (del ingls Reduced Instruction Set Computer, en espaol Computador con
Conjunto de Instrucciones Reducidas) virtual. El AT90S8515 fue el primer microcontrolador que se basa en la
arquitectura AVR sin embargo el primer microcontrolador en llegar al mercado comercial es el AT90S1200 en el
ao 1997.
Los microcontroladores AVR estn disponibles en tres categoras:
1. ATinyAVR - Menos de memoria, tamao pequeo, apto slo para las aplicaciones ms simples
2. ATmegaAVR - estos son los ms populares que tienen una buena cantidad de memoria (hasta 256 KB), mayor
nmero de perifricos incorporado y apto para uso moderado a aplicaciones complejas.
3. ATXmegaAVR - Se utiliza comercialmente para aplicaciones complejas, que requieren memoria de programa
grande y alta velocidad.
4. Classic AVR AT90S1200.
El nmero de parte est consituido de la siguiente manera:

NOMBRE DE LA SERIE
TinyAVR
MegaAVR
XmegaAVR

PINES
6-32
28-100
44-100

El AVR es una CPU de arquitectura

MEMORIA FLASH
0.5 8K
4 256 K
16 384 KB

CARCTERISTICAS ESPECIALES
Dimensiones pequeas
Perifricos extendidos
DMA, Sistema de Eventos incluido

Harvard (que es una arquitectura de computadora con pistas

de almacenamiento y de seal fsicamente separadas para las instrucciones y para los datos). El AVR fue
diseado desde un comienzo para la ejecucin eficiente de cdigo C compilado. Como este lenguaje utiliza
profusamente punteros para el manejo de variables en memoria, los tres ltimos pares de registros internos del

procesador son usados como punteros de 16 bit al espacio de memoria externa, bajo los nombres X, Y y Z. Esto
es un compromiso que se hace en arquitecturas de ocho bit desde los tiempos de Intel 8008, ya que su tamao
de palabra nativo de 8 bit (256 localidades accedidas) es pobre para direccionar.
Especficamente, el microcontrolador usado en curso es el ATmega328p, en encapsulado tipo DIP (Dual In-Line
Package) de 28 pines. Es altamente recomendable que al trabajar con un microcontrolador, se tenga a la mano
el datasheet correspondiente, y que cada paso que se d, se verifique la informacin en el documento (link del
datasheet): http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA168A-168PA-328-328P_datasheet_Complete.pdf

Figura 2

Bsicamente, el microcontrolador puede iniciar a funcionar usando las conexiones que se muestran:

En las terminales 7 y 8, se conecta la alimentacin digital Vcc y GND del sistema. De acuerdo a las
especificaciones elctricas del dispositivo (Seccin 29, del datasheet), el voltaje den operacin se encuentra
entre 1.8V y 5.5V.
Internamente, el C tiene un oscilador de 1Mhz, el cual es utilizado para establecer la base de tiempo del circuito.
En caso de requerir cambiar la base de tiempo, entre las terminales 9 y 10 se coloca un oscilador o XTal. Al
habilitar el oscilador externo, estas terminales son activadas como entradas.
Tarea: Investigar diferentes tipos de cristales.
El estado de default del PC6, es como entrada de RESET, con activacin en bajo. El objetivo de este pin es
reiniciar la secuencia de instrucciones. Esta funcionalidad es indispensable para la programacin del micro.
Aunque la funcionalidad de conversin Analgica-Digital no sea utilizada, las terminales de alimentacin AVcc y
GND, pines 20 y 22 respectivamente, son conectados a la alimentacin digital.

1.3 Conceptos Bsicos


a) Pinout. Los pines son las terminales del microcontrolador con los cuales se establece la interaccin
externa/interna. El pinout o configuracin de pines describe la funcionalidad de cada uno,
sobreentendiendo que tal funcionalidad no es nica, puede ser configurada usndolos los registros o
fusibles.

b) Mapa de Memoria. Existen diferentes tipos de memoria dentro del C, cada memoria tiene su uso en
particular. La memoria Flash se utiliza para grabar el programa de usuario, la memoria RAM guarda los
datos o variables que se utilizan durante la ejecucin del programa, la memoria EEPROM es
comnmente usada para guardar datos No Voltiles, pero regrabables. La asignacin de direcciones
correspondiente a cada seccin se le conoce como mapa de memoria.

c) GPIO. Los General Port Input/Output son terminales que sirven como puertos de entrada o salida
digitales. Pueden ser usados como byte completo o de manera individual.

d) Registros de propsito general.


e) Registros de estatus.
f)

Bus de datos, bus de direcciones

En las siguientes secciones se definirn con ms detalle estos conceptos, pero su uso no se puede
evadir al explicar cada definicin.

1.4 Programacin ensamblador y lenguaje C


La arquitectura de los microcontroladores AVR fue desarrollada teniendo en mente el lenguaje C con
el fin de compilar un cdigo eficiente en C para AVR. Para mejorar esta caracterstica an ms, el
desarrollo del compilador de C se inici antes de la arquitectura y el conjunto de instrucciones se
hubieran terminado.
Conforme el uso de lenguajes de alto nivel se ha incrementado rpidamente en desarrollos de
sistemas embebidos, el crear una arquitectura basada en C parece muy adecuada. Sin embargo, en
los AVR se impone igualmente el uso de lenguaje ensamblador, que es el lenguaje de bajo nivel, ya

que muchos de los desarrolladores argumentan cdigo optimizado y completo control de registros.
En cualquiera de ambos casos, el direccionamiento directo y reducido del AVR, permite una
rapidez de procesamiento interesante.

Captulo 2: Arquitectura bsica de un microcontrolador


2.1 Elementos bsicos en un microcontrolador 6 hrs
a) CPU
b) Memoria
c) Puertos de Propsito general (GPIO)
https://blog.jcole.us/2010/07/17/architecture-of-the-avr/

Memorias

La arquitectura AVR hace uso de cuatro diferentes tipos de memorias:


Flash
La memoria flash, o simplemente flash, es borrable, de almacenamiento no voltil
(que no requiere ningn refresca para mantener el almacenamiento de datos) que
se utiliza para almacenamiento de programas. Cuando se haya compilado un
programa y al cargarlo en el dispositivo, aqu es donde se almacena. Cuando el
programa se ejecuta, se ejecuta directamente desde la memoria flash (no se copia
en la memoria RAM como la mayora de los PC haran).
SRAM

RAM esttica (SRAM) se utiliza para el estado transitorio del programa (como son
las variables), as como el stack del programa y cualquier direccionamiento
realizado por el programa. Cuando se inicia el programa, todas las variables
globales se inicializan en la SRAM por una rutina especial generada
automticamente por el compilador. La arquitectura AVR no inherentemente o
automticamente restablece la memoria, por lo que, sin explcitos resets hechos por
el programa (generalmente automtico) los contenidos de la memoria permanece
despus de los reinicios. (Este hecho en realidad puede ser utilizado por el
programa mediante la asignacin de las variables en la seccin "NoInit").

EEPROM
EEPROM (elctricamente borrable y programable, memoria de slo lectura) se
utiliza para el almacenamiento permanente no voltil. Es un buen sitio para escribir
los valores de configuracin (como las tasas de baudios, identificadores nicos,
etc.), para realizar un seguimiento de los contadores durante un largo plazo, y para
mantener datos estticos que no se necesita con frecuencia. Acceder a la memoria
EEPROM requiere instrucciones especiales y es bastante lento en comparacin con
SRAM, y puede ser arriesgado si el dispositivo se queda sin alimentacin (los datos
pueden estar daados). Debido al nmero limitado de operaciones de escritura que
puede manejar EEPROM (aproximadamente 100.000) antes de la falla, se debe
tener cuidado de no escribir innecesariamente.

Fusibles
Adems de la Flash, SRAM y EEPROM, AVR tienen unos pocos bytes
(normalmente 3) de memoria de fusibles. Esta memoria se utiliza para almacenar
los bytes "fusibles", que son los valores de configuracin de tiempo de arranque se
utilizan para inicializar el propio microcontrolador. En sistemas que tienen 3 bytes,
como el ATmega644, se les llama "baja", "alto" y "extendida" (o "l", "h", y "e"), y cada
uno de ellos almacenar bits individuales o valores de los bits de los parmetros de
configuracin. Por ejemplo, se utilizan fusibles para establecer la fuente de entrada
de reloj (CKSEL [0..3]), si el reloj se divide por 8 (CKDIV8), si el temporizador de
vigilancia, SPI, JTAG y debe estar habilitado (WDTON, SPIEN , JTAGEN
respectivamente), y muchas otras cosas importantes.

La arquitectura Harvard

Las PCs modernas se basan en la arquitectura von Neumann (un solo bus para
direccionamiento y datos), que utiliza una CPU y una sola memoria (generalmente
DRAM) unida por un solo bus, que se utiliza para la memoria de programa y

memoria de datos. Por el contrario, la arquitectura Harvard, que se utiliza por el


AVR, utiliza buses y memorias totalmente independientes para el programa y la
memoria de datos. Esto permite un rendimiento superior, as como permitir que los
buses de programa y de datos trabajen a diferentes anchuras.
Aspectos de la arquitectura Harvard son visibles para el programador de manera
que normalmente no se considera al escribir programas para la PC:
Los valores estticos deben ser copiados de la memoria de programa a la memoria
de datos con el fin de ser utilizado por el programa en la mayora de contextos. Esto
afecta a los inicializadores, as como cualquier cadena o estructuras que pueden
utilizar en el programa.
Es posible utilizar funciones para minimizar el uso de memoria copiando los valores
(especialmente cadenas) de la memoria de programa directamente a los canales IO
como la produccin en serie, y esto se expone al usuario en forma de declaraciones
PROGMEM y * _pvariants de muchas funciones diferentes.
Los punteros no son todos iguales. Hay punteros de memoria de programa, y
referencias a la memoria de datos. No se pueden mezclar los dos.

Central Processor Unit

Est formada por:


a) ALU (Arithmetic and Logic Unit).

Es el modulo diseado para realizar las operaciones aritmticas (suma,


multiplicacin, etc), as como las lgicas (AND, OR, NOT, etc), Pero tambin
administra los accesos de memoria, las interrupciones, el stack, y el preescalamiento del reloj.
b) Program Counter (PC). La secuencia de programa en el microcontrolador,

contenida en la Flash, se realiza mediante un barrido automatizado ejecutado


por el registro llamado PC o Instruction Pointer. Su valor inicial comienza en
la direccin configurada del RESET y avanza instruccin por instruccin
sincronizadamente con cada ciclo de reloj (o varios ciclos de reloj), de
manera lineal.
c) Instruction Register e Instruction Decoder. Una vez direccionada por el PC,

la instruccin a ejecutarse pasa al Instruction Register, donde es


temporalmente almacenada para comenzar el procesamiento de la
instruccin al ser decodificada por el Instruction Decoder (ID). Este circuito
combinacin se encuentra en algunos micros en forma de registros ROM y
su propsito es el traducir (decodificar) el cdigo del comando ledo de la
memoria flash, a una direccin donde se encuentra el comando de la ALU.

Configuracin de Perifricos
Si bien cada AVR en general, ofrece un gran nmero de perifricos, puede que tenga
que elegir los que son capaces de utilizar basado en qu pines son compartidos en
el dispositivo en cuestin. Por ejemplo, si se necesita un gran nmero de pines
GPIO, es posible que no pueda utilizar un oscilador externo, puede que tenga que
elegir entre usar temporizadores para la hora normal interna frente PWM, etc.
Las hojas de datos son esenciales para la comprensin, que inmoviliza la cuota que
funciona. En general, los dispositivos cantidad de pines superiores comparten
menos pines entre funciones, y de hecho Atmel ofrece varios dispositivos en
versiones de bajos y ms altos pines de recuento (por ejemplo ATmega1280 [100
pines] frente a la atmega1281 [64 pines]); el mismo dispositivo con alfileres ms o
menos compartida.

Las hojas de datos suelen tener una seccin titulada "Funciones puerto alternativo",
que hace un muy buen trabajo de describir la totalidad del intercambio de pines en
cada dispositivo.

Puertos I/O

AVR es de 8 bits microcontrolador. Todos los puertos son de 8 bits de ancho. Las
caractersticas de estos puertos son:

Todos los puertos tienen la funcionalidad de cambiar la direccin de un pin


de puerto de manera independientemente de las direcciones de los otros
pines.

El voltaje de salida de cada pin es lo suficientemente fuerte como para activar


otros dispositivos externos.

Todos los pines I / O tienen diodos de proteccin tanto a VCC y tierra y un


circuito de resistencia pull-up para evitar corto con seales de entrada en
pines configurados de salida.

Cada puerto tiene 3 registros asociados con ella cada uno con 8 bits. Cada
bit en los citados registros configurar pines del puerto en particular. Bit0 de
estos registros se asocia con Pin0 del puerto, Bit1 de estos registros se
asocia con Pin1 del puerto, e igual para otros bits.

Estos tres registros son los siguientes (x puede ser sustituida por B, C, D segn el
puerto utilizado, y n puede ser sustituida por el nmero de bit o pin)

a) DDRx (Registro de Direccin de datos). configura direccin de los pines del

puerto. Es decir, si los pines del puerto se utilizarn para la entrada o salida.

Escribiendo 0 a un bit DDRxn, el correspondiente pin del puerto se


configura como entrada.

Escribiendo 1 a un bit DDRxn corresponde a que el pin del puerto quede


como salida.

ejemplo:

Para que todos los pines del puerto B como pines de entrada:
DDRB = 0b0000000;

Para que todos los pines del puerto B como pines de salida:
DDRB = 0b11111111;
Para hacer que la parte baja del puerto B como salida y la parte alta
como entrada:
DDRB = 0b00001111;

b) Pinx (Port EN) se utiliza para leer los datos de los pines del puerto. Para esta

accin primero hay que cambiar la direccin de los datos del puerto de
entrada. Esto se hace mediante el establecimiento de los bits en DDRx a
cero. Si el puerto se encuentra como salida y se realiza la lectura, entonces
la lectura de registro Pinx contendr los datos que se han enviado de salida
en los pines del puerto.

Ejemplo:
Para leer los datos desde el puerto B.
DDRB = 0x00; // Establecer un puerto como entrada
x = PINB; // Leer el contenido de un puerto

c) PORTx se utiliza para pasar los datos de salida: cuando el puerto est

configurado como output. En otras palabras, al querer enviar datos de salida


por los pines del puerto, hay que escribirlo en el registro PORTx. Sin embargo
no se olvide de fijar la direccin de datos como salida.

sistemas de reloj, fuentes de reloj, y osciladores


sistemas de reloj

AVR Reloj Distribucin Diagrama de bloques. fuentes de reloj suministran la Unidad


de Control de reloj AVR a travs de un pre-escalador, y luego se distribuyen a los
diferentes componentes del sistema de reloj.
La arquitectura AVR tiene varias fuentes de reloj diferentes, que pueden ser
detenidos de forma independiente:
clkCPU - El reloj principal ncleo AVR utilizado para la mayora de procesamiento
de instrucciones.
clkI / S - La mayora de los perifricos funcionan desde este reloj, tales como
temporizadores, SPI, y la USART.
clkFLASH - Lectura y escritura de la memoria flash se utiliza este reloj, que
generalmente se sincroniza con clkCPU.
clkASY - Este reloj puede ser configurado para el reloj en tiempo real del
temporizador / contador independiente de todas las dems fuentes de reloj para
permitir la sincronizacin sin obstculos, si es necesario, incluso en los modos de
ahorro de energa.
clkADC - Las conversiones analgico-digital que operan desde este reloj para
permitir que los otros relojes que ser detenido durante las conversiones para
eliminar el ruido.

fuentes de reloj
Una de las decisiones ms importantes cuando se configura un microcontrolador es
su fuente de reloj clkCPU. Por lo general, los microcontroladores AVR ofrecen varias
fuentes de reloj:
8MHz interna del oscilador (pre-reducido por 1/8 a 1 MHz por defecto)
128kHz interna del oscilador (con fines de ahorro de energa)
oscilador de cristal externo de hasta 20 MHz
seal de reloj externo (tpicamente de otro microcontrolador)

AVR generacin de reloj. Los osciladores internos se pueden utilizar, pero normalmente un oscilador de cristal
externo est conectado a travs de XTAL1 y XTAL2, con un par de condensadores de 18pF a tierra.
preescaladores
Todas las entradas de reloj se introducen en un pre-escalador que puede escalar el reloj en cualquier lugar de 1
(sin escala) a 256 (256 ciclos del oscilador para un ciclo del reloj). Normalmente, el pre-escalador se establece
en tiempo de ejecucin, segn sea necesario, para reducir la velocidad de reloj, con el consiguiente ahorro de
energa mediante la ejecucin de menos. Hay una manera especial se establece el pre-escalador: un fusible
llamada CKDIV8 puede, si se establece, de pre-escala automticamente el reloj por 1/8 en el arranque. Esto se
utiliza para la configuracin predeterminada de pre-escala el reloj interno de 8 MHz a 1 MHz.
Osciladores y la eleccin de las frecuencias
Si usted elige utilizar un oscilador externo, hay que elegir la frecuencia. No es inmediatamente obvio cul sera
la mejor frecuencia. En realidad, la mejor frecuencia suele ser impulsada por la aplicacin: los requisitos de
rendimiento, la interoperabilidad con otros sistemas y requisitos de las comunicaciones. Hay algunas frecuencias
que estn en uso generalizado:
1 MHz - La frecuencia de a bordo preescalado, que no es muy rpido, pero ahorra una gran cantidad de
energa.

8MHz - La frecuencia no preescalado de a bordo, que generalmente es lo suficientemente rpido y no requiere


componentes externos.
14.7456MHz - Por qu en el mundo una frecuencia tan especfico? Hay una respuesta simple: velocidades de
transmisin estndar, tales como 9600, 38.400, y 115.200 baudios, pueden ser perfectamente generados por
un microcontrolador que ejecuta en esta frecuencia.
16MHz - Una frecuencia bastante rpido que todava es muy compatible con diferentes velocidades de
transmisin, especialmente si usted tiene el control sobre la velocidad de transmisin.
20MHz - Si desea el mximo rendimiento y permite controlar la velocidad de transmisin, al lmite de la
velocidad de reloj.

Captulo 3: Lenguaje Ensamblador y conjunto de instrucciones 7 hrs


El lenguaje ensamblador es el lenguaje de programacin utilizado para escribir programas informticos de
bajo nivel; expresa las instrucciones de una forma ms natural al hombre a la vez que muy cercana al
microcontrolador, ya que cada una de esas instrucciones se corresponde con otra en cdigo mquina.
Las caractersticas de un lenguaje ensamblador son las siguiente:

El lenguaje ensamblador trabaja con nemnicos, que son grupos de caracteres alfanumricos que simbolizan las
rdenes o tareas a realizar. La traduccin de los nemnicos a cdigo mquina entendible por el microcontrolador
la lleva a cabo un programa ensamblador. El programa escrito en lenguaje ensambladorujji se denomina cdigo
fuente (*.asm). El programa ensamblador proporciona a partir de este fichero el correspondiente cdigo
mquina, que suele tener la extensin *.hex.

1. El lenguaje ensamblador correspondiente a un mC o mP, es caracterstico de ese modelo. Por lo tanto


un programa escrito para ese dispositivo no es portable (no puede usarse para otro) o difcilmente
portable.

2. Los programas en ensamblador consumen menos recursos. Ya que el programador puede optimizar
cuidadosamente el cdigo.

3.

Al programar en ensamblador se tiene control preciso en las tareas, registros, tiempos de ejecucin,
uso de memoria.

4. A pesar de sus ventajas, es un lenguaje que presenta cierta dificultad para ser ledo directamente por
el humano. Esta dificultad tambin se presenta al realizar funciones complejas que se pueden disear
ms fcilmente en un lenguaje de alto nivel.

Registros de Estatus (Status Registers - SREG)

El microcontrolador opera basado en el SREG y otros registros internos. Los ms importantes son los SREG que
guardan informacin de la ltima instruccin y el estatus de activacin de interrupcin.

Bit
0
1
2
3
4
5
6
7

Nombre
C Carry bit
Z Zero flag
N Negative flag
V Overflow flag
S Signed flag
H Half carry bit
T Bit store bit
I Global interrupt enable flag

Ejemplo de manipulacin de bits:


SBR R16, (1<<5)+(1<<3)

; pone en 1 los bits 5 y 3 del R16

CBR R16, 0X03

; limpia los bits 1 y 0 en R16

Ejemplo de operaciones aritmticas:


a) Suma
ADD R16, R17

; R16= R16 + R17

ADC R16, R2

; R16= R16 + R2 + C

ADIW YL, 3

; YL : YH = YL : YH +3

b) Resta
SUB R16, R17

; R16= R16 - R17

SBC R16, R2

; R16= R16 - R2 - C

SBIW ZL, 5

; ZL : ZH = ZL : ZH - 5

SUBI R16, 30

; R16 = R16 - 30

SBCI R16, 4

; R16 = R16 - 4 - C

c) Multiplicacin
Ejemplo de multiplicacin 6*10
LDI R16, 0
LDI R17, 0
LDI R2, 6
for_loop:
ADD R16, R2
INC R17
CPI R17, 10
BRLO for_loop

Ejemplo:
LDI R16, 0
for_loop:

; cragar R16 con el valor de 0


; etiqueta que servir para hacer un loop

INC R16

; incrementar el valor actual de R16

OUT PORTD, R16

; pasar el valor actual de R16 al puerto R16

CPI R16, 10

;comparar el valor actual de R16 con 10

BRLO for_loop

;si el resultado de la compracin indica que R16 es menor, brincar


; a for_loop

Ejemplo Blink LED:

LABEL MAIN:
LDI R16, 0xFF
OUT DDRB, R16 ;PORTB IS OUTPUT
BACK:
COM R16 ;COMPLEMENT THE VALUE IN R16
OUT PORTB, R16 ;PUSH THE VALUE IN R16 TO PORTB
LDI R17, 100
LOOP3: LDI R18, 255
LOOP2: LDI R19, 255
LOOP1: DEC R19
BRNE LOOP1 ;KEEP DECREASING R19
DEC R18 BRNE
LOOP2 ;FOR EVERY DECREASE OF R18 REDO THE PREVIOUS LOOP
DEC R17
BRNE LOOP3 ;FOR EVERY DECREASE OF R17 REPEAT PREVIOUS LOOP
RJMP BACK ;KEEP DOING THIS INFINITELY

Captulo 4: Perifricos 6 hrs

Captulo 5: Interrupciones 7 hrs

Captulo 6: Temporizadores 7hrs


Captulo 7: Comunicacin Serial 6 hrs

Captulo 8: Conversin Analgica Digital 9 hrs

Anda mungkin juga menyukai