c语言一个星期编程模板,求[转]单片机C语言编程模板(延时程序)??

本文提供了STC系列单片机的毫秒级CPU延时函数及中断延时程序模板,适用于MCS-51内核的单片机。通过实例详细解释了如何实现1秒周期的LED灯闪烁,并讨论了不同时钟频率和单片机机械周期对延时的影响。同时,给出了中断服务程序的编写方法,以提高延时精度。
摘要由CSDN通过智能技术生成

view-d42589357.html - STC系列单片机C语言编程基础模板

view-d42589357.html - 适用于MCS-51内核的单片机产品(以STC系列单片机为例)

view-d42589357.html - 以STC12C2052AD单片机P1接口8个LED灯实验电路为例

view-d42589357.html

/*********************************************************************************************

函数名:毫秒级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 

}

}

/*********************************************************************************************/

- 程序模块

/*********************************************************************************************

程序名:    占用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 

}

}

/*********************************************************************************************/

/*********************************************************************************************/

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. 程序中的中断处理将影响延时长度。

可将其模板下载到本地硬盘,在编写新程序的时候复制、粘贴到工程当中,然后根据情况写入具体内容。

- 使用说明

view-d42589357.html

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 

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 

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. 程序中出现其他的中断程序将影响延时准确度。

可将其模板下载到本地硬盘,在编写新程序的时候复制、粘贴到工程当中,然后根据情况写入具体内容。 - 使用说明

view-d42589357.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值