کامپیوتر ها داده را به دو طریق موازی و سریال انتقال می دهند.
در انتقال های موازی ،داده اغلب از 8 خط داده و یا بیشتر استفاده می شود.
در این حالت داده می تواند به وسیله ای که فقط چند فوت دورتر است انتقال یابد.
به عنوان مثال چاپگر ها از انتقال موازی استفاده می کنند.
اگر چه در انتقال به صورت موازی حجم زیادی از داده در مدت زمان کوتاهی انتقال می شود ولی در فاصله محدودیت داریم و این فاصله نمی تواند چندان طولانی باشد؛ برای انتقال در فواصل دورتر از روش ارسال سری استفاده می شود.در روش انتقال به صورت سریال تبادل اطلاعات به صورت بیت به بیت می باشد.
یعنی هر بار یک بیت ارسال می گردد.
اصول تبادل سریال
وقتی که ریز پردازنده ای با دنیای خارج تبادل اطلاعات می کند بسته های داده را د ر ابعاد بایت فراهم می نماید.
در بعضی موارد همچون چاپگر ها، اطلاعات به راحتی از گذرگاه داده 8 بیت اخذ شده و به گذرگاه داده8 بیت چاپگر تحویل می شود.این روش اگر کابل زیاد طولانی نباشد عملی است زیرا کابل های طولانی ،سیگنال ها را تضعیف و حتی تغییر شکل می دهند.
بعلاوه مسیر 8بیت گران هم هست .
بنابراین در تبادل داده بین دو سیستم با فاصله دور از انتقال سریال استفاده می شود.
واقعیت استفاده از یک خط داده در تبادل سریال به جای خط داده 8 بیت در تبادل موازی، نه تنها موجب ارزانی فرآیند می شود بلکه موجب تبادل اطلاعات دو کامپیوتر واقع در دو شهر از طریق خط تلفن می گردد.
برای به راه ا ندازی تبادل سریال داده ، بایت داده باید از گذر گاه 8بیتی ریز پردازنده گرفته شده و با استفاده از شیفت رجیستر ورودی –موازی-خروجی-سریال به بیتهای سریال تبدیل می گردد که آنگاه قابل ارسال ل به یک خط داده خواهد بود.
واضح است که در سمت گیرنده باید یک شیفت رجیستر ورودی- سریال-خروجی-موازی برای دریافت داده ارسالی وجود داشته باشد و پس از بسته بندی کردن به صورت بایت ،آنها را به گیرنده تحویل دهد.
استانداردهای RS232
برای ایجاد امکان سازگاری در میان تجهیزات تبادل داده ساخت سازندگان مختلف، یک استاندارد واسطی به نام RS232 بوسیله سازندگان صنایع الکترونیک (EIA) در سال 1960 بر پا شد.
امروزه RS232 یک استاندارد واسط I/O با کاربردی گسترده است .این استاندارد در PC ها و تجهیزات بسیاری به کار رفته است.
با این وجود، چون این استاندارد قبل از خانواده منطقی TTL بنا نهاده شد، سطوح ولتاژ ورودی و خروجی سازگار با TTL نیست.
امروزه RS232 یک استاندارد واسط I/O با کاربردی گسترده است .این استاندارد در PC ها و تجهیزات بسیاری به کار رفته است.
در RS232 منطق 1 با -3 تا -25 ولت تعریف می شود، و منطق 0 با +3 تا+25 ولت تعریف می شود، به این دلیل برای اتصال هر RS232 به یک سیستم مبتنی بر میکروکنترلر، باید از مبدل های ولتاژی همچون MAX232 برای تبدیل از سطح TTL به سطح RS232 و بر عکس استفاده کنیم.
تراشه های MAX232 به نام راه اندازهای خط و گیرنده های خط نام گذاری شده اند.
چون همه پایه ها در کامپیوترهای جدید به کار نرفته اند،IBM ، نوع DB-9 از استاندارد I/O سریال را که فقط 9 پایه داشت معرفی کرد.که وظایف این 9 پایه به ترتیب عبارتند از: پایه1:تشخیص سیگنال حامل داده را به عهده دارد."DCD" پایه2:دریافت داده را به عهده دارد."RXD" پایه3: ارسال داده را به عهده دارد."TXD" پایه4:آماده گی تجهیزات پایانه داده ."DTR" پایه5:سیگنال زمین."SG" پایه6:مجموعه داده آماده."DSR" پایه7:تقاضای ارسال از طرف DTE.
"RTS" پایه8:آماده گی برای ارسال ."CTS" پایه9:تشخیص دهنده سیگنال زنگ."RI" شکل ارتباط بین دو DTE MAX232 چون RS232 با میکرو پروسسورها و میکرو کنترلر های امروزی ساز گاز نیست، به یک راه اندازخطی نیاز دارد تا سیگنالهای RS232 را به سطوح ولتاژTTL تبدیل کند.تا به این وسیله توسط پایه های RXDو TXD در میکرو قابل پذیرش باشند..یکی از مزایای AX232 این است که از منبع تغذیه+5V استفاده می کند.که مشابه منبع ولتاژ برای 8051 است.به عبارت دیگر ، با یک منبع +5V ، می توان8051 وMAX232 را راه انداخت و به دو منبع تغذیه که در سیستم های قدیمی مرسوم بوده است، نیازی نیست.MAX232 دو مجموعه راه انداز برای ارسال و دریافت داده دارد.
راه اندازهای به کار رفته برای TXD، T1 و T2خوانده می شوند،در حالی که راه اندازهای RXD با R1 و R2 مشخص شده اند.
در بسیاری از کار بردها تنها یکی از آنها به کار می رود.مثلا T1 و R1 همراه با هم برای TXD و RXD در 8051 استفاده شده، و مجموعه دوم بلا استفاده باقی می ماند.
راه انداز T1 در MAX232 دارای علائم T1inوT1out به ترتیب در پایه های11و14 می باشد.
پایه T1in در سمت TTL به RXDمیکرو کنترلر وصل است، در حالتی کهT1out در سمت RS232 بوده و به پایه RXD در کانکتور9 DB- وصل می باشد.
میکرو کنترلر AT90S2313 AT90S2313 یک میکرو کنترلر 8 بیتی توان پایین cmos است که بر اساس معماری AVR RISC بنا نهاده شده است.که شامل دستورالعمل های در حال اجرا در یک clock sycle مجزا است.
توان عملیاتی AT90S2313 نزدیک به 1 MIPS/MHZ است.
هسته AVR یک مجموعه دستورالعمل قدرتمند را با 32 رجیستر همه منظوره کاری ترکیب می کند.
تمام 32 رجیستر همه منظوره به طور مستقیم با ALU در ارتباط هستند.
AT90S2313 خصوصیاتی مثل : شامل بودن 2 کیلو بایت از حافظه flash قابل برنامه ریزی.
شامل بودن128 بایت EEPROM .
شامل بودن 128 بایت SRAM.
شامل بودن 15 خط همه منظوره I/O.
شامل بودن32 رجیستر همه منظوره کاری.
شامل بودن تایمر یا شمّا رنده انعطاف پذیر با مد مقایسه.
پشتیبانی از وقفه های داخلی و خارجی.
شامل بودن یک رجیستر پورت سریال قابل برنامه ریزی UART.
شامل بودن تایمر نگهدارنده "watchdog" با اسیلاتور داخلی.
AT90S2313 به وسیله یک مجموعهای از برنامه های کامل که ارتباط بسیار نزدیک با هم دارند و ابزار های توسعه یافته سیستمی شامل: کامپایلرهای c و ماکرو اسمبلرها و برنامه های debugger/simulators و شبیه ساز مدار "Emulator" پشتیبانی می شود.
این میکرو 20 پایه دارد که شمای آن به صورت زیر است.
که این میکرو شامل دو پورت PB0..PB7 و PD0..PD6 است.که پورت B یک پورت 8 بیتی I/O است .
پین های پورت B میتوانند مقاومت بالا کش داخلی ،انتخابی برای هر بیت ، را فراهم کنند.
همچنین PB0 وPB1 به ترتیب به عنوان ورودی مثبت (AIN0) و ورودی منفی (AIN1) به کار برده شوند.که AIN0 و AIN1 برای مقایسه گر آنالوگ روی چیپ استفاده می شوند.
بافرهای خروجی پورت B میتواند جریان 20MA را فراهم کند و به طور مستقیم نمایشگر ها "LED" را داریو کند.
زمانی که پین های PB0..PB7 به عنوان ورودی مورد استفاده قرار می گیرند به طور پیش فرض با صفر مقدار دهی می شوند.پین های پورت B زمانی که Reset فعال شود حتی اگر کلاک فعال نباشد 3 وضعیت دارند.
پورت D یک پورت 7 بیتی I/O است.
پین های پورت D میتوانند مقاومت بالا کش داخلی ،انتخابی برای هر بیت ، را فراهم کنند.
.
بافرهای خروجی پورت D میتواند جریان 20MA را فراهم کند و به طور مستقیم نمایشگرها "LED" را داریو کند.
زمانی که پین های PD0..PD6 به عنوان ورودی مورد استفاده قرار می گیرند به طور پیش فرض با صفر مقدار دهی می شوند.پین های پورت D زمانی که Reset فعال شود حتی اگر کلاک فعال نباشد 3 وضعیت دارند.
ورودی Reset : یک سطح پایین روی پین شماره 1 اگر برای مدت بیشتر از 50ns باقی بماند حتی اگر کلاک نیامده باشد یک حالت Reset را ایجاد می کند پالس های کوچکتر تضمینی برای ایجاد Reset نمی کنند.
و پایه 20 و10 آن به ترتیب VCC و GND هستند.
و PB7 پایه SCK است.
که یکی از خروجی های مدار programmer به این پایه وصل میشود.و PB6و PB5 به ترتیب پایه های MISOوMOSI هستند.
و پایه 1 پایه RESET NOTاست که active high است.
وکلکتور ترانزیستور موجود در مدار programmer به این پایه وصل میشود.
و از طرفی RXD مربوط به میکرو به TXD مربوط بهMAX و TXD مربوط به MAX به RXD میکرو وصل می شود.
و از طرفی از منبع کلاک خارجی برای اینکه در نهایت اطلاعاتی که به صورت سریال فرستاده می شود درست دریافت شود استفاده می کنیم.که کریستال را بین پایه های XTAL1 و XTAL 2 قرار می دهیم .که شکل مداری آن به صورت زیر است.
و ساختمان داخلی AT90S2313 و اتصالات MAX به صورت زیر است.
که پایه 10 یا 11 از MAX 232 را که ورودی TTL است به پایه TXD از میکرو وصل می کنیم و پایه 14 یا 7 از را که خروجی RS232است به پایه RXD از کانکتور 9 پین دیگر که برای ارتباط با MAX 232 در نظر گرفته شده است وصل می کنیم.و پایه 13 یا 8 از MAX 232 که ورودی RS232است به پایه TXD از کانکتور 9 پین وصل می کنیم و پایه های12 یا 9 از MAX 232 را که خروجی TTL است به پایه RXD از میکرو وصل می کنیم.
و همچنین برای کار کردن مدار نیاز به مولد ولتاژ 5 volt داریم که این ولتاژ را توسط یک ترانس DC که به دو پایه ورودی پل-دیود وصل میشود و دو پایه خروجی پل – دیود به دو پایه رگولاتور وصل می شود و پایه سوم رگولاتور به زمین وصل می شود .
خروجی رگولاتور که ولتاژ 5 volt می باشد به vcc مربوط به میکرو و MAX 232 و به کلکتور موجود در مدار programmer وصل می شود.
در ابتدای کار مدار programmer را روی بورد می بندیم که این مدار از یک طرف به پورت DB-9 ،که به پورت سریال کامپیوتر وصل می شود، متصل می شود و از طرفی خروجی های مدار programmer به میکرو وصل می شوند.
که خروجی RESET به پایه 1 میکرو و خروجی MISO به پایه 18 میکرو و خروجی SCK به پایه 19 میکرو و خروجی MOSI به پایه 17 میکرو متصل می شود.
و همچنین 2 تا LED به پایه های 14 و16 از میکرو که پایه های بی کار محسوب می شوند و یک LED دیگر را به یکی از پایه های 6,7,8,9 می توانیم وصل کنیم.
مدار programmer به صورت زیر است.
بعد از بستن کامل مدار و تست اتصال کوتاه و وصل کردن ترانس به مدار و وصل کردن ترانس به برق ابتدا با مولتی متر تمام ولتاژ ها را اندازه گیری می کنیم .
اگر ولتاژ vcc وgnd درست بود در آن صورت پورت مربوط به programmer را به پشت سیستم وصل می کنیم و دقت می کنیم که در این مرحله نباید میکرو را در مدار قرار دهیم .
سپس طبق دستورالعمل زیر تست میکرو ولتاژ های خاصی مثل ولتاژ بیس ترانزیستور و ولتاژ دو سر دیود ها و ولتاژ RESET و VCC را اندازه می گیریم.
ولتاژRESET باید 5 V+ باشد.
ولتاژ BASE ترانزیستور باید تقریبا -5V باشد.
ولتاژ کلکتور باید 5 V+ باشد.
ولتاژ MOSI و SCK تقریبا باید -.07 باشد.
در صورتی که هم ولتاژ ها را اندازه گرفتیم و ولتاژ های قابل قبول به دست آمد در آن صورت نرم افزار ponyprog را برای read و write کردن از و به میکرو اجرا می کنیم.
ابتدا از combo Box سمت راست گزینه AT90S2313 را انتخاب می کنیم و سپس از combo Box کنار آن گزینه AVR micro را انتخاب می کنیم.
سپس از منوی option گزینه calibration را انتخاب می کنیم .
سپس یک message box باز می شود که از ما سوال می پرسد آیا شما می خواهید که calibration را اجرا کنید با کلیک کردن روی دکمه ok پیام Calibration OK را مشاهده می کنیم.
سپس از منوی setup گزینه Interface Setup را انتخاب می کنیم در پنجره باز شده از I/O port setup گزینه serial را انتخاب می کنیم و از combo Box گزینه SI Prog API را انتخاب می کنیم.و سپس COM port ورودی را انتخاب می کنیم و سپس دکمه OK را کلیک می کنیم.
و سپس از منوی command گزینه Read program(FLASH) را برای Read کردن انتخاب می کنیم در صورتی که با مشکل error(-24) مواجه شدیم یعنی اینکه ما مشکل تغذیه داریم و دوباره مدار را بررسی می کنیم در غیر این صورت اگر عمل Read با موفقیت انجام شد در آن صورت می توانیم عمل Write را انجام دهیم .
که برای انجام این عمل نیز ابتدا باید فایل HEX را باز کرده و سپس از منوی command گزینهWrite Program (FLASH) را انتخاب می کنیم و می بینیم که عمل Write هم با موفقیت انجام می شود.
که مراحل کار در شکل های زیر نمایش داده سده است.
که برای این مرحله نیاز داریم که یک فایل HEX ایجاد کنیم که برای این کار میتوانیم از نرم افزار CodeVisionAVR C Compiler استفاده کنیم .که ابتدا این نرم افزار را باز کرده و از منوی Tools گزینه CodeWizardAVR را انتخاب میکنیم .
سپس گزینه chip را انتخاب می کنیم و از combo Box قرار گرفته در زیر گزینه AT90S2313 را انتخاب می کنیم.
و برای شروع ابتدایی کار دو تا از پورتهای B را که LED ها به آن وصل هستند را به عنوان خروجی انتخاب می کنیم ، PB2 و PB4، و با همان مقدار اولیه که صفر هستند در نظر می گیریم و سپس از منوی File مربوط به codeWizardAVR گزینه Generate,save and Exit ر انتخاب می کنیم.
سپس پنجره Save C Compiler Source File باز می شود که نام Surce File را وارد می کنیم.
و بعد از وارد کردن نام و کلیک کردن دکمه save پنجره دیگری با نام Save C Compiler project File باز می شود که نام پروژه را وارد کرده و save را کلیک می کنیم و سپس پنجره دیگری باز می شود که نام پروژه با پسوند .cwp را درخواست می کند بعد از وارد کردن نام و کلیک کردن دکمه save پنجره کد برنامه باز می شود که به صورت زیر است : /***************************************************** This program was produced by the CodeWizardAVR V1.24.3b Evaluation Automatic Program Generator © Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com e-mail:office@hpinfotech.com Project Version: Date : 2005/08/22 Author : Freeware, for evaluation and non-commercial use only Company: Comments: Chip type : AT90S2313 Clock frequency : 4.000000 MHz Memory model : Tiny External SRAM size : 0 Data Stack size : 32 *****************************************************/ #include // Declare your global variables here void main(void) } // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=Out Func1=In Func0=In // State7=T State6=T State5=T State4=1 State3=T State2=1 State1=T State0=T PORTB=0x14; DDRB=0x14; // Port D initialization // Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=1 State3=T State2=T State1=T State0=T PORTD=0x10; DDRD=0x10; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1 output: Discon.
// Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00 TCNT1L=0x00; OCR1H=0x00; OCR1L=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off GIMSK=0x00; MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00 // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; while (1) { // Place your code here} ;{ که این کد توسط خود کامپایلر C تولید می شود و ما کد هایی را که می خواهیم بنویسم در جایی که نوشته شده است// Place your code here اضافه می کنیم.
مثلا برای این برنامه ساده کدهای زیر را وارد می کنیم.
PORTB.2=1; PORTB.4=1; بعد از آن از منوی PROJECT گزینه compile را برای کامپایل کردن برنامه انتخاب می کنیم .
در صورتی که برنامه بدون error بود یعنی no error وno warning را مشاهده کردیم دکمه OK را فشار می دهیم و سپس از منوی PROJECT گزینه configure را انتخاب می کنیم .
در پنجره باز شده گزینه C Compiler را انتخاب میکنیم و سپس بررسی می کنیم که میکرو AT90S2313 باشد و سپس دکمه OK را کلیک می کنیم.
و سپس ار منوی PROJECT گزینه make را انتخاب می کنیم با این کار کد HEX برنامه ساخته می شود و می توانیم از طریق نرم افزار PonyProg میکرو را برنامه ریزی کنیم بعد از انجام این عملیات مشاهده می کنیم که دو LEB که به پورت B متصل شده بودند روشن می شوند.
و برای اینکه بخواهیم یک کاراکتر را روی میکرو بفرستیم یا از میکرو به ترمینال ارسال کنیم عملیات زیر را انجام میدهیم.
در ابتدا از منوی Tools گزینه CodeWizardAVR را انتخاب می کنیم.
و سپس گزینه UART از پنجره CodeWizardAVR را انتخاب می کنیم.
دو Check Box با نامهای transmitter و Receiver مشاهده می شود که اگر بخواهیم میکرو کاراکتر را به ترمینال ارسال کند در آن صورت باید transmitter را انتخاب کنیم .
و در صورتی که بخواهیم به میکرو کاراکتری ارسال کنیم در آن صورت باید Receiver را انتخاب کنیم.
مثلا اگر بخواهیم کاراکتر 'a' را به ترمینال از طریق میکرو ارسال کنیم ابتدا transmitter را انتخاب می کنیم و سپس Baud rate را انتخاب می کنیم که در این مثال این مقدار را 9600 انتخاب می کنیم.
و در قسمت Communication Parameters مقدار8 bit Data, 1 bit stop,No Parity را انتخاب می کنیم و در بخش کد آن عبارت; putchar('a') را یادداشت می کنیم.
و سپس برنامه را کامپا یل و سپس برای ساختن کد HEX آن را make می کنیم و سپس از طریق نرم افزار PonyProg میکرو را برنامه ریزی می کنیم.
و بعد از آن پورت سریال را از کامپیوتر جدا می کنیم و پورت DB-9 دیگر را که به MAX232 وصل است را به پورت سریال کامپیوتر وصل می کنیم.
و سپس در محیط CodeVision از منوی setting گزینه Terminal را انتخاب می کنیم.
و بررسی می کنیم ببینیم اطلاعاتی که برای ارتباط سریال تنظیم کرده بودیم درست است یا نه.
اکر این اطلاعات مطابقت نداشت در آن صورت آن را تنظیم می کنیم و سپس از منوی Tools گزینه terminal را انتخاب می کنیم که در آن صورت کد Hex مربوط به کاراکتر ارسالی در صفحه مربوط به ترمینال دیده می شود ولی این کد معادل کاراکتر 'a' نیست زیرا یک مقداری هم error در Baud rate وجود دارد که برای اینکه این error به صفر برسد .
ابتدا باید fuse bits مربوط به میکرو را بسوزانیم تا اینکه میکرو بتواند از منبع کلاک خارجی که توسط XTAL1 و XTAL2 فراهم شده است استفاده کند که طبق جدول زیر میزان error با هر Baud rate ای در آن نشان داده شده است.
که رجیستر UBRR یک رجیستر 8 بیتی خواندنی / نوشتنی است که مقدار Baud rate را که طبق فرمول زیر محاسبه می شود در خودش نگهداری می کند.
که بعد از اینکه fuse bits مربوط به میکرو را از طریق نرم افزار PonyProg به وسیله علامت قفل که در این نرم افزار وجود دارد و تحت عنوان Security and Configuration bits است ، سوزاندیم در آن صورت می توانیم فرکانس کلاک را طبق جدول بالا به صورتی انتخاب کنیم که error ما صفر در صد باشد در آن صورت ارسال و دریافت میکرو به صورت درست انجام می شود.
همچنین می توان از طریق VB.NET هم ارتباط سریال را بین میکرو برقرار کرد.
که برنامه VB.NET به صورت زیر است.
که برای برداشتن ابزاری که برای ارتباط سریال از آن استفاده کنیم و همچنین تنظیم کردن میزان Baud rate و 8 bit Data, 1 bit stop,No Parity به صورت زیر عمل می کنیم.
1) ابتدا از منوی project گزینه component یا با فشار دادن کلید میان بر ctrl+t از پنجره باز شده گزینه Microsoft common control 6.0 را انتخاب می کنیم .
وبا انتخاب کردن این گزینه یک ابزار شبیه تلفن به لیست toolbox اضافه می شود.سپس این ابزار را انتخاب می کنیم و روی فرم قرار می دهیم.
2) روی این ابزار راست کلیک می کنیم و گزینه properties را انتخاب می کنیم و سپس در پنجره باز شده پورت ورودی را انتخاب کرده و در داخل TextBox مربوط به setting مقدار 9600,n,8,1 را انتخاب می کنیم.
و کد برنامه به شکل زیر است.
Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim pins As Long 'add the pinnumber 0 to 15 to cbopinnumber For pins = 0 To 15 ' cboPinNumber.AddItemsCore(CStr(pins)) cboPinNumber.Items.Add(CStr(pins)) ' defult to pin 0 being selected Next pins cboPinNumber.SelectedIndex() = 0 optstate1.Checked = True AxMSComm1.CommPort() = 1 AxMSComm1.Settings() = "2400,N,8,1" AxMSComm1.PortOpen() = True Dim pinstate As Long If optstate1.Checked = True Then pinstate = 0 Else pinstate = 1 End If End Sub Private Sub send_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles send_button.Click Dim pinNumber As Long Dim pinState As Long 'get pin number pinNumber = cboPinNumber.SelectedIndex 'get pin state If optstate1.Checked = True Then pinState = 0 Else pinState = 1 End If 'send out data AxMSComm1.Output() = Chr(255) & Chr(pinNumber) & Chr(pinState) End Sub End Class در این حالت می توانیم یک Text Box در روی فرم اضافه کنیم و آنچه که میکرو send می کند را روی Text Box نمایش دهیم .
تا ببینیم چه کاراکترهای ارسال می شود.
ضمائم Analog comparator مقایسه گر آنالوگ مقدار ورودی روی ورودی مثبت PB0 ،AIN0))، و روی ورودی منفی PB1 ،AIN1))، را مقایسه می کند.زمانی که ولتاژ روی ورودی مثبت PB0 ،AIN0))، نسبت به ولتاژ روی ورودی منفی PB1 ،AIN1))، بیشتر است .
خروجی مقایسه گر آنالوگ ، ACO، با 1 مقدا ر دهی می شود.
خروجی مقایسه گرها ممکن است به منظور راه اندازی وقفه مقایسه گر آنالوگ مقدار دهی شوند.
کاربر میتواند راه اندازی وقفه را روی خروجی بالایی،پایینی ، میانی ، مقایسه گر انتخاب کند.
شکل 21 بلوک دیا گرام مقایسه گر را نشان می دهد.
Bit7_ACD"Analog Comparator Disable": زمانی که این بیت مقدار 1 دارد ، توان مقایسه گر آنالوگ قطع است .
این بیت در هر لحظه می تواند به منظور خاموش کردن مقایسه گر آنالوگ مقدار دهی شود.
این بیت توان مصرفی را در حالت فعال یا در مد بی کار "idle"، تولید خواهد کرد.زمان تغییر وضعیت بیت ACD"" وقفه مقایسه گر آنالوگ باید به وسیله پاک کردن "clear" بیت "ACIE" در "ACSR" غیر فعال شود.
در غیر این صورت وقفه ممکن است در زمان تغییر وضعیت بیت رخ دهد.
Bit6_Res:Reserved Bit این بیت در AT90S2313 بیت رزرو شده است و همیشه صفر در نظر گرفته می شود.
Bit5_ACO:Analog Comparator Output ACO به طور مستقیم به خروجی مقایسه گر متصل شده است.
Bit4_ACI: Analog Comparator Input Flag این بیت مقدار 1 دارد زمانی که راه اندازی رویداد خروجی مقایسه گر در مد وقفه بوسیله ACIS0وACIS1 تعریف شده است.روتین وقفه مقایسه گر آنالوگ اگر، بیت ACIE مقدار 1 داشته باشد و I-bit در SREG مقدار 1 داشته باشد، در حال اجرا است.
ACI، بوسیله سخت افزاری که مطابق بردار اداره کننده وقفه در حال اجرا است ، پاک شده است.،به طور متناوب،ACI با نوشتن یک منطق روی flag پاک شده است.
Bit3_ACIE: Analog Comparator Interrupt Enable زمانی که بیت ACIE مقدار 1 داشته باشد و I-bit در SREG مقدار 1 داشته باشد، وقفه مقایسه گر آنالوگ فعال شده است .
زمانی که پاک می شود ، یعنی مقدار آن صفر می شود، وقفه غیر فعال می شود.
Bit2_Res:Reserved Bit این بیت درAT90S1200 بیت ذخیره شده است و همیشه صفر خواهد بود.
Bits 1,0_ACIS1,ACIS0: Analog comparator Interrupt Mode Select این بیتها تخمین می زنند که کدام رویداد مقایسه گر ، وقفه مقایسه گر آنالوگ، را راه اندازی کند.این مجموعه متفاوت در جدول 7 نشان داده شده است.
این جدول نشان می دهد که اگر هر دو بیت صفر باشند ، وقفه مقایسه گر روی خروجی میانی مقایسه گر رخ می دهد.
و اگر به صورت 01 باشند ، مد وقفه ذخیره شده است.
و اگر به صورت 10 باشند، وقفه مقایسه گر روی لبه بالا رونده خروجی رخ می دهد.
و اگر به صورت 11 باشند، وقفه مقایسه گر روی لبه پایین رونده خروجی رخ میدهد.
نکته زمان تغییر بیتهای ACIS1,ACIS0، وقفه مقایسه گر، باید به وسیله پاک کردن بیت فعال کننده وقفه در ACSR ، باید غیر فعال شود.
د ر غیر این صورت ،در زمان تغییر وضعیت بیتها، ممکن است یک وقفه رخ دهد.
I/O Port همه پورتهای AVR خاصیت ، خواندن-اصلاح کردن-نوشتن، را دارند ،زمانی که به عنوان پورتهای I/O دیجیتال عمومی مورد استفاده قرار می گیرند.این به این معنی است که جهت یک پین پورت بدون تغییر غیر عمدی،ندانسته،تغییر کند.جهت پین های دیگر با دستورالعمل های SBIوCBI تغییر می کند.تدارکات مشابه برای تغییر مقدار داریو،اگر به عنوان خروجی پیکره بندی شده باشد،یا فعال یا غیر فعال کردن مقاومت بالا کش، اگر به عنوان ورودی پیکره بندی شده باشد، توسط پورتهای I/O فراهم می شود.
Port B پورت B یک پورت I/O، 8 بیتی،bi-directional است.
سه مکان آدرس حافظه I/O برای پورت B تخصیص داده شده است.
1) رجیستر داده پورت B در موقعیت $18.
2)رجیستر دستورالعمل پورت B،DDRB، در موقعیت $17.
3)پین های ورودی پورت B ،PINB ، در موقعیت$16.
آدرس پین های ورودی پورت B فقط خواندنی است در حالی که رجیستر داده و رجیستر دستورالعمل پورت B خواندنی یا نوشتنی است.
همه پین های پورت B منحصرا مقاومتهای بالا کش قابل انتخاب دارند.
بافرهای خروجی پورت Bجریان 20mAَرا فراهم می کنندو بنا براین میتوانند به طور مستقیم نمایشگر های LED را داریو کنند.زمانی که پین های PB0 تا PB7به عنوان ورودی مورد استفاده قرار می گیرند، به طور خارجی با صفر مقدار دهی می شوند.آنها اگر مقاومت بالا کش فعال باشد به عنوان منبع جریان محسوب خواهند شد.
جدول8 توابع متناوب پورت B را نشان می دهد.
زمانی که این پین ها در توابع متناوب این جدول مورد استفاده قرار می گیرند.
رجیسترهای PORTB و DDRB طبق شمای زیر مقدار دهی می شوند.
در این رجیسترهمه بیتها ازPORTB0 تا PORTB7 همه Read/Write هستند و مقدار اولیه همه بیتها برابر صفر است.
در این رجیستر از DDRB0 تا DDRB7 همه Read/Write هستند و مقدار اولیه همه بیتها برابر صفر است.
در این رجیستر از PINB0 تا PINB7 همه فقط قابل خواندن هستند و مقدار اولیه همه بیتها N/A است.
آدرس پین های ورودی پورت B ،PINB، یک رجیستر نیست و این آدرس با مقدار فیزیکی روی هر پین پورت B قابل دستیابی است.
زمان خواندن PORTB لچ داده پورت B خوانده می شود.و زمان خواندن PINB مقدار آماده منطقی روی پین ها خوانده می شود.
Alternate Functions of Port B توابع متناوب پورت B عبارتند از: SCK_Port B,Bit7: پین ورودی کلاک برای upload یا download کردن حافظه.
MISO-Port B, Bit6: پین خروجی داده برای upload کردن حافظه.
MOSI-Port B,Bit5: پین ورودی داده برای download کردن حافظه.
AIN1-Port B, Bit1: AIN1، ورودی منفی مقایسه گر آنالوگ است.
زمانی که این بیت به عنوان ورودی پیکره بندی می شود،DDB1 پاک می شود .
یعنی با صفر مقدار دهی می شود و توسط مقاومت داخلی بالا کش MOS داخلی اتصال قطع می شود.
یعنی مقدار PB1 صفر می شود.
این پین همچنین میتواند به عنوان ورودی منفی روی چیپ مقایسه گر آنالوگ به کار برده شود.
AIN0 –Port B, Bit 0:AIN0 ، ورودی مثبت مقایسه گر آنالوگ است.
زمانی که این بیت به عنوان ورودی پیکره بندی می شود،DDB0 پاک می شود .
یعنی مقدار PB0 صفر می شود.
این پین همچنین میتواند به عنوان ورودی مثبت روی چیپ مقایسه گر آنالوگ به کار برده شود.
Port B Schematics: توجه کنید که همه پین های پورت B سنکرون هستند .
اگر چه که لچ های همگام سازی در این شکل نشان داده نشده است.
شکل 22 دیاگرام کلی پورت B مربوط به پین های PB0وPB1 را نشان می دهد.
شکل 23 دیاگرام کلی پورت B مربوط به پین های PB2 وPB3 وPB4 را نشان می دهد.
شکل 24 دیاگرام کلی پورت B مربوط به پین PB5 را نشان می دهد.
شکل 25 دیاگرام کلی پورت B مربوط به پین PB6 را نشان می دهد.
شکل 26 دیاگرام کلی پورت B مربوط به پین PB7 را نشان می دهد.
Port D پورتDِ یک پورت I/O، 7 بیتی،bi-directional است.
سه مکان آدرس حافظه I/O برای پورت D تخصیص داده شده است.
1) رجیستر داده پورت D در موقعیت $12.
2) رجیستر دستورالعمل پورت D،DDRD، در موقعیت $11.
3) پین های ورودی پورت D ،PIND ، در موقعیت$10.
آدرس پین های ورودی پورت D فقط خواندنی است در حالی که رجیستر داده و رجیستر دستورالعمل پورت D خواندنی یا نوشتنی است.
همه پین های پورت D منحصرا مقاومتهای بالا کش قابل انتخاب دارند.
بافرهای خروجی پورت Bجریان 20mAَرا فراهم می کنند و بنا براین میتوانند به طور مستقیم نمایشگر های LED را داریو کنند.زمانی که پین های PD0 تا PD6به عنوان ورودی مورد استفاده قرار می گیرند، به طور خارجی با صفر مقدار دهی می شوند.آنها اگر مقاومت بالا کش فعال باشد به عنوان منبع جریان محسوب خواهند شد.
جدول10 توابع متناوب پورت D را نشان می دهد.
رجیسترهای PORTD و DDRD و PIND طبق شمای زیر مقدار دهی می شوند.
در این رجیسترهمه بیتها ازPORT D0 تا PORTD6 همه Read/Write هستند و مقدار اولیه همه بیتها برابر صفر است و بیت 8 از رجیستر بلا استفاده است.
در این رجیستر از DDRB0 تا DDRB6 همه Read/Write هستند و مقدار اولیه همه بیتها برابر صفر است و بیت 8 از رجیستر بلا استفاده است.
در این رجیستر از PIN D0 تا PIN D6 همه فقط قابل خواندن هستند و مقدار اولیه همه بیتها N/A است و بیت 8 از رجیستر بلا استفاده است.
آدرس پین های ورودی پورت D ،PIN D، یک رجیستر نیست و این آدرس با مقدار فیزیکی روی هر پین پورت D قابل دستیابی است.
زمان خواندن PORT D لچ داده پورت D خوانده می شود و زمان خواندن PIN D مقدار آماده منطقی روی پین ها خوانده می شود.
Alternate Functions of Port D توابع متناوب پورت D عبارتند از: T0-Port D, Bit 4(1:T0، منبع کلاک تایمر یا شمارنده شماره صفر است.
2) INT0-Port D, Bit2: INT0، منبع وقفه خارجی شماره صفر است.
Port D Schematics توجه کنید که همه پین های پورت D سنکرون هستند .
شکل 27 دیاگرام کلی پورت D مربوط به پین های P D0وP D1 و P D3و P D5وpd6 را نشان می دهد.
شکل 28 دیاگرام کلی پورت D مربوط به پین PD2 را نشان می دهد.
شکل 29 دیاگرام کلی پورت D مربوط به پین PD4 را نشان می دهد.