Keil C51 vs ±ê×¼C
ÉîÈëÀí½â²¢Ó¦ÓÃC51¶Ô±ê×¼ANSICµÄÀ©Õ¹ÊÇѧϰC51µÄ¹Ø¼üÖ®Ò»¡£ÒòΪ´ó¶àÊýÀ©Õ¹¹¦Äܶ¼ÊÇÖ±½ÓÕë¶Ô8051ϵÁÐCPUÓ²¼þµÄ¡£´óÖÂÓÐÒÔÏÂ8 Àࣺ 8051´æ´¢ÀàÐͼ°´æ´¢ÇøÓòl; ´æ´¢Ä£Ê½l´æ´¢Æ÷ÀàÐÍÉùÃ÷l±äÁ¿ÀàÐÍÉùÃ÷l λ±äÁ¿ÓëλѰַl ÌØÊ⹦ÄܼĴæÆ÷(SFR)l C51Ö¸Õël º¯ÊýÊôÐÔ¾ßÌå˵Ã÷ÈçÏÂ(8031ΪȱʡCPU)¡£
µÚÒ»½Ú Keil C51À©Õ¹¹Ø¼ü×Ö
C51 V4.0°æ±¾ÓÐÒÔÏÂÀ©Õ¹¹Ø¼ü×Ö(¹²19¸ö)£º_at_ ; idata; sfr16; alien; interrupt; smallbdata; large; _task_; Code; bit; pdatausing; reentrant xdata; compact sbit; data; sfr
µÚ¶þ½Ú ÄÚ´æÇøÓò(Memory Areas)£º
1. Pragram Area£º
ÓÉCode˵Ã÷¿ÉÓжà´ï64kBytesµÄ³ÌÐò´æ´¢Æ÷
2. Internal Data Memory
ÄÚ²¿Êý¾Ý´æ´¢Æ÷¿ÉÓÃÒÔϹؼü×Ö˵Ã÷£ºdata£ºÖ±½ÓÑ°Ö·Çø£¬ÎªÄÚ²¿RAMµÄµÍ128 ×Ö½Ú 00H¡«7FH£¬idata£º¼ä½ÓÑ°Ö·Çø£¬°üÀ¨Õû¸öÄÚ²¿RAMÇø 00H¡«FFH£¬bdata£º¿ÉÎ»Ñ°Ö·Çø£¬20H¡«2FH
3. External Data Memory
ÍⲿRAMÊÓʹÓÃÇé¿ö¿ÉÓÉÒÔϹؼü×Ö±êʶ£ºxdata£º¿ÉÖ¸¶¨¶à´ï64KBµÄÍⲿֱ½ÓÑ°Ö·Çø£¬µØÖ··¶Î§0000H¡«0FFFFHpdata£ºÄÜ·ÃÎÊ1Ò³(25bBytes)µÄÍⲿRAM£¬Ö÷ÒªÓÃÓÚ½ô´Õģʽ(Compact Model)¡£
4. Speciac Function Register Memory
8051Ìṩ128BytesµÄSFRÑ°Ö·Çø£¬ÕâÇøÓò¿ÉλѰ Ö·¡¢×Ö½ÚѰַ»ò×ÖѰַ£¬ÓÃÒÔ¿ØÖƶ¨Ê±Æ÷¡¢¼ÆÊýÆ÷¡¢´®¿Ú¡¢I/O¼°ÆäËü²¿¼þ£¬¿ÉÓÉÒÔϼ¸Öֹؼü×Ö˵Ã÷£ºsfr£º×Ö½ÚѰַ ±ÈÈç sfr P0=0x80;ΪPO¿ÚµØÖ·Îª80H£¬£½;ºóH¡«FFHÖ®¼äµÄ³£Êý¡£sfr16£º×ÖѰַ£¬Èçsfr16 T2=0xcc;Ö¸¶¨Timer2¿ÚµØÖ·T2L=0xcc T2H=0xCDsbit£ºÎ»Ñ°Ö·£¬Èçsbit EA=0xAF;Ö¸¶¨µÚ0xAFλΪEA£¬¼´ÖжÏÔÊÐí»¹¿ÉÒÔÓÐÈç϶¨Òå·½·¨£ºsbit 0V=PSW^2£»(¶¨Òå0VΪPSWµÄµÚ2λ)sbit 0V£½0XDO^2£»(ͬÉÏ)»òbit 0V-£½0xD2(ͬÉÏ)¡£
µÚÈý½Ú ´æ´¢Ä£Ê½
´æ´¢Ä£Ê½¾ö¶¨ÁËûÓÐÃ÷È·Ö¸¶¨´æ´¢ÀàÐ͵ıäÁ¿£¬º¯Êý²ÎÊýµÈµÄȱʡ´æ´¢ÇøÓò£¬¹²ÈýÖÖ£º
1. Smallģʽ
ËùÓÐȱʡ±äÁ¿²ÎÊý¾ù×°ÈëÄÚ²¿RAM£¬ÓŵãÊÇ·ÃÎÊËٶȿ죬ȱµãÊǿռäÓÐÏÞ£¬Ö»ÊÊÓÃÓÚС³ÌÐò¡£
2. Compactģʽ
ËùÓÐȱʡ±äÁ¿¾ùλÓÚÍⲿRAMÇøµÄÒ»Ò³(256Bytes)£¬¾ßÌåÄÄÒ»Ò³¿ÉÓÉP2¿ÚÖ¸¶¨£¬ÔÚSTARTUP.A51ÎļþÖÐ˵Ã÷£¬Ò²¿ÉÓÃpdataÖ¸¶¨£¬ÓŵãÊǿռä½ÏSmallΪ¿íÔ£ËٶȽÏSmallÂý£¬½ÏlargeÒª¿ì£¬ÊÇÒ»ÖÖÖмä״̬¡£
3. largeģʽ
ËùÓÐȱʡ±äÁ¿¿É·ÅÔÚ¶à´ï64KBµÄÍⲿRAMÇø£¬ÓŵãÊǿռä´ó£¬¿É´æ±äÁ¿¶à£¬È±µãÊÇËٶȽÏÂý¡£Ì
Ïà¹ØÎĵµ£º
¡¾ÔÐÍ¡¿
type fun( type arg1, type arg2, ...
);
¡¾ÃèÊö¡¿
Ö÷ÒªÓÃÔÚ²ÎÊý¸öÊý²»È·¶¨µÄº¯ÊýÖУ¬ÀýÈ磺printfº¯Êý¡£
¡¾Ê¹Ó÷½·¨¡¿
²Î¿¼£ºglib/manual/Add.c
#include <stdarg.h>
#include <stdio.h>
int add_em_up (int coun ......
ÕâһϵÁÐÎÄÕÂÊÇÎÒ¹¹½¨C/C++²å¼þ¿ª·¢¿ò¼Ü¿ª·Å¿ò¼ÜµÄ¹ý³Ì¡£ºóÃæ»áÒ»Ö±¸üУ¬Ö±ÖÁ¹¹½¨Íê³É¡£
¡¶¹¹½¨×Ô¼ºµÄC/C++²å¼þ¿ª·¢¿ò¼Ü£¨Ò»£©——³õ²½ÉèÏë¡·
¡¶¹¹½¨×Ô¼ºµÄC/C++²å¼þ¿ª·¢¿ò¼Ü£¨¶þ£©——×ÜÌ幦ÄÜ¡·
¡¶
¹¹½¨×Ô¼ºµÄC/C++²å¼þ¿ª·¢¿ò¼Ü£¨Èý£©——×ÜÌå½á¹¹
¡·
¡¶¹¹½¨×Ô¼ºµÄC/C++²å¼þ¿ª·¢¿ò¼ ......
char* my_strrev( char* string )
{
char *left, *right, ch;
left = right = string;
while( *right++ != '\0');
right -= 2;
while( left<right )
{
ch = *left;
*left = *right;
*right = ch;
++left; --right;
&n ......
1.ÒýÑÔ
¡¡¡¡C++ÓïÑԵĴ´½¨³õÖÔÊÇ“a better C”£¬µ«ÊÇÕâ²¢²»Òâζ×ÅC++ÖÐÀàËÆCÓïÑÔµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýËù²ÉÓõıàÒëºÍÁ¬½Ó·½Ê½ÓëCÓïÑÔÍêÈ«Ïàͬ¡£×÷ΪһÖÖÓûÓëC¼æÈݵÄÓïÑÔ£¬C++±£ÁôÁËÒ»²¿·Ö¹ý³ÌʽÓïÑÔµÄÌØµã£¨±»ÊÀÈ˳ÆÎª“²»³¹µ×µØÃæÏò¶ÔÏ󔣩£¬Òò¶øËü¿ÉÒÔ¶¨Òå²»ÊôÓÚÈκÎÀàµÄÈ«¾Ö±äÁ¿ºÍº¯Êý¡£µ«ÊÇ£¬C++±Ï¾ ......