Listing Program Wavecom dengan Menggunakan Minimum Sistem AT-Mega 8

Posted by Unknown Kamis, 31 Juli 2014 0 komentar
Listing Program Wavecom dengan Menggunakan Minimum Sistem AT-Mega 8

LISTING PROGRAM
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date    : 7/5/2014
    Author  : Sh.mukti
    Company : Jangan gunakan software bajakan!
    Comments:


    Chip type               : ATmega8
    Program type            : Application
    AVR Core Clock frequency: 11.059200 MHz
    Memory model            : Small
    External RAM size       : 0
    Data Stack size         : 256
    *****************************************************/

    #include <mega8.h>                       // untuk header library AT-Mega 8
    #include <delay.h>                          // untuk header library delay

    // Alphanumeric LCD functions
    #include <alcd.h>                            // untuk header library penampilan LCD



// inisialisasi USART (sudah otomatis dibuat di code visioan)
    #ifndef RXB8                                 
    #define RXB8 1                               // mendefinisikan RX menjadi 1
    #endif                                                                // mengakhir.e defenisi

    #ifndef TXB8
    #define TXB8 0                               // mendefinisikan TX menjadi 0
    #endif                                                                // mengakhir.e defenisi

    #ifndef UPE
    #define UPE 2                                  // mendefinisikan Register UPE menjadi 2
    #endif                                                                // mengakhir.e defenisi

    #ifndef DOR
    #define DOR 3                                 // mendefinisikan Register DOR menjadi 3
    #endif

    #ifndef FE
    #define FE 4                                    
    #endif

    #ifndef UDRE
    #define UDRE 5
    #endif

    #ifndef RXC
    #define RXC 7
    #endif

    #define FRAMING_ERROR (1<<FE)
    #define PARITY_ERROR (1<<UPE)
    #define DATA_OVERRUN (1<<DOR)
    #define DATA_REGISTER_EMPTY (1<<UDRE)
    #define RX_COMPLETE (1<<RXC)

    // USART Receiver buffer
    #define RX_BUFFER_SIZE 8
    char rx_buffer[RX_BUFFER_SIZE];

    #if RX_BUFFER_SIZE <= 256
    unsigned char rx_wr_index,rx_rd_index,rx_counter;
    #else
    unsigned int rx_wr_index,rx_rd_index,rx_counter;
    #endif

    // This flag is set on USART Receiver buffer overflow
    bit rx_buffer_overflow;

    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
       {
       rx_buffer[rx_wr_index++]=data;
    #if RX_BUFFER_SIZE == 256
       // special case for receiver buffer size=256
       if (++rx_counter == 0) rx_buffer_overflow=1;
    #else
       if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
       if (++rx_counter == RX_BUFFER_SIZE)
          {
          rx_counter=0;
          rx_buffer_overflow=1;
          }
    #endif
       }
    }

    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
    char data;
    while (rx_counter==0);
    data=rx_buffer[rx_rd_index++];
    #if RX_BUFFER_SIZE != 256
    if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
    #endif
    #asm("cli")
    --rx_counter;
    #asm("sei")
    return data;
    }
    #pragma used-
    #endif

    // USART Transmitter buffer
    #define TX_BUFFER_SIZE 8
    char tx_buffer[TX_BUFFER_SIZE];

    #if TX_BUFFER_SIZE <= 256
    unsigned char tx_wr_index,tx_rd_index,tx_counter;
    #else
    unsigned int tx_wr_index,tx_rd_index,tx_counter;
    #endif

    // USART Transmitter interrupt service routine
    interrupt [USART_TXC] void usart_tx_isr(void)
    {
    if (tx_counter)
       {
       --tx_counter;
       UDR=tx_buffer[tx_rd_index++];
    #if TX_BUFFER_SIZE != 256
       if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
    #endif
       }
    }

    #ifndef _DEBUG_TERMINAL_IO_
    // Write a character to the USART Transmitter buffer
    #define _ALTERNATE_PUTCHAR_
    #pragma used+
    void putchar(char c)
    {
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
       {
       tx_buffer[tx_wr_index++]=c;
    #if TX_BUFFER_SIZE != 256
       if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
    #endif
       ++tx_counter;
       }
    else
       UDR=c;
    #asm("sei")
    }
    #pragma used-
    #endif

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

    // Declare your global variables here
     char data;
            // Declare your global variables here
                void sms_init()                                     // inisialisasi wavecom
                {
                        printf("ATE0");                            // kirim menuju wavecom bentuk ATE0
                        putchar(0x0D);                            // kirim menuju wavecom berupa    ENTER
                        while(getchar()!='K'){};               // tunggu mikrokontroler menerima karakter K
                        while(getchar()!=0x0A){};         // tunggu mikrokontroler menerima karakter pindah baris
                        delay_ms(500);                           // tunggu selama 500ms
                        lcd_clear();                                    // menghapus tampilan LCD
                        lcd_gotoxy(0,0);                          // menempakan posisi kursor pada x dan y 0,0
                        lcd_putsf("inisialisasi selesai"); // menampilkan karakter
                        delay_ms(1000);                         // // tunggu selama 1000ms
                }

             
                void send_sms_txt(char flash *fmtstr1, char flash *fmtstr2)
                {
                        printf("AT+CMGF=1");              // kirim menuju wavecom bentuk AT+CMGF=1
                        putchar(0x0D);//ENTER
                        while(getchar()!=0x0A){};         // tunggu mikrokontroler menerima karakter pindah baris
                        while(getchar()!=0x0A){};
                        delay_ms(500);                           // tunggu selama 500ms

                        printf("AT+CMGS=\"");             // kirim menuju wavecom bentuk AT+CMGF=1
                        printf(fmtstr1);                             // kirim karakter yang ada dalam fungsi ftsmrt
                        printf("\"");
                        putchar(0x0D);//ENTER
                        while(getchar()!=0x0A){};
                        delay_ms(500);         

                        printf(fmtstr2);             // kirim karakter yang ada dalam fungsi ftsmrt
                        putchar(0x1A);            // kirim karakter
                        while(getchar()!=0x0A){};
                        while(getchar()!=0x0A){};
                        while(getchar()!=0x0A){};
                        while(getchar()!=0x0A){};
                        delay_ms(500);  

                        printf("AT+CMGD=1");
                        putchar(0x0D);//ENTER
                        while(getchar()!=0x0A){};
                        while(getchar()!=0x0A){};
                        delay_ms(500);        

                        printf("AT+CMGD=2");
                        putchar(0x0D);//ENTER
                        while(getchar()!=0x0A){};
                        while(getchar()!=0x0A){};
                        delay_ms(500);        

                        printf("AT+CMGD=3");
                        putchar(0x0D);//ENTER
                        while(getchar()!=0x0A){};
                        while(getchar()!=0x0A){};
                        delay_ms(500);
                }     
               
                char receive_sms()
                {
               
                        printf("AT+CMGR=1");
                        putchar(0x0D);
                        while(getchar()!=0x0A){};
                        while(getchar()!=0x0A){};
                        data=getchar();
                        while(getchar()!='K'){};
                        while(getchar()!=0x0A){};

                        delay_ms(500);

                        printf("AT+CMGD=1");
                        putchar(0x0D);//ENTER
                        while(getchar()!='K'){};
                        while(getchar()!=0x0A){};
                        delay_ms(500);         

                        return(data);
                }    

                void cek_sms()
                {
                        while(getchar()!=','){}; // tunggu selama ambil karakter ,
                        while(getchar()!=0x0A){};
                }

                // Declare your global variables here



            unsigned char dataku,x,buf[100]; 

    void main(void)
    {
    PORTB=0x00;                 // untuk mereset PORT B (mematikan lampu dan buzzer)
    DDRB=0xFF;                   // ini sialisasi register untuk menjadi output

    PORTC=0x00;                 // di reset karena sudah ada insialisasi LCD
    DDRC=0x00;                   // register di reset karena sudah ada insialisasi LCD

  
    PORTD=0x00;                
    DDRD=0x00;                  

   
    TCCR0=0x00;
    TCNT0=0x00;

    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    MCUCR=0x00;

    TIMSK=0x00;

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

    ACSR=0x80;
    SFIOR=0x00;

    ADCSRA=0x00;

    SPCR=0x00;

    TWCR=0x00;

    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTD Bit 2
    // RD - PORTC Bit 5
    // EN - PORTC Bit 4
    // D4 - PORTC Bit 3
    // D5 - PORTC Bit 2
    // D6 - PORTC Bit 1
    // D7 - PORTC Bit 0
    // Characters/line: 16
    lcd_init(16);

    // Global enable interrupts
    #asm("sei")
                 lcd_clear();
                delay_ms(1000);
                lcd_gotoxy(0,0);
                lcd_putsf(">>inisialisai<<");
                x=0;                        // untuk variable pembantu kondisi
                sms_init();                    // menjalankan fungsi yang ada dalam sms_init
           
            while (1)                     tunggu jika benar
                  {
                  // Place your code here
                        if(x == 4)                                       // jika x=4 maka akan jalankan bawahnya
                        {
                            send_sms_txt("081287524759","semua lampu menyala");          melakuakan fungsi send_sms
                            lcd_clear();
                            lcd_gotoxy(0,0); 
                            lcd_putsf("semua lampu on");             // menampikn krakter pada lcd
                            delay_ms(2000);
                            x=5 ;   // variable x menjadi 5
                        }
                        if(x == 0)       // jika x=0 maka akan jalankan bawahnya
                        {
                            send_sms_txt("081287524759","semua lampu mati");
                            lcd_clear();
                            lcd_gotoxy(0,0); 
                            lcd_putsf("semua lampu off");
                            delay_ms(2000);
                            x=1;   // variable x menjadi bernilai 1
                        }  
                      
                       
                        lcd_clear();
                        lcd_gotoxy(0,0);         
                        lcd_putsf("siap menerima kode");  

                        cek_sms();    // menjalankan fungsi cek_ms

                        lcd_clear();
                        lcd_gotoxy(0,0);
                        lcd_putsf("ada sms, siap cek kode");  
                             
                        dataku = receive_sms()-48;       //normalisasi bilangan, ascii to desimal 

                        switch(dataku)             // logika pemilihan seseui dengan yang berisi dalam dataku
                        {
                                case 1: lcd_clear();                              // jika kondisi dataku bernilai 1 maka jalan kan fungsi ini
                                        lcd_gotoxy(0,0);
                                        lcd_putsf("turn on lamp 1");
                                        PORTB.1=1;                 // menyalakan buzer
                                        x=x+1;                                           // x yang baru = x lama ditambah 1
                                        lcd_gotoxy(1,1);                          //
                                        sprintf(buf,"x= %d",x);               // menampikan data yang bias berubah
                                        lcd_puts(buf);
                                        delay_ms(2000);                         // delay 2 detik
                                        PORTB.5=1;                                 // menyalakan lampu 1
                                        PORTB.1=0;                 // mematikan buzer
                                       
                                        break;                                            //  keluar fungsi case
                                case 2: lcd_clear();
                                        lcd_gotoxy(0,0);
                                        lcd_putsf("lampu 2 on");
                                        PORTB.1=1;
                                         x=x+1;
                                        lcd_gotoxy(1,1);
                                        sprintf(buf,"x= %d",x);
                                        lcd_puts(buf);
                                        delay_ms(2000); 
                                        PORTB.4=1;                                 // menyalakan lampu 2
                                        PORTB.1=0;
                                       
                                        break;
                                case 3: lcd_clear();
                                        lcd_gotoxy(0,0);
                                        lcd_putsf("lampu 3 on");                    
                                        PORTB.1=1;
                                        x=x+1;  
                                        lcd_gotoxy(1,1);
                                        sprintf(buf,"x= %d",x);
                                        lcd_puts(buf);
                                        delay_ms(2000); 
                                        PORTB.3=1;                                 // menyalakan lampu 3
                                        PORTB.1=0;
                                        break;
                                case 4: lcd_clear();
                                        lcd_gotoxy(0,0);
                                        lcd_putsf("lampu1 off");                   
                                        PORTB.1=1;
                                        x=x-2;  
                                        lcd_gotoxy(1,1);
                                        sprintf(buf,"x= %d",x);
                                        lcd_puts(buf);
                                        delay_ms(2000); 
                                        PORTB.5=0; // mematikan lampu 1
                                        PORTB.1=0;
                                        break;
                                case 5: lcd_clear();
                                        lcd_gotoxy(0,0);
                                        lcd_putsf("lampu2 off");                   
                                        PORTB.1=1;
                                        x=x-1;                            // variable x baru adalah x lama dikurangi 1
                                        lcd_gotoxy(1,1);
                                        sprintf(buf,"x= %d",x);
                                        lcd_puts(buf);
                                        delay_ms(2000); 
                                        PORTB.4=0;                 // mematikan lampu 2
                                        PORTB.1=0;
                                        break;
                                case 6: lcd_clear();
                                        lcd_gotoxy(0,0);
                                        lcd_putsf("lampu3 off");                   
                                        PORTB.1=1;
                                        x=x-2;  
                                        lcd_gotoxy(1,1);
                                        sprintf(buf,"x= %d",x);
                                        lcd_puts(buf);
                                        delay_ms(2000); 
                                        PORTB.3=0;                 // mematikan lampu 3
                                        PORTB.1=0;
                                        break;
                        }
                      
                      }
    }



ini bisa dibuatkan untuk keperluan yanglain silah kan kunjungi http://jualrobotlinefollower.blogspot.com/2014/06/jasa-pembuatan-minimum-sistem-sesuai.html

Baca Selengkapnya ....
Buat Email | Copyright of Jual Robot Line Follower | Tracer | USB Downloader | Line Follower.