Keil C51ʹÓÃÏê½â(6)

2019-09-01 13:08

Æô¶¯ÎļþSTARTUP.A51Öаüº¬Ä¿±ê°åÆô¶¯´úÂ룬¿ÉÔÚÿ¸öprojectÖмÓÈëÕâ¸öÎļþ£¬Ö»Òª¸´Î»£¬Ôò¸ÃÎļþÁ¢¼´Ö´ÐУ¬Æä¹¦ÄܰüÀ¨£º

¡ñ¶¨ÒåÄÚ²¿RAM´óС¡¢ÍⲿRAM´óС¡¢¿ÉÖØÈë¶ÑջλÖà ¡ñÇå³ýÄÚ²¿¡¢Íⲿ»òÕßÒÔ´ËҳΪµ¥ÔªµÄÍⲿ´æ´¢Æ÷ ¡ñ°´´æ´¢Ä£Ê½³õʹ»¯ÖØÈë¶ÑÕ»¼°¶ÑÕ»Ö¸Õë ¡ñ³õʼ»¯8051Ó²¼þ¶ÑÕ»Ö¸Õë ¡ñÏòmain( )º¯Êý½»È¨

¿ª·¢ÈËÔ±¿ÉÐÞ¸ÄÒÔÏÂÊý¾Ý´Ó¶ø¶Ôϵͳ³õʼ»¯ ³£ÊýÃû ÒâÒå

IDATALEN ´ýÇåÄÚ²¿RAM³¤¶È

XDATA START Ö¸¶¨´ýÇåÍⲿRAMÆðʼµØÖ· XDATALEN ´ýÇåÍⲿRAM³¤¶È

IBPSTACK ÊÇ·ñÐ¡Ä£Ê½ÖØÈë¶ÑÕ»Ö¸ÕëÐè³õʼ»¯±êÖ¾£¬1ΪÐèÒª¡£È±Ê¡Îª0 IBPSTACKTOP Ö¸¶¨Ð¡Ä£Ê½ÖØÈë¶ÑÕ»¶¥²¿µØÖ·

XBPSTACK ÊÇ·ñ´óÄ£Ê½ÖØÈë¶ÑÕ»Ö¸ÕëÐè³õʼ»¯±êÖ¾£¬È±Ê¡Îª0 XBPSTACKTOP Ö¸¶¨´óÄ£Ê½ÖØÈë¶ÑÕ»¶¥²¿µØÖ·

PBPSTACK ÊÇ·ñCompactÖØÈë¶ÑÕ»Ö¸Õ룬Ðè³õʼ»¯±êÖ¾£¬È±Ê¡Îª0 PBPSTACKTOP Ö¸¶¨CompactÄ£Ê½ÖØÈë¶ÑÕ»¶¥²¿µØÖ· PPAGEENABLE P2³õʼ»¯ÔÊÐí¿ª¹Ø PPAGE Ö¸¶¨P2Öµ

PDATASTART ´ýÇåÍⲿRAMÒ³Ê×Ö· PDATALEN ´ýÇåÍⲿRAMÒ³³¤¶È

Ìáʾ£ºÈç¹ûÒª³õʼ»¯P2×÷Ϊ½ô´Õģʽ¸ß¶ËµØÖ·£¬±ØÐ룺PPAGEENAGLE£½1£¬PPAGEΪP2Öµ£¬ÀýÈçÖ¸¶¨Ä³Ò³1000H£­10FFH£¬ÔòPPAGE£½10H£¬¶øÇÒÁ¬½Óʱ±ØÐëÈçÏ£º L51 PDATA(1080H)£¬ÆäÖÐ1080HÊÇ1000H£­10FFHÖеÄÈÎÒ»¸öÖµ¡£ ÒÔÏÂÊÇSTARTUP.A51´úÂëÆ¬¶Ï£¬ºìÉ«ÊǾ­³£¿ÉÄÜÐèÒªÐ޸ĵĵط½£º ;------------------------------------------------------------------------------

26

; This file is part of the C51 Compiler package ; Copyright KEIL ELEKTRONIK GmbH 1990

;------------------------------------------------------------------------------ ; STARTUP.A51: This code is executed after processor reset. ;

; To translate this file use A51 with the following invocation: ;

; A51 STARTUP.A51 ;

; To link the modified STARTUP.OBJ file to your application use the following ; L51 invocation: ;

; L51 , STARTUP.OBJ ;

;------------------------------------------------------------------------------ ;

; User-defined Power-On Initialization of Memory ;

; With the following EQU statements the initialization of memory ; at processor reset can be defined: ;

; ; the absolute start-address of IDATA memory is always 0 IDATALEN EQU 80H ; the length of IDATA memory in bytes. ;

XDATASTART EQU 0H ; the absolute start-address of XDATA memory

XDATALEN EQU 0H ; the length of XDATA memory in bytes.

27

;

PDATASTART EQU 0H ; the absolute start-address of PDATA memory

PDATALEN EQU 0H ; the length of PDATA memory in bytes. ;

; Notes: The IDATA space overlaps physically the DATA and BIT areas of the ; 8051 CPU. At minimum the memory space occupied from the C51 ; run-time routines must be set to zero.

;------------------------------------------------------------------------------ ;

; Reentrant Stack Initilization ;

; The following EQU statements define the stack pointer for reentrant ; functions and initialized it: ;

; Stack Space for reentrant functions in the SMALL model. IBPSTACK EQU 0 ; set to 1 if small reentrant is used.

IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1. ;

; Stack Space for reentrant functions in the LARGE model. XBPSTACK EQU 0 ; set to 1 if large reentrant is used.

XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1. ;

; Stack Space for reentrant functions in the COMPACT model. PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.

PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1. ;

28

;------------------------------------------------------------------------------ ;

; Page Definition for Using the Compact Model with 64 KByte xdata RAM ;

; The following EQU statements define the xdata page used for pdata ; variables. The EQU PPAGE must conform with the PPAGE control used ; in the linker invocation. ;

PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. PPAGE EQU 0 ; define PPAGE number. ;

;------------------------------------------------------------------------------ 3. ±ê×¼ÊäÈëÊä³öÎļþ putchar.c

putchar.cÊÇÒ»¸öµÍ¼¶×Ö·ûÊä³ö×ӳ̣¬¿ª·¢ÈËÔ±¿ÉÐ޸ĺóÓ¦Óõ½×Ô¼ºµÄÓ²¼þϵͳÉÏ£¬ÀýÈçÏòCLD»òLENÊä³ö×Ö·û¡£

ȱʡ£ºputchar.cÊÇÏò´®¿ÚÊä³öÒ»¸ö×Ö·ûXON|XOFFÊÇÁ÷¿Ø±êÖ¾£¬»»Ðзû¡°\\*n¡±×Ô¶¯×ª»¯Îª»Ø³µ/»»ÐС°\\r\\n¡±¡£ getkey.c

getkeyº¯ÊýÊÇÒ»¸öµÍ¼¶×Ö·ûÊäÈë×ӳ̣¬¸Ã³ÌÐò¿ÉÓõ½×Ô¼ºÓ²¼þϵͳ£¬Èç¾ØÕó¼üÅÌÊäÈëÖУ¬È±Ê¡Ê±Í¨¹ý´®¿ÚÊäÈë×Ö·û¡£ 4. ÆäËüÎļþ

»¹°üÀ¨¶ÔWatch-DogÓжÀÌØ¹¦ÄܵÄINIT.A51º¯ÊýÒÔ¼°¶Ô8¡ÁC751ÊÊÓõĺ¯Êý£¬¿É²Î¿¼Ô´´úÂë¡£

µÚËÄ½Ú ¶ÎÃûЭ¶¨Óë³ÌÐòÓÅ»¯

1. ¶ÎÃûЭ¶¨(Segment Naming Conventions)

29

C51±àÒëÆ÷Éú³ÉµÄÄ¿±êÎļþ´æ·ÅÓÚÐí¶à¶ÎÖУ¬ÕâЩ¶ÎÊÇ´úÂë¿Õ¼ä»òÊý¾Ý¿Õ¼äµÄһЩµ¥Ôª£¬Ò»¸ö¶Î¿ÉÒÔÊÇ¿ÉÖØ¶¨Î»µÄ£¬Ò²¿ÉÒÔÊǾø¶Ô¶Î£¬Ã¿Ò»¸ö¿ÉÖØ¶¨Î»µÄ¶Î¶¼ÓÐÒ»¸öÀàÐͺÍÃû×Ö£¬C51¶ÎÃûÓÐÒÔϹ涨£º

ÿ¸ö¶ÎÃû°üÀ¨Ç°×ºÓëÄ£¿éÃûÁ½²¿·Ö£¬Ç°×º±íʾ´æ´¢ÀàÐÍ£¬Ä£¿éÃûÔòÊDZ»±àÒëµÄÄ£¿éµÄÃû×Ö£¬ÀýÈ磺

£¿CO£¿main1 £º±íʾmain1Ä£¿éÖеĴúÂë¶ÎÖеij£Êý²¿·Ö

£¿PR£¿function1£¿module ±ímoduleÄ£¿éÖк¯Êýfunction1µÄ¿ÉÖ´ÐжΣ¬¾ßÌ广¶¨²ÎÔÄÊֲᡣ 2. ³ÌÐòÓÅ»¯

C51±àÒëÆ÷ÊÇÒ»¸ö¾ßÓÐÓÅ»¯¹¦ÄܵıàÒëÆ÷£¬Ëü¹²ÌṩÁù¼¶ÓÅ»¯¹¦ÄÜ¡£È·±£Éú³ÉÄ¿±ê´úÂëµÄ×î¸ßЧÂÊ(´úÂë×îÉÙ£¬ÔËÐÐËÙ¶È×î¿ì)¡£¾ßÌåÁù¼¶ÓÅ»¯µÄÄÚÈݿɲο¼°ïÖú¡£ ÔÚC51ÖÐÌṩÒÔϱàÒë¿ØÖÆÖ¸Áî¿ØÖÆ´úÂëÓÅ»¯£º OPTIMIZE(SJXE)£º¾¡Á¿²ÉÓÃ×Ó³ÌÐò£¬Ê¹³ÌÐò´úÂë¼õÉÙ¡£

NOAREGS£º²»Ê¹Óþø¶Ô¼Ä´æÆ÷·ÃÎÊ£¬³ÌÐò´úÂëÓë¼Ä´æÆ÷¶Î¶ÀÁ¢¡£

NOREGPARMS£º²ÎÊý´«µÝ×ÜÊÇÔÚ¾Ö²¿Êý¾Ý¶ÎʵÏÖ£¬³ÌÐò´úÂëÓëµÍ°æ±¾C51¼æÈÝ¡£ OPTIMIZE(SIZE)AK OPTIMIZE(speed)Ìṩ6¼¶ÓÅ»¯¹¦ÄÜ£¬È±Ê¡Îª£º OPTIMIZE(6,SPEED)¡£

µÚÎåÕ Keil C51¿âº¯Êý²Î¿¼

C51Ç¿´ó¹¦Äܼ°Æä¸ßЧÂʵÄÖØÒªÌåÏÖÖ®Ò»ÔÚÓÚÆä·á¸»µÄ¿ÉÖ±½Óµ÷ÓõĿ⺯Êý£¬¶àʹÓÿ⺯Êýʹ³ÌÐò´úÂë¼òµ¥£¬½á¹¹ÇåÎú£¬Ò×ÓÚµ÷ÊÔºÍά»¤£¬ÏÂÃæ½éÉÜC51µÄ¿âº¯Êýϵͳ¡£

µÚÒ»½Ú ±¾Õ÷¿âº¯Êý(intrinsic routines)ºÍ·Ç±¾Õ÷Ö¤¿âº¯Êý

C51ÌṩµÄ±¾Õ÷º¯ÊýÊÇÖ¸±àÒëʱֱ½Ó½«¹Ì¶¨µÄ´úÂë²åÈ뵱ǰÐУ¬¶ø²»ÊÇÓÃACALLºÍLCALLÓï¾äÀ´ÊµÏÖ£¬ÕâÑù¾Í´ó´óÌṩÁ˺¯Êý·ÃÎʵÄЧÂÊ£¬¶ø·Ç±¾Õ÷º¯ÊýÔò±ØÐëÓÉACALL¼°LCALLµ÷Óá£

C51µÄ±¾Õ÷¿âº¯ÊýÖ»ÓÐ9¸ö£¬ÊýÄ¿ËäÉÙ£¬µ«¶¼·Ç³£ÓÐÓã¬ÁÐÈçÏ£º

30


Keil C51ʹÓÃÏê½â(6).doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ ÏÂÔØÊ§°Ü»òÕßÎĵµ²»ÍêÕû£¬ÇëÁªÏµ¿Í·þÈËÔ±½â¾ö£¡

ÏÂһƪ£º¶þÒÒ¶þ´¼µ¥¶¡ÃÑÉú²ú¼¼Êõ¼°Êг¡ÐÐÇéÑо¿±¨¸æ

Ïà¹ØÔĶÁ
±¾ÀàÅÅÐÐ
¡Á ×¢²á»áÔ±Ãâ·ÑÏÂÔØ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÂíÉÏ×¢²á»áÔ±

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£º QQ£º