پاسخ : راه اندازی ATmega8A با کریستال خارجی برای UART
نرم افزار khazama ,progisp
نوشته اصلی توسط Reza Sede
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdlib.h> #include "N11/N1100_LCD.h" #define F_CPU 8000000ul unsigned char buff; int main(void) { UCSRB=(1<<RXEN)|(1<<RXCIE); UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); UBRRL=51; N11_initialize(); sei(); while(1) { _delay_ms(1000); N11_CLS(); N11_Puts(buff); } } ISR(USART_RXC_vect) { sprintf(buff,"%c",UDR); }
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define BaudRate(x) {UBRRH=0; UBRRL = (F_CPU/(16UL*(x)))-1;} char buff[10]; volatile unsigned char index=0; ISR(USART_RXC_vect) { char st,dt; st=UCSRA; dt=UDR; if(!(st & (_BV(FE) | _BV(PE) | _BV(DOR)))) // Check data { buff[index++] = dt; } } void _putchar(char c) { while ((UCSRA & _BV(UDRE))==0); UDR=c; } void _puts(char *str) { while(*str) _putchar(*str++); } int main(void) { UCSRA=0; UCSRB=_BV(RXEN) |_BV(RXCIE) | _BV(TXEN); // TX and RX = enable and RX ISR = enable UCSRC=_BV(URSEL)|_BV(UCSZ1) | _BV(UCSZ0); // 8bit Mode BaudRate(9600UL); index=0; sei(); _puts("Write 10 Char\r\n "); while(1) { if(index == sizeof(buff)) { cli(); _puts((char*)&buff); index=0; sei(); } } }
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define BaudRate(x) {UBRRH=0; UBRRL = (F_CPU/(16UL*(x)))-1;} char buff[10]; volatile unsigned char index=0; ISR(USART_RXC_vect) { char st,dt; st=UCSRA; dt=UDR; if(!(st & (_BV(FE) | _BV(PE) | _BV(DOR)))) // Check data { buff[index++] = dt; } } void _putchar(char c) { while ((UCSRA & _BV(UDRE))==0); UDR=c; } void _puts(char *str) { while(*str) _putchar(*str++); } int main(void) { UCSRA=0; UCSRB=_BV(RXEN) |_BV(RXCIE) | _BV(TXEN); // TX and RX = enable and RX ISR = enable UCSRC=_BV(URSEL)|_BV(UCSZ1) | _BV(UCSZ0); // 8bit Mode BaudRate(9600UL); index=0; sei(); _puts("Write 10 Char\r\n "); while(1) { if(index == sizeof(buff)) { cli(); _puts((char*)&buff); index=0; sei(); } } }
_puts((char*)&buff);
_puts((char*)&buff);
while(*str) UART_Putchar(*str++);
while(*str) UART_Putchar(*str++);
ISR(USARTUDRE_vect) { if (!(_UART_BUFFER[_UART_COUNTER])) { _UART_COUNTER=0; UCSRB&=0xdf; return; } UDR=_UART_BUFFER[_UART_COUNTER++]; }
دیدگاه