《8051单片机C语言编程模板》_第1页
《8051单片机C语言编程模板》_第2页
《8051单片机C语言编程模板》_第3页
《8051单片机C语言编程模板》_第4页
《8051单片机C语言编程模板》_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《8051单片机C语言编程模板》[单片机SFR定义的头文件#ineludevREG51.h>〃通用89C51头文件#ineludevREG52.h>〃通用89C52头文件#ineludevSTC11Fxx.H>〃STC11Fxx或STC11Lxx系列单片机头文件#ineludevSTC12C2052AD.H>〃STC12CxO52或STC12Cx052AD系列单片机头文件#include<STC12C5A60S2.H>//STC12C5A60S2系列单片机头文件〃设定插入点〃字符处理〃定义错误码〃浮点数处理[〃设定插入点〃字符处理〃定义错误码〃浮点数处理#include<assert.h>#include<ctype.h>#include<errno.h>#include<float.h>#include<fstream.h>〃文件输入/输出#includeviomanip.h> 〃参数化输入/输出#includeviostream.h>〃数据流输入/输出〃定义各种数据类型最值常量〃定义本地化函数〃定义各种数据类型最值常量〃定义本地化函数〃定义数学函数〃定义输入/输出函数〃定义杂项函数及内存分配函数〃字符串处理〃基于数组的输入/输出〃定义关于时间的函数〃宽字符处理及输入/输出〃宽字符分类〃51基本运算(包括_nop_空函数)#includevlocale.h>#includevmath.h>#includevstdio.h>#includevstdlib.h>#includevstring.h>#includevstrstrea.h>#includevtime.h>#includevwchar.h>#includevwctype.h>#includevintrins.h>[常用定义声明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;字节寻址片内RAM,字节寻址片内RAM,片内RAM的128字节(例:dataunsignedchara;)可位寻址片内RAM,16字节,从0x20到0x2F(例:bdataunsignedchara;)所有片内RAM,256字节,从0x00到0xFF(例:idataunsignedchara;)片外RAM,256字节,从0x00到0xFF(例:pdataunsignedchara;)片外RAM,64K字节,从0x00到0xFFFF(例:xdataunsignedchara;)ROM存储器,64K字节,从0x00到0xFFFF(例:codeunsignedchara;)循环语句databdataidatapdataxdatacode[选择、if(1){〃为真时语句}else{〃否则时语句}while(1){〃为真时内容}do{〃先执行内容}while(1);switch(a){case0x01:〃为真时语句break;case0x02:〃为真时语句break;default:〃冗余语句break;}for(;;){〃循环语句}[主函数模板/函数名:主函数调用:无参数:无返回值:无结果:程序开始处,无限循环备注:voidmain(void){〃初始程序while(1){〃无限循环程序}[中断处理函数模板 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;〃返回值}[延时函数 1函数名:毫秒级CPU延时函数调用:DELAY_MS(?);参数:1〜65535(参数不可为0)返回值:无结果:占用CPU方式延时与参数数值相同的毫秒时间备注:应用于1T单片机时iv600,应用于12T单片机时iv125voidDELAY_MS(unsignedinta){unsignedinti;while(--a!=0){for(i=0;i<600;i++);}[定时/计数器函数 'M100M100110 0 13位T/C,由TL低5位和TH的8位组成13位计数器1 1 16位T/C,TL和TH共16位计数器0 2 8位T/C,TL用于计数,当TL溢出时将TH中的值自动写入TL1 3 两组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,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/C0中断开关//TR0=1;//T/C0启动开关}函数名:定时/计数器1中断处理函数调用:[T/C1溢出后中断处理参数:无返回值:无结果:重新写入16位计数寄存器初始值,处理用户程序备注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致voidT_C1(void)interrupt3using3{〃切换寄存器组到3TH1=0x3C;〃16位计数寄存器T1高8位(重新写入初值)TL1=0xB0;〃16位计数寄存器T1低8位(0x3CB0=50mS延时)〃函数内容函数名:定时/计数器0中断处理函数调用:[T/C0溢出后中断处理参数:无返回值:无结果:重新写入16位计数寄存器初始值,处理用户程序备注:必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致voidT_C0(void)interrupt1using1{〃切换寄存器组到1THO=0x3C;〃16位计数寄存器TO高8位(重新写入初值)TL0=OxBO;〃16位计数寄存器TO低8位(0x3CB0=50mS延时)〃函数内容}[外部中断INT函数函数名:外部中断INT初始化函数调用:INT_init();参数:无返回值:无结果:启动外部中断INT1、INTO中断,设置中断方式备注:voidINT_init(void){EA=1; 〃中断总开关EX1=1;〃允许外部中断1中断EX0=1;〃允许外部中断0中断IT1=1;〃1:下沿触发 0:低电平触发IT0=1;〃1:下沿触发 0:低电平触发函数名:外部中断INT1中断处理程序调用:[外部引脚INT1中断处理参数:无返回值:无结果:用户处理外部中断信号备注:voidINT_1(void)interrupt2using2{〃切换寄存器组到2〃用户函数内容

函数名:外部中断INTO中断处理程序调用:[外部引脚INTO中断处理参数:无返回值:无结果:用户处理外部中断信号备注:voidINT_O(void)interrupt0using2{〃切换寄存器组到2〃用户函数内容[UART串口函数[UART串口函数函数名:UART串口初始化函数调用:UART_init();参数:无返回值:无结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)备注:振荡晶体为12MHz,PC串口端设置[4800,8,无,1,无TH1=0xF3;TH1=0xF3;TL1=0xF3;PCON=0x80;TR1=1;〃定时器初值高8位设置〃定时器初值低8位设置voidUART_init(void){EA=1;〃允许总中断(如不使用中断,可用〃屏蔽)ES=1;〃允许UART串口的中断TMOD=0x20; 〃定时器T/C1工作方式2SCON=0x50; 〃串口工作方式1,允许串口接收(SCON=0x40时禁止串口接收)〃波特率倍频(屏蔽本句波特率为2400)〃定时器启动函数名:UART串口初始化函数调用:UART_init();参数:无

返回值:无结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)备注:振荡晶体为11.0592MHz,PC串口端设置[19200,8,无,1,无TH1=0xFD;TH1=0xFD;TL1=0xFD;PCON=0x80;TR1=1;〃定时器初值高8位设置〃定时器初值低8位设置voidUART_init(void){EA=1;〃允许总中断(如不使用中断,可用〃屏蔽)ES=1;〃允许UART串口的中断TMOD=0x20; 〃定时器T/C1工作方式2SCON=0x50; 〃串口工作方式1,允许串口接收(SCON=0x40时禁止串口接收)〃波特率倍频(屏蔽本句波特率为9600)〃定时器启动函数名:UART串口接收中断处理函数调用:[SBUF收到数据后中断处理参数:无返回值:无结果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)备注:过长的处理程序会影响后面数据的接收voidUART_R(void)interrupt4using1{〃切换寄存器组到1unsignedcharUART_data;〃定义串口接收数据变量RI=0; 〃令接收中断标志位为0(软件清零)UART_data=SBUF; 〃将接收到的数据送入变量UART_data〃用户函数内容(用户可使用UART_data做数据处理)//SBUF=UART_data; 〃将接收的数据发送回去(删除〃即生效)〃while(TI==0); 〃检查发送中断标志位//TI=0; 〃令发送中断标志位为0(软件清零)函数名:UART串口接收CPU查寻语句(非函数体)调用:将下面内容放入主程序参数:无返回值:无结果:循环查寻接收标志位RI,如有收到数据则进入if(RI==1){}备注:〃接收中断标志位为1时unsignedcharUART_data;〃定义串口接收数据变量〃接收中断标志位为1时UART_data=SBUF; 〃接收数据SBUF为单片机的接收发送缓冲寄存器RI=0; 〃令接收中断标志位为0(软件清零)〃用户函数内容(用户可使用UART_data做数据处理)//SBUF=UART_data; 〃将接收的数据发送回

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论