单片机主频为12MHz,用循环指令编写延时为20ms的延时子程序 你的复态度好像比较浮躁嘛。静心…制…假设你会51啊:2113defineTIME120000voidDelay20mS(unsignedinti){unsignedintj;while(i-。0)for(j=0;j追问:怎么一5261人一个样啊?4102追答:我给出的是1653C语句的通常描述方法。还有的是汇编语句的描述方法。要实现这个指令延时的功能,很多方法,但基本原理是一样的,就是让单片机重复做某条指令。指令的运行需要时间,且固定。执行的次数,我们约定好,定时时间就可以得到了。建议根据你自己对语言的掌握,选择并仿真看看具体的延时时间。在KEIl环境中,仿真51的话,在项目窗口的reg一栏可以看到这个时间。00加载更多
单片机的汇编延时程序我比较清楚,但是微机原理的就很糊涂,请问危机原理的延时的原理是什么? 可以再补充下问题么?就一般而言,单片机和微机原理讲的延时原理应该是一样的。定时器的定时原理:比如一秒钟定时,假定时钟频率为1000hz,内部对时钟采样计数,如果记录了1000个时钟,那么消耗的时间为1000*(1/1000)=1秒,定时器就会产生标志位,并且对计数器清零,重新开始一条语句占用几个指令周期,是由你的mcu决定的,你可以查看mcu的体系结构和指令集。语句循环产生延时例子:while(int i=1000){i-;}
晶振为6Mhz编写一个1S延时的子程序,用汇编,要方法? 用中断,定时器工作方式1,计数最大数为65536,那么从15536开始计数,达到65536要计50000次,6M的晶振机器周期为2微秒,那么溢出一次耗时为100000微秒,计数溢出10次即为1秒钟 ORG 000BH AJMP TIME0 ORG 30H MAIN:MOV 30H,#00H;先把30H地址的数据清零,用做给溢出计数用 MOV TMOD,#00000001B MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0 LOOP:AJMP LOOP TIME0:PUSH ACC PUSH PSW INC 30H;进入中断后就自增 MOV A,30H CJNE A,#10,T_RET;看计数器的溢出到了10次没,没有就跳到T_RET再继续从15536计数 T_L1:延时1秒到了,写自己的程序吧。MOV 30H,#00H;记得把溢出计数器再次清零 T_RET:MOV TH0,#3CH MOV TL0,#0B0H POP PSW POP ACC RETI END