USART RX bit banging

Dasar teori :

  • http://en.wikipedia.org/wiki/Bit_banging
  • http://www.brouhaha.com/~eric/pic/bitbanging.htm

Skematik simulasi :







Code RX  bit banging, PIN RX digunakan PINA.0 :


#include <mega32.h>
#include <delay.h>
#include <alcd.h>
  
#define baud 9600 // 9600,8,N,1      
#define RXPIN PINA.0
#define DDR_RXPIN DDRA.0
#define PORT_RXPIN PORTA.0


#define delay_baudrate 1000000/9600

#define usart_delay delay_baudrate 



unsigned char get_usart_data(){

    unsigned char usartdata=0;//,i=0;
  
    DDR_RXPIN=0;  // set input
    PORT_RXPIN=1; // Pull up 
  
    while(RXPIN); 

    delay_us(usart_delay);

    usartdata |=  RXPIN <<0 ;
    delay_us(usart_delay);     
  
    usartdata |=  RXPIN <<1 ;
    delay_us(usart_delay);
      
    usartdata |=  RXPIN <<2 ;
    delay_us(usart_delay);
      
    usartdata |=  RXPIN <<3 ;
    delay_us(usart_delay);
      
    usartdata |=  RXPIN <<4 ;
    delay_us(usart_delay);
      
    usartdata |=  RXPIN <<5 ;
    delay_us(usart_delay);
      
    usartdata |=  RXPIN <<6 ;
    delay_us(usart_delay);
      
    usartdata |=  RXPIN <<7 ;
    delay_us(usart_delay); 
    
    return usartdata;           
}


unsigned char buff[50];

void main(void)
{
    int i; 
    lcd_init(16);

    while (1)
    {
        
        lcd_gotoxy(0,0);
        for(i=0;i<32;i++){
            buff[i]=get_usart_data();
        } 
      
        for(i=0;i<32;i++){
            lcd_putchar(buff[i]);
        }
    };
}



Test code dengan mengirim data (TX):
#include <mega32.h>

// Alphanumeric LCD functions
#include <alcd.h>

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

// Declare your global variables here
#include <delay.h>
void main(void)
{
unsigned char i=0;

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


lcd_init(16);

lcd_gotoxy(0,0);
lcd_putsf("TRANSMITTER");


while (1)
      {
     
            printf("hallo 1234567890USART BIT BANGED");
            delay_ms(200);
            printf("Clear                           "); 
            delay_ms(200);
            printf("Sh Mukti ->USART RX BIT BANGING ");  
            delay_ms(200);
            printf("Clear lagi                   %3d",i); 
            delay_ms(200);  
            i++;
      }
}





download project and simulation




1 comment:

Made in Aji said...

kang mukti memnag juara deh.. sangat membantu, jazakallah khoir ^_^