Download presentation
Presentation is loading. Please wait.
1
Lecturer: Reza Arjmandi Autumn 2015
USART Interface Lecturer: Reza Arjmandi Autumn 2015 Lecture 21 and 22: Introduction Universal Synchronous & Asynchronous Receiver & Transmitter block
2
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
3
Serial & Parallel Concept
عموما ارتباطات به معنای مبادله اطلاعات بر مبنای یک Protocol بوده و به دو شکل موازی و سریال است 8 bit Device Device Device Device 1 bit Parallel Interface Serial Interface
4
Serial-Synchronous Concept
دو نوع ارتباط سریال به نام های همزمان(Sync) و غیرهمزمان(Async) وجود دارد که هر یک به شکل متفاوتی از کلاک استفاده میکنند ارتباط سریال همزمان(Synchronous): در این روش هر دو وسیله دارای یک کلاک مشترک میباشند، که این سیگنال کلاک بوسیله یکی از آنها تولید میشود در این روش انتقال اطلاعات بین دو سیستم به ازای هر پالس ساعت، یک بیت ارسال میشود. مد سنکرون دارای دو حالت Master و Slave میباشد، که در حالت Master کلاک تولید میشود و در حالت Slave کلاک دریافت میشود Clock Master Slave Data 1
5
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
6
USART-Parity Code پس از ارسال بیتهای داده، فرستنده میتواند بیت توازن(Parity) را ارسال کند. این بیت اختیاری بوده و در صورتی که استفاده شود، میتواند در آشکارسازی خطا موثر باشد. توازن بر دو نوع زوج و فرد است. در صورتی که از توازن زوج(Even Parity) استفاده شود، باید مجموع تعداد یک های داده و بیت توازن عددی زوج باشد و در مورد توازن فرد(Odd Parity) نیز این مجموع باید عددی فرد باشد. چند نمونه بیت توازن: بیتهای داده(دودویی) Even Parity Odd Parity 1
7
Serial-Full Duplex Concept
Device Device Simplex: Device Device Half Duplex: Device Device Full Duplex:
8
Interface-Category Interface Serial Parallel Serial Interface
Synchronous Asynchronous Serial Interface Simplex Half Duplex Full Duplex
9
USART USART
10
USART نحوه ارتباط دهی USART به صورت زیر است: TXD RXD XCK
11
USART واحد گیرنده واحد فرستنده RXD واحد تولید پالس XCK TXD
Data Bus واحد گیرنده واحد فرستنده واحد تولید پالس RXD XCK TXD شکل بلوک دیاگرام سادهای از واحد USART را نشان میدهد: این واحد شامل سه بخش: تولید پالس، فرستنده و گیرنده است. XCK : پایه تولید و یا دریافت کلاک است. این پایه تنها در وضعیت سنکرون کاربرد دارد RXD: این پایه برای دریافت داده سریال میباشد TXD: این پایه برای ارسال داده سریال میباشد دریافت(UDR) ارسال(UDR)
12
USART-Clock Generation Block
واحد تولید کننده پالس از چهار وضعیت کلاک پشتیبانی میکند: 1-آسنکرون معمولی آسنکرون با سرعت دو برابر 3-سنکرون Master 4-سنکرون Slave
13
USART-Clock Generation Block
همانطور که میدانیم در حالت سنکرون میتوانیم دو مد Master و Slave داشته باشیم، که در مد Master کلاک توسط این بلوک روی پایه XCK ارسال میگردد و در حالت Slave کلاک از طریق همان پایه خوانده میشود. با توجه به شکل کلاک برای حالت سنکرون در حالت Slave از بلوک هایی عبور میکند که باعث محدودیت در سرعت خواهند شد، کلاک ورودی ابتدا توسط رجیستر Sync نمونه برداری میشوند و سپس وارد یک تشخیص دهنده خواهند شد، که این امر دو پالس ساعت را به خود اختصاص میدهد. بنابراین در مد سنکرون در حالت Salve باید حداکثر فرکانس کلاک خارجی اعمال شده به پایه XCK برابر یک چهارم کلاک سیستم باشد. Fxck < (Fosc/4)
14
USART-Clock Generation Block
در حالت ارتباط سریال آسنکرون این بلوک وظیفه تنظیم Baud Rate برای دریافت و ارسال داده را بر عهده دارد سرعت دریافت داده در حالت آسنکرون 16 برابر و در حالت آسنکرون با سرعت دوبرابر، 8 برابر بیشتر از سرعت ارسال داده است یعنی هنگام دریافت داده(آسنکرون معمولی) از هر داده 16 بار نمونه برداری میشود، سپس نمونههای 8، 9 و10 بررسی میشوند و با توجه به اکثریت یکسان بودن نمونهها(مقدار صفر یا یک) سطح منطقی آن تایید میشود. در حالت سرعت دوبرابر در مد آسنکرون تعداد نمونه ها به 8 کاهش یافته و نمونهها 4، 5 و 6 ملاک خواهند بود
15
USART-Clock Generation Block
16
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
17
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
18
USART-Register UDR UCSRA UCSRB UCSRC UBRR
19
USART-Register-UDR UDR: USART Data Register
RXB[7:0] UDR(دریافت( TXB[7:0] UDR(ارسال( برای ارسالهای 5، 6 و یا 7 بیتی، بیتهای استفاده نشده در زمان ارسال نادیده گرفته میشوند و در زمان دریافت صفر خوانده میشوند زمانی که از USART در وضعیت 9 بیتی استفاده میشود بیتهای نهم دریافت و ارسال، به ترتیب RXB8 و TXB8 از رجیستر UCSRB هستند
20
USART-Register-UCSRA
UCSRA: USART Control and Status Register A ارتباط چند پردازندهای(Multi-Processor Communication Mode): در این مد این امکان بوجود میآید که چندین میکروکنترولر بر روی یک باس قرار گرفته و یک شبکه ایجاد کنند برای ایجاد یک شبکه متشکل از چندین میکروکنترلر، لازم است تا هر وسیلهای دارای یک آدرس منحصربه فرد باشد(تعیین این آدرس به عهدهی برنامه نویس است) رفتار USART میکروکنترلر AVR به گونهای است که اگر بیت MPCM یک باشد و دادهای دریافت شود که بیت نهم آن یک است، آن را آدرس تلقی کرده و دریافت میکند قرارداد: در صورتی که بیت نهم یک باشد، به این معناست که 8 بیت پایین تر شامل آدرس بوده و در صورتی که این بیت صفر باشد، آن 8 بیت داده میباشند برنامه باید به شکلی نوشته شود که وسیلهای که آدرس به آن تعلق دارد بیت MPCM خود را صفر کند. از این پس Master برای Slave دادههایی را ارسال میکند که بیت نهم آن صفر است
21
USART-Register-UCSRA
Master TXD RXD Slave MPCM=1 Address Master TXD RXD Slave MPCM=1 MPCM=0 Data
22
USART-Register-UCSRA
UCSRC: واحد تولید کننده پالس از چهار وضعیت کلاک پشتیبانی میکند: 1-آسنکرون معمولی آسنکرون با سرعت دو برابر 3-سنکرون Master 4-سنکرون Slave UMSEL: USART Mode Select بیت U2X: در حالت آسنکرون برای فعال کردن مد آسنکرون با سرعت دوبرابر استفاده میشود زمانی که از مد سنکرون استفاده میشود، مقدار بیت DDRB0 تعیین میکند که USART در وضعیت Master یا Slave باشد. در حالت Master چون که باید کلاک روی پایه XCK تولید شود پس باید DDRB0 برابر یک شود(به صورت خروجی تعریف شود) در حالت Slave چون که باید کلاک وارد پایه XCK شود پس باید DDRB0 برابر صفر شود( به صورت ورودی تعریف شود)
23
USART-Register-UCSRA
بیت PE (Parity Error): این بیت هنگامی که خطای توازن در قالب دریافتی گیرنده ایجاد شود، یک خواهد شد و تا زمانی این بیت معتبر خواهد بود که رجیستر دریافت(UDR) خوانده نشده باشد بیت DOR (Data Over Run): این بیت زمانی فعال خواهد شد که بافر دریافت پر شده باشد و کاراکتر جدیدی به شیفت رجیستر وارد و بیت شروع جدید تشخیص داده شود. در این حالت اطلاعات جدید ازبین میرود و یک خطا به نام Data Over Run بوجود میآید بیت FE (Frame Erro): در شرایط عادی انتظار میرود بیت پایان یک باشد، در صورتی که بیت پایان صفر تشخیص داده شود، دادهی دریافت شده قابل اطمینان نبوده و USART با یک کردن پرچم FE بروز خطا را اعلام میکند. معمولا عامل ایجاد خطای قاب، تنظیم نبودن نرخ ارسال(Baud Rate) و یا قطع شدن ارتباط است
24
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
25
USART-Register-UCSRB
UCSRB: USART Control and Status Register B UCSRB: بیت TXB8: وقتی از قالب ارسال سریال 9 بیتی استفاده کنید. این بیت به عنوان بیت نهم ارسال میشود. باید توجه داشت که این بیت قبل از نوشته شدن 8 بیت در رجیستر UDR نوشته شود بیت RXB8: بیت نهم داده دریافت شده سریال میباشد. این بیت زمانی که از قالب دریافت و ارسال 9 بیتی استفاده میکنید قابل قبول خواهد بود، همچنین این بیت باید قبل از خوانده شدن رجیستر دریافت، خوانده شود بیت TXEN:با یک کردن این بیت فرستنده USART فعال خواهد شد. هنگامی که این بیت یک میشود، عملکرد عادی پایه TXD قطع شده و به عنوان خروجی سریال عمل خواهد نمود بیت RXEN: با یک کردن این بیت گیرنده USART فعال خواهد شد، زمانی که این بیت فعال میشود، عملکرد عادی پایه RXD قطع شده و به عنوان ورودی سریال عمل خواهد نمود
26
USART-Register-UCSRB
UCSRC: UCSZ: USART Character Size
27
USART-Register-UCSRC
UCSRC: USART Control and Status Register C UCSRC: بیت UCPOL (USART Clock Polarity): این بیت تنها در حالت ارتباط سنکرون استفاده میشود
28
USART-Register-UCSRC
بیت USBS (USART Stop Bit Select): در صورت فعال بودن USBS دو بیت پایان و با صفر شدن این بیت، یک بیت پایان ارسال میشود بیت UPM[0:1] (USART Parity Mode): این دو بیت جهت انتخاب، فعال یا غیرفعال کردن بیت توازن مورد استفاده قرار میگیرد
29
USART-Register-UBRR UBRR: USART Baud Rate Register UBRRL: UBRRH:
30
USART-Register-UBRR UBRR: USART Baud Rate Register UBRRL: UBRRH: U2X=0
31
USART-Register-UBRR-Example
مثال: با کلاک 8 مگاهرتز و Baud Rate=9600 در وضعیت آسنکرون عادی مقدار UBRR را بدست آورید UBRR= (Fosc / (16 * BaudRate)) – 1 = ( / (16 * 9600)) – 1 = از آن جایی که نمیتوان مقدار اعشاری در رجیسترهای UBRR[H:L] بارگذاری کرد، بنابراین باید مقدار صحیح 51 استفاده شود. در صورتی که با این مقدار، Baud Rate را محاسبه نماییم: BaudRate = Fosc / (16 * (UBRR + 1)) = / (16 * (51 + 1)) = 9615 مقدار خطا برابر است با: Error = ((9600 / 9615) -1 ) * 100 = % این مقدار خطا قابل قبول بوده، برای صفر شدن خطا میتوان از از کریستال مگاهرتز استفاده کرد کریستالهایی که میتوان با استفاده از آنها به خطای BaudRate های استاندارد صفر رسید : , , , , , 16 U2X=0 U2X=1
32
USART-Register-UBRR U2X=0 U2X=1
33
USART-Register-UBRR U2X=0 U2X=1
34
USART-Register-UBRR U2X=0 U2X=1
35
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;
36
Example1 پروژه ارتباط بین دو میکروکنترلر از طریق UART U2X=1
37
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
38
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( ); } 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
39
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( ); } LCDstring(" "); LCDstring("Send: "); LCDGotoXY(6,0); USART_Transmit(SendData[index]); LCDsendChar(SendData[index]); while(1); U2X=1
40
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
41
COM PORT U2X=0 U2X=1
42
MAX232 قطعهی MAX232 از شرکت Maxim یک IC شانزده پایه است که شامل دو مبدل مجزا است. U2X=0 U2X=1
43
CP2102 تبدیل مستقیم USB به UART U2X=0 U2X=1
44
USB to TTL U2X=0 U2X=1
45
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
46
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
47
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
48
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
49
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
50
stdio library printf();
printf به معنای print foratted یا چاپ فرمت شده است. وجه تمایز این تابع با puts() یا putsf() در این است که توسط printf() میتوان رشتهای مرکب از کاراکترهای مشخص و آرگومانها را ترکیب کرده و ارسال نمود scanf(); در نقطهی مقابل printf()، تابع scanf() وجود دارد که با استفاده از آن میتوان از ورودی با یک فرمت مشخص، داده دریافت کرد sprintf(); عملکرد این تابع مشابه با printf() است با این تفاوت که رشته پس از فرمت شدن به خروجی ارسال نشده و در یک رشتهی دیگر ذخیره میشود sscanf() این تابع مشابه scanf() بوده با این تفاوت که رشتهی ورودی، از یک رشتهی ذخیره شده در حافظهی SRAM خواهد بود U2X=1
51
stdio library-Format Code
کد فرمت فرمت %i عدد صحیح دسیمال علامت دار %d عدد صحیح دسیمال علامت دار( با %i یکسان است) %u عدد صحیح دسیمال بدون علامت %e عدد اعشاری به فرم نماد علمی(مثلا 2.785e1 معادل با ) %f عدد دهدهی اعشاری %x عدد صحیح هگزادسیمال بدون علامت %c یک کاراکتر ASCII %s رشتهای از کاراکترها در حافظهی SRAM %p رشتهای از کاراکترها در حافظهی FLASH %% نمایش کاراکتر % U2X=1
52
Contact us
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.