单片机暂时100ms的子程序怎么写 设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序
- 综合知识
- 关注:3.2W次
机器周期=12/6MHz=2μs
定时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