51 C 51 51 C C C C C C * 2003-3-30 pnzwzw@163.com C C C C KEIL uvision2 MCS51 PLM C VC++ 51 KEIL51 KEIL51 KEIL51 KEIL 2K DEMO C KEIL KEIL51 P 1 1 1 1-1 -
1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project 1 3 2 Ateml AT89C51 1 4 AT89C51 3 KEIL Demo C C 1 5 1 2 File - 2 -
New Ctrl+N #include <AT89X51.H> #include <stdio.h> void main(void) SCON = 0x50; // 1, TMOD = 0x20; // 1 2 TCON = 0x40; // 1 TH1 = 0xE8; //11.0592MHz 1200 TL1 = 0xE8; TI = 1; TR1 = 1; // while(1) printf ("Hello World!\n"); // Hello World 1 4-3 -
1 5 Hello World! 4 1 5 3 File Save Ctrl+S 1 3 test1.c KEIL C 1 6 Source Group1 Add File to Group Source Group 1 ADD Source Group1 + 1 6-4 -
5 C HEX HEX 1 7 1 2 3 1 2 3 3 5 123 4 6 \ Debug Start\Stop Debug Session Ctrl+F5 1 7 (6) 1 8 1 2 3 4 5 51 4 Hello World C \ KEIL KEIL uvision2-5 -
1 8 51 C PC C C C PC C 51 51 MSC51 51 Atmel AT89C51 AT89C2051 AT89 51 P - 6 -
2 1 AT89C51 AT89C2051 AT89C51 AT89C2051 4KB Flash 1000 2KB Flash 1000 :0Hz-24MHz 128 RAM 2 16 / :0Hz-24MHz 128 RAM 2 16 / 6 6 32 I/O 15 I/O 2 1 1 AT89C51 AT89C2051 2 1 AT89C51 AT89C2051 2 1 AT89C2051 IO RAM ROM Flash AT89C51 AT89C51 1. Vcc 40 GND 20 5V AT89LV51 2.7-6V, 2. - 7 -
2 2 XTAL1 19 XTAL2 18 XTAL1 XTAL2 XTAL1 XTAL2 12MHz 6MHz 1MHz-24MHz 30PF AT89C51 12,16,20,24MHz AT89C51 24PC 24MHz,40P6 3. RST 9 24 51 P0 P3 1 SFR ROM 00H 2 3 RAM - 8 -
2 3 4. (1) P0 [P0.0-P0.7] P0 8 I/O 1 1 8 TTL Flash ; P0 ( 8 )/ (2) P1 [P1.0 P1.7] P1 8 I/0 4 TTL 1 Flash 8 (3) P2 [P2.0 P2.7] P2 8 I/0 4 TTL 1 Flash 8 16 P2 8 8 (4) P3 [P3.0 P3.7] P2 8 I/0 4 TTL 1 Flash P3 2 2. P1 3 P3 P3.0 RXD P3.1 TXD P3.2 0 INT0-9 -
P3.3 1 INT1 P3.4 0 (T0) P3.5 1 (T1) P3.6 WR P3.7 RD 2 2 P3 4.7 10K Vcc GND 5. (1) ALE/PROG 30 ALE ALE ( 1/6) ALE Flash PROG (2) PSEN 29 AT89C51 2 (3) EA/Vpp 31 AT89C51 0000H-FFFFH, Flash Vpp Vpp 2 3 Vpp = 12V AT89C51 AT89LV51 xxxx xxxx YYWW YYWW Vpp = 5V AT89C51 AT89LV51 xxxx-5 xxxx-5 YYWW YYWW 030H=1EH 030H=1EH 030H=1EH 030H=1EH 031H=51H 031H=61H 031H=51H 031H=61H 032H=FFH 032H=FFH 032H=05H 032H=05H 2 3 Vpp AT89C51 C HEX C KEIL uvision2 HEX HEX Intel,, 16, - 10 -
test.uv2 3 1 1 Options for Target Target1, Project Output 3 2 1 2 3 HEX HEX 3 3 3 1 1 Project 3 1-11 -
3 2 3 3 PC Windows, 1200 Hello World! AT89C51 3 4 AT89C51, LED 11.0592MHz 12MHz, 1 VCC +5V 31 OneLED - 12 -
http://www.cdle.net #include <AT89X51.h> // void main(void) // // unsigned int a; // a int /* */ do //do while for (a=0; a<50000; a++); // P1_0 = 0; // P1.0 LED for (a=0; a<50000; a++); // P1_0 = 1; // P1.0 LED while(1); 3 4 AT89C51 KEIL C // - 13 -
/* */ C C main main main main OneLED LED IO 1 for (a=0; a<50000; a++) LED LED C C 1 Timer1 TIMER1 1Timer C51 32 P KEIL uvision2 ANSI C 32 51 KEIL uvision2 C 1-1 1-2 4 1 KEIL uvision2 C51 C char,int,short,long,float double C51 int short float double unsigned char 0 255 signed char -128 +127 unsigned int 0 65535 signed int -32768 +32767 unsigned long 0 4294967295 signed long -2147483648 +2147483647 float 1.175494E-38 3.402823E+38 * 1 3 bit 0 1 sfr 0 255 sfr16 0 65535 sbit 0 1 4 1 KEIL uvision2 C51 1 char - 14 -
char unsigned char signed char signed unsigned char 0 255 signed char 0 1-128 +127 unsigned char ASCII 255 1 2 int int int signed int unsigned int signed signed int -32768 +32767 0 1 unsigned int 0 65535 unsigned char unsigned int LED 4 1 D1 unsigned int D2 unsigned char 4 1 4-15 -
TwoLED, #include <AT89X51.h> // void main(void) // unsigned int a; // a unsigned int unsigned char b; // b unsigned char do //do while for (a=0; a<65535; a++) P1_0 = 0; //65535 P1.0 LED P1_0 = 1; // P1.0 LED for (a=0; a<30000; a++); // for (b=0; b<255; b++) P1_1 = 0; //255 P1.1 LED P1_1 = 1; // P1.1 LED for (a=0; a<30000; a++); // while(1); D1 D2 b 0 255 for (b=0; b<255; b++) for (b=0; b<256; b++), b 256 P1_1 = 1 a 0 65535 3 long long long signed long unsigned long signed signed int -2147483648 +2147483647 0 1 unsigned long 0 4294967295 4 float float 7 IEEE 754-16 -
5 * C51 1 3 6 bit bit C51 0 1 Boolean True False 7 sfr sfr 0 255 51 sfr P1 = 0x90 P1 P1 P1 = 255 P1 AT89C51 8 sfr16 16 sfr16 0 65535 sfr16 sfr T0 T1 9 sbit sbit C51 RAM sfr P1 = 0x90; // P1 sbit P1_1 = P1 1; //P1_1 P1 P1.1 // P1.1, sbit P1_1 = 0x91; P1_1 P1.1 KEIL C51 C51-17 -
1 123,0 89 0x 0x34,-0x3B L 104L 034L 0xF340 2 0.888,3345.345,0.0 0 [ ] [. ]e[ ] [], 125e3,7e9,-3.0e-3 3 a, d 5 1 4 test, OK C o A A 5 o n r t b f ASCII 16/10 (NULL) 00H/0 (LF) (CR) 0AH/10 0DH/13 (HT) 09H/9 (BS) 08H/8 (FF) 0CH/12 ' 27H/39 " 22H/34 5CH/92 5 1, #difine False 0x0; // #difine True 0x1; // False 0,True 1 // False 0 True 1 unsigned int code a=100; // code a const unsigned int c=100; // const c int a=110 a++ 6 LED P1 LED 5 1 RunLED - 18 -
#include <AT89X51.H> // P1 P1 void main(void) // const unsigned char design[32]=0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF, 0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0, 0xE7,0xDB,0xBD,0x7E,0xFF; unsigned int a; // unsigned char b; // C51 // do for (b=0; b<32; b++) for(a=0; a<30000; a++); // P1 = design[b]; // P1 while(1);, LED AT89C51 P1 P1 O LED P1 P1 P1 0xFE, 11111110, D0 0 P1.0 LED1 a KEIL uvision2 IO - 19 -
5 1 Peripherals I/O Ports Port1 Port1 5 3 2 Port1 5 3 1 5 2 1 / / Breakpoints P1 = design[b]; Port1 5-2 2 Port1 Port1 P1 P1 P1 Pins 1 5 2 2 3 5 3 3 Watches design RAM D:0x08, 4 Memory Address D:0x08 design uvision2 View 5 2 3-20 -
5 2 5 3 [ ] [ ] auto, extern, static register (auto) C51 6 1 KEIL uvision2 AT89C51 RAM 128 80H FFH 128 52 SFR AT89C51-21 -
data bdata idata pdata xdata code 128 ), 16 256 256 MOVX @Ri (64KB) MOVX @DPTR 64KB, MOVC @A+DPTR 6 1 SMALL,COMPACT LARGE 8051 SMALL 8051 SMALL data COMPACT 8051 256 @R0/R1 LARGE 8051 64KB DPTR sfr,sfr16,sbit sfr sfr16 51 sfr = ; sfr16 = ; AT89C51 P1 sfr P1 = 0x90; // P1 I/O 90H sfr P1 P1 80H FFH sfr 8 sfr16 8052 T2 sfr16 T2 = 0xCC; // 8052 2 T2L=CCH,T2H=CDH sfr16 16 0 1 sbit P1 2 P1.1 : (1)sbit sbit P1_1 = Ox91; sfr sbit 80H-FFH (2)Sbit ^ - 22 -
sft P1 = 0x90; sbit P1_1 = P1 ^ 1; // (3)sbit ^ sbit P1_1 = 0x90 ^ 1; 2 C51 bdata bdata, : unsigned char bdata ib; // ucsigned char ib int bdata ab[2]; // ab[2] sbit ib7=ib^7 // sbit sbit ab12=ab[1]^12; char0-7,int0-15,long0-31 RunLED2 : sfr P1 = 0x90; // sbit P1_0 = P1 ^ 0; // sbit P1_7 = 0x90 ^ 7; // sbit P1_1 = 0x91; // P1 P10,P11,P17 void main(void) unsigned int a; unsigned char b; do for (a=0;a<50000;a++) P1_0 = 0; // P1_0 for (a=0;a<50000;a++) P1_7 = 0; // P1_7 for (b=0;b<255;b++) for (a=0;a<10000;a++) P1 = b; // b P1 = 255; // P1 LED for (b=0;b<255;b++) for (a=0;a<10000;a++) //P1_1 P1_1 = 0; for (a=0;a<10000;a++) P1_1 = 1; while(1); - 23 -
1, www.cdle.net, 2003-7-14, typedef DELPHI DELPHI int Integer C51 typedef int integer; integer a,b; integer int integer,integer int, a,b int typedef typedef int integer; integer = 100; typedef typedef typedef typedef C = C x=10; = = a = 0xFF; // FF a b = c = 33; // b,c d = e; // e d f = a+b; // a+b f = - 24 -
== = if (a=x) = == == a+b,a/b C + / C51 + - * / % 1 2 a+b*(10-a), (x+9)/(y-a) 10.0/20.0 0.5 7/3 2 C ++ -- C VB PASCAL 1 1 1 1 I++ ++I I-- --I I++ I-- I I+1 I-1 ++I --I I+1 I-1 I :( PC MAX232 TTL RS232 MAX232 http://www.cdle.net MAX232-25 -
7 1 MAX232 7 3 MAX232 P DB9 PC com 7 2 DB9-26 -
7 3 MAX232 Hello World Hello! DOWN Windows http://emouze.com comdebug Hello World! - 27 -
7-4 2 C C == VB PASCAL =,!= not P 2 0 1 1 0 1 2 I J I==J,(I=4)>(J=3),J+I>J - 28 -
#include <AT89X51.H> #include <stdio.h> void main(void) int x,y; SCON = 0x50; // 1, TMOD = 0x20; // 1 2 TH1 = 0xE8; //11.0592MHz 1200 TL1 = 0xE8; TI = 1; TR1 = 1; // while(1) printf("! Robot!! n"); // printf(" int,x Y n"); // scanf("%d%d",&x,&y); // if (x < y) printf("x<y n"); // X Y else // X Y if (x == y) printf("x=y n"); // X Y else printf("x>y n"); // X Y PC scanf Printf,scanf www.cdle.net C51-29 -
0 1 1 && 2 1 2 :! 2 7-5 1 2 0 0 1 0 2 1 0 1 2! &&,!True False && True True False!True False && True False False && True //!Ture False False False //False && True False False // False False False - 30 -
#include <AT89X51.H> #include <stdio.h> void main(void) unsigned char True = 1; // unsigned char False = 0; SCON = 0x50; // 1, TMOD = 0x20; // 1 2 TH1 = 0xE8; //11.0592MHz 1200 TL1 = 0xE8; TI = 1; TR1 = 1; // if (!True False && True) printf("true n"); // else printf("false n"); // keil!true False && True 3 C C C51 6 1 2 : ~ ( ) << ( ) >> ( ) & ( ) ^ ( ) ( ) 7 1 X 1 Y 2 X Y ~X ~Y X&Y X Y X^Y 0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 1 1 1 1 0 0 1 1 0 7 1-31 -
P1 P1.0-P1.7 P1 P1 LED #include <at89x51.h> void main(void) unsigned int a; unsigned int b; unsigned char temp; // P1 = 0xAA; // D1,D3,D5,D7 P1 10101010, 0 LED for (a=0;a<1000;a++) for (b=0;b<1000;b++); // temp = P1 & 0x7; // P1 0x7 // P1 0x7 temp P1 // LED D1,D3,D5,D7 for (a=0;a<1000;a++) for (b=0;b<1000;b++); // P1 = 0xFF; // LED for (a=0;a<1000;a++) for (b=0;b<1000;b++); // P1 = 0xAA; // D1,D3,D5,D7 P1 10101010, 0 LED for (a=0;a<1000;a++) for (b=0;b<1000;b++); // P1 = P1 & 0x7; // LED D2 // P1=0xAA=10101010 // 0x7 0x7=00000111 // P1 P1=00000010 // O LED for (a=0;a<1000;a++) for (b=0;b<1000;b++); // P1 = 0xFF; // LED while(1); // = C += >>= -= &= *= = - 32 -
/= ^= %= -= <<= C a+=56 a=a+56 y/=x+9 y=y/(x+9) C VB Dim a,b,c C int a,b,c, C 1 2 3 n n C?: :? 1 : 2 0 1 0 2 1 2 a=1,b=2 ab min if (a<b) min = a; else min = b; // a<b min a b - 33 -
min = (a<b) a : b C C C * & = * = & unsigned int ABC CBA 0x0028,0x002A porta 0x002C *,& unsigned int data ABC _at_ 0x0028; unsigned int data CBA _at_ 0x002A; unsigned int data *Port _at_ 0x002C; #include <at89x51.h> #include <stdio.h> void main(void) SCON = 0x50; // 1, TMOD = 0x20; // 1 2 TH1 = 0xE8; //11.0592MHz 1200 TL1 = 0xE8; TI = 1; TR1 = 1; // ABC = 10; // CBA = 20; - 34 -
Port = &CBA; // CBA Port *Port = 100; // Port printf("1: CBA=%d n",cba); // CBA Port = &ABC; // ABC Port CBA = *Port; // Port CBA printf("2: CBA=%d n",cba); // CBA printf(" ABC=%d n",abc); // ABC 0x00 0x00 0x00 0x00 0x0A 0x00 0x002DH 0x002CH 0x002BH 0x002AH 0x0029H 0x0028H ABC = 10; ABC 0x28H 10(0xA) ABC int 0x28H 0x29H 0x28H 0x00 0x29H 0x0A 0x00 0x00 0x00 0x00 0x002DH 0x002CH 0x002BH 0x002AH 0x0A 0x0029H ABC int 0x00 0x0028H CBA = 20; 0x00 0x00 0x002DH 0x002CH 0x14 0x002BH CBA int 0x00 0x002AH 0x0A 0x0029H ABC int 0x00 0x0028H - 35 -
Port = &CBA; CBA Port 0x00 0x002DH 0x2A 0x002CH CBA Port 0x14 0x00 0x0A 0x00 0x002BH 0x002AH 0x0029H 0x0028H *Port = 100; Port 0x00 0x2A 0x002DH 0x002CH 0x64 0x002BH Port CBA 2AH 0x00 0x002AH 100 0x0A 0x00 0x0029H 0x0028H Keil 7 6 7 7-36 -
sizeof size sizeof sizeof ( ) sizeof ( ) printf("char? %bd n",sizeof(char)); printf("long? %bd n",sizeof(long)); : char? 1 long? 4 void main(void) unsigned char a; unsigned int b; b=100*4; a=b; while(1); a 100*4 a b char int char 255-37 -
7 8 b=100*4 b=0x190, Watches a watches 5 Locals watch 1 watch#1( watch#2), 2 F2 a 0x90 b 8 1 INT CHAR CHAR INT 8 2 char int 3 float float long long unsigned unsigned C51 char,int,long float ( ) #include <at89x51.h> #include <stdio.h> void main(void) char xdata * XROM; char a; int Aa = 0xFB1C; long Ba = 0x893B7832; float Ca = 3.4534; SCON = 0x50; // 1, TMOD = 0x20; // 1 2 TH1 = 0xE8; //11.0592MHz 1200 TL1 = 0xE8; TI = 1; TR1 = 1; // XROM=(char xdata *) 0xB012; // XROM *XROM = R ; // XROM a = *((char xdata *) 0xB012); // a = *XROM printf ( %bx %x %d %c n,(char) Aa, (int) Ba,(int)Ca, a);// while(1); - 38 -
1c 7832 3 R XDATA XROM XROM=(char xdata *) 0xB012 0xB012 XROM #define ROM 0xB012 ROM 0xB012 C (1) C C C VB VB 51 C ; b = b * 10; Count++; X = A;Y = B; Page = (a+b)/a-1; Email ; ; C ; (1)while,for ; for (;a<50000;a++); a 0( a a a ) for (;a<50000;a++); for (a=0;a<50000;a++); (2) goto while P3.7 P1 8 1-39 -
#include <AT89x51.h> 8-1 void main(void) unsigned int a; do P1 = 0xFF; // P1 LED while(p3_7); // P3_7 P1 = 0; // LED for(;a<60000;a++); //, a // while(1); // P3_7, - 40 -
(2) BBS C,[],() VB () C ; C #include <at89x51.h> #include <stdio.h> void main(void) unsigned int a,b,c,d; // main? SCON = 0x50; // 1, TMOD = 0x20; // 1 2 TH1 = 0xE8; //11.0592MHz 1200 TL1 = 0xE8; TI = 1; TR1 = 1; // a = 5; b = 6; c = 7; d = 8; // printf("0: %d,%d,%d,%d n",a,b,c,d); // 1 unsigned int a,e; // 1 a = 10,e = 100; printf("1: %d,%d,%d,%d,%d n",a,b,c,d,e); // 2 unsigned int b,f; // 2 b = 11,f = 200; printf("2: %d,%d,%d,%d,%d,%d n",a,b,c,d,e,f); - 41 -
// 2 printf("1: %d,%d,%d,%d,%d n",a,b,c,d,e); // 1 printf("0: %d,%d,%d,%d n",a,b,c,d); while(1); 0 5,6,7,8 1: 10,6,7,8,100 2: 10,11,7,8,100,200 1: 10,6,7,8,100 0 5,6,7,8 (3) C XX XX XX if C 3 : 1: if ( ) if (a==b) a++; a b a 1 2: if ( ) 1 else 2 1 2 if (a==b) a++; else a--; a b a 1 a-1 3 if ( 1) 1 else if ( 2) 2 else if ( 3) 3 else if ( m) n else m if else if else else if - 42 -
(4) switch ( ) case 1: 1; break; case 2: 2; break; case 3: 3; break; case n: n; break; default: switch case break switch case default default printf C 1K scanf 2K 2K AT89C2051 51 PC AT89C51 PC AT89C51 IO ( ) http://www.cdle.net PC LED /*---------------------------------------- CDLE-J20_Main.c PC IO IO V2.0 PC DLL http://www.cdle.net Copyright 2003 http://www.cdle.net All rights reserved. E-mail: pnzwzw@163.com pnzwzw@cdle.net ----------------------------------------*/ - 43 -
#include <AT89X51.h> static unsigned char data CN[4]; static unsigned char data CT; unsigned char TS[8] = 254,252,248,240,224,192,128,0; void main(void) void InitCom(unsigned char BaudRate); void ComOutChar(unsigned char OutData); void CSToOut(void); void CNToOut(void); unsigned int a; CT = 0; // CN[0] = 0; CN[1] = 51; CN[2] = 51; CN[3] = 0; InitCom(6); // 9600 1-8 300 57600 EA = 1; ES = 1; // do for (a=0; a<30000; a++) P3_6 = 1; for (a=0; a<30000; a++) // P3_6 = 0; while(1); // 11.0592M 1 300 57600 void InitCom(unsigned char BaudRate) unsigned char THTL; switch (BaudRate) case 1: THTL = 64; break; // 300 case 2: THTL = 160; break; //600 case 3: THTL = 208; break; //1200-44 -
51 C case 4: THTL = 232; break; //2400 case 5: THTL = 244; break; //4800 case 6: THTL = 250; break; //9600 case 7: THTL = 253; break; //19200 case 8: THTL = 255; break; //57600 default: THTL = 208; SCON = 0x50; // 1, TMOD = 0x20; // 1 2 TCON = 0x40; // 1 TH1 = THTL; TL1 = THTL; PCON = 0x80; //,SMOD RI = 0; // TI = 0; TR1 = 1; // // void ComOutChar(unsigned char OutData) SBUF = OutData; // while(!ti); // TI = 0; // TI // void ComInINT(void) interrupt 4 using 1 if (RI) // if (CT>3) CT = 0; // CN[0] = 0; CN[1] = 51; CN[2] = 51; CN[3] = 0; CN[CT] = SBUF; CT++; RI = 0; //RI if (CN[0]==0x61 && CN[3]==0x61) // axxa - 45 -
//a ID CSToOut(); // // // void CSToOut(void) unsigned char data a; unsigned int data b; switch(cn[1]) //axxa X,0 P0 1 P1 2 P2 3 2 X 3 XX 33 //XX 44 5 5 case 0: // X 3 X P0 = CN[2]; CNToOut(); break; case 1: P1 = CN[2]; CNToOut(); break; case 2: P2 = CN[2]; CNToOut(); break; case 3: P0 = 0xFF; P1 = 0xFF; P2 = 0xFF; CNToOut(); break; case 4: P0 = 0xFF; P1 = 0xFF; P2 = 0xFF; for (a=0; a<8; a++) P0 = TS[a]; for (b=0; b<50000; b++); - 46 -
P0 = 0xFF; for (a=0; a<8; a++) P1 = TS[a]; for (b=0; b<50000; b++); P1 = 0xFF; for (a=0; a<4; a++) P2 = TS[a]; for (b=0; b<50000; b++); P2 = 0xFF; CNToOut(); break; case 5: // CN[2] switch(cn[2]) case 0: ComOutChar(CN[0]); ComOutChar(CN[1]); ComOutChar(P0); ComOutChar(CN[3]); break; case 1: ComOutChar(CN[0]); ComOutChar(CN[1]); ComOutChar(P1); ComOutChar(CN[3]); break; case 2: ComOutChar(CN[0]); ComOutChar(CN[1]); ComOutChar(P2); ComOutChar(CN[3]); break; case 3: ComOutChar(CN[0]); ComOutChar(CN[1]); ComOutChar(P3); ComOutChar(CN[3]); break; - 47 -
51 C break; void CNToOut(void) ComOutChar(CN[0]); ComOutChar(CN[1]); ComOutChar(CN[2]); ComOutChar(CN[3]); CSToOut CN[1] IO CN[1]=0 CN[2] P0 CN[1]=1 P1 if (CN[1]==0) IO InitCom void InitCom(unsigned char BaudRate) InitCom(6), 9600 SCON TCON TMOD SCOM 51 AT89C51 SBUF SBUF SBUF 99H CPU SBUF SBUF 99H sfr sfr SBUF = 0x99; reg51.h at89x51.h #include SCON SCON 51 98H 51 51 SCON MSB LSB SM0 SM1 SM2 REN TB8 RB8 TI RI 8 1 SCON - 48 -
SM0 SM1 8 2 SM0 SM1 0 0 0 fosc/12 0 1 1 8 UART 1 0 2 9 UART fosc/32 fosc/64 1 1 3 9 UART 8 2 1 fosc UART (Universal Asynchronous Receiver SM2 2 3 0 0 REM REM 1 0 REM P3.0,P3.1 REM=0 REM=1 REM=0 TB8 8 2 3 9 RB8 8 2 3 9 / 0 RB8 1 SM2=0 RB8 TI 0 8 TI CPU TI SBUF TI=1 RI 0 8 RI=1 CPU 1 SM2=1 RI RI 1 10 1 0,8 1 1 1 2 AT89C51 AT89C2051 51 0 1 2 89C52 9600 9600 9600 8 1 10 9600-49 -
1 9600 10 960 51 0 fosc/12 12M 1M 2 fosc/64 fosc/32 PCON SMOD SMOD 0 focs/64,smod 1 focs/32 1 3 1 2 52 2SMOD 32 1 PCON SMOD 1 2 1 2 TL1 TH1 TH1 TL1 2 1 /(256 TH1) 51 TH 51 1/12 12M 51 51 1M 11.0592M 9600 11.0592M 12M 1 2 SMOD 1 TH1 11.0592M 9600 (2 32) ((11.0592M/12)/(256-TH1)) TH1 250 // 12M 9600 (2 32) ((12M/12)/(256-TH1)) TH1 249.49 12M TH1 TH1 9600 11.0592M http://www.cdle.net/alldata/mywz/04032401_1.htm - 50 -