ارتباط میکروکنترلر ARM با پورت سریال کامپیوتر
در این بخش دانلود پروژه ارتباط میکروکنترلر ARM با پورت سریال کامپیوتر, توسط تیم الکترونیک و برنامه نویسی الکترونیک ۹۸ برای شما علاقه مندان به پروژه های میکروکنترلر ARM با هدف آموزش برنامه نویسی و راه اندازی میکروکنترلرهای ARM آماده شده است. در این پروژه از واحد USART1 میکروکنترلر AT91SAM7S از خانواده میکروکنترلر های ARM در حالت آسنکرون برای ارتباط با پورت RS232 کامپیوتر استفاده شده است. به دلیل سازگار نبودن سطح منطقی, از آی سی MAX232 کمک می گیریم. از این تراشه برای تبدیل سطح ولتاژ RS232 به سطح منطقی TTL و برعکس استفاده می کنیم. در شکل زیر سخت افزار لازم جهت ارتباط با پورت RS232, صفحه کلید و ال سی دی LCD کاراکتری را ملاحضه می کنید.
نقشه شماتیک پروژه
نحوه اتصال میکروکنترلر ARM به پورت سریال با تراشه MAX232
شرح عملکرد پروژه
در این پروژه اگر کلیدی از صفحه کلید میکروکنترلر را فشار دهید شماره کلید مربوطه به کامپیوتر ارسال می شود و اگر داده ای از طریق کامپیوتر ارسال شود بر روی ال سی دی LCD کارکتری متصل به میکروکنترلر ARM نمایش داده می شود. برای ارتباط با پورت سریال RS232 کامپیوتر می توان از نرم افزار Termite که در قایل همراه پروژه موجود می باشد استفاده کنید. در این ارتباط از نرخ انتقال 115200, 8 بیت اطلاعات, 1 بیت توقف و بیت توازن فرد استفاده شده است.
برنامه میکروکنترلر به زبان C در نرم افزار IAR Embedded Workbench IDE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <Atmel/ioat91sam7s64.h> #include “keypad.h” #include “lcd.h” void main () { //——————–start up————————– AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15) AT91C_BASE_RSTC->RSTC_RMR=0xA5000001; //——————–speed up————————– AT91C_BASE_CKGR->CKGR_MOR = 0xF01; AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC; AT91C_BASE_PMC->PMC_MCKR = 0x3; AT91C_BASE_PMC->PMC_SCER = 0x1; //—————————————————– AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_US1); // AT91C_ID_US1=7 //—————————————————– unsigned char i,j; lcd_pininit (16,15,5,6,7,8,26,27,28,29); lcd_init (); keypad_pininit (5,6,7,8,17,18,19,20); keypad_init (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); AT91C_BASE_PIOA->PIO_PDR = (1<<21|1<<22); AT91C_BASE_PIOA->PIO_MDER = (1<<21|1<<22); AT91C_BASE_PIOA->PIO_ASR = (1<<21|1<<22); AT91C_BASE_US1->US_CR=0xC; AT91C_BASE_US1->US_MR=0x2C0; AT91C_BASE_US1->US_BRGR=0x1A; AT91C_BASE_US1->US_CR=0x50; while(1) { i=keypad_scan (); if (((AT91C_BASE_US1->US_CSR&0x2)==0x2)&(i!=16)) AT91C_BASE_US1->US_THR=i; if ((AT91C_BASE_US1->US_CSR&0x1)==0x1) { j = AT91C_BASE_US1->US_RHR&0x1FF; lcd_clear (); lcd_gotoxy(0,0); lcd_puts(j); } } } |