Gunakan MimeTex/LaTex untuk menulis simbol dan persamaan matematika.

Selamat datang, Pengunjung. Silahkan masuk atau mendaftar. Apakah anda lupa aktivasi email?

Februari 26, 2021, 11:24:46 AM

Masuk dengan nama pengguna, kata sandi dan lama sesi

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139620
  • Total Topik: 10383
  • Online Today: 46
  • Online Ever: 441
  • (Desember 18, 2011, 12:48:51 AM)
Pengguna Online
Users: 1
Guests: 57
Total: 58

Ikuti ForSa

ForSa on FB ForSa on Twitter

Penulis Topik: [ASK]Komunikasi serial  (Dibaca 4675 kali)

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Offline Jimmy

  • Siswa Baru
  • *
  • Tulisan: 2
  • IQ: 2
[ASK]Komunikasi serial
« pada: Juni 20, 2010, 12:16:38 AM »
saya mau menanyakan dari listing program yang saya buat ini ada yang salah gak

#include <mega8535.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
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_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

// 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_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
   };
}

#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_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
   ++tx_counter;
   }
else
   UDR=c;
#asm("sei")
}
#pragma used-
#endif

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

// Declare your global variables here

void main(void)
{
// Declare your local variables here
   unsigned char data_rx;
// 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: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
       data_rx=getchar();
       putsf("keyboard");
      };
}

seharusnya kan hasilnya di hyperterminal windows "keyboard", tapi kok setelah saya jalankan mikronya malah keluar karekter aneh atau random karekter.
saya mohon petunjuk dari sesepuh sekalian apakah listing program saya ada yang salah kalo bisa mohon di betulkan please tugas kuliah nih
« Edit Terakhir: Juni 20, 2010, 12:18:57 AM oleh Jimmy »

Offline haglan

  • Mahasiswa
  • **
  • Tulisan: 29
  • IQ: 1
  • Gender: Pria
Re: [ASK]Komunikasi serial
« Jawab #1 pada: Juni 20, 2010, 10:33:07 AM »
coba cek koneksi dengan komputer kmu sama kan baudratenya antara komputer dengan mikro.

while (1)
      {
      printf("keyboard\r");
      delay_ms(200);


      };

coba ganti dengan ini tampil ga, ku dh coba mustinya bisa tampil hasilnya tulisan keyboard terus turun ke bawah. aku g pke interupt receiver n tranmitter

Offline 0y1k

  • Dosen
  • ****
  • Tulisan: 233
  • IQ: 3
  • Gender: Pria
  • بسم الله
Re: [ASK]Komunikasi serial
« Jawab #2 pada: Juni 20, 2010, 11:04:52 PM »
listing kode yang diatas itu tampaknya fungsi getchar dan fungsi putchar
ini list yang menunjukkan itu

untuk getchar
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;
}

untuk putchar
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_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
   ++tx_counter;
   }

listing program diatas dibutuhkan saat menggunakan codevision yang versi jadul bgt
yang belum ada fungsi UARTnya... makanya perlu pake fungsi diatas...

namun dengan codevision yang baru, cukup seperti haglan
langsung jalan... tanpa perlu mendeklarasikan fungsi itu
لاَ إِلَـهَ إِلاَّ اللهُ الْعَظِيْمُ الْحَلِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ الْعَرْشِ الْعَظِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ السَّمَاوَاتِ وَرَبُّ اْلأَرْضِ وَرَبُّ الْع

Offline danielektro04

  • Mahasiswa
  • **
  • Tulisan: 18
  • IQ: 5
Re: [ASK]Komunikasi serial
« Jawab #3 pada: Juni 21, 2010, 12:20:17 AM »
Kalau keluar karakter aneh di hyperterminal yang tidak sesuai dengan harapan, biasanya bermasalah dirangkaiannya mungkin pengkabelan/ solderannya atau rangkaian MAX232nya. Mudah2an ada pencerahan.

Offline 0y1k

  • Dosen
  • ****
  • Tulisan: 233
  • IQ: 3
  • Gender: Pria
  • بسم الله
Re: [ASK]Komunikasi serial
« Jawab #4 pada: Juni 22, 2010, 01:20:36 PM »
Kalau keluar karakter aneh di hyperterminal yang tidak sesuai dengan harapan, biasanya bermasalah dirangkaiannya mungkin pengkabelan/ solderannya atau rangkaian MAX232nya. Mudah2an ada pencerahan.
biasanya jg karena baudratenya yg tidak sama (hal ini suka terlupakan)

Offline iva maglina brilliani

  • Siswa Baru
  • *
  • Tulisan: 1
  • IQ: 0
Re: [ASK]Komunikasi serial
« Jawab #5 pada: Juli 03, 2010, 05:08:51 AM »
saya sekarang menggunakan ask tlp rlp. apakah pin data modul rlp tlp saya langsung di sambungkan ke rxt txt pada mikro??? lalu program mikronya sama seperti yang diatas.
tolong bantuannya mas. cz ni q sangat bingung sekali...
thanks

Offline 0y1k

  • Dosen
  • ****
  • Tulisan: 233
  • IQ: 3
  • Gender: Pria
  • بسم الله
Re: [ASK]Komunikasi serial
« Jawab #6 pada: Juli 03, 2010, 10:27:28 PM »
saya sekarang menggunakan ask tlp rlp. apakah pin data modul rlp tlp saya langsung di sambungkan ke rxt txt pada mikro??? lalu program mikronya sama seperti yang diatas.
tolong bantuannya mas. cz ni q sangat bingung sekali...
thanks

K'lo saya pake pin T0 dan T1

sepertinya bisa deh pake Rx dan Tx, cuman saya belum coba

 

Related Topics

  Subyek / Dimulai oleh Jawaban Tulisan terakhir
45 Jawaban
30684 Dilihat
Tulisan terakhir Oktober 07, 2010, 01:03:52 AM
oleh elisds.sbr
3 Jawaban
4762 Dilihat
Tulisan terakhir April 23, 2010, 05:18:45 AM
oleh kuin
2 Jawaban
6732 Dilihat
Tulisan terakhir Juni 30, 2010, 02:30:48 AM
oleh cahcyber
1 Jawaban
2600 Dilihat
Tulisan terakhir November 20, 2010, 02:45:30 PM
oleh Tom Kru
0 Jawaban
3071 Dilihat
Tulisan terakhir Desember 08, 2010, 02:37:09 AM
oleh gus muj