INSTRUCCIONES BÁSICAS DE D E BASCOM AVR
$regfile Esta instrucción va siempre al inicio de cualquier proyecto que realicemos, ya que es la encargada de direccionar el respectivo microcontrolador microcontrolador que vamos a usar. Por ejemplo: Atmega 8: $regfile=”m8def.dat” Atmega 16: $regfile=”m16def.dat” Atmega 32: $regfile=”m32def.dat”
$crystal Esta instrucción instrucción va especificar la frecuencia frecuencia de oscilación oscilación con la que va a funcionar el microcontrolador. microcontrolador. Por ejemplo:
$crystal=1000000 para 1MHZ $crystal=4000000 para 4MHZ $crystal=8000000 para 8MHZ Config Esta instrucción especifica la configuración de un pin, un puerto o un dispositivo, ya que pueden ser configuradas como entrada o salida de datos. Por ejemplo:
Config portb=output pina.0=input Config pina.0=input Config lcd=16*2 Wait,waitms,waitus
Puerto B como salida Pin A.0 como entrada LCD de 16 caracteres y 2 líneas
Esta instrucción sirve para crear un retardo, ya sea en segundos, milisegundos milisegundos y microsegundos microsegundos respectivamente. respectivamente. Por ejemplo: Wait 3 Waitms 7 Waitus 500
Espera 3 segundos Espera 7 milisegundo Espera 500 microsegundos microsegund os
Do-loop Esta instrucción es un lazo cerrado, en el cual se ejecuta un conjunto de instrucciones de forma indefinida.
Do Instrucciones
Loop Do-loop until Es un lazo definido por la condición de una variable que está dentro del lazo, la cual define cuando termina de ejecutarse el conjunto de instrucciones. Por ejemplo:
Do A=A+1
Loop until A =10 termina el lazo cuando A=10 Toggle Este comando sirve para complementar el estado anterior de alguna variable o pin de algún puerto. Por ejemplo:
Toggle portb.0 Dim
complementa el portb.0
Dim sirve para dimensionar el tipo de variable que se va utilizar, entre los tipos de variables están los siguientes: TIPO BIT BYTE WORD LONG INTEGER SINGLE STRING ARRAY DOUBLE DIM var as tipo
DIMENSION 0-1 0 a 255 0 a 65535 -2147483648 a 2147483647 -32768 a 32767 1.5 a 3.4 CADENA DE CARACTERES MAXIMO 254 MATRIZ 65535 5.0* a 1.7*
Ejemplo: DIM A as byte
Alias Sirve para dar un nombre general dentro de un proyecto ya sea un puerto o un pin de un puerto. Ejemplo: Foco Alias portb.0
El portb.0 ahora se llama el foco
Declare sub nombre ( ) Sirve para declarar subrutinas que en el programa principal, se las llamara con la instrucción CALL nombre.
Goto Salto incondicional a una etiqueta.
Gosub Llama a una subrutina. La subrutina debe escribirse después de END y terminar con la instrucción RETURN.
SET,RESET Pone a “1L”y “0L” respectivamente un pin de salida
Ejemplo: Incr
SET PORTD.0 pone a uno el pind.0
Incrementa en una unidad una variable. Ejemplo: Incr x
IF-THE; ELSE Son sentencias condicionales, las cuales responden a un estado de voltaje (0L, 1L), de contenido (caracteres), etc.
IF (condición) THEN Instrucción1
ELSE Instruccion2
END IF
FOR-NEXT Son instrucciones de repetición, ya que ejecutan un conjunto de instrucciones, dependiendo de una variable incremental dentro del lazo.
FOR var=val_inicial to val_final Instrucciones (mientras val_inicial ≤ var ≤ val_final)
Next var WHILE – WEND Lazo de repetición con el cumplimiento de una condición. Var
While Instrucciones si condición es verdadera
Wend
SELECT – CASE Son sentencias que se pueden ejecutar, dependiendo del estado de una variable de selección. Nos sirve para realizar diferentes acciones en función del valor de una variable, en nuestro caso, el valor leído por el puerto de entrada. Var
Select case var Case1: instrucción 1 Case2: instrucción 2 ……..
Case else: instrucciones otros casos End select
SIMBOLOS Y OPERADORES Dentro de los operadores, pueden utilizarse los matemáticos, de relación y lógicos. Además se deben tomar en cuenta que Bascom nos permite realizar operaciones únicamente con dos variables a la vez. A continuación podremos observar los operadores más comunes. Operadores matemáticos
Suma: a =b+c Resta: a =b-c Multiplicación: a=b*c División: x=a \ b Residuo= a MOD b Operadores de relación = igual x=y
<> No es igual x<>y < Menor que x Mayor que x>y <= menor igual x<=y >=mayor igual x>=y Operadores lógicos
NOT complemento (negación) AND conjunción (y) OR disyunción (o) XOR or exclusiva
Representación de lógica digital
Para representación de un numero o hexadecimal, dentro de BASCOM AVR, es necesario anteponer el símbolo “&”.En el caso de números decimales, no
es necesario anteponer ningún símbolo. Ejemplo: Porta=&HF9
Numero hexadecimal
Portb=&b10001100
Numero binario
Porta=129
Numero decimal
Configuración de los puertos como entradas o salidas digitales A continuación, en las siguientes explicaciones la letra x representara B, C, D según el puerto del cual se trate .
REGISTRO DDRX Son registros de 8 bits. En estos registros se configura de forma individual los pines de los puertos como entradas o salidas .Un “ 0” significa que el pin es entrada y “ 1”salida.
REGISTRO PORTX En estos registros se colocan los datos que deben ser enviados al exterior.”1” en alto (5 voltios) y “ 0” en bajo (0 voltios).
En cada puerto, esté microcontrolador tiene pull-up internas que pueden ser o no habilitadas individualmente (poniendo “1” en el bit correspondiente) cuando un pin se configura como entrada.
REGISTRO PINX En estos registros se lee el dato proveniente del exterior (estado de los interruptores o pulsadores conectados al puerto) si los pines están configurados como entrada .En el momento de realizar una lectura del estado de las entradas , se deberán tener en cuenta la forma en que
están conectados los pulsadores o interruptores (con pull-up o pulldown)
MANEJO DE UNA PANTALLA LCD (DISPLAY DE CRISTAL LIQUIDO) Un display de cristal líquido (LCD) es un dispositivo que nos permite mostrar información alfanumérica o caracteres diseñados, presentando una ventaja sobre los display de 7 segmentos. El manejo de un LCD, se basa en una secuencia de comandos que deben ser enviados desde el microcontrolador, durante un tiempo predeterminado por el fabricante. Pero cuando se trata de programación en alto nivel, este proceso es realizado por el compilador o por librerías que están previamente hechas en el software. En el caso del Bascom AVR, podemos controlar al LCD de dos maneras: por comandos o por configuraciones en cuadro de dialogo.
Mediante comandos tenemos: Config Lcd
Sirve para configurar la clase de lcd que vamos a utilizar, puede ser de 16 caracteres por 2 líneas (16x2) ,de 20 caracteres por 4 líneas (20x4),etc. Por ejemplo:
Config lcd = 16*2
(display de 16*2)
Config Lcdpin
Sirve para configurar los pines por los cuales se va a manejar la información. Por ejemplo:
Config Lcdpin=pin, Db4=Porta. , Db5=Porta.5, Db6=Porta.6 Db7=Porta.7, E=Portc.7, Rs=Portc.6 Config Lcdbus
Esta instrucción sirve para configurar cual será el modo de envió de datos, ya que pueden ser hecho por 4 pines u 8 pines. Por ejemplo:
Config Lcdbus = 4
(4 pines de datos)
Lcd “ ”
Sirve para escribir cualquier frase en el Lcd , sin importar la localización del cursor. Por ejemplo: Lcd “hola”
Locate x,y Sirve para localizar el cursor en la línea y columna adecuada, para poder empezar a escribir en el Lcd. Por ejemplo:
Locate 1,1
(localización del cursor en la fila 1,columna 1)
ShiftLcd Sirve para mover todo el texto del Lcd, ya sea para la izquierda o derecha, con las instrucciones:
ShiftLcd left ShiftLcd right
MANEJO DE LA MEMORIA SERIAL EEPROM La memoria serial es una de las herramientas que posee internamente un AVR, mediante esta, se facilita el método para guardar un dato que se quede grabado en esta memoria no volátil. Para el uso de la EEPROM interna es necesario conocer principalmente el dimensionamiento de las variables que pueden ser usadas.
Eram Mediante esta instrucción se dimensiona una variable para que pueda ser usada como puntero para guardar un dato en la EEPROM. Por ejemplo:
Dim var as Eram integer (variable entera para la eeprom)
Readeeprom Sirve para leer o almacenar en una variable, el dato que este guardado en una dirección especifica de la memoria EEPROM. Por ejemplo:
Readeeprom var,&H00 (Almacena el dato de la dirección 00h en la variable var)
Writeeeprom Sirve para escribir un dato en una dirección específica de la memoria EEPROM. Por ejemplo:
Writeeeprom var, &h00 (escribe en la dirección 00h, el contenido de la variable var)
MANEJO DE LO CONVERSORES ADC Dentro de los AVR existen conversores analógicos a digital de 10 bits, los cuales nos sirven directamente para la conversión de una variable analógica, por ejemplo temperatura, voltaje, presión, etc. En algunos casos no debemos olvidar que debemos acondicionar la señal analógica, para que esta sea amplificada y calibrada, antes de ingresar al microcontrolador. Un detalle muy importante es que se debe activar el funcionamiento del ADC, en el microcontrolador, lo cual se realiza poniendo el pin (AVCC) a 5V, y el pin (AREF) a un voltaje de referencia para tener la escala adecuada. Dentro de las instrucciones que se necesitan para activar el conversor interno están:
Config adc Sirve para configurar el adc interno con referencia interna o externa. Además esta instrucción va acompañada del inicio del adc (start adc). Por ejemplo:
Config Adc=single, Prescaler= Auto, reference=Internal (o Avcc) Start Adc
Getadc ( ) Esta instrucción obtiene el valor digital a 10 bits de la entrada analógica dependiendo en cual pin esté conectada. Por ejemplo: B=Getadc (1) (obtiene el valor digital del adc 1)
MANEJO DEL SENSOR ULTRASONICO
Pulseout Sirve
para
enviar
pulsos
de
salida
por
cualquier
pin
del
microcontrolador por periodos de un 1us para una frecuencia de oscilación de 4 MHZ. Por ejemplo:
Pulseout portb, 1,6000 (genera pulsos de 6ms por el pinb.1)
Pulsein Realiza el conteo en unidades de microsegundos, hasta que suceda una transición positiva o negativa por un pin de un puerto especifico. Por ejemplo:
Pulsein W, pinb, 0, 0
(Retorna en la variable w, el conteo en
microsegundos hasta que suceda una transición de 0 a 1 por el pinb.0)
Bitwait Nos sirve para crear un tiempo de espera, dependiendo del estado actual en el que se encuentra un pin de un puerto. Por ejemplo:
Bitwait pinb.0, set (espera en el mismo punto hasta que el pinb.0 este activado 1L)
INTERRUPCIONES EXTERNAS A igual que la interrupción del pórtico serial no proporciona ventajas para ejecutar un programa principal, la interrupción externa también permite ejecutar una subrutina solo si cumple o se detecta alguna señal externa, ya sea por el pin INT0 o INT1.
Para esto es necesario ejecutar instrucciones principalmente de configuración, las cuales hacen que se active la interrupción.
On Int0 Sirve para activar una subrutina específica , en caso de que se active la interrupción externa 0. Por ejemplo:
On int0 pulsos (activa la subrutina pulsos, en caso de que se active la interrupción externa 0)
Enable interrupts Sirve para activar las interrupciones activadas independientemente.
Enable Int0 Nos permite activar la interrupción externa 0
COMUNICACIÓN SERIAL CON EL PC La comunicación serial entre dispositivos, se basa en el intercambio de información mediante líneas
transmisión y recepción. Uno de los
circuitos integrados que nos ayudan a realizar la comunicación serial entre un pc y un microcontrolador es el MAX232, el cual es un conversor de nivel RS232 a TTL y viceversa. Un cable null-moden sirve para realizar comunicaciones seriales mediante el puerto DB9 de un computador. Para realizar una comunicación bidireccional, sea half dúplex o full dúplex, se deberá realizar un cable en donde se unan la recepción de un lado y la transmisión del otro. Las instrucciones que nos puedan ayudar a realizar la comunicación serial mediante un microcontrolador un pc, pueden ser de tres tipos: con retorno (por software) , por interrupcion y con retorno (por hardware).
Las instrucciones por retorno necesitan como conformación de envió o recepción de datos, el carácter ASCII N° 13 (ENTER) y las instrucciones de interrupcion habilitan una subrutina que ejecuta la transmisión o recepción serial.
$baud Esta es una instrucción de configuración principal ,que sirve para determinarla velocidad de transmisión a la que se van comunicar los dispositivos. Por ejemplo:
$baud =9600 (velocidad de transmisión de 9600 bps) $baud =1200 (velocidad de transmisión de 1200 bps)
Print Sirve para enviar datos en forma serial, desde el microcontrolador hacia el dispositivo como por ejemplo un PC. Usando con el comando “input” generalmente es una instrucción con retorno.
Por ejemplo:
Print “hola” (transmisión de letras y variables)
Input Sirve para recibir caracteres desde otro dispositivo hacia el microcontrolador. Un inconveniente que presenta “Print” o “input”, es
que necesitan como confirmación de datos el carácter ASCII N° 13 (ENTER) antes mencionado. Para ello es mejor o recomendable trabajar mediante interrupcion del pórtico serial, la cual es activada ya sea por la recepción o la transmisión desde el microcontrolador. Por ejemplo:
Input A (recepción de datos en la variable A “string”)
INTERRUPCION DEL PORTICO SERIAL Mediante la interrupcion del puerto serial, será un poco más sencillo el manejo global del programa, ya que al menos no debemos preocuparnos en que instante nos puede llegar un dato; sino que simplemente realizamos una subrutina, la cual se encargara de almacenar dicho dato, proveniente de una fuente serial externa. Las instrucciones usadas para realizar una interrupcion de recepción del puerto serial, son:
On Urxc Serial Sirve para activar la subrutina llamada SERIAL, en caso de recibir un dato.
Enable Interrupts Sirve
para
habilitar
las
interrupciones
presentes
en
el
microcontrolador.
Enable Urxc Sirve para habilitar la interrupcion del puerto serial.
Inkey() Sirve para guardar un dato recibido por comunicación serial en una variable declarada.
COMUNICACIÓN POR HARDWARE La comunicación por hardware
es similar a la comunicación con
retorno por software, con la única diferencia que se deben abrir pines para transmisión y recepción definidos por el usuario. Las instrucciones utilizadas para abrir un puerto serial por hardware son:
Open Sirve para habilitar cualquier pin del microcontrolador, para que funcione como entrada o salida de datos. Por ejemplo:
Open “comd.1:9600, 8, n, 1” For output As #1 , para transmisión Open “comd.1:9600, 8, n, 1” For input As #2, para recepción
Close Sirve para cerrar la utilización de los pines de recepción y transmisión. Por ejemplo:
Close#1, para cerrar la transmisión Close#2, para cerrar la recepción
Print #1 Sirve para transmitir por el pin de trasmisión virtual
Input #2 Sirve para recibir por el pin de recepción virtual Con la ayuda de estas instrucciones se puede tener la versatilidad de 2 puertos seriales dentro de un mismo microcontrolador.