Listing Program Wavecom dengan Menggunakan Minimum Sistem AT-Mega 8
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
ini bisa dibuatkan untuk keperluan yanglain silah kan kunjungi http://jualrobotlinefollower.blogspot.com/2014/06/jasa-pembuatan-minimum-sistem-sesuai.html
Baca Selengkapnya ....