Lecturer: Reza Arjmandi Autumn 2015

Slides:



Advertisements
Similar presentations
11-1 ECE 424 Design of Microprocessor-Based Systems Haibo Wang ECE Department Southern Illinois University Carbondale, IL I/O System Design.
Advertisements

The 8051 Microcontroller Chapter 5 SERIAL PORT OPERATION.
Serial I/O - Programmable Communication Interface
Lecture 8: Serial Interfaces
Microprocessor based Design for Biomedical Applications MBE 3 – MDBA IV : The ATmega8 Basic Features (3)
COMP3221: Microprocessors and Embedded Systems Lecture 22: Serial Input/Output (II) Lecturer: Hui Wu Session 1, 2005.
USARTS CS423 Dick Steflik. USART ● Universal Synchronous Asynchronous Receiver Transmitter ● used to send and receive small packets over a serial line.
USART and Asynchrono us Communica tion The USART is used for synchronous and asynchronous serial communication. USART = Universal Synchronous/Asynchronous.
7-1 Digital Serial Input/Output Two basic approaches  Synchronous shared common clock signal all devices synchronised with the shared clock signal data.
ECE 371- Unit 11 Introduction to Serial I/O. TWO MAJOR CLASSES OF SERIAL DATA INTERFACES ASYNCHRONOUS SERIAL I/O - USES “FRAMING BITS” (START BIT AND.
EEE305 Microcontroller Systems Lecture 7: Embedded C using PIC microcontrollers Serial i/o with the XC8 Teaching resources are at
The Arduino Platform A “development module”
EE138 Serial Communication
Serial Communication ETEC 6416.
The 8051 Microcontroller and Embedded Systems
Universal Synchronous/Asynchronous Receiver/Transmitter (USART)
Microprocessor based Design for Biomedical Applications MBE 3 – MDBA III : The ATmega8 Basic Features (2)
Universal Asynchronous Receiver/Transmitter (UART)
Microprocessors 2 lesson Subjects lesson 7 Planning Interrupts Serial communication /USART Questions.
Embedded System Design Laboratory October 4, 2002Stanford University - EE281 Lecture #3#1 Lecture #3 Outline Announcements AVR Processor Resources –UART.
Example. SBUF Register SCON Register(1) SCON Register(2)
 8251A is a USART (Universal Synchronous Asynchronous Receiver Transmitter) for serial data communication.  Programmable peripheral designed for synchronous.
Atmel Atmega128 Overview ALU Particulars RISC Architecture 133, Mostly single cycle instructions 2 Address instructions (opcode, Rs, Rd, offset) 32x8 Register.
Universal Asynchronous Receiver/Transmitter (UART)
CE-2810 Dr. Mark L. Hornick 1 Using the USART Configuration and Programming.
ATtiny23131 A SEMINAR ON AVR MICROCONTROLLER ATtiny2313.
Features of the PIC18 microcontroller - 8-bit CPU - 2 MB program memory space (internal 32KB to 128KB) bytes to 1KB of data EEPROM - Up to 4096 bytes.
ELE22MIC Lecture 9-12 Serial Communications AVR USART –Universal Synchronous Asynchronous Receiver Transmitter (ACIA: Asynchronous Communications Interface.
Communicating. The ATmega16 communicates through one of the following ways: Serial Peripheral Interface (SPI) Universal Synchronous and Asynchronous serial.
CE-2810 Dr. Mark L. Hornick 1 Serial Communications Sending and receiving data between devices.
Chap.6.3 UART.
Networked Embedded Systems Pengyu Zhang EE107 Spring 2016 Lecture 8 Serial Buses.
8251 USART.
Criteria for choosing a microcontroller A microcontroller must meet the task at hand efficiency and cost effectively. Speed. What is highest speed of.
INTERFACING KEYBOARD WITH ATMEGA32 ELECTRONICS & COMMUNICATION TITLE.
Lecture 15. Modem Controller Register 4310 DTR 0 = Polling Operator 1 = Interrupts Enabled RTS 1 =Self Test 0 =Normal.
 The LPC2xxx devices currently have two on- chip UARTS.  Except UART1 has additional modem support.
Digital Logic Design Alex Bronstein
The HCS12 SCI Subsystem A HCS12 device may have one or two serial communication interface. These two SCI interfaces are referred to as SCI0 and SCI1. The.
Embedded Systems Programming
Chapter 6 Serial Communications
Serial mode of data transfer
EE 107 Fall 2017 Lecture 5 Serial Buses – UART & SPI
Input/Output and Communication
SERIAL PORT PROGRAMMING
ATMEGA 32 CONNECTIONS TO RS232; UDR AND UCSR REGISTERS
COMP2121: Microprocessors and Interfacing
Atmega32 Serial Programming Basics
Computer Organization and Design
UART Serial Port Programming
UART Serial Port Programming
Serial Communication Interface: Using 8251
Serial Communication Interface
UART Protocol Chapter 11 Sepehr Naimi
Communications channels تقديم المهندس سنان محمد حسن
COMP3221: Microprocessors and Embedded Systems
Преглед Начин функционисања Имплементације
Lecturer: Reza Arjmandi Autumn 2015
Configuration and Programming
NS Training Hardware.
SPI Protocol Sepehr Naimi
AVR – ATmega103(ATMEL) Architecture & Summary
8051 Micro Controller.
CHAPTER SERIAL PORT PROGRAMMING. Basics of Serial Communication Computers transfer data in two ways: ◦ Parallel  Often 8 or more lines (wire.
EUSART Serial Communication.
Serial Communication 19th Han Seung Uk.
PIC Serial Port Interfacing
8051SERIAL PORT PROGRAMMING
PIC Serial Port Interfacing
AVR UART The UART, or Universal Asynchronous Receiver Transmitter, provides hardware support for a serial port on AVR processors Signaling is compatible.
Presentation transcript:

Lecturer: Reza Arjmandi Autumn 2015 USART Interface Lecturer: Reza Arjmandi Autumn 2015 Lecture 21 and 22: Introduction Universal Synchronous & Asynchronous Receiver & Transmitter block

AVR Microcontroller-General Structure AVR CPU BUS Flash Memory SRAM EEPROM Timer/ Counter USART TWI ADC MCU Control and Timing I/O Ports Interface Watchdog Timer SPI ISP Interrupt Unit PORTD PORTC PORTB PORTA Internal Calibrated Oscillator Crystal ATMEGA32 Block Diagram: DataSheet Page4

Serial & Parallel Concept عموما ارتباطات به معنای مبادله اطلاعات بر مبنای یک Protocol بوده و به دو شکل موازی و سریال است 8 bit Device Device Device Device 1 bit Parallel Interface Serial Interface

Serial-Synchronous Concept دو نوع ارتباط سریال به نام های همزمان(Sync) و غیرهمزمان(Async) وجود دارد که هر یک به شکل متفاوتی از کلاک استفاده میکنند ارتباط سریال همزمان(Synchronous): در این روش هر دو وسیله دارای یک کلاک مشترک میباشند، که این سیگنال کلاک بوسیله یکی از آنها تولید میشود در این روش انتقال اطلاعات بین دو سیستم به ازای هر پالس ساعت، یک بیت ارسال میشود. مد سنکرون دارای دو حالت Master و Slave میباشد، که در حالت Master کلاک تولید میشود و در حالت Slave کلاک دریافت میشود Clock Master Slave Data 1

Serial-Asynchronous Concept در این روش یک داده(Data) همراه با یک بیت توازن، یک یا دو بیت پایانی و یک بیت شروع به ابتدا و انتهای داده(Data) جمعا به تعداد 10 یا 11 بیت فرستاده میشود ارتباط سریال غیرهمزمان اگر چه به تعداد سیم های کمتری نیاز دارد اما گیرنده و فرستنده باید با سرعت یکسانی اقدام به تبادل اطلاعات کنند بیت توازن نشان میدهد که آیا اطلاعات به طور صحیح دریافت شده یا خیر. بیت های شروع و پایان به جای سیگنال ساعت که به همراه اطلاعات ارسال نمی‌شود به کار گرفته می‌شوند داده(Data) میتواند 5، 6، 7، 8 یا 9 بیتی باشد Baud Rate: 9600 bps Baud Rate: 9600 bps Master Slave Data 1 Frame Start bit Data Parity bit Stop bit

USART-Parity Code پس از ارسال بیت‌های داده، فرستنده میتواند بیت توازن(Parity) را ارسال کند. این بیت اختیاری بوده و در صورتی که استفاده شود، میتواند در آشکارسازی خطا موثر باشد. توازن بر دو نوع زوج و فرد است. در صورتی که از توازن زوج(Even Parity) استفاده شود، باید مجموع تعداد یک های داده و بیت توازن عددی زوج باشد و در مورد توازن فرد(Odd Parity) نیز این مجموع باید عددی فرد باشد. چند نمونه بیت توازن: بیت‌های داده(دودویی) Even Parity Odd Parity 0000 0000 1 0000 0001 0000 0011 1110 1100 1111 1011

Serial-Full Duplex Concept Device Device Simplex: Device Device Half Duplex: Device Device Full Duplex:

Interface-Category Interface Serial Parallel Serial Interface Synchronous Asynchronous Serial Interface Simplex Half Duplex Full Duplex

USART USART

USART نحوه ارتباط دهی USART به صورت زیر است: TXD RXD XCK

USART واحد گیرنده واحد فرستنده RXD واحد تولید پالس XCK TXD Data Bus واحد گیرنده واحد فرستنده واحد تولید پالس RXD XCK TXD شکل بلوک دیاگرام ساده‌ای از واحد USART را نشان میدهد: این واحد شامل سه بخش: تولید پالس، فرستنده و گیرنده است. XCK : پایه تولید و یا دریافت کلاک است. این پایه تنها در وضعیت سنکرون کاربرد دارد RXD: این پایه برای دریافت داده سریال می‌باشد TXD: این پایه برای ارسال داده سریال می‌باشد دریافت(UDR) ارسال(UDR)

USART-Clock Generation Block واحد تولید کننده پالس از چهار وضعیت کلاک پشتیبانی می‌کند: 1-آسنکرون معمولی 2-آسنکرون با سرعت دو برابر 3-سنکرون Master 4-سنکرون Slave

USART-Clock Generation Block همانطور که میدانیم در حالت سنکرون میتوانیم دو مد Master و Slave داشته باشیم، که در مد Master کلاک توسط این بلوک روی پایه XCK ارسال میگردد و در حالت Slave کلاک از طریق همان پایه خوانده می‌شود. با توجه به شکل کلاک برای حالت سنکرون در حالت Slave از بلوک هایی عبور میکند که باعث محدودیت در سرعت خواهند شد، کلاک ورودی ابتدا توسط رجیستر Sync نمونه برداری میشوند و سپس وارد یک تشخیص دهنده خواهند شد، که این امر دو پالس ساعت را به خود اختصاص میدهد. بنابراین در مد سنکرون در حالت Salve باید حداکثر فرکانس کلاک خارجی اعمال شده به پایه XCK برابر یک چهارم کلاک سیستم باشد. Fxck < (Fosc/4)

USART-Clock Generation Block در حالت ارتباط سریال آسنکرون این بلوک وظیفه تنظیم Baud Rate برای دریافت و ارسال داده را بر عهده دارد سرعت دریافت داده در حالت آسنکرون 16 برابر و در حالت آسنکرون با سرعت دوبرابر، 8 برابر بیشتر از سرعت ارسال داده است یعنی هنگام دریافت داده(آسنکرون معمولی) از هر داده 16 بار نمونه برداری میشود، سپس نمونه‌های 8، 9 و10 بررسی میشوند و با توجه به اکثریت یکسان بودن نمونه‌ها(مقدار صفر یا یک) سطح منطقی آن تایید می‌شود. در حالت سرعت دوبرابر در مد آسنکرون تعداد نمونه ها به 8 کاهش یافته و نمونه‌ها 4، 5 و 6 ملاک خواهند بود

USART-Clock Generation Block

USART-Transmitter Block واحد فرستنده: این قسمت دارای یک رجیستر به نام UDR است، که با قرار دادن یک بایت در این رجیستر وارد یک شیفت رجیستر PISO شده و با اعمال پالس(این پالس توسط بلوک تولید کننده پالس تولید می‌گردد) به شیفت رجیستر اطلاعات به صورت سریال خارج می‌شود فرستنده سریال وظیفه تولید بیت شروع و پایان و ایجاد یک قاب استاندارد(Frame) را بر عهده دارد که با توجه به تنظیمات، این قالب بندی می‌تواند 5، 6، 7، 8 و یا 9 بیتی، بیت توازن و یک یا دو بیت پایان را دارا باشد PISO (Parallel Input Serial Output) UDR D7 D6 D5 D4 D3 D2 D1 D0 txclk pulse 1 یا 2 بیت پایان بیت توازن D8 D7 D6 D5 D4 D3 D2 D1 D0 بیت شروع TXD بیت TXB8

USART-Receiver Block واحد گیرنده: SIPO(Serial Input Parallel Output) اطلاعات را بیت به بیت از پایه RXD دریافت می‌کند(وارد رجیستر SIPO میشود) وسپس بیت های داده به رجیستر UDR منتقل می‌شود همچنین این واحد وظیفه بررسی بیت توازن و کنترل خطای توازن را بر عهده دارد، به طوری که می‌تواند خطاهای قالب بندی داده، توازن و سرریز داده را گزارش نماید SIPO(Serial Input Parallel Output) UDR D7 D6 D5 D4 D3 D2 D1 D0 rxclk pulse 1 یا 2 بیت پایان بیت توازن D8 D7 D6 D5 D4 D3 D2 D1 D0 بیت شروع RXD بیت RXB8

USART-Register UDR UCSRA UCSRB UCSRC UBRR

USART-Register-UDR UDR: USART Data Register RXB[7:0] UDR(دریافت( TXB[7:0] UDR(ارسال( برای ارسال‌های 5، 6 و یا 7 بیتی، بیت‌های استفاده نشده در زمان ارسال نادیده گرفته می‌شوند و در زمان دریافت صفر خوانده می‌شوند زمانی که از USART در وضعیت 9 بیتی استفاده می‌شود بیت‌های نهم دریافت و ارسال، به ترتیب RXB8 و TXB8 از رجیستر UCSRB هستند

USART-Register-UCSRA UCSRA: USART Control and Status Register A ارتباط چند پردازنده‌ای(Multi-Processor Communication Mode): در این مد این امکان بوجود می‌آید که چندین میکروکنترولر بر روی یک باس قرار گرفته و یک شبکه ایجاد کنند برای ایجاد یک شبکه متشکل از چندین میکروکنترلر، لازم است تا هر وسیله‌ای دارای یک آدرس منحصربه فرد باشد(تعیین این آدرس به عهده‌ی برنامه نویس است) رفتار USART میکروکنترلر AVR به گونه‌ای است که اگر بیت MPCM یک باشد و داده‌ای دریافت شود که بیت نهم آن یک است، آن را آدرس تلقی کرده و دریافت می‌کند قرارداد: در صورتی که بیت نهم یک باشد، به این معناست که 8 بیت پایین تر شامل آدرس بوده و در صورتی که این بیت صفر باشد، آن 8 بیت داده می‌باشند برنامه باید به شکلی نوشته شود که وسیله‌ای که آدرس به آن تعلق دارد بیت MPCM خود را صفر کند. از این پس Master برای Slave داده‌هایی را ارسال می‌کند که بیت نهم آن صفر است

USART-Register-UCSRA Master TXD RXD Slave MPCM=1 Address Master TXD RXD Slave MPCM=1 MPCM=0 Data

USART-Register-UCSRA UCSRC: واحد تولید کننده پالس از چهار وضعیت کلاک پشتیبانی می‌کند: 1-آسنکرون معمولی 2-آسنکرون با سرعت دو برابر 3-سنکرون Master 4-سنکرون Slave UMSEL: USART Mode Select بیت U2X: در حالت آسنکرون برای فعال کردن مد آسنکرون با سرعت دوبرابر استفاده می‌شود زمانی که از مد سنکرون استفاده می‌شود، مقدار بیت DDRB0 تعیین می‌کند که USART در وضعیت Master یا Slave باشد. در حالت Master چون که باید کلاک روی پایه XCK تولید شود پس باید DDRB0 برابر یک شود(به صورت خروجی تعریف شود) در حالت Slave چون که باید کلاک وارد پایه XCK شود پس باید DDRB0 برابر صفر شود( به صورت ورودی تعریف شود)

USART-Register-UCSRA بیت PE (Parity Error): این بیت هنگامی که خطای توازن در قالب دریافتی گیرنده ایجاد شود، یک خواهد شد و تا زمانی این بیت معتبر خواهد بود که رجیستر دریافت(UDR) خوانده نشده باشد بیت DOR (Data Over Run): این بیت زمانی فعال خواهد شد که بافر دریافت پر شده باشد و کاراکتر جدیدی به شیفت رجیستر وارد و بیت شروع جدید تشخیص داده شود. در این حالت اطلاعات جدید ازبین می‌رود و یک خطا به نام Data Over Run بوجود می‌آید بیت FE (Frame Erro): در شرایط عادی انتظار می‌رود بیت پایان یک باشد، در صورتی که بیت پایان صفر تشخیص داده شود، داده‌ی دریافت شده قابل اطمینان نبوده و USART با یک کردن پرچم FE بروز خطا را اعلام می‌کند. معمولا عامل ایجاد خطای قاب، تنظیم نبودن نرخ ارسال(Baud Rate) و یا قطع شدن ارتباط است

USART-Register-UCSRA UCSRB: وقفه های واحد USART: این واحد دارای سه وقفه می‌باشد بیت RXC: این بیت زمانی یک است که داده‌ای خوانده نشده در رجیستر دریافت وجود داشته باشد و با خواندن UDR پرچم RXC پاک می‌شود بیت TXC: این بیت زمانی یک می‌شود که تمام بیت‌های یک قاب از شیفت رجیستر خارج شده باشد بیت UDRE: یک بودن این بیت نشان دهنده خالی بودن رجیستر UDR ارسال است 1-USART Receive Complete بیت Flag: RXC بیت فعال ساز اختصاصی: RXCIE بردار وقفه در IAR: USART_RXC_vect 2- USART Transmit Complete بیت Flag: TXC بیت فعال ساز اختصاصی: TXCIE بردار وقفه در IAR: USART_TXC_vect 3- USART Data Register Empty بیت Flag: UDRE بیت فعال ساز اختصاصی: UDRIE بردار وقفه در IAR:USART_UDRE_vect

USART-Register-UCSRB UCSRB: USART Control and Status Register B UCSRB: بیت TXB8: وقتی از قالب ارسال سریال 9 بیتی استفاده کنید. این بیت به عنوان بیت نهم ارسال می‌شود. باید توجه داشت که این بیت قبل از نوشته شدن 8 بیت در رجیستر UDR نوشته شود بیت RXB8: بیت نهم داده دریافت شده سریال می‌باشد. این بیت زمانی که از قالب دریافت و ارسال 9 بیتی استفاده می‌کنید قابل قبول خواهد بود، همچنین این بیت باید قبل از خوانده شدن رجیستر دریافت‌، خوانده شود بیت TXEN:با یک کردن این بیت فرستنده USART فعال خواهد شد. هنگامی که این بیت یک می‌شود، عملکرد عادی پایه TXD قطع شده و به عنوان خروجی سریال عمل خواهد نمود بیت RXEN: با یک کردن این بیت گیرنده USART فعال خواهد شد، زمانی که این بیت فعال می‌شود، عملکرد عادی پایه RXD قطع شده و به عنوان ورودی سریال عمل خواهد نمود

USART-Register-UCSRB UCSRC: UCSZ: USART Character Size

USART-Register-UCSRC UCSRC: USART Control and Status Register C UCSRC: بیت UCPOL (USART Clock Polarity): این بیت تنها در حالت ارتباط سنکرون استفاده می‌شود

USART-Register-UCSRC بیت USBS (USART Stop Bit Select): در صورت فعال بودن USBS دو بیت پایان و با صفر شدن این بیت، یک بیت پایان ارسال می‌شود بیت UPM[0:1] (USART Parity Mode): این دو بیت جهت انتخاب، فعال یا غیرفعال کردن بیت توازن مورد استفاده قرار می‌گیرد

USART-Register-UBRR UBRR: USART Baud Rate Register UBRRL: UBRRH:

USART-Register-UBRR UBRR: USART Baud Rate Register UBRRL: UBRRH: U2X=0

USART-Register-UBRR-Example مثال: با کلاک 8 مگاهرتز و Baud Rate=9600 در وضعیت آسنکرون عادی مقدار UBRR را بدست آورید UBRR= (Fosc / (16 * BaudRate)) – 1 = (8000000 / (16 * 9600)) – 1 = 51.083 از آن جایی که نمیتوان مقدار اعشاری در رجیسترهای UBRR[H:L] بارگذاری کرد، بنابراین باید مقدار صحیح 51 استفاده شود. در صورتی که با این مقدار، Baud Rate را محاسبه نماییم: BaudRate = Fosc / (16 * (UBRR + 1)) = 8000000 / (16 * (51 + 1)) = 9615 مقدار خطا برابر است با: Error = ((9600 / 9615) -1 ) * 100 = - 0.2 % این مقدار خطا قابل قبول بوده، برای صفر شدن خطا میتوان از از کریستال 7.3728 مگاهرتز استفاده کرد کریستال‌هایی که میتوان با استفاده از آن‌ها به خطای BaudRate های استاندارد صفر رسید : 1.8432 , 3.6864 , 7.3728 , 11.0592 , 14.7456 , 16 U2X=0 U2X=1

USART-Register-UBRR U2X=0 U2X=1

USART-Register-UBRR U2X=0 U2X=1

USART-Register-UBRR U2X=0 U2X=1

USART-Register-UBRRH & UCSRC بیت URSEL (USART Register Select): دو رجیستر UCSRC و UBRRH دارای آدرس مشترک 0x20 در فضای رجیسترهای I/O هستند و بیت URSEL از این رجیسترها برای انتخاب نوشتن روی یکی از این دو رجیستر است UBRRH Select  URSEL=0 UCSRC Select  URSEL=1 مثال: دستورات زیر مقدار بیت1 از هر رجیستر را یک میکند: روش خواندن این دو رجیستر به این صورت است که با خواندن مقدار آدرس 0x20 و یا هر یک از اسامی مستعار این آدرس(UCSRC یا UBRRH) مقدار UBRRH بدست خواهد آمد: UBRRH = 0x02; UCSRC = 0x82; U2X=0 U2X=1 A = UBRRH;

Example1 پروژه ارتباط بین دو میکروکنترلر از طریق UART U2X=1

Example1-Functions U2X=1 void USART_Transmit(unsigned char data) { while((UCSRA&(1<<UDRE))==0); UDR=data; } unsigned char USART_Receive() while((UCSRA&(1<<RXC))==0); return UDR; U2X=1

Example1-Master U2X=1 LCDclr(); #include <ioavr.h> #include <intrinsics.h> #include "LCDCHR_lib.c" void USART_Transmit(unsigned char data); unsigned char USART_Receive(); char SendData[6]="Hello"; char ReceiveData[6]; unsigned char index=0; void main() { LCDinit(); LCDcursorOFF(); LCDGotoXY(0,0); LCDstring("Please Wait: "); for(index=0;index<6;index++) LCDGotoXY(13,0); LCD_charnum(index); __delay_cycles(8000000); } LCDclr(); LCDGotoXY(0,0); LCDstring("Send: "); LCDGotoXY(0,1); LCDstring("Recieve: "); UCSRB |=(1<<TXEN)|(1<<RXEN); UCSRC |=(1<<UCSZ0)|(1<<UCSZ1)|(1<<URSEL); UBRRL=0x33; LCDGotoXY(6,0); for(index=0;index<6;index++) { USART_Transmit(SendData[index]); LCDsendChar(SendData[index]); } index=0; while(1) ReceiveData[index++]=USART_Receive(); if(index==6) break; LCDGotoXY(9,1); LCDstring(ReceiveData); while(1); U2X=1

Example1-Slave U2X=1 #include <ioavr.h> #include <intrinsics.h> #include "LCDCHR_lib.c" void USART_Transmit(unsigned char data); unsigned char USART_Receive(); char SendData[6]="Hello"; char ReceiveData[6]; unsigned char index=0; void main() { LCDinit(); LCDcursorOFF(); LCDGotoXY(0,0); LCDstring("Send: "); LCDGotoXY(0,1); LCDstring("Recieve: "); UCSRB |=(1<<TXEN)|(1<<RXEN); UCSRC |=(1<<UCSZ0)|(1<<UCSZ1)|(1<<URSEL); UBRRL=0x33; for(index=0;index<6;index++) ReceiveData[index]=USART_Receive(); LCDGotoXY(9,1); LCDstring(ReceiveData); LCDGotoXY(0,0); LCDstring("Please Wait: "); for(unsigned char i=0;i<6;i++) { LCDGotoXY(13,0); LCD_charnum(i); __delay_cycles(8000000); } LCDstring(" "); LCDstring("Send: "); LCDGotoXY(6,0); USART_Transmit(SendData[index]); LCDsendChar(SendData[index]); while(1); U2X=1

RS232 در واقع رایانه‌ها از واحد UART سود می‌برند که در نتیجه ارتباط بین میکروکنترلر و رایانه نیز امکان پذیر است. رایانه‌ها برای انتقال داده از طریق UART خود با دنیای خارج از استاندارد RS232 استفاده می‌کنند. RS232 یک استاندارد سریال است که در آن مشخصات فیزیکی ارتباط مانند سطح ولتاژ، نوع کانکتور، رفتار اتصال کوتاه و غیره تعریف شده است. رایانه‌های شخصی معمولا دارای یک یا چند پورت سریال مبتنی بر RS232 هستند کانکتور DB9 دارای 9 پین است که پین‌های 2، 3 و 5 به ترتیب RXD، TXD و GND می‌باشند. سایر پین‌ها، مربوط به سیگنال‌های دست‌دهی(Handshaking) و عملکرد مودم می‌باشند و پایه‌ی XCK نیز در کانکتور DB9 وجود ندارد، چرا که UART عملکرد همزمانی را پشتیبانی نمی‌کند سطوح منطقی RS232 به صورت زیر است: یک منطقی -3 تا -15 ولت و صفر منطقی +3 تا +15 است و بیت -3 تا +3 نامعین است. لازم به ذکر است که وسیله گیرنده باید توانایی تحمل ولتاژ اعمال شده از -25 تا +25 ولت را داشته باشد از آن جایی که میکروکنترلر توانایی کار با این سطوح ولتاژ را ندارد، برای ارتباط دهی پورت سریال PC با میکروکنترلر نیاز به یک مبدل ولتاژ است U2X=0 U2X=1

COM PORT U2X=0 U2X=1

MAX232 قطعه‌ی MAX232 از شرکت Maxim یک IC شانزده پایه است که شامل دو مبدل مجزا است. U2X=0 U2X=1

CP2102 تبدیل مستقیم USB به UART U2X=0 U2X=1

USB to TTL U2X=0 U2X=1

Example2 پروژه ارتباط میکروکنترلر با برنامه کامپیوتری برای رسم داده به صورت گرافیکی فرکانس میکروکنترلر 8 مگاهرتز است #include <ioavr.h> #include <intrinsics.h> #include "LCDCHR_lib.c" void USART_Transmit(unsigned char data); unsigned char USART_Receive(); char data=0; unsigned int i=0; void main() { PORTB|=(1<<PB1); DDRA=0xFF; LCDinit(); LCDcursorOFF(); LCDGotoXY(0,0); LCDstring("Press Key!"); //USART Initialization //Commiunication Parameters: 8Data, 1Stop,No Parity //BaudRate: 9600 U2X=1

Example2 U2X=1 UCSRB |=(1<<TXEN)|(1<<RXEN); UCSRC |=(1<<UCSZ0)|(1<<UCSZ1)|(1<<URSEL); UBRRL=0x33; while((PINB & (1<<PB1))); LCDGotoXY(0,0); while(1) { for(i=0;i<999;i++) if(data>254) data=0; USART_Transmit(data++); LCDstring("Sending Data "); LCD_intnum(i); } LCDstring("Complete "); U2X=1

Example3 پروژه ارتباط میکروکنترلر با برنامه کامپیوتری U2X=1 #include <ioavr.h> #include <intrinsics.h> #include "LCDCHR_lib.c" void USART_Transmit(unsigned char data); unsigned char USART_Receive(); char data=0; unsigned int i=0; void main() { DDRA=0xFF; LCDinit(); LCDcursorOFF(); //USART Initialization //Commiunication Parameters: 8Data, 1Stop,No Parity //BaudRate: 9600 پروژه ارتباط میکروکنترلر با برنامه کامپیوتری U2X=1

Example3 U2X=1 UCSRB |=(1<<TXEN)|(1<<RXEN); UCSRC |=(1<<UCSZ0)|(1<<UCSZ1)|(1<<URSEL); UBRRL=0x33; LCDGotoXY(0,0); while(1) { LCDsendChar(USART_Receive()); } void USART_Transmit(unsigned char data) while((UCSRA&(1<<UDRE))==0); UDR=data; unsigned char USART_Receive() while((UCSRA&(1<<RXC))==0); return UDR; U2X=1

stdio library می‌توان از توابع سطح بالای کامپایلر برای ارتباط استفاده کرد. اعلان این توابع در فایل stdio.h است: getchar(); این تابع با بررسی بیت RXC منتظر می‌ماند تا یک بایت توسط USART دریافت شود و مقدار دریافت شده را بازمی‌گرداند. putchar(char tmp); این تابع منتظر می‌ماند تا بیت UDRE یک شود و سپس آرگومان را ارسال می‌کند puts(char * str); آرگومان این تابع می‌تواند یک رشته‌ی موجود در SRAM باشد.تابع puts() در انتهای رشته، کاراکتر LF با کد 0x0A را نیز ارسال می‌کند putsf(__flash char * str) عملکرد این تابع نیز مانند تابع puts() است با این تفاوت که آرگومان آن باید رشته‌ی ذخیره شده در حافظه Flash باشد gets(char * str, int len) این تابع تا زمانی که کاراکتر LF دریافت نشود، کاراکترهای دریافت شده را از USART گرفته و در رشته‌ی str ذخیره می‌کند. len حداکثر طول رشته است که اگر تعداد کاراکترهای دریافتی به اندازه‌ی آن شود و هنوز کاراکتر LF دریافت نشده باشد، تابع پایان می‌یابد. U2X=1

stdio library printf(); printf به معنای print foratted یا چاپ فرمت شده است. وجه تمایز این تابع با puts() یا putsf() در این است که توسط printf() می‌توان رشته‌ای مرکب از کاراکترهای مشخص و آرگومان‌ها را ترکیب کرده و ارسال نمود scanf(); در نقطه‌ی مقابل printf()، تابع scanf() وجود دارد که با استفاده از آن می‌توان از ورودی با یک فرمت مشخص، داده دریافت کرد sprintf(); عملکرد این تابع مشابه با printf() است با این تفاوت که رشته پس از فرمت شدن به خروجی ارسال نشده و در یک رشته‌ی دیگر ذخیره می‌شود sscanf() این تابع مشابه scanf() بوده با این تفاوت که رشته‌ی ورودی، از یک رشته‌ی ذخیره شده در حافظه‌ی SRAM خواهد بود U2X=1

stdio library-Format Code کد فرمت فرمت %i عدد صحیح دسیمال علامت دار %d عدد صحیح دسیمال علامت دار( با %i یکسان است) %u عدد صحیح دسیمال بدون علامت %e عدد اعشاری به فرم نماد علمی(مثلا 2.785e1 معادل با 27.875) %f عدد دهدهی اعشاری %x عدد صحیح هگزادسیمال بدون علامت %c یک کاراکتر ASCII %s رشته‌ای از کاراکترها در حافظه‌ی SRAM %p رشته‌ای از کاراکترها در حافظه‌ی FLASH %% نمایش کاراکتر % U2X=1

Contact us www.e-system.ir Info@e-system.ir