خدمات وبسایت آی‌سی‌تی نیـــک

طراحی و ساخت انواع پروژه‌های الکترونیکی با: میکروکنترلرavr - میکروکنترلرarm - میکروکنترلرpic و آردوینو

مقالات و آموزش‌های رایگان در سطوح پایه و حرفه‌ای برای الکترونیک و آی سی تی - ICT



ارتباط سریال USART در میکروکنترلر ATMEGA32

منتشر شده در مقالات

همانطور که میدانید 2نوع ارتباط سریال وجود دارد آسنکرون و سنکرون. در ارسال اطلاعات به روش سنکرون تمام اطلاعات در یک لحظه بدون نیاز به بیت های اضافی(بیت های START،STOPوPARITY)که در آسنکرون وجود دارند ارسال می شود. در مد سنکرون دو دستگاه فرستنده و گیرنده با ارسال پالس کلاک با یکدیگر همزمان می شوند ولی در روش آسنکرون نیاز به ارسال پالس کلاک نداریم و اطلاعات به صورت بایت بایت ارسال می شوند و تا یک بایت به طور کامل دریافت نشود بایت بعدی ارسال نمی شود. بیت های اضافی در روش آسنکرون فریم ارسالی را کامل میکنند تا بایت مورد نظر مشخص شود.

USART data transmission 0ادامه مطلب???

در ارتباط سریال سه حالت وجود دارد:

یک طرفه: ارسال اطلاعات فقط از طرف یک دستگاه و دریافت از طرف دستگاه دیگر انجام می شود.

simplex 0

نیمه دوطرفه: ارسال اطلاعات یا دریافت اطلاعات توسط یک دستگاه تنها در یک زمان انجام می شود.

half duplex mode 0

تمام دوطرفه: ارسال و دریافت اطلاعات هم زمان توسط هر دو طرف قابل انجام است.

full duplex mode 0

میکروکنترلرAtmega32/16 از سه سیستم ارتباط سریال پشتیبانی میکند:

  1. ارتباط سریال USART
  2. پروتکل گذرگاه SPI
  3. پروتکل دو سیمه TWI

ارتباط سریالUSART

universal synchronous asynchronous receiver and transmission/ transmitter:

میکروکنترلر ATmega32 و ATmega16 دارای سخت افزاری جداگانه برای ارتباط تمام دو طرفه سریال می باشند. پایه 14 میکرو RX گیرنده سریال و پایه 15 میکرو TX فرستنده میکرو می باشد در میکروکنترلر ATmega8 نیز پایه های 2 و 3 به ترتیب RXوTX می باشند.

mega32mega8

همزمان سازی در مد آسنکرون توسط انتخاب مناسب نرخ بیت (Boud Rate) و بیت های شروع و پایان انجام می شود. بیت شروعStartهمیشه یک بیت است و در اول فریم ارسالی وجود دارد و در وضعیت صفر منطقی می باشد که نشان دهنده آنست که بعد از آن دیتا می باشد. بیت پایان Stop نیز می تواند یک یا دوبیت که در وضعیت 1 منطقی هستند باشد که نشان دهنده تکمیل فریم ارسالی می باشد.

usart start and stop bit 0

نرخ بیت Boud Rate: نرخی است که در آن اطلاعات به صورت سریال ارسال می شود.

میکروکنترلر Atmega32 دارای ویژگی های زیر می باشد:

  • نرخ بیت های متنوع
  • 5تا9بیت دیتا
  • یک یا دو بیت پایان 
  • بیت چک parity
  • تنظیم USART در مد سنکرون
  • دارای سه وققه برای تکمیل دریافت،تکمیل ارسال و خالی بودن رجیستر دیتای ارسال

رجیستر های USART

UCSR:رجیستر کنترل وضعیت USARTمی باشد که به سه رجیستر UCSRA و UCSRB و UCSRC تقسیم می شود.

UBRR:رجیستر تنظیم نرخ بیت USART

UDR: رجیستر دیتای USART

  1. رجیسترUCSRA:

UCSRA

بیت RXC:این بیت پرچم دریافت اطلاعات می باشد. زمانی که اطلاعات خوانده نشده وجود داشته باشد 1 و هنگامی که بافر گیرنده خالی باشد 0 است.

بیت TXC:این بیت پرچم ارسال اطلاعات می باشد. زمانی که اطلاعات به طور کامل فرستاده شود 1 می شود.

بیت UDRE:این بیت نشان دهنده آنست که بافر فرستنده خالی می باشد. به معنای آنکه فرستنده آماده ارسال اطلاعات است. به محض نوشتن اطلاعات در رجیستر دیتا این بیت صفر می شود.

رجیسترUCSRB:

UCSRB

بیت RXCIE:فعال ساز وقفه دریافت

               هنگامی که 1 در آن نوشته شود وقفه دریافت فعال می شود. 

               هنگامی که 0 در آن نوشته شود وقفه دریافت غیر فعال می شود.

بیت TXCIE:فعال ساز وقفه ارسال

               هنگامی که 1 در آن نوشته شود وقفه ارسال فعال می شود. 

               هنگامی که 0 در آن نوشته شود وقفه ارسال غیر فعال می شود.

بیت UDRIE:فعال ساز وقفه خالی بودن رجیستر دیتای USART

               هنگامی که 1 در آن نوشته شود وقفه فعال می شود. 

               هنگامی که 0 در آن نوشته شود وقفه غیر فعال می شود.

بیت RXEN:فعال ساز دریافت

               هنگامی که 1 در آن نوشته شود دریافت فعال می شود. 

               هنگامی که 0 در آن نوشته شود دریافت غیر فعال می شود.

بیت TXEN:فعال ساز سریال

               هنگامی که 1 در آن نوشته شود ارسال فعال می شود. 

               هنگامی که 0 در آن نوشته شود ارسال غیر فعال می شود.

رجیستر UCSRC:

UCSRC

بیت UMSEL:انتخاب مد USART

               هنگامی که 1 باشد مد سنکرون انتخاب می شود

               هنگامی که 0 باشد مد آسنکرون انتخاب می شود

بیت USBS:بیت انتخاب تعداد بیت های STOP

               هنگامی که 0باشد 1بیت STOPداریم

               هنگامی که 1باشد 2بیت STOPداریم

بیت های [UCSZ[0:1: این بیت ها تعداد دیتا را مشخص میکند

UCSZ

بیت UCSZ2 در رجیستر UCSRB می باشد.

رجیستر UDR:

udr 2

دیتای دریافتی و ارسالی در این رجیستر بافر می شوند هنگامی که دیتا برای ارسال نوشته می شود در بافر رجیستر TXB قرار میگیرند و هنگامی که دریافت می شوند در رجیستر RXBقرار میگیرند.

رجیسترهای UBRRH و UBRRL:رجیستر های نرخ بیت USART

UBRRH

این دو رجیستر روی هم 12بیت از اطلاعات نرخ بیت را ذخیره می کنند که UBRRH دارای 4بیت و UBRRL دارای 8بیت از این اطلاعات هستند.

برای انتخاب نرخ بیت مورد نظر باستی مقدار این دو رجیستر را از فرمول زیر محاسبه کنیم:

UBRR register 1

UBRR

مراحل برنامه‌نویسی ارسال USART:

گام اول:در گام نخست نرخ بیت را توسط فرمولی که گفته شد محاسبه می کنیم.

گام دوم: تنظیم USART

  • انتخاب تعداد بیت پایان
  • تنظیم تعداد بیت دیتا
  • بارگذاری UBRR
  • فعال کردن ارسال و دریافت

بنابراین در نهایت تابعی به نام روشن کردن ارسال می نویسیم:

void TX_ON(unsigned int boud,unsigned char fosc)
{
unsigned char x;
x=fosc/(0.000064*boud);
x-=1;
UBRRL=x;
UBRRH=x>>8;
UCSRB |=(1 << TXEN);
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
}

حال بایستی تابعی بنویسیم تا کاراکتر را ارسال کند:

void tx_putc(unsigned char send)
{
while ((UCSRA & (1 << UDRE)) == 0);
UDR = send;
}

در نهایت برنامه زیر پس از روشن نمودن ارسال قادر به ارسال هر کاراکتری می باشد:

#include <mega32.h>


void TX_ON(unsigned int boud,unsigned char fosc)

{
unsigned char x;
x=fosc/(0.000064*boud);
x-=1;
UBRRL=x;
UBRRH=x>>8;
UCSRB |=(1 << TXEN);
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
}


void tx_putc(unsigned char send)
{
while ((UCSRA & (1 << UDRE)) == 0);
UDR = send;
}


void main(void)
{
TX_ON(4800,8);
lcd_init(16);

while (1)
{
tx_putc('I');

tx_putc('C');

tx_putc('T');

tx_putc('N');

tx_putc('I');

tx_putc('C');
}
}

تابع زیر نیز یک رشته کاراکتر را ارسال می کند(برای درک بهتر آن بهتر است ابتدا کار با رشته کارکترها در زبان C و کتابخانه string.h را بیاموزید):

void tx_putf(unsigned char name[])
{
unsigned char z=0;
unsigned char ENTER=13;
for(z=0;z<strlen(name);z++)
{
UDR=name[z];
while ((UCSRA & (1 << UDRE)) == 0);

}
TXREG=ENTER;
while ((UCSRA & (1 << UDRE)) == 0);

}

برنامه زیر رشته کاراکتری را ارسال میکند:

#include <mega32.h>

#include <string.h>
void TX_ON(unsigned int boud,unsigned char fosc)

{
unsigned char x;
x=fosc/(0.000064*boud);
x-=1;
UBRRL=x; 
UBRRH=x>>8;
UCSRB |=(1 << TXEN); 
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
}

void tx_putf(unsigned char name[])
{
unsigned char z=0;
unsigned char ENTER=13;
for(z=0;z<strlen(name);z++)
{
UDR=name[z];
while ((UCSRA & (1 << UDRE)) == 0);


TXREG=ENTER;
while ((UCSRA & (1 << UDRE)) == 0);

}

void main(void)
{
TX_ON(4800,8);
lcd_init(16);

while (1)
{

tx_putf("www.ICTNIC.com");

}
}

مراحل برنامه نویسی دریافت USART:

گام اول:در گام نخست نرخ بیت را توسط فرمولی که گفته شد محاسبه می کنیم.

گام دوم: تنظیم USART

  • انتخاب تعداد بیت پایان
  • تنظیم تعداد بیت دیتا
  • بارگذاری UBRR
  • فعال کردن ارسال و دریافت

#include <mega32.h>
#include <string.h>
#include <stdio.h>

#include <delay.h>

void RC_ON(unsigned int boud,unsigned char fosc)
{
unsigned char x;
x=fosc/(0.000064*boud);
x-=1;
UBRRL=x;
UBRRH=x>>8;
UCSRB |=(1 << RXEN);
UCSRC |=(1 << UCSZ0) | (1 << UCSZ1);
}
char rc_getc()
{
while(!(UCSRA & (1<<RXC))); //wait until reception complete
return UDR; // receive value from UDR
}

char rc_getf(unsigned char cRef[16])
{
char c=0,ENTER=13;
do{
while(PIR1bits.RCIF==0);//wait for Recive Flag
cRef[c]=RCREG;
c++;
}
while(RCREG!=ENTER);//ENTER is End char of Str Recive
cRef[c]='\0';//To End Str of cRef
return cRef;
}

unsigned char X[16];
void main(void)
{
lcd_init(16);
RC_ON(4800,8);
DDRC=0xff;
while (1)
{

sprintf(X,"%s",rc_getf());
}
}

 

 مطالب مرتبط :

برچسب ها:

Tags: آموزش برق و الکترونیک میکروکنترلر avr ارتباط سریال ارتباط سریال avr رجیستر های USART ارتباط سریال در میکروکنترلر avr ارتباط سریالatmega32 ارتباط سریال atmega8 ارتباط سریال آسنکرون برنامه نویسی ارسال USART برنامه نویسی دریافت USART

دیدگاه‌ها  

# sjm 1396-03-17 18:48
سلام ممنون از اطلاعات خوبتون ایا کتابخانه string بخواهیم میتونیم از گوگولی دانلود کنیم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# محمدرضا یزدخواستی 1396-02-12 22:34
سلام همینطور RCREG ?
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# محمدرضا یزدخواستی 1396-02-12 22:22
سلام TXREG چیست؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# سهیل 1395-07-05 01:18
سلام
آقا خییییلی ممنون از این آموزش عالیت
واقعا آموزش های خاص و منحصر به فردی میزارید توی سایتتون
موفق باشید
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر ارشد 1395-07-05 01:23
با سلام و تشکر از شما
ممنونم از دیدگاه زیباتون که به ما کلی انرژی میده 8)
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# پویا 1395-04-14 17:09
سلام و ممنون از اطلاعات خوبتون
اما یه نکته اینکه در تابع void TX_ON باید به جای عدد 0.000064 ، عدد گذاشته بشه0.000016
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

مطالب مرتبط

مجموعه پروژه های آموزشی میکروکنترلر DSPIC

پروژه راه اندازی ترموکوپل با میکروکنترلر avr

پروژه راه اندازی نمایشگر oled با میکروکنترلر pic

آموزش راه اندازی مبدل 12بیتی آنالوگ به دیجیتال میکروکنترلر

آشنایی با میکروکنترلر 16بیتی dspic30f

دانلود کتاب 11 پروژه ی میکروکنترلر AVR با زبان BASCOM

4

پشتیبانی و مشاوره 24 ساعته

ictnic2

تماس با ما

  • شماره‌های تماس : 09120858158
    09372125820

به ما بپیوندید

ما را در صفحات اجتماعی دنبال نمایید...

کاربران ثبت نامی


تا این لحظه تعداد

1631 نفر

در وبسایت تخصصی ictnic

ثبت نام و از خدمات ما استفاده می کنند.

ما را در آپارات دنبال کنید

aparat logo fa color black 275x100