ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/7/12 2:38:09ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£
¡¶Ç¶Èëʽϵͳ¡·ÊÔÌâ¿â
10¡¢ ÏÂÊö³ÌÐòΪ S3C4510B ¿ØÖÆ GPIO ¶Ë¿ÚÊä³öµÄÒ»¶Î³ÌÐò¡£ #define IOPMOD (*(volatile unsigned long *)0x03FF5000) #define IOPDATA (*(volatile unsigned long *)0x03FF5008) void Delayms(unsigned int); int main(){
unsigned long LED; IOPMOD = 0xFFFFFFFF; IOPDATA = 0xEF; for(; ;){ LED = IOPDATA; LED = (LED >> 1); IOPDATA = LED; Delayms(20); if(!(IOPDATA & 0x01)) IOPDATA = 0xEF; } return(0); }
ÇëÎÊ£º¢Ù¹Ø¼ü´Ê¡°volatile¡±Ôڴ˳ÌÐòÖеÄ×÷ÓÃÊÇʲô£¿ ¢ÚÄÄЩÓï¾äÊǶÁÄڴ棨²»°üÀ¨¶ÁÄÚ´æ³£Á¿ 0xFFFFFFFF¡¢0xEF£©£¿ÄÄЩÓï¾äÊÇдÄڴ棿 ¢ÛÄÄЩÓï¾äÊǶÁ¶Ë¿Ú£¿ÄÄЩÓï¾äÊÇд¶Ë¿Ú£¿ ´ð£º ¢Ù¹Ø¼ü´Ê¡°volatile¡±Ôڴ˳ÌÐòÖеÄ×÷ÓÃÊÇ×èÖ¹±àÒëÆ÷ÓÅ»¯£» ¢Ú¶ÁÄÚ´æÓï¾äÓУºIOPDATA = LED£»Ð´ÄÚ´æÓï¾äÓУºLED = IOPDATA£» ¢Û¶Á¶Ë¿ÚÓï¾äÓУºLED = IOPDATA£»Ð´¶Ë¿ÚÓï¾äÓУºIOPDATA = LED¡£
//½«ËùÓÐ IO ¿ÚÖÃΪÊä³öģʽ //ÑÓ³Ù³ÌÐò
//IO port mode register //IO port data register
µÚ 37 Ò³ ¹² 44 Ò³
¡¶Ç¶Èëʽϵͳ¡·ÊÔÌâ¿â
11¡¢ ·ÖÎöÏÂÊö S3C44B0x µÄʾÀý³ÌÐò¡£ #include
volatile unsigned long timeval; // µ±Ç°Ê±¿Ì int main(void)
{ init_timer();// Initialize Timer while(1) {
pPIO->PDATE = 0xFD; // Turn LED1 On wait(1000);// Wait 1000ms
pPIO->PDATE = 0xFB; // Turn LED2 On wait(1000);// Wait 1000ms }}
// ³õʼ»¯ Timer5 ÒÔ¼°¿ª¶¨Ê±ÖÐ¶Ï void init_timer(void) {¡¡} // 1ms ²úÉúÒ»´Î¶¨Ê±ÖжÏ
__irq void HandlerTIMER5(void) {timeval++;
pIC->I_ISPC = INT_TIMER5; }
/* µÈ´ýº¯Êý£¬ÒÔºÁÃëΪµ¥Î» */ void wait(unsigned long time) {unsigned long tick; tick = timeval;
while ((timeval - tick) < time); }
ÎÊ£º¢Ù Óï¾ä¡°while (1){¡¡ }¡±µÄ×÷ÓÃÊÇʲô£¿¢Ú ¹Ø¼ü´Ê¡°__irq¡±µÄ×÷ÓÃÊÇʲô£¿¢Û Óï¾ä ¡°pIC->I_ISPC = INT_TIMER5;¡±µÄ×÷ÓÃÊÇʲô£¿¢Ü ×Ó³ÌÐò HandlerTIMER5 ²¢Î´±»µ÷Óã¬Ëü ÊÇÈçºÎÖ´Ðеģ¿¢Ý ´Ë³ÌÐòµÄ¹¦ÄÜÊÇʲô£¿ ´ð£º ¢Ù Óï¾ä¡°while (1){¡¡}¡±µÄ×÷ÓÃÊÇËÀÑ»·¡¢µÈ´ýÖжϡ¢LED ÏÔʾ£» ¢Ú ¹Ø¼ü´Ê¡°__irq¡±µÄ×÷ÓÃÊÇÖ¸Ã÷¸Ãº¯ÊýΪ IRQ ÖжϷþÎñ×Ó³ÌÐò£» ¢Û Óï¾ä¡°pIC->I_ISPC = INT_TIMER5;¡±µÄ×÷ÓÃÊÇÇå³ýÖжÏÇëÇó±êÖ¾£» ¢Ü ÖжÏÔ´·¢³öÖжÏÇëÇó£¬CPU ÏìÓ¦Öжϲ¢²éѯÖжÏÔ´µÃµ½ÖжÏÏòÁ¿±íÈë¿ÚµØÖ·£¬µ½ÖÐ¶Ï ÏòÁ¿±íÏàÓ¦Èë¿ÚµØÖ·È¡Ö¸ÁîÖ´ÐУ¬¸Ã´¦ÎªÌø×ªÖ¸ÁִÐÐÌø×ªÖ¸ÁîÌø×ªµ½×Ó³ÌÐò HandlerTIMER5 ´¦Ö´ÐУ» ¢Ý ´Ë³ÌÐòµÄ¹¦ÄÜÊÇË«µÆÉÁ˸¡£ µÚ 38 Ò³ ¹² 44 Ò³
¡¶Ç¶Èëʽϵͳ¡·ÊÔÌâ¿â
12¡¢ ÓÒÏÂͼΪÀ×´ï×Ô¶¯ËÅ·þϵͳ¡£¸ßµÍ½ÇΪʵʱ¸ú×Ù£¬²ÉÓà PID ¿ØÖÆ£¨Ò»ÖÖ¿ØÖÆËã·¨£©£¬ ²ÉÑùÖÜÆÚΪ 20ms£»·½Î»½ÇΪ²½½ø¿ØÖÆ£¬Ã¿Ò»´Î²½½ø 0.1 ¶È¡£¡£ ¢Ù¸ÃϵͳÊÇ·ñÊÇǶÈëʽϵͳ£¿ÎªÊ²Ã´£¿
¢Ú¸ÃϵͳÓÐÈý¸ö¼ÆËã»ú£¬ÇëΪ¸ÃϵͳѡÅä²Ù×÷ϵͳ£¨ÊÇ·ñÐèÒª£¬ÐèҪʲôÑùµÄ²Ù×÷ϵͳ£©£¬ ¼òµ¥ËµÃ÷ÀíÓÉ¡£
À×´ï×Ô¶¯ËÅ·þϵͳ
¸©ÑöͨµÀʵʱ¸ú×Ù£¬·½Î»²½½ø0.1¶È
ÌìÏß
ÉÏλ»ú ¹¤¿Ø»ú RS422A½ÓÊÕ»ú ¹¦·Å ½Ç¶È ´«¸ÐÆ÷ ËÅ·þµç»ú ¸ßµÍ½Çת̨
ÏÂλ»ú S3C44B0x RS232C ¼üÅÌ ÏÔʾ 80C51 ¹¦·Å ²½½øµç»ú ·½Î»½Ç ´ð£º ¢Ù ¸ÃϵͳΪǶÈëʽϵͳ¡£ÒòΪ¸ÃϵͳÒÔÓ¦ÓÃΪÖÐÐÄ£¬ÎÒÃÇÊ×ÏÈ¿´µ½µÄÊÇÀ×´ï×Ô¶¯ËŸ´Ïµ ͳ£¬¶ø·ÇͨÓüÆËã»úϵͳ£»ÒÔ¼ÆËã»ú¼¼ÊõΪ»ù´¡£¬°üÀ¨ÖÁÉÙ 3 ¿é´¦ÀíÆ÷£¬¶øÇÒ¿ÉÄÜÅäÓв٠×÷ϵͳ£¬Á½¸öÏÂλ»úÊôÓÚµäÐ͵ÄרÓüÆËã»úϵͳ£»¶ÔÓÚÏÂλ»úÈíÓ²¼þ±ØÐë²Ã¼õ£¬¶Ô¹¦ÄÜ¡¢ ¿É¿¿ÐÔ¡¢¹¦ºÄ¡¢Ìå»ý¡¢³É±¾ÓÐÒªÇó£¬ÒÔÂú×ãÀ×´ï×Ô¶¯ËŸ´ÏµÍ³µÄÒªÇó¡£ ¢Ú ÏÂλ»ú 80C51 µÄÈÎÎñ¼òµ¥£ºÏÔʾ¡¢¼üÅÌ¡¢´®¿ÚͨÐÅ¡¢²½½ø¿ØÖÆ£¬¶øÇÒ±¾Éí¼ÆËãÄÜÁ¦Èõ£¬ ÎÞÐèÅä²Ù×÷ϵͳ£» ¢Û ÏÂλ»ú S3C44B0x µÄÈÎÎñÒ²¼òµ¥£ºÁ½¸ö´®¿ÚͨÐÅ¡¢Ò»¸ö PID ¿ØÖÆ£¬±¾Éí¼ÆËãÄÜÁ¦ÊôÓÚ Öеȣ¬µ«ÊµÊ±ÐÔ¡¢¿É¿¿ÐÔÒªÇó¸ß£¬²ÉÓÃʵʱ²Ù×÷ϵͳ¿É±£Ö¤ÊµÊ±ÐԺͿɿ¿ÐÔ£¬¿ÉÅä¼òµ¥Êµ ʱ²Ù×÷ϵͳ£¬Èç uC/OS-II£»Ò²¿É²»Åä²Ù×÷ϵͳ£¬PID ¼ÆËãÁ¿²»´ó£¬µ«Òª×ÐϸÉè¼Æ PID ¿ØÖÆ Èí¼þ£¬ÒÔ±£Ö¤ÊµÊ±ÐÔ£¬µ«¿É¿¿ÐԻήµÍ£»
¢Ü ÉÏλ»ú¹¤¿Ø»ú¼ÆËãÄÜÁ¦Ç¿£¬ÈÎÎñ¸´ÔÓ£¬ÒªÍê³ÉÀ×´ï½ÓÊÕÐźŵĴ¦Àí£¬µ«ÊµÊ±ÐÔÒªÇó²» ÊǺܸߣ¬ÎªÁ˼ò»¯Ó¦ÓÃÈí¼þÉè¼Æ£¬ÒªÅä²Ù×÷ϵͳ£¬Ò»°ãÅä Embedded 2000/XP µÈ¸´ÔÓ¶ø·Ç ʵʱǶÈëʽ²Ù×÷ϵͳ£¬Èí¼þÉè¼Æ´ó·ù¶È¼ò»¯¡£
µÚ 39 Ò³ ¹² 44 Ò³
¡¶Ç¶Èëʽϵͳ¡·ÊÔÌâ¿â
13¡¢ ÔÚ¦ÌC/OS-II ÖУ¬Ê¹ÓÃÏÂÁÐÐÅÏ¢£¨ÒÔ¶þ½øÖƱíʾ£©¼ÆËã³öµ±Ç°¾ÍÐ÷µÄ×î¸ßÓÅÏȼ¶ÈÎÎñ µÄÈÎÎñ ID£¨tid£©£¬²¢Ö¸³ö OSRdyGrp µÄÖµ£¨ÒÔ¶þ½øÖƱíʾ£©£¬¸ø³öÏêϸµÄ¼ÆËã¹ý³Ì¡££¨Ìáʾ£º ʹÓà OSUnMapTbl ×÷ΪÒÑÖªµÄÓ³Éä±í£¬Ê¹Óà C Óï¾äʵÏÖ¼ÆËã¹ý³ÌµÄËã·¨£© OSRdyTbl[0] = 00000000¡¢OSRdyTbl[1] = 01000000¡¢ ¡¢OSRdyTbl[4] = 00100011¡¢ OSRdyTbl[6] = 00010000¡¢ ´ð£º Y = OSUnMapTbl[OSRdyGrp]; X = OSUnMapTbl[OSRdyTbl[Y]]; Tid = Y * 8 + X; Y = 1; X = 6; Tid = 14; µÚ 40 Ò³ ¹² 44 Ò³