当前位置:懂科普 >

综合知识

> 单片机暂时100ms的子程序怎么写 设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序

单片机暂时100ms的子程序怎么写 设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序

1.设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序

机器周期=12/6MHz=2μs

单片机暂时100ms的子程序怎么写 设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序

定时100ms的计数值 =100ms/2μs =50000

设T1工作于方式1(16位计数器)

计数初值 =2^16 -50000=65536=15536=3CB0H

MOV TMOD,#10H ;; T1工作方式1、定时模式

MOV TH1,#3CH ;; 写入计数初值高8位

MOV TL1,#B0H ;; 写入计数初值低8位

SETB TR1 ;; 启动T1,开始计时

SETB ET1 ;; 允许T中断

SETB EA ;; CPU开中断

SJMP $ ; ; 等待T1计时溢出中断

2.用单片机汇编一个100ms的延时程序

DELAY:

MOV R3,#100 ;2

DLY0:

MOV R2,#249 ;2*100

DLY1:

DJNZ R2,DLY1 ;249*2*100

MOV R2,#248 ;2*100

DLY2:

DJNZ R2,DLY2 ;248*2*100

DJNZ R3,DLY0 ;2*100

RET ;2

以上假设12M晶振,延时共2+(249*2+2+248*2)*100+2=100004微妙=100.004毫秒

3.单片机编写一个能延时1秒的子程序

通用办法,可以类推:

1

2

3

4

5

6

7

8

9

10

11

DELAY1s:

MOV R5,#08H ; ∵ 1s=1000000us

MOV R6,#0A2H ; ∴ 1000000/2=500000

MOV R7,#20H ; 500000用16进制表示为: 07A120

; 所以 R5=07H+1=08H

; R6=0A1H+1=0A2H

; R7=20H

loop: DJNZ R7,$ ; 延时时间≈2*[(R5-1)*256+R6-1]*256+R7

DJNZ R6,loop ; 当R5、R6等于0,相当于256参与运算

DJNZ R5,loop ; 当R5、R6等于0,相当于256参与运算

RET

4.单片机晶振为6MHz,编写100ms延时程序

嘿嘿 先给你改个错误:在使用6MHz晶振时,1个机器周期为1us,是不对的。

51单片机在使用6MHz晶振时 1个机器周期=12/6MHz=2us

可以编写100ms延时子程序 调用子程序YS100MS 就可以延时100ms

YS100MS: MOV R7,#100

L1: MOV R6,#250

DJNZ R6,$;

DJNZ R7, L1

RET

延时时间=(R6*2*2us)*R7=(250*2*2us)*100=100000us=100ms

呵呵 满意 就选满意回答

5.请大家帮忙做个单片机指令

void Delay100ms() //@11.0592MHz

{

unsigned char i, j, k;

_nop_();

_nop_();

i = 5;

j = 52;

k = 195;

do

{

do

{

while (--k);

} while (--j);

} while (--i);

}

这是一个100ms的程序,你调用10次就是1s了。

6.单片机编写一个能延时1秒的子程序

通用办法,可以类推:1234567891011 DELAY1s: MOV R5,#08H ; ∵ 1s=1000000us MOV R6,#0A2H ; ∴ 1000000/2=500000 MOV R7,#20H ; 500000用16进制表示为: 07A120 ; 所以 R5=07H+1=08H ; R6=0A1H+1=0A2H ; R7=20Hloop: DJNZ R7,$ ; 延时时间≈2*[(R5-1)*256+R6-1]*256+R7 DJNZ R6,loop ; 当R5、R6等于0,相当于256参与运算 DJNZ R5,loop ; 当R5、R6等于0,相当于256参与运算 RET。

  • 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/zonghezhishi/orl0zg.html