利用定时器1延时1秒的程序(c51语言)

 

//利用定时器1延时1秒的程序2007-07-16 ;利用定时器精确延时1秒
// 循环点亮P1口接的八只发光二极管。
//与另一个汇编语言程序相对应,完成相同的功能
#include<reg51.h>
unsigned     char i=0,j=0;
code unsigned char datab[8]=
{0x55,0x0AA,0x05,0x0A,0x50,0x0A0,0x0FF,0x0};
void    t1int() interrupt 3
{
TR1=0;
TL1=0;
TH1=0x4C;
i++;
if(i==20)
{
   i=0;
   P1=datab[j];
   j++;
   if(j==7)
   j=0;
}
TR1=1;
}
void main()
{
TMOD=0x10;
TL1=0;
TH1=0x4C;
TR1=1;
ET1=1;
EA=1;         
while(1);
}   
/*利用定时器1延时1秒的程序2007-06-27 09:57;利用定时器精确延时1秒
;循环点亮P1口接的八只发光二极管。
ORG 0000H
AJMP START
ORG             001BH      ;T1中断入口地址
AJMP INT_T1
ORG             0030H
START:
MOV         SP,#60H
MOV            TMOD,#10H ;置T1为方式1
MOV             TL1,#00H ;延时50mS的时间常数
MOV             TH1,#4CH
MOV             R0,#00H
MOV             R1,#20
SETB TR1           ;启动定时器1,开始定时
SETB ET1
SETB EA ;开中断
SJMP $
INT_T1:   ;T1中断服务子程序
PUSH ACC ;保护现场
PUSH PSW
PUSH DPL
PUSH DPH
CLR          TR1;关闭定时器1,停止定时
MOV          TL1,#00H   ;延时50mS常数
MOV          TH1,#4CH      
DJNZ R1,EXIT
MOV           R1,#20   ;延时一秒的常数
MOV        DPTR,#DATAb ;置常数表基址
MOV              A,R0            ;置常数表偏移量
MOVC A,@A+DPTR     ;读常数表
MOV            P1,A             ;送P1口显示
INC            R0
ANL            R0,#07H
EXIT:
SETB TR1       ;启动定时器1,开始定时
POP         DPH     ;恢复现场
POP         DPL
POP         PSW
POP         ACC
RETI
;发光二极管显示常数表
DATAb:      DB 55H,0AAH,05H,0AH,50H,0A0H,0FFH,0H
END
*/

C51单片机定时器1延时程序的实现步骤如下: 1. 设置定时器1的计数初值,使其开始计数。 2. 等待定时器1计数到指定的值,即延时时间。 3. 定时器1计数到指定值后,清零计数器,并结束延时程序。 下面是一个简单的C51单片机定时器1延时程序的例子: ```c #include <reg52.h> void timer1_delay(unsigned int ms) { unsigned int i, j; TMOD &= 0x0F; // 设置定时器1为16位定时器 TMOD |= 0x10; TH1 = 0xFC; // 设置定时器1的计数初值,使其开始计数 TL1 = 0x18; TR1 = 1; // 启动定时器1 for (i = 0; i < ms; i++) // 等待定时器1计数到指定的值,即延时时间 { for (j = 0; j < 125; j++); } TR1 = 0; // 停止定时器1 } void main() { while (1) { P1 = 0xFF; // 点亮LED timer1_delay(1000); // 延时1 P1 = 0x00; // 熄灭LED timer1_delay(1000); // 延时1 } } ``` 在上面的例子中,我们使用定时器1来控制LED的闪烁,每隔1交替点亮和熄灭LED。其中,timer1_delay()函数用来实现延时功能,参数ms表示要延时的时间,单位为毫。在函数内部,我们使用了一个简单的for循环来等待定时器1计数到指定的值,即延时时间。 需要注意的是,定时器的计数值需要根据系统时钟频率和所需的延时时间来计算。在上面的例子中,我们使用了11.0592MHz的晶振,并将定时器1的计数初值设置为0xFC18,这样定时器1每计数65536次(0xFFFF+1),就会产生一个1的中断。因此,我们在for循环中等待的时间是125次,即125ms。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值