Æô¶¯Îļþ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
;------------------------------------------------------------------------------ ;
; 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