c语言用中断方式发送字符串波特率2400,51、STC单片机C语言通用万能编程模板.doc...

51、STC单片机C语言通用万能编程模板.doc

8051单片机C语言编程模板 1.函数头文件22.毫秒级CPU延时函数43.定时/计数器初始化函数54.定时/计数器1中断处理函数65.定时/计数器0中断处理函数76.PWM初始化函数87.PWM0占空比设置函数98.UART串口初始化函数109.UART串口接收中断处理函数1110.UART串口发送函数1211.UART串口发送字符串函数1312.外部中断INT初始化函数1413.外部中断INT1中断处理程序1514.外部中断INT0中断处理程序1515.普通I/O口模拟PWM生成程序1616.LCD驱动1617.DS18B20温度传感器驱动1918.LCM2402(1602也适用)驱动程序2119.主函数2520. 8个独立式键盘驱动程序2721. 16个阵列式键盘驱动程序281.函数头文件/程序名 编写人 编写时间20 年 月 日硬件支持接口说明修改日志NO.1-/说明/*/include REG51.h REG52.h STC11Fxx.H STC12C2052AD.H STC12C5A60S2.H 通用89C51头文件(只留下实际使用的单片机所对应的头文件)include assert.h 设定插入点include ctype.h 字符处理include errno.h 定义错误码include float.h 浮点数处理include fstream.h 文件输入输出include iomanip.h 参数化输入输出include iostream.h 数据流输入输出include limits.h 定义各种数据类型最值常量include locale.h 定义本地化函数include math.h 定义数学函数include stdio.h 定义输入输出函数include stdlib.h 定义杂项函数及内存分配函数include string.h 字符串处理include strstrea.h 基于数组的输入输出include time.h 定义关于时间的函数include wchar.h 宽字符处理及输入输出include wctype.h 宽字符分类include intrins.h 51基本运算(包括_nop_空函数)sfr 自定义名 SFR地址 ; 按字节定义SFR中的存储器名。例sfr P1 0 x90;sbit 自定义名 系统位名 ; 按位定义SFR中的存储器名。例sbit Add_Key P3 1;bit 自定义名 ; 定义一个位(位的值只能是0或1)例bit LED;define 代替名 原名 用代替名代替原名。例define LED P1 / define TA 0 x25define KEY P1 键盘所连接的I/O接口组定义sbit SPEAKER P37; 扬声器连接定义sbit DQ P2 5; ds18B20sbit RS P10; 模式位,为0输入指令,为1输入数据sbit RW P11; 读写位,为0读,为1写sbit E P12; 使能位define Lcd_Bus P0 数据总线unsigned char 自定义名 ; 定义一个0255的整数变量。unsigned int 自定义名 ; 定义一个065535的整数变量。data 字节寻址片内RAM,片内RAM的128字节 (例data unsigned char a;)bdata可位寻址片内RAM,16字节,从0 x20到0 x2F (例bdata unsigned char a;)idata 所有片内RAM,256字节,从0 x00到0 xFF (例idata unsigned char a;)pdata片外RAM,256字节,从0 x00到0 xFF (例pdata unsigned char a;)xdata片外RAM,64K字节,从0 x00到0 xFFFF (例xdata unsigned char a;)code ROM存储器,64K字节,从0 x00到0 xFFFF (例code unsigned char a;)2.毫秒级CPU延时函数/函数名毫秒级CPU延时函数调 用DELAY_MS ;参 数165535(参数不可为0)返回值无结 果占用CPU方式延时与参数数值相同的毫秒时间备 注应用于1T单片机时i600,应用于12T单片机时i125(在此预为1T单片机数值)/*/void DELAY_MS unsigned int a unsigned int i;while a 0fori 0; i 600; 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-3.定时/计数器初始化函数/函数名定时/计数器初始化函数调 用T_C_init;参 数无返回值无结 果设置SFR中T/C1和(或)T/C0相关参数备 注本函数控制T/C1和T/C0,不需要使用的部分可用屏蔽/*/void T_C_init voidTMOD 0 x11; 高4位控制T/C1 GATE,C/T,M1,M0,GATE,C/T,M1,M0 EA 1; 中断总开关TH1 0 xFF; 16位计数寄存器T1高8位(写入初值)TL1 0 xFF; 16位计数寄存器T1低8位ET1 1; T/C1中断开关TR1 1; T/C1启动开关TH0 0 x3C; 16位计数寄存器T0高8位TL0 0 xB0; 16位计数寄存器T0低8位(0 x3CB0 50mS延时)ET0 1; T/C0中断开关TR0 1; T/C0启动开关/*/4.定时/计数器1中断处理函数/函数名定时/计数器1中断处理函数调 用T/C1溢出后中断处理参 数无返回值无结 果重新写入16位计数寄存器初始值,处理用户程序备 注必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致/*/void T_C1 void interrupt 3 using 3 切换寄存器组到3 TH1 0 x3C; 16位计数寄存器T1高8位(重新写入初值)TL1 0 xB0; 16位计数寄存器T1低8位(0 x3CB0 50mS延时) 函数内容/*/5.定时/计数器0中断处理函数/函数名定时/计数器0中断处理函数调 用T/C0溢出后中断处理参 数无返回值无结 果重新写入16位计数寄存器初始值,处理用户程序备 注必须允许中断并启动T/C本函数方可有效,重新写入初值需和T_C_init函数一致/*/void T_C0 void interrupt 1 using 1 切换寄存器组到1 TH0 0 x3C; 16位计数寄存器T0高8位(重新写入初值)TL0 0 xB0; 16位计数寄存器T0低8位(0 x3CB0 50mS延时) 函数内容/*/6.PWM初始化函数/函数名PWM初始化函数调 用PWM_init;参 数无返回值无结 果将PCA初始化为PWM模式,初始占空比为0备 注需要更多路PWM输出直接插入CCAPnH和CCAPnL即可/*/void PWM_init voidCMOD0 x02; 设置PCA定时器 CL0 x00; CH0 x00;CCAPM00 x42; PWM0设置PCA工作方式为PWM方式(0100 0010) CCAP0L0 x00; 设置PWM0初始值与CCAP0H相同 CCAP0H0 x00; PWM0初始时为0CCAPM10 x42; PWM1设置PCA工作方式为PWM方式(使用时删除)CCAP1L0 x00; 设置PWM1初始值与CCAP0H相同 CCAP1H0 x00; PWM1初始时为0CCAPM20 x42; PWM2设置PCA工作方式为PWM方式CCAP2L0 x00; 设置PWM2初始值与CCAP0H相同 CCAP2H0 x00; PWM2初始时为0CCAPM30 x42; PWM3设置PCA工作方式为PWM方式CCAP3L0 x00; 设置PWM3初始值与CCAP0H相同 CCAP3H0 x00; PWM3初始时为0 CR1; 启动PCA定时器/*/7.PWM0占空比设置函数/函数名PWM0占空比设置函数调 用PWM0_set;参 数0 x000 xFF(亦可用0255)返回值无结 果设置PWM模式占空比,为0时全部高电平,为1时全部低电平备 注如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可/*/void PWM0_set unsigned char aCCAP0L a; 设置值直接写入CCAP0L CCAP0H a; 设置值直接写入CCAP0H/*/8.UART串口初始化函数/函数名UART串口初始化函数调 用UART_init;参 数无返回值无结 果启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)备 注振荡晶体为12MHz,PC串口端设置 4800,8,无,1,无 /*/void UART_init voidEA 1; 允许总中断(如不使用中断,可用屏蔽)ES 1; 允许UART串口的中断TMOD 0 x20; 定时器T/C1工作方式2SCON 0 x50; 串口工作方式1,允许串口接收(SCON 0 x40 时禁止串口接收)TH1 0 xF3; 定时器初值高8位设置TL1 0 xF3; 定时器初值低8位设置PCON 0 x80; 波特率倍频(屏蔽本句波特率为2400)TR1 1; 定时器启动 /*/9.UART串口接收中断处理函数/函数名UART串口接收中断处理函数调 用SBUF收到数据后中断处理参 数无返回值无结 果UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)备 注过长的处理程序会影响后面数据的接收/*/void UART_R void interrupt 4 using 1 切换寄存器组到1unsigned char UART_data; 定义串口接收数据变量需要对接受到的数据进行处理时,可将其定义为全局变量RI 0; 令接收中断标志位为0(软件清零)UART_data SBUF; 将接收到的数据送入变量 UART_data 用户函数内容(用户可使用UART_data做数据处理)SBUF UART_data; 将接收的数据发送回去(删除即生效)whileTI 0; 检查发送中断标志位TI 0; 令发送中断标志位为0(软件清零)/*/10.UART串口发送函数/函数名UART串口发送函数调 用UART_T ;参 数需要UART串口发送的数据(8位/1字节)返回值无 结 果将参数中的数据发送给UART串口,确认发送完成后退出备 注/*/void UART_T unsigned char UART_data 定义串口发送数据变量 SBUF UART_data; 将接收的数据发送回去whileTI 0; 检查发送中断标志位TI 0; 令发送中断标志位为0(软件清零)/*/11.UART串口发送字符串函数/函数名UART串口发送字符串函数调 用UART_TC ;参 数需要UART串口发送的数据(8位/1字节)返回值无 结 果向串口发送一个字符串,长度不限。备 注例UART_TCd9887321; 此函数需要include string.h头文件支持。/*/void UART_TC unsigned char *strwhile*str 0UART_T*str;*str;*str 0;/*/中断入口说明中断入口说明interrupt 0 外部中断0(ROM入口地址0 x03)interrupt 1 定时/计数器中断0(ROM入口地址0 x0B)interrupt 2 外部中断1(ROM入口地址0 x13)interrupt 3 定时/计数器中断1(ROM入口地址0 x1B)interrupt 4 UART串口中断(ROM入口地址0 x23)(更多的中断依单片机型号而定,ROM中断入口均相差8个字节)using 0 使用寄存器组0using 1 使用寄存器组1using 2 使用寄存器组2using 3 使用寄存器组312.外部中断INT初始化函数/函数名外部中断INT初始化函数调 用INT_init;参 数无返回值无结 果启动外部中断INT1、INT0中断,设置中断方式备 注/*/void INT_init voidEA 1; 中断总开关EX1 1; 允许外部中断1中断 EX0 1; 允许外部中断0中断IT1 1; 1下沿触发 0低电平触发IT0 1; 1下沿触发 0低电平触发/*/13.外部中断INT1中断处理程序/函数名外部中断INT1中断处理程序调 用外部引脚INT1中断处理参 数无返回值无结 果用户处理外部中断信号备 注/*/void INT_1 void interrupt 2 using 2 切换寄存器组到2 用户函数内容/*/14.外部中断INT0中断处理程序/函数名外部中断INT0中断处理程序调 用外部引脚INT0中断处理参 数无返回值无结 果用户处理外部中断信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值