《8051单片机C语言编程模板》[程序开始处的程序说明]/*********************************************************************************************程序名:编写人:赛杜洋编写时间:20年月日硬件支持:接口说明:修改日志:NO.1-/*********************************************************************************************说明:/*********************************************************************************************/[单片机SFR定义的头文件]#includeREG51.h//通用89C51头文件#includeREG52.h//通用89C52头文件#includeSTC11Fxx.H//STC11Fxx或STC11Lxx系列单片机头文件#includeSTC12C2052AD.H//STC12Cx052或STC12Cx052AD系列单片机头文件#includeSTC12C5A60S2.H//STC12C5A60S2系列单片机头文件[更多库函数头定义]#includeassert.h//设定插入点#includectype.h//字符处理#includeerrno.h//定义错误码#includefloat.h//浮点数处理#includefstream.h//文件输入/输出#includeiomanip.h//参数化输入/输出#includeiostream.h//数据流输入/输出#includelimits.h//定义各种数据类型最值常量#includelocale.h//定义本地化函数#includemath.h//定义数学函数#includestdio.h//定义输入/输出函数#includestdlib.h//定义杂项函数及内存分配函数#includestring.h//字符串处理#includestrstrea.h//基于数组的输入/输出#includetime.h//定义关于时间的函数#includewchar.h//宽字符处理及输入/输出#includewctype.h//宽字符分类#includeintrins.h//51基本运算(包括_nop_空函数)[常用定义声明]sfr[自定义名]=[SFR地址];//按字节定义SFR中的存储器名。例:sfrP1=0x90;sbit[自定义名]=[系统位名];//按位定义SFR中的存储器名。例:sbitAdd_Key=P3^1;bit[自定义名];//定义一个位(位的值只能是0或1)例:bitLED;#define[代替名][原名]//用代替名代替原名。例:#defineLEDP1/#defineTA0x25unsignedchar[自定义名];//定义一个0~255的整数变量。例:unsignedchara;unsignedint[自定义名];//定义一个0~65535的整数变量。例:unsignedinta;[定义常量和变量的存放位置的关键字]data字节寻址片内RAM,片内RAM的128字节(例:dataunsignedchara;)bdata可位寻址片内RAM,16字节,从0x20到0x2F(例:bdataunsignedchara;)idata所有片内RAM,256字节,从0x00到0xFF(例:idataunsignedchara;)pdata片外RAM,256字节,从0x00到0xFF(例:pdataunsignedchara;)xdata片外RAM,64K字节,从0x00到0xFFFF(例:xdataunsignedchara;)codeROM存储器,64K字节,从0x00到0xFFFF(例:codeunsignedchara;)[选择、循环语句]if(1){//为真时语句}else{//否则时语句}--------------------------while(1){//为真时内容}--------------------------do{//先执行内容}while(1);--------------------------switch(a){case0x01://为真时语句break;case0x02://为真时语句break;default://冗余语句break;}--------------------------for(;;){//循环语句}--------------------------[主函数模板]/*********************************************************************************************函数名:主函数调用:无参数:无返回值:无结果:程序开始处,无限循环备注:/**********************************************************************************************/voidmain(void){//初始程序while(1){//无限循环程序}}/**********************************************************************************************/[中断处理函数模板]/*********************************************************************************************函数名:中断处理函数调用:无参数:无返回值:无结果:备注:/**********************************************************************************************/voidname(void)interrupt1using1{//处理内容}/**********************************************************************************************/[中断入口说明]interrupt0外部中断0(ROM入口地址:0x03)interrupt1定时/计数器中断0(ROM入口地址:0x0B)interrupt2外部中断1(ROM入口地址:0x13)interrupt3定时/计数器中断1(ROM入口地址:0x1B)interrupt4UART串口中断(ROM入口地址:0x23)(更多的中断依单片机型号而定,ROM中断入口均相差8个字节)using0使用寄存器组0using1使用寄存器组1using2使用寄存器组2using3使用寄存器组3[普通函数框架]/*********************************************************************************************函数名:调用:参数:无返回值:无结果:备注:/**********************************************************************************************/voidname(void){//函数内容}/**********************************************************************************************//*********************************************************************************************函数名:调用:参数:0~65535/0~255返回值:0~65535/0~255结果:备注:/**********************************************************************************************/unsignedintname(unsignedchara,unsignedintb){//函数内容returna;//返回值}/**********************************************************************************************/[延时函数]/*********************************************************************************************函数名:毫秒级CPU延时函数调用:DELAY_MS(?);参数:1~65535(参数不可为0)返回值:无结果:占用CPU方式延时与参数数值相同的毫秒时间备注:应用于1T单片机时i600,应用于12T单片机时i125/*********************************************************************************************/voidDELAY_MS(unsignedinta){unsignedinti;while(--a!=0){for(i=0;i600;i++);}}/*********************************************************************************************/[定时/计数器函数]-----------------------------------------------------------------------------M1M0方式说明00013位T/C,由TL低5位和TH的8位组成13位计数器01116位T/C,TL和TH共16位计数器1028位T/C,TL用于计数,当TL溢出时将TH中的值自动写入TL113两组8位T/C-----------------------------------------------------------------------------/*********************************************************************************************函数名:定时/计数器初始化函数调用:T_C_init();参数:无返回值:无结果:设置SFR中T/C1和(或)T/C0相关参数备注:本函数控制T/C1和T/C0,不需要使用的部分可用//屏蔽/**********************************************************************************************/voidT_C_init(void){TMOD=0x11;//高4位控制T/C1[GATE,C/T,M1,M0,GATE,C/T,M1,M0]EA=1;//中断总开关TH1=0xFF;//16位计数寄存器T1高8位(写入初值)TL1=0xFF;//16位计数寄存器T1低8位ET1=1;//T/C1中断开关TR1=1;//T/C1启动开关//TH0=0x3C;//16位计数寄存器T0高8位//TL0=0xB0;//16位计数寄存器T0低8位(0x3CB0=50mS延时)//ET0=1;//T/