Sunteți pe pagina 1din 10

Ejercicio 1 - Asignar una entrada a una salida

'-------------------------------------------------------------' EDBexperiment1.bas ' Experiment 1 for the Educational Development Board ' (c) 1995-2006, MCS Electronics ' Fileversion 1.0 '-------------------------------------------------------------' 'Objetivo: 'Este programa asigna el valor del Pind.7 al Pinb.1. ' 'Conclusiones: Debers de ser capaz de commutar el estado de un led presionando un interruptor.

$regfile = "m88def.dat" 'Le dice a Bascom que chip usamos $crystal = 8000000 'Frecuencia del cristal en Hz Config Pind.7 = Input 'Configura Pin D7 como entrada Config Pinb.1 = Output 'Configura Pin B1 como salida

Do 'Realiza un bucle infinito entre Do ..... Loop Portb.1 = Pind.7 'Asigna la salida con el valor de la entrada Loop End 'Marca el final del programa

Ejercicio 2 - Rotar 8 Leds


'-------------------------------------------------------------' EDBexperiment2.bas ' Experiment 2 for the Educational Development Board ' (c) 1995-2006, MCS Electronics ' Fileversion 1.0 '-------------------------------------------------------------' 'Objetivo: 'Este programa rota los LEDs en el portD. ' 'Conclusiones: 'Ver el efecto de movimiento en los LEDs

$regfile = "m88def.dat" 'Le decimos a Bascom que chip usamos $crystal = 8000000 Config Portd = Output 'Configura el Pin D7 como salida

Portd = &B1111110 'Empezamos poniendo el PORTD.0 bajo (Led encendido) Do Rotate Portd , Right , 1 'Mueve los bits una posicin a la derecha 'Ahora PD1 deber iluminarse y PD0 se apagar Waitms 500 'Espera 500 ms, de lo contrario no vers la rotacin Loop 'Siempre veremos dos LEDs encendidos End 'Fin del programa Analizando el cdigo observamos: El tipo de chip que utilizamos. La velocidad del oscilador. La directiva CONFIG PORTD nos permite configurar rapidamente un puerto como entrada o salida. La declaracin ROTATE, desplaza todos los bits de la variable a la izquierda o a la derecha. Todos los bits se conservan por lo que no se cambiarn bits de la variable. Esto significa que si rotamos una variable byte con un valor 1 (&B00000001), ocho veces la variable ser la misma. WAITMS, suspende la ejecucin del programa por un tiempo dado en ms. (1-65535) La instruccin de control DO...LOOP ejecuta un bucle indefinido, para salir de este bucle se utiliza EXIT DO. END Marca el final del programa.

Configuracin de puertos I/O


AVR utiliza dos registros para configurar sus puertos de E/S, DDRB y PORTB (Hay un par de registros por cada puerto del microcontrolador). Los 8 bits en el PORTB son iguales cuando se utilizan como pines I/O digitales. PORTB.x es un pin general de I/O digital. El bit DDBn en el registro DDRB, selecciona la direccin de este pin, si DDBn es establecido a "1", PORTBn es configurado como un pin de entrada, si DDBn es borrado "0", el PORTBn es configurado como un pin de salida. Si se establece el PORTBn a "1" cuando el pin se configura como un pin de entrada, la resistencia de pull-up es activada. Para conmutar la resistencia de pull-up a Off, el PORTBn ha de ser limpiado "0" o el pin tiene que ser configurado como una salida. Por default cuando energizamos un micro DDRn y PORTn estan en "0". Esto pone los puertos en un estado de alta impedancia (Tri-state) IMPORTANTE, cuando deseemos operar con los pines de entrada utilizaremos por ejemplo, PINB.

Ejercicio 3 - Destellar un LED


'-------------------------------------------------------------' EDBexperiment3.bas ' Experiment 3 for the Educational Development Board ' (c) 1995-2006, MCS Electronics ' Fileversion 1.0 '-------------------------------------------------------------' 'Objetivo: 'Este progrma hace destellar un Led ' 'Conclusiones: 'Debers ver destellar el Led $regfile = "m88def.dat" 'Le decimos a Bascom que chip usamos $crystal = 8000000 Config Pind.1 = Output 'Configura el PIND1 como salida

Do 'Realiza un bucle infiinito entre Do..Loop Set Portd.1 'Activa el Pind.1 Waitms 250 'Espera un momento para que puedas ver esto Reset Portd.1 'Desactiva el Pind.1 Waitms 250 'Espera un momento para que puedas ver esto Loop End Puedes obtener el mismo resultado pero con un cdigo mas compacto de la siguiente manera: Do Toggle Portd.1 'Alterna el Pind.1 On /Off Waitms 250 'Espera un momento para que puedas ver esto Loop Con Toggle puedes invertir fcilmente el estado del Pin de un Port. El Pin tiene que ser configurado como una salida antes de utilizar Toggle.

Ejercicio 4 -Comunicacin Serie Parte I


-------------------------------------------------------------' EDBexperiment6a.bas ' Experiment 6a for the Educational Development Board ' (c) 1995-2006, MCS Electronics ' Fileversion 1.0 '-------------------------------------------------------------' 'Objetivo: 'Enviar el mensaje "Hola Mundo" al puerto COM del ordenador ' 'Conclusiones: 'Debers ser capaz de imprimir algo por el puerto COM (RS-232) $regfile = "m8def.dat" $crystal = 8000000 $baud = 19200 'Definimos la tasa de baudios en 19200 Do Print "Hola Mundo" 'La declaracin PRINT enva un string a la UART Wait 3 'Detiene el programa por 3 segundos Loop End

Variables y Constantes
VARIABLES Son estructuras de datos que, como su nombre indica, pueden cambiar de contenido a lo largo de la ejecucin de un programa. Para poder utilizarlas debemos crearla, asignarle un nombre y declarar que tipo de datos contendr. La sintaxis es la siguiente: Dim Edad as Byte "DIM" crea la variable, le asigna el nombre "EDAD" y declara que contendr un "BYTE" que es un nmero dentro del rango de 0-255. Ya estamos listos para poder utilizarla y lo que haremos ser asignarle el valor45. Edad = 45 En este caso el signo "=" es un operador de asignacin, no de comparacin. Dim Apellidos as String * 20 Este es un caso especial de variable por que es la nica que puede contener una cadena de datos alfanumricos (letras y nmeros) y por eso a la sintaxis que hemos visto anteriormente debemos agregarle su longitud. "DIM" crea la variable, le asigna el nombre "Apellidos" y declara que contendr una cadena "STRING" de 20 caracteres de longitud Apellidos = "Faria Aguilar" Como puedes notar: Lo que deseamos asignar a la variable lo delimitamos entre comillas.

Declaramos que la variable contendr 20 caracteres pero solo utilizamos 13. Esto es para poder almacenar algn apellido que pueda ser ms largo, los espacios se cuentan. CONSTANTES En programacion, las constantes son tipos de datos (con valores numricos o de cadena) que permanecen invariables, sin posibilidad de cambiar el valor que tienen durante el curso del programa. Su sintaxis es: Const Pi = 3.1415926535897932384 Const Mascota = "Tester"

Ejercicio 5 -Comunicacin Serie Parte II


'-------------------------------------------------------------' EDBexperiment6b.bas ' Experiment 6b for the Educational Development Board ' (c) 1995-2006, MCS Electronics ' Fileversion 1.0 '-------------------------------------------------------------' 'Objetivo: 'Este programa muestra cmo utilizar las declaraciones Print, Chr() y Waitkey() . ' 'Conclusions: 'Ahora estars preparado para utilizar la UART '

$regfile = "m8def.dat" $crystal = 8000000 $baud = 19200 Dim Akey As Byte 'Declaramos una variable del tipo byte Print Print "Hola, pulsa cualquier tecla alfanumerica ..." Akey = Waitkey() 'Waitkey espera hasta que se recibe un caracter de la UART Print Akey Wait 1 Print Print "Gracias!, Como puedes ver el controlador imprime un numero," Print "pero no es la tecla que tu pulsaste." Wait 1 Print Print "Presiona la tecla ENTER..." Akey = Waitkey() Print Akey Print Print "El numero que ves es el valor ASCII de la tecla que pulsaste." Print "Tenemos que convertir el numero a la tecla ..."

Print 'Notice what this line does Print "Por favor, presiona de nuevo una tecla alfanumrica ..." Akey = Waitkey() Print Chr(akey) 'Notice what this does Print "Eso esta bien!" Wait 1 Print Print "Para una gran cantidad de funciones, una sola tecla no es suficiente ..." Print "Ahora escribe tu nombre y pulsa enter para confirmar." Dim Inputstring As String * 12 'Declara una variable string

Do Akey = Waitkey() If Akey = 13 Then Goto Thanks 'On enter key goto thanks Inputstring = Inputstring + Chr(akey) 'Assign the string Loop Thanks: Print "Gracias " ; Inputstring ; " !" 'Notice what ; does Wait 1 Print Print "Echa un vistazo al codigo del programa y trata de entender" Print "como funciona este programa. Asimismo, pulsa F1 en las declaraciones." Print Print "Si has entendido todo, continua con el siguiente experimento." Print Print "No he colocado los acentos porque en la simulacion no se representan correctamente." End

Ejercicio 5 -Comunicacin Serie Parte III


'-------------------------------------------------------------' EDBexperiment6c.bas ' Experiment 6c for the Educational Development Board ' (c) 1995-2006, MCS Electronics ' Fileversion 1.0 '-------------------------------------------------------------' 'Objetivo: 'Este programa muestra como usar las declaraciones Open, Close e Inkey() ' 'Conclusiones: 'Deberas ser capaz de trabajar con el software UART $regfile = "m8def.dat" $crystal = 8000000 $baud = 19200

Dim B As Byte Waitms 100 'Abrir un canal de salida Tx Open "comb.1:19200,8,n,1" For Output As #1 Print #1 , "salida serie"

'Abrir un canal Rx de entrada Open "comb.2:19200,8,n,1" For Input As #2 ''Dado que no existe una relacion entre los pines de entrada salida 'No se produce eco de las teclas presionadas. Print #1 , "Presiona cualquier tecla alfanumerica" 'Con INKEY() podemos comprobar si hay datos disponibles 'Para utilizarla con el software UART debes proporcionar el canal Do B = Inkey(#2) 'Almacena en un Byte 'Cuando el valor> 0 tenemos algo If B > 0 Then Print #1 , Chr(b) 'Imprime el caracter End If Loop

Close #2 'Cierra el canal Close #1 End IMPORTANTE: En este ejemplo se utiliza la emulacin del puerto por software. El ATmega8 dispone de un puerto serie por hardware. Si necesitas, ms puertos serie debers utilizar esta emulacin por software.

Calculadora de Ports para micros AVR


He hecho este programita para ayudar a los que empiezan y se hacen un lo en la cabeza para configurar las entradas y salidas de los micros AVR. Su uso es muy sencillo, cuando se inicia el programa el PORTx y DDRx estn a cero lo que significa que el puerto en cuestin est configurado como alta impedancia (Tri-state), cuando pulsamos sobre el bit deseado alternaremos su configuracin y veremos esta accin reflejada inmediatamente en los cuadros de texto. En cualquier momento podemos alternar la visualizacin del resultado en binario, hexadecimal o decimal.

Podis descargar el archivo desde aqu.

Bucle FOR - NEXT


$regfile = "m8def.dat" $crystal = 4000000 'Configuracin del Port Portb = &H00 Ddrb = &HFF 'Declaracin de las variables Dim X As Byte 'Variable de control del bucle. Do For X = 0 To 7 'Ejecuta el bucle For ... Next 8 veces. Set Portb.x 'Activa un bit del PortB determinado por la variable X Waitms 200 Reset Portb.x 'Desactiva el bit . Next X Portb = &HFF 'Activa todas las salidas del PORTB Waitms 400 For X = 7 To 0 Step -1 'STEP produce un salto ascendente o descendente. Reset Portb.x Waitms 200 Next X Loop End FOR var = start TO end [STEP value] EL bucle FOR - Next es muy util cuando sabemos de antemano las veces que ha de ejecutarse Est compuesto por : var : variable de control del bucle. start : valor de inicio del contador

end :valor que pone fin a la variable var STEP : El valor de" "var" se incrementar/decrementar cada vez que se encuentre con NEXT. Este parmetro es opcional.

Instrucciones IF-THEN-ELSE-END IF
Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresin. La forma es la siguiente: IF Portb.0 =1 then 'Si Portb.0 = 1 entonces Print "ACTIVADO" 'Envie el mensaje "ACTIVADO" por el puerto serie Else 'de lo contrario Print "DESACTIVADO" 'Envie el mensaje "DESACTIVADO" por el puerto serie Endif 'Fin_del_SI La instruccin ELSE es opcional. IF Portb.0 =1 then Print "ACTIVADO" Endif

Instruccin SELECT-CASE-END-SELECT
Ejecuta uno de varios grupos de instrucciones, segn el valor de una expresin. Si tienes una estructura con muchos IF - THEN, esta instrucciones te pueden ser de gran ayuda. Dim I As Byte Do Input "Ingrese valor (0-255) " , I Select Case I Case 1 : Print "1" Case 2 : Print "2" Case 3 To 5 : Print "3-5" Case Is >= 10 : Print ">= 10" Case Else : Print "Caso no declarado" End Select Loop

End

Nota que la expresion booleana como => 3 es precedida por la palabra clave Is.

S-ar putea să vă placă și