Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

12/03/2011 #1


Utilizar usart con el codevision avr
Alguien sabe programar en codevision avr, especialmente utilizar el usart del atmega16, EN CODEVISION AVR
13/03/2011 #2


Solo uasa el codewizardAVR y ya te creo toda configuracion inicial.
13/03/2011 #3


el problema es que no me queda muy claro todo el codigo que me ha generado el wizar
por ejemplo, este es el codigo que me ha generado para un atmega 16 configurado solamente como receptor.
Ojala me puedan ayudar a comprenderlo



/************************************************** ***
RECEIVER

Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 3.686400 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
************************************************** ***/

#include <mega16.h>

#ifndef RXB8
#define RXB8 1
#endif

#ifndef TXB8
#define TXB8 0
#endif

#ifndef UPE
#define UPE 2
#endif

#ifndef DOR
#define DOR 3
#endif

#ifndef FE
#define FE 4
#endif

#ifndef UDRE
#define UDRE 5
#endif

#ifndef RXC
#define RXC 7
#endif

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE <= 256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
// special case for receiver buffer size=256
if (++rx_counter == 0)
{
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
#endif
rx_buffer_overflow=1;
}
}
}



#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+

char getchar (void){
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index++];
#if RX_BUFFER_SIZE != 256
if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#endif
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void){
// Declare your local variables here

// Port B initialization
//PUERTO B ENTRADAS, PULLUPS ACTIVOS
PORTB=0xFF;
DDRB=0x00;

// Port D initialization
//PUERTO D SALIDAS
PORTD=0x00;
DDRD=0xFF;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x17;


// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here

}
}
13/03/2011 #4


Hay lo estas pidiendo que sea con interrupcion el programa genera un codigo con verificacion de errores y un buffer de 8.
De esa forma sale muy extenso.
Sin activar interrupcion en UART sale mas pequeño el codigo.
14/03/2011 #5


ok
la verdad necesito que sea por interrupcion, ya que necesito intercambiar datos entre dos micros, y tengo ya diseñado todo mi programa, lo unico que me falta por concluir, es solamente la comunicacion.
pero si me das una pista de como podria conseguir comunicar estos micros te lo agradeceria mucho
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.