1. 单片机延时程序设计
void delay(unsigned int x) //延时 x ms
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
延时1ms 即为使x=1;
这程序延时约1ms(x=1时用keil测出来约 0.96831272ms,近似1ms),用C语言很难做到准确的1ms。注意晶振为11.0592MHZ的时候用~ 晶振为12MHZ时 把 i=120 近似值1ms
2. 单片机延时程序的用法
6M晶振,一个机器周期2us 方式0最多计数65536也就是13072.us 无法满足10s 因此可以用定时器计数50000也就是0.1s 计10个这样的数就能满足要求,也就是一开始给一个寄存器赋值10,进入中断减1
3. 单片机延时程序设计方案
可以有两种方法,设晶振为12M,则 第一种方法:用延时的方法实现 DELAY: MOV R3,#10;延时子程序,延时1秒 D1: MOV R4,#200 D2: MOV R5,#250 D3: DJNZ R5,D3 DJNZ R4,D2 DJNZ R3,D1 RET END 第二种方法:用定时器的方法实现 ———— MOV R1,#20 ———— DLY: MOV TMOD,#00000001B;延时子程序,设定定时器的工作方式 D1: SETB TL0,#176(65536-50000); 15536/256 (余数) SETB TH0,#60;设置初出溢出值50ms,定时2S (商) SETB TR0 ;启动定时器 JNB TF0,$;是否溢出,没有溢出等待,溢出走一条指令 CLR TF0;清零溢出 DJNZ R1,D1;走20次,刚好1秒 RET END
4. 单片机延时程序设计图
DEL1S:MOV R7,#10D1: MOV R6,#200D2: MOV R5,#250 DJNZ R5,$ DJNZ R6,D2 DJNZ R7,D1 RET说明:
1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5
5. 单片机延时程序设计原理
用定时器计时10就可以了,检测到按键按下后启动定时器,在定时器的中断函数里判断到了10秒就关闭LED
6. 单片机延时程序代码
通过调用这个子程序就可以实现DEL1S:MOVR1,#10DEL1:MOVR2,#100DEL2:MOVR3,#250DEL3:DJNZR3,DEL3;2*2*250*100*10=1000000usDJNZR2,DEL2DJNZR1,DEL1RET没有做具体计算,要准确的定时1s的话可以稍微改动一下R1R2R3的值。6M晶振则机器周期为2us,一条指令执行为2个机器周期,由此得出其延时时间最好的方式是使用定时器中断来做延时,更精确
7. 单片机延时程序设计题
比如说:void delay (){ int x; char y; for(x=1000;x>0;x--) { for(y=100;y>0;y--)};}x每减一次,y减100次,x一共减少1000次这个子程序的延时时间是:1000*100=100ms(默认时间是us)如果想更精确的话,可以用软件进行调试 for语句下面的{}还可以省略有不清的可以多交流