Hey guys,, kembali lagi dengan artikel tentang mikrokontroller. Kali ini saya akan mencoba membahas komunikasi serial 2 mikrokontroller dengan menggunakan UART. Kali ini saya akan mencoba mengkomunikasikan antara 2 buah mikrokontroller ATMega 8535.Yang perlu disiapkan adalah :
- 2 Buah Mikrokontroller ATMega 8535.
- 2 buah kabel untuk jalur Tx dan Rx.
- LCD, jika masih bingung tentang kofigurasi LCD silahkah lihat dipostingan saya sebelumnya, monggo
- CodeVisionAVR C Compiler, jika belum memiliki silahkan download disini
- Supply mikro.
- Hubungkan Tx Mikro A dengan Rx Mikro B, konfigurasinya seperti ini
- Setelah sambungan sudah benar, maka kita buka CodeVisionAVR dan kita akan memprogram dari segi Transmitter lebih dahulu.
- Setelah itu Pilih Settingan USART, kita centang mode Transmitter dengan BaudRate 9600
- Kemudian Pilih Generate Save and Exit, dan Ketik Program dibawah ini.
#include <mega8535.h>
// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
putchar(255); // putchar merupakan fungsi untuk mengirim data, nilainya saya beri 255
};
}
- Kemudian Compile program tersebut ke Mikro A.
- Setelah kita memprogram bagian Transmit, sekarang kita memprogram bagian Receive
- Jika mikro A kita pilih mode Transmit maka mikro B kita pilih mode receive dan centang Rx Interupt
Mengapa kita memilih Rx_Interrupt, karena kita akan mengambil data jika ada data masuk dari sisi Tx, dan prosesnya akan lebih cepat.
- Kemudian pilih mode LCD untuk menampilkan data, saya gunakan PORTC sebagai PIN LCD.
- Untuk Program sisi Receiver yakni :
Jika anda melakukan langkah-langkah dengan benar maka pada sisi penerima akan muncul tampilan pada LCD yakni "data serial: 255".. Selamat Mencoba,,
#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#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
char buf[33];
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR; // data kiriman Tx akan disimpan diregister UDR
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
//==============menampilkan data===========
lcd_gotoxy(0,0);
sprintf(buf,"data serial:%d",data);
lcd_puts(buf);
//===========================================
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
#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_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif
// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: Off
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x90;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
Nb. Pembaca yang baik selalu meninggalkan komentar
4 Comments:
PERTAMAX diamankan.......
Nice info kang
Selamat Kang...
Thanks y..
JASA DOWNLOAD EBOOK LUAR NEGERI ( IMPOR )
Bingung cari ebook yang diinginkan ?
Sudah ketemu, tapi harganya mahal banget ?
Tenang aja Bro and Sis. Aku bakal bantu kamu sampai dapetin deh !!!!
Disamping itu harganya gak mahal kq CUMA Rp 5.000 / Ebook ( Pesen 10 Ebook, aku kasih harga 3500 / Ebook ) Murah kan !!!! Daripada nyari atau beli langsung. Kalau sekedar ingin tanya - tanya juga boleh kirim aja pertanyaan kamu VIA EMAIL andyholics@gmail.com
**KHUSUS EBOOK DENGAN UKURAN DIATAS 50 MB, HARGA EBOOK RP. 20.000 / EBOOK**
**KHUSUS BAGI YANG REQUEST MAGAZINE, KONFIRMASI AJA TERLEBIH DAHULU VIA EMAIL andyholics@gmail.com
Dibawah ini ada beberapa kategori yang bisa aku bantu download
Architecture
Articles / Whitepapers
Arts / Cinema / Entertainment
Astronomy / Astrophysics
Audio Books
Biographies
Biology / Zoology / Life Sciences
Business / Commerce
Chemistry
Children's
Comics / Graphic Novels
Communication / Relationship / Self-help
Computers / IT
Crafts / Hobbies
Culture / Pop / Fashion
Dictionaries / Encyclopedias
Documentaries
Economics
Education / Exams / Teaching / Lectures
eMagazines / eJournals
Engineering
Environmental / Agricultural Science
Finance / Investing
Food / Beverages
Games / Card / Puzzles
Geography / Travel / Adventure
Graphics / Photography
Health / Mind / Body
History
Home / Garden
Humor / Comedy / Satire / Wit
Instruction / Study
Language / Linguistics / Grammar
Law
Literature / Fiction
Management / Logistics
Manuals / Handbooks
Martial Arts / Self Defense
Mathematics
Medicine
Military
Music
Pharmaceutical
Philosophy / Ethics
Physics
Politics
Psychology
Religion / Spirituality
Science Classics
Science General
Social Sciences
Sports / Recreation
Statistics
Systems Science
Transportation / Navigation
UnCategorized
Video Training
Writing / Journalism
Cara pemesanan
1. Kirim judul buku yang kamu download VIA EMAIL ke andyholics@gmail.com
2. Kemudian aku crosscheck, Tunggu Konfirmasi dari aku minimal 1/2 Hari - 1 Hari
3. Transaksi Pembayaran Deh
4. Tunggu Ebook kamu minimal 1 Hari - 2 Hari
5. Dapet Deh ebook yang kamu cari selama ini, selamat !!!!
SYARAT DAN KETENTUAN BERLAKU
1. MELAYANI WILAYAH DOMISILI SURABAYA & SEKITARNYA ( UNTUK WILAYAH DILUAR SURABAYA TETAP DILAYANI )
2. ONGKOS KIRIM DITANGGUNG PENGGUNA JASA DOWNLOAD EBOOK
CONTACT PERSON
email : andyholics@gmail.com
TERIMA ORDER 24 JAM / 7 HARI
:kk9
Posting Komentar