2.1单片机的基本组成结构数据总线DB――由P0口组成8位的数据总线。地址总线AB――从P0口输出低8位地址,经373锁存器锁存作为低位地址A0-A7,由P2口输出高8位地址A8-A15组成A0-A15共16位的地址总线。控制总线CB――由RST,/EA,/PSEN,ALE,以及/WR,/RD等组成。总线结构非总线结构P0口80HP0.0点亮闪烁•#includereg51.h//预处理命令,定义SFR的头文件•sbitkey=P3^0;//key为P3中的P3.0引脚•sbitled=P0^0;//led为P0中的P0.0引脚•voiddelay(unsignedcharx)//延时函数名•{•unsignedchari;//定义变量i的类型•while(x--)//x自减1•{•for(i=0;i123;i++){;}//循环•}•}•voidmain()//主函数名•{•while(1)/设置死循环•{•if(key==0)//判断有无按键,若出现按键为低电平,则执行下面的语句•{•led=0;//给led置0,熄灭led•delay(130);//调用延时程序•led=1;//点亮led•delay(130);//调用延时程序•}•else•led=1;//初始化led,点亮灯•}•}P1口90H扬声器蜂鸣器P1.0•#includereg51.h//预处理命令,定义SFR的头文件•sbitbeep=P1^7;//beep为P1中的P1.7引脚•voiddelay(unsignedcharx)//延时函数名•{•unsignedchari;//定义变量i的类型•while(x--)//x自减1•{•for(i=0;i123;i++){;}//循环•}•}•voidmain()//主函数名•{•while(1)//设置死循环•{•unsignedchari;//定义变量i的类型•for(i=0;i40;i++)//设置40次循环•{•beep=~beep;//蜂鸣器端口取反•delay(100);//调用延时程序•}•}•}P2口A0H•#includereg51.h//预处理命令,定义SFR的头文件•unsignedchartab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};•//定义数码管显示断码表•voiddelay(unsignedintx)//延时函数名•{•unsignedchari;//定义变量i的类型•while(x--)//x自减1•{•for(i=0;i123;i++){;}//控制延时的循环•}•}•voidmain()//主函数名•{•unsignedchars;//定义变量s的类型,用于控制奇数代码选择•while(1)//设置死循环•{•P2=tab[s];//在P2口显示数值•delay(1000);//调用延时程序•s++;•if(s==10)//判断计数值是否为10•{•s=0;//若计数满10就清零,重新开始计数•}•}•}P3口B0HP3口的第二功能P3.0——RXD,串行输入口。P3.l——TXD,串行输出口。P3.2——外部中断0的请求。P3.3——外部中断1的请求。P3.4——T0,定时器/计数器0外部计数脉冲输入。P3.5——T1,定时器/计数器1外部计数脉冲输入。P3.6——外部数据存储器写选通,输出,低电平有效。P3.7——外部数据存储器读选通,输出,低电平有效•#includereg51.h//预处理命令,定义SFR的头文件•sbitjidianqi=P3^0;//P3.0引脚驱动继电器•voiddelay(unsignedintx)//延时函数•{•unsignedchari;//定义变量i的类型•while(x--)//x自减1•{•for(i=0;i123;i++){;}//控制延时时间循环•}•}•voidmain()//主函数名•{•while(1)//设置死循环•{•jidianqi=1;//设置继电器为高电平,使灯灭•delay(1500);//调用延时程序•jidianqi=0;//设置继电器为低电平,使灯亮•delay(1500);//调用延时程序•}•}2.5I/O口的应用特性(1)所有32个端口均带输出锁存器,都可作普通I/O口用。(2)P0口为双向口,可驱动8个TTL门,P1-P3为准双向口,只能驱动4个TTL门。(3)P0口作普通I/O口时需外接上拉电阻。(4)所有I/O作输入口用时需“先写1后读”。