programming
Software Uart for AVR microcontroller tested on 1200 baud rate
Here is copy and paste code for Software UART. In many system design, we need more than one serial communication like GSM module and BT module. To connect these module with a single microcontroller, we need two UART port which is generally not available in AVR microcontroller. I could not found any code while Searching for Software UART code in google. So,i made software uart code for myself. Now, i am share this code so you need not to suffer from it. Following are the copy and paste code for you.
Software Uart code for AVR microcontroller tested on 1200 baud rate
//START -set baud rate for 1200bps
unsigned char min_bit_length = 83;
void send_byte(char send_byte){
char i;
//start bit
output_port4 &=~(1<<utx);
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//1 bit
if(send_byte & 0b00000001){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//2 bit
if(send_byte & 0b00000010){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//3 bit
if(send_byte & 0b00000100){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//4 bit
if(send_byte & 0b00001000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//5 bit
if(send_byte & 0b00010000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//6 bit
if(send_byte & 0b00100000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//7 bit
if(send_byte & 0b01000000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//8 bit
if(send_byte & 0b10000000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//stop bit
output_port4 |= (1<<utx);
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
}
void send_string(char send_string[]){
unsigned char i=0; // iterating variable
unsigned char LENGHT = 0;// length of the word
for(i=0;i<500; i++){
if(send_string[i] == NULL){break; }
LENGHT++;
}
i=0;
while(i<LENGHT){send_byte(send_s tring[i]);i++;}
}
//END
#define output_ddr DDRD
#define output_port4 PORTD
//in main()
//initialize this port
output_ddr |= (1<<utx);//as output port
output_port4 |= (1<<utx);//pull up because in idle time uart tx line is high
while(1 ){//main while
send_string("testing transmitter of software uart");// this will send out and you can see it on pc terminal
_delay_ms(1000);
}
unsigned char min_bit_length = 83;
void send_byte(char send_byte){
char i;
//start bit
output_port4 &=~(1<<utx);
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//1 bit
if(send_byte & 0b00000001){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//2 bit
if(send_byte & 0b00000010){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//3 bit
if(send_byte & 0b00000100){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//4 bit
if(send_byte & 0b00001000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//5 bit
if(send_byte & 0b00010000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//6 bit
if(send_byte & 0b00100000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//7 bit
if(send_byte & 0b01000000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//8 bit
if(send_byte & 0b10000000){output_port4 |= (1<<utx);} else{output_port4 &=~(1<<utx);}
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
//stop bit
output_port4 |= (1<<utx);
for(i=0; i<min_bit_length; i++){_delay_us(10);}//1 bit delay
}
void send_string(char send_string[]){
unsigned char i=0; // iterating variable
unsigned char LENGHT = 0;// length of the word
for(i=0;i<500; i++){
if(send_string[i] == NULL){break; }
LENGHT++;
}
i=0;
while(i<LENGHT){send_byte(send_s tring[i]);i++;}
}
//END
#define output_ddr DDRD
#define output_port4 PORTD
//in main()
//initialize this port
output_ddr |= (1<<utx);//as output port
output_port4 |= (1<<utx);//pull up because in idle time uart tx line is high
while(1 ){//main while
send_string("testing transmitter of software uart");// this will send out and you can see it on pc terminal
_delay_ms(1000);
}
Above code is made for avr microcontroller and its crystal 12Mhz. for any doubt, ask me in comment below.
Posted By :
Mr. Unique
2017-08-16/00:12:20

Latest Updates

programming
Arduino UNO tachometer coding with variable resistor and DC motor speed control
views :305p
programming
Here is the code to interface 2 serial devices with AVR
views :229p
programming
Software Uart for AVR microcontroller tested on 1200 baud rate
views :1163p
programming
ATMEL STUDIO-While loop conditioning issues
views :323p
programming
ATMEL STUDIO-While loop is not working using interrupt incremented conditioning
views :374p
programming
Copy and paste code for facebook share button in your websites
views :360
programming
How to program atmel 8051 family microcontroller? (step by step)
views :779
programming
Embedded program code in C language for Digital Voltmeter for AVR microcontroller
views :4102016-08-05_10_28_50.jpg)
programming
Assemby program code for Automatic Door Opening System (8051 family microcontroller)
views :358
programming
Very simple and accurate Seven Segment Display program Code in Embedded C language
views :369p
programming
Highway vehicle speed detector or checker Embedded C language code in MikroC AVR Framework also applicable for 8051 Microcontroller
views :197p
programming
Assembly program for accurate 1 second delay function
views :254