杜洋工作室 DoYoung Studio
- STC系列单片机C语言编程基础模板
- 适用于MCS-51内核的单片机产品(以STC系列单片机为例)
- 以STC12C2052AD单片机P1接口8个LED灯实验电路为例
- 使用Keil C51 编译器软件(以Keil uVision2为例)
/********************************************************************************************* 函数名:毫秒级CPU延时函数 调 用:DELAY_MS (?); 参 数:1~65535(参数不可为0) 返回值:无 结 果:占用CPU方式延时与参数数值相同的毫秒时间 备 注:应用于1T单片机时i<600,应用于12T单片机时i<125 /*********************************************************************************************/ void DELAY_MS (unsigned int a){ unsigned int i; while( a-- != 0){ for(i = 0; i < 600; i++); } } /*********************************************************************************************/
- 程序模块
/********************************************************************************************* 程序名: 占用CPU延时程序应用实例 编写人: 杜洋 编写时间: 2009年9月23日 硬件支持: STC12C2052AD 12MHz 接口说明: P1接口8个LED灯 修改日志: NO.1- /********************************************************************************************* 说明:本程序可使单片机P1.0接口上的LED灯以1秒为周期闪烁。 /*********************************************************************************************/ #include
//通用89C51头文件 sbit LED = P1 ^ 0; //定义闪烁LED /********************************************************************************************* 函数名:毫秒级CPU延时函数 调 用:DELAY_MS (?); 参 数:1~65535(参数不可为0) 返回值:无 结 果:占用CPU方式延时与参数数值相同的毫秒时间 备 注:应用于1T单片机时i<600,应用于12T单片机时i<125 /*********************************************************************************************/ void DELAY_MS (unsigned int a){ unsigned int i; while( a-- != 0){ for(i = 0; i < 600; i++); } } /*********************************************************************************************/ /*********************************************************************************************/ void main (void){ //主程序 while(1){ LED = ~LED; //取LED相反状态 DELAY_MS(1000); //修改这里的数值看看会有什么变化 } } /*********************************************************************************************/
- 应用实例
1. 占用CPU的延时程序应考虑系统时钟频率,本实验以12.000MHz晶体为例。 2. 占用CPU的延时程序还需要考虑单片机的机械周期,12T单片机(AT89C51)与1T单片机(STC11F32XE)的延时长度不同。 3. 请不要使用CPU延时程序作为长时间延时功能使用(如1小时延时)。 4. 程序中的中断处理将影响延时长度。 可将其模板下载到本地硬盘,在编写新程序的时候复制、粘贴到工程当中,然后根据情况写入具体内容。
- 使用说明
data unsigned char cou = 0; // 定义软计数器,放在程序最前面的寄存器定义部分 /**********************************************************************************************/ void init (void){ TMOD = 0x11; // 定时/计数器0,1工作于方式1 TH0 = 0x3c; // 预置产生50ms时基信号 TL0 = 0xb0; EA = 1; // 开总中断 ET0 = 1; // 定时/计数器0允许中断 TR0 = 1; // 开闭定时/计数器0 } /**********************************************************************************************/ /**********************************************************************************************/ void tiem0(void) interrupt 1{ // T/C0中断服务程序(产生50ms时基信号) if(cou < 1){ // 计数值到100(1s) (****时间为倒计时****) cou = 20; // 软计数器清零 } cou--; // 软计数器加1 TH0 = 0x3c; // 重置定时常数 TL0 = 0xb0; } /**********************************************************************************************/
- 程序模块
/********************************************************************************************* 程序名: 中断延时程序应用实验 编写人: 杜洋 编写时间: 2009年9月23日 硬件支持: STC12C2052AD 12MHz 接口说明: P1接口8个LED灯 修改日志: NO.1- /********************************************************************************************* 说明:本程序可使单片机P1.0接口上的LED灯以1秒为周期闪烁。 /*********************************************************************************************/ #include
//通用89C51头文件 sbit LED = P1 ^ 0; //定义闪烁LED data unsigned char cou = 0; // 软计数器,对10ms时基信号累加到1s /**********************************************************************************************/ void init (void){ TMOD = 0x11; // 定时/计数器0,1工作于方式1 TH0 = 0x3c; // 预置产生50ms时基信号 TL0 = 0xb0; EA = 1; // 开总中断 ET0 = 1; // 定时/计数器0允许中断 TR0 = 1; // 开闭定时/计数器0 } /**********************************************************************************************/ /**********************************************************************************************/ void tiem0(void) interrupt 1{ // T/C0中断服务程序(产生50ms时基信号) if(cou < 1){ // 计数值到100(1s) (****时间为倒计时****) cou = 20; // 软计数器清零 LED =~ LED; //让LED灯闪烁 } cou--; // 软计数器加1 TH0 = 0x3c; // 重置定时常数 TL0 = 0xb0; } /**********************************************************************************************/ /*********************************************************************************************/ void main (void){ //主程序 init(); //延时程序(定时器)初始化 while(1){ //无限循环程序(可加入其他程序) } } /*********************************************************************************************/
- 应用实例
1. 中断处理延时程序应考虑系统时钟频率,本实验以12.000MHz晶体为例。 2. 中断处理延时程序还需要考虑单片机的机械周期,一般情况下STC的1T单片机与AT89C51的定时器周期兼容。。 3. 程序中出现其他的中断程序将影响延时准确度。 可将其模板下载到本地硬盘,在编写新程序的时候复制、粘贴到工程当中,然后根据情况写入具体内容。
- 使用说明
- 51定时器初值计算器(作者:哇哂)
下载 Download
-
实验电路原理图下载 SCH
-
51定时器初值计算器下载 EXE
链接 Links
-
STC系列单片机数据手册
更多 More
-
杜洋工作室首页
-
论坛服务
-
联系方式