//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);
}
Above code is made for avr microcontroller and its crystal 12Mhz. for any doubt, ask me in comment below.