怎样用C语言作延时1S的程序
void main() //主程序{program_init(); //调用程序初始化子程序unsigned char oldSecond;oldSecond = second;while(1) //开始{ if(second >= oldSecond+1) //延时一秒 { oldSecond = second; _clrwdt(); //清除看门狗计数器 time_display(); //调用显示子程序 }}} //主程序结束...
利用软件延时的方式实现变频报警,让单片机的某I/O口交替输入1KHz...
ORG 000HLJMP MAINORG 0100HMAIN:SET P1.3CALL DELAY1CLR P1.3CALL DELAY1LCALL DELAY1SSET P1.3CALL DELAY2CLR P1.3CALL DELAY2SJMP MAINDELAY1:MOV R0,#230DJNZ R0,$RETDELAY2:MOV R0,#115DJNZ R0,$RETDELAY1S:MOV R2,#20DLY1:MOV R3,#100DLY2:MOV R4,#248DJNZ R4,$DJNZ R3,DLY2DJNZ R2,DLY1RETEND
AT89C51单片机延时1秒程序怎么写???
可那你是想用定时器延时还是软件延时,两者都可以用STC官方的那个isp下载软件生成,软件模拟的可以直接1S,定时器定时的只能最大到65ms,所以需要多次定时累积。
汇编语言中如何设置延迟?
延时方法很多,用定时/计数比较方便也比较精确。
如果用软件延时,则可以用循环(多重、嵌套都行)。
根据时间长短确定循环次数,力求精确。
时间计算以机器的晶振频率为基准,算出各指令的运行时间(每条指令运行时间乘所循环的次数就是该指令的全部运行时间),所有指令运行时间的和就是延时的时间。
比如:设晶振频率为12MHz 则每机器周期为1us 513us延时程序为 DL513: MOV R7,#0FFH ;1us DJNZ R7,$;2us *255=510us RET ;2us 延时时间为1+510+2=513us 延时时间较长则可以用多重循环(以四重循环为例),如: KKKK0:MOV R2,#XX ;1us KKKK1:MOV R3,#LL ;1us*XX KKKK2:MOV R4,#NN ;1us*XX*LL KKKK3:MOV R5,#MM ;1us*XX*LL*NN DJNZ R5,$ ;2us *XX*LL*NN*MM DJNZ R4,KKKK3 ;2us *XX*LL*NN DJNZ R3,KKKK2 ;2us *XX*LL DJNZ R2,KKKK1 ;2us *XX RET ;2us 延时时间为1us+1us*XX+1us*XX*LL+1us*XX*LL*NN+2us *XX*LL*NN*MM+2us *XX*LL*NN+2us *XX*LL+2us *XX+2us 适当确定四个循环次数XX、LL、NN、MM就能得到准确的延时时间。
设单片机时钟频率为12MHZ,编写1分钟的软件延时子程序
这个是在调试过程中,调试的,一般都是这么用的!但是这个不是1S,要想精确时间 ,还是用定时器执行一行语句,一般都是一个或者两个机器周期! 机器周期就是晶振决定的一般都不是算的,在KEIL中调试出来的,更改两个for循环的值,一次一次试出来的!在keil中晶振设置不同 时间就不同
请问小米手机1S锁屏后,按电源键点亮屏幕有延迟是怎么回事?
下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而在AVR单片机上常用的有8.000MHz和4.000MH的晶振所以在网上查找程序时如果涉及到精确延时则应该注意晶振的频率是多大。
软件延时:(asm)晶振12MHZ,延时1秒程序如下:DELAY:MOV 72H,#100LOOP3:MOV 71H,#100LOOP1:MOV 70H,#47LOOP0:DJNZ 70H,LOOP0 NOP DJNZ 71H,LOOP1 MOV 70H,#46LOOP2:DJNZ 70H,LOOP2 NOP DJNZ 72H,LOOP3 MOV 70H,#48LOOP4:DJNZ 70H,LOOP4定时器延时:晶振12MHZ,延时1s,定时器0工作方式为方式1DELAY1:MOV R7,#0AH ;;晶振12MHZ,延时0.5秒 AJMP DELAYDELAY2:MOV R7,#14H ;;晶振12MHZ,延时1秒 DELAY:CLR EX0 MOV TMOD,#01H ;设置定时器的工作方式为方式1 MOV TL0,#0B0H ;给定时器设置计数初始值 MOV TH0,#3CH SETB TR0 ;开启定时器 HERE:JBC TF0,NEXT1 SJMP HERE NEXT1:MOV TL0,#0B0H MOV TH0,#3CH DJNZ R7,HERE CLR TR0 ;定时器要软件清零 SETB EX0 RET C语言延时程序:10ms延时子程序(12MHZ)void delay10ms(void){ unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--);}1s延时子程序(12MHZ)void delay1s(void){ unsigned char h,i,j,k; for(h=5;h>0;h--) for(i=4;i>0;i--) for(j=116;j>0;j--) for(k=214;k>0;k--);}200ms延时子程序(12MHZ)void delay200ms(void){ unsigned char i,j,k; for(i=5;i>0;i--) for(j=132;j>0;j--) for(k=150;k>0;k--);}500ms延时子程序程序: (12MHZ) void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); }下面是用了8.0000MHZ的晶振的几个延时程序(用定时0的工作模式1):(1)延时0.9MSvoid delay_0_9ms(void){TMOD=0x01; /*定时器0工作在模式1下(16位计数器)*/TH0=0xfd;TL0=0xa8;TR0=1; /*启动定时器*/while(TF0==0);TR0=0;}(2)延时1MSvoid delay_1ms(void){TMOD=0x01; /*定时器0工作在模式1下(16位计数器)*/TH0=0xfd;TL0=0x65;TR0=1; /*启动定时器*/while(TF0==0);TR0=0;}(3)延时4.5msvoid delay_4_5ms(void){TMOD=0x01; /*定时器0工作在模式1下(16位计数器)*/TH0=0xf4;TL0=0x48;TR0=1; /*启动定时器*/while(TF0==0);TR0=0;}
假如fosc=12MHz,编写1秒延时的时间程序
一、用定时器中断,50ms中断的1 次,20次就是1秒#include #define uchar unsigned charsbit 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 秒内只能循环而不能做其它事。
#includesbit LED=P1^0;void delay_ms(unsigned char ms){unsigned char i;while(ms--) for(i=0;i}void main(){while(1){delay_ms(1000);LED=~P1^0; //P1.0接一LED,可看到LED每1S亮或灭一次}}
单片机延时时间怎样计算
C程序中可使用不同类型的变量来进行延时设计。
经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); } 计算分析: 程序共有三层循环 一层循环n:R5*2 = 81*2 = 162us DJNZ 2us 二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us 三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us 循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us 延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms计算公式:延时时间= [(2*R5+3)*R6+3]*R7+5 二. 200ms延时子程序程序:void delay200ms(void){ unsigned char i,j,k; for(i=5;i>0;i--) for(j=132;j>0;j--) for(k=150;k>0;k--);} 三. 10ms延时子程序程序:void delay10ms(void){ unsigned char i,j,k; for(i=5;i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--);} 四. 1s延时子程序程序:void delay1s(void){ unsigned char h,i,j,k; for(h=5;h>0;h--) for(i=4;i>0;i--) for(j=116;j>0;j--) for(k=214;k>0;k--);}