Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #define BAUD 9600
- #define BRC 103 //9600baud
- #define tx_buffer_size 128
- char serialBuffer[tx_buffer_size];
- uint8_t serialReadPosition=0;
- uint8_t serialWritePosition=0;
- void serialWrite(char c[]);
- void serialAppend(char c);
- #include <util/delay.h>
- #include <avr/interrupt.h>
- void serialAppend(char c){
- serialBuffer[serialWritePosition]=c;
- serialWritePosition++;
- if(serialWritePosition>=tx_buffer_size){
- serialWritePosition=0;
- }
- }
- void serialWrite(char c[]){
- for(uint8_t i=0;i<strlen(c);i++){
- serialAppend(c[i]);
- }
- if (UCSR0A & (1<<UDRE0))
- {
- UDR0=0;
- }
- }
- void USART_init(){
- UBRR0H = (BRC>>8);
- UBRR0L = BRC;
- UCSR0B|=(1<<TXEN0)|(1<<TXCIE0); //1 bit 8 bit data
- //TX setup
- UCSR0C |=(1<<UCSZ01)|(1<<UCSZ00);
- sei();
- }
- void send_char(unsigned char data){
- while (!(UCSR0A&(1<<UDRE0)));
- UDR0 =data;
- }
- int main(void){
- USART_init();
- _delay_ms(100);
- serialWrite("Hello World!");
- _delay_ms(2000);
- while(1){
- }
- return 0;
- }
- ISR(USART_TX_vect){
- if(serialReadPosition!=serialWritePosition)
- {
- send_char(serialBuffer[serialReadPosition]);
- serialReadPosition++;
- }
- if(serialReadPosition>=tx_buffer_size)
- {
- serialReadPosition=0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement