serial di AVR ATMEGA8535

Z

zhi_yi

Guest
hi, tolong bantu saya bagaimana untuk antarmuka untuk serial menyela di ATMEGA8535, saya mendapat kesulitan dalam cara mengatur baudrate dari tranmission asynchronous mode.Saya membaca dari lembar yang UBRR (12 bit) mengandung dari UBRRH (4 bit) dan UBRRL (8 bit).dan saya menggunakan aplikasi ICC AVR's pembangun untuk membangun program, dan mengatakan bahwa seharusnya UBRR "25" jika saya ingin baudrate menjadi 9600, apa artinya "25" berarti?bagaimana untuk menetapkan ke UBRRH dan UBRRL?dan saya ingin menggunakan serial dalam modus interrupt, apakah ada contoh program apapun?Terima kasih banyak untuk waktu Anda.

 
Ini mungkin berguna bagi Anda.merujuk USART dan halaman 170 dari docs ini
Maaf, tapi Anda harus login untuk melihat lampiran

 
Thanks ckshivaram,

btw, aku sudah membaca datasheet yang Anda upload.tolong dapat membimbing saya langkah demi langkah apa yang harus saya lakukan jika saya ingin membuat sebuah program yang akan menerima data dari PC dan kemudian AVR akan mengirim kembali ke PC (echo data yang diterima)?i memeriksa bahwa ada tak berguna yang salah dengan koneksi perangkat keras.dan saya mencoba untuk membuat program menggunakan AVR ICC, di sini adalah kode:

Quote:/ / ICC-AVR pembangun aplikasi: 5/23/2008 11:06:09

/ / Target: M8535

/ / Crystal: 4.0000Mhz# include <iom8535v.h>

# include <macros.h>port_init void (void)

(

PORTA = 0x00;

DDRA = 0x00;

PORTB = 0x00;

DDRB = 0x00;

PORTC = 0x00;

DDRC = 0x00;

PORTD = 0x00;

DDRD = 0x00;

)/ UART0 menginisialisasi

/ Diinginkan baud rate: 9600

/ / Aktual baud rate: 9.615 (0,2%)

uart0_init void (void)

(

UCSRB = 0x00; / / menonaktifkan sementara pengaturan baud rate

UCSRA = 0x00;

UCSRC = BIT (Ursel) | 0x06;

UBRRL = 0x19; / / set baud rate lo

UBRRH = 0x00; / / set baud rate hi

UCSRB = 0x18;

)/ / panggil rutin ini untuk menginisialisasi semua periferal

init_devices void (void)

(

/ / berhenti errant menyela sampai mengatur

CLI (); / / menonaktifkan semua menyela

port_init ();

uart0_init ();MCUCR = 0x00;

GICR = 0x00;

TIMSK = 0x00; / / timer sumber interrupt

SEI (); / / mengaktifkan kembali interupsi

/ / semua peripheral yang sekarang diinisialisasi

)/ * Membaca dan menulis fungsi * /

unsigned char ReceiveByte (void)

(

while (! (UCSRA & (1 <<RXC))); / * Tunggu sampai data yang masuk * /

return UDR; / * Kembali data * /

)void TransmitByte (unsigned char data)

(

while (! (UCSRA & (1 <<UDRE))); / * Tunggu mengirimkan buffer kosong * /

UDR = Data; / * Mulai transmisi * /

)void main ()

(

init_devices ();

while (1)

(

TransmitByte (ReceiveByte ()); / * Echo yang diterima karakter * /

)

)

 
Hi; kemungkinan alasan untuk tidak mendapatkan output adalah bahwa Anda tidak membersihkan bendera UDRE, dan RXCafter operasi.jika itu adalah salah satu maka tidak akan menerima data lagi.sehingga setiap kali Anda keluar dari loop membuat flag = 0; Pikirkan hal itu dilakukan oleh pengontrol saja.

Agak sibuk di kantor, akan melihat setiap kali ini aku bosan dari pekerjaan saya.Akan memberikan solusi segera.

dengan cara yang kristal yang anda gunakan.menggunakan 11.0592Mhz itu akan memecahkan masalah.
Periksa apakah setting dari HyperTerminal di mana Anda melihat output dikonfigurasi dengan benar, dengan aliran hardware dikonfigurasi sebagai "none".

coba ini dan beritahu saya.

 
hei selama saya tahu, frekuensi kristal dapat membuat kesalahan pada transfer data, saya tidak begitu ingat tentang hal itu, tetapi mencoba membaca datasheet Anda akan menemukan tabel kesalahan di sana.

satu informasi bagi Anda, jika Anda menghubungkan USART dengan komputer yang menggunakan OS LINUX (Saya tidak tahu tentang windows OS) melalui RS-232 Anda dapat mengatur baudrate UC oleh kita sendiri, tetapi di sisi komputer harus 19.200 bps (ada tidak baik penjelasan mengapa harus seperti itu).

ok good luck, jangan lupa terus membaca datasheet dan membayar atention pada UBRR kesalahan.
<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 
mau nanya...
saya bingung menentukan baudrate...
saya menggunakan cristal 8Mhz...
kira2 untuk perhitungan baudratenya gimana ya??

hatur tengkyu sebelumnya...
 

Welcome to EDABoard.com

Sponsor

Back
Top