51单片机delay()延时的用途和用法讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ unsigned int i; for(i=0;i<uiDelayShort;i++) { ; //一个分号相当于执行一条空语句 }
}
/* 注释八: * delay_long(unsigned int uiDelayLong)是大延时函数, * 专门用在上电初始化的大延时, * 此函数的特点是能实现比较长时间的延时,细分度取决于内嵌 for 循环的次数, * uiDelayLong 的数值的大小就代表里面执行了多少次 500 条空指令的时间。 * 数值越大,延时越长。时间精度不要刻意去计算,感觉差不多就行。 */ void delay_long(unsigned int uiDelayLong) {
unsigned int i; unsigned int j; for(i=0;i<uiDelayLong;i++) {
for(j=0;j<500;j++) //内嵌循环的空指令数量 { ; //一个分号相当于执行一条空语句 }
}பைடு நூலகம்}
void initial_myself() //初始化单片机 {
led_dr=0; //LED 灭 } void initial_peripheral() //初始化外围 {
delay()延时的用途讲解
(1)硬件平台:基于朱兆祺 51 单片机学习板。
(2)实现功能:让一个 LED 闪烁。
(3)源代码讲解如下:
#include "REG52.H"
void initial_myself(); void initial_peripheral();
void delay_short(unsigned int uiDelayshort); void delay_long(unsigned int uiDelaylong); void led_flicker();
initial_myself();
/* 注释三: * 此处的 delay_long()延时函数属于第一区与第二区的分割线, * 延时时间一般是 0.3 秒到 2 秒之间,等待外围芯片和模块上电稳定。 * 比如液晶模块,AT24C02 存储芯片,DS1302 时钟芯片, * 这类芯片有个特点,一般都是跟单片机进行串口或并口通讯的, * 并且不要求上电立即处理的。
*/ delay_long(100);
/* 注释四: * initial_peripheral()函数属于鸿哥三区一线理论的第二区, * 专门用来初始化不要求上电立即处理的外围芯片和模块. * 比如液晶模块,AT24C02 存储芯片,DS1302 时钟芯片。 * 本程序基于朱兆祺 51 单片机学习板。 */
led_dr=1; //LED 亮 delay_short(50000); //延时 50000 个空指令的时间
/* 注释六: * delay_long(100)延时 50000 个空指令的时间,因为内嵌了一个 500 次的 for 循环 */
led_dr=0; //LED 灭 delay_long(100); //延时 50000 个空指令的时间 }
; //本例为空
/* 注释七: * delay_short(unsigned int uiDelayShort)是小延时函数, * 专门用在时序驱动的小延时,一般 uiDelayShort 的数值取 10 左右, * 最大一般也不超过 100.本例为了解释此函数的特点,取值范围超过 100。 * 此函数的特点是时间的细分度高,延时时间不宜过长。uiDelayShort 数值 * 的大小就代表里面执行了多少条空指令的时间。数值越大,延时越长。 * 时间精度不要刻意去计算,感觉差不多就行。 */ void delay_short(unsigned int uiDelayShort)
initial_peripheral();
/* 注释五: * while(1){}主函数循环区属于鸿哥三区一线理论的第三区, * 专门用来编写被循环扫描到的非中断应用程序 */
while(1) {
led_flicker(); //LED 闪烁应用程序 }
}
void led_flicker() //LED 闪烁应用程序 {
/* 注释一: * 命名技巧:凡是输出后缀都是_dr,凡是输入后缀都是_sr。 * dr 代表 drive 驱动,sr 代表 sensor 感应器 */ sbit led_dr=P3^5;
void main() //学习要点:深刻理解三区一线理论 {
/* 注释二: * initial_myself()函数属于鸿哥三区一线理论的第一区, * 专门用来初始化单片机自己的寄存器以及个别外围要求响应速度快的输出设备, * 防止刚上电之后,由于输出 IO 口电平状态不确定而导致外围设备误动作, * 比如继电器的误动作等等。 */