请帮忙在51系列单片机系统中,编写一个延时1ms的子程序。谢谢。。

请帮忙在51系列单片机系统中,编写一个延时1ms的子程序。谢谢。。,第1张

1、首先,在电脑中打开keil软件,创建好工程,然后添加c文件,如下图所示

2、然后添加c文件,接下来输入代码,先输入一个头文件命令。

3、然后,进行宏定义,代码如图所示。

4、然后声明P1口,如下图所示。

5、最后,将延时语句全部添加进去,代码按照图中所示的直接敲入即可。

6、最后,点击编译,生成HEX文件就可以了,这样51单片机延时语句就完成了。

一、用定时器中断,50ms中断的1 次,20次就是1秒

#include <REG51.H>

#define uchar unsigned char

sbit LED =P1^1//接一LED,1 秒钟亮或灭一次

uchar time

void init_t0int()

{

TMOD=0x01

TH0=(65535-50000)/256

TL0=(65535-50000)%256

EA=1

ET0=1

TR0=1

}

void main()

{

init_t0int()

while(1)

}

void t0int() interrupt 1

{

TH0=(65535-50000)/256

TL0=(65535-50000)%256

time++

if(time==20)

{

time=0

LED=~LED

}

}

二、用循环延时可能程序更简单一点,但没实际意义 。单片机在这1 秒内只能循环而不能做其它事。

#include<reg51.h>

sbit LED=P1^0

void delay_ms(unsigned char ms)

{

unsigned char i

while(ms--)

for(i=0i<123i++)

}

void main()

{

while(1)

{

delay_ms(1000)

LED=~P1^0 //P1.0接一LED,可看到LED每1S亮或灭一次

}

}

参考资料: LED

unsigned char rSecondCount//秒计时数

unsigned char rMinuteCount//分计时数

sbit IsOneSecondReach

sbit Pulse_Sec=P1^0

sbit Pulse_Min=P1^1

main()

{

rSecondCount=0

rMinuteCount=0

TH1=0x3C

TL1=0xAF//定时器50ms产生一次中断 (FFFF-3CAF)us

MOD = 0x10//定时器1工作于模式1,(用工作于模式2也可以,而且更 简便)

TR1=1//使能定时器1

ET1=1//开中断

EA=1//开全局中断

while(1)

{

if (IsOneSecondReach)

{

IsOneSecondReach = 0

//do something,如果一秒延时标志为1,则清除此标志,等待下次1秒,在此处

//执行需要执行的程序

}

}

}

/* 定时器50ms产生一次中断 */

void Timer(void) interrupt 3

{

/* 重新载入T1参数 */

TH1=0x3C

TL1=0xAF

/* 一秒累加 */

rSecondCount++//秒计时+1

if (rSecondCount==20) //1sec到,50ms*20

{

IsOneSecondReach = 1

}

}

//

脉冲宽度为50ms,如果有其他要求的话,修改T1参数和“秒分”的参数凑下就行了.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10982653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存