单片机为什么要延时 51单片机汇编延时时间精确计算方法,小弟刚学51,不是很明白,麻烦大哥大姐帮帮忙,谢谢!

51单片机汇编延时时间精确计算方法,小弟刚学51,不是很明白,麻烦大哥大姐帮帮忙,谢谢!
51单片机汇编延时时间精确计算方法?,小弟刚学51,不是很明白,麻烦大哥大姐帮帮忙,谢谢!
要精确定时的话还是不要用延时来做了,还是用定时器做精确定时吧
如果非要用延时,那你得计算延时程序里每条指令的周期T,然后循环执行那几条指令n次,则循环完就是延时nT us,多重循环就难计算些了
51单片机c语言问题,麻烦各位大哥大姐帮帮忙。。。
三种可能,
1、如果是多个数码管都很亮的话,是数码管的驱动电流太大,这种情况可串接一个小电阻实现。
2、是显示子程序里面的延时时间太长,一般5MS就够了。
3、也可能是因为你定义int s[4];是局部变量,当这个子程序执行结束后,变量释放,数值是随机的。虽然说单片机的程序的执行速度很快能够弥补这一点,但还是有可能会出问题的。建议把int s[4];定义为全局变量来试试。
不会有大问题的。加油!
我不知道你的整体电路时怎么实现的。你补充的很对,单片机的输出的控制信号应接到锁存器的输入端,锁存器的输出信号应与数码管的控制引脚相连接,这样才有锁存的意义,锁存器的输入输出如果弄反了,肯定不能工作的。如果还不行,建议你先试试把数码管的位选和段选直接接到单片机的IO来试一试,看程序本身有没有问题。程序没问题的话,那就是电路的问题了。
89C51单片机求助,各位大哥大姐帮帮忙!
1,w=0x01,这句不会是灯亮,尚未赋值给P1口
循环的时候才从P1.0亮逐个亮到P1.7;
2,protues 放置的时候没有快捷键旋转吧,放好后再转,或在元件库里面先转好再放,库的最底可以调角度。
单片机c编程问题,大哥大姐帮帮忙,小弟晕啊,谢啦!
a=temp&0xf0<<x; 相当于 a=temp&(0xf0<<x)
b=temp&0x0f>>x;
改为:
a=(temp&0xf0)<<x;
b=(temp&0x0f)>>x;
>>的优先级高于 &
51单片机汇编高手帮帮忙:
我也是学不久.
开始主程序当然要从 0030H开始啦!
因为以后你要学到中断程序.入口(系统默认)必须在主程序之前存放.而中断又要占0000H-0023H;
分别是外中断0:0003H;
定时中断0:000BH
外中断1:0013H;
定时中断1:001BH;
串行中断: 0023H
然后就是主程序开始了
MAIN: LJMP 0030H;
....
一般延时使用的都是R5 R6 R7
比如
MOV R5,#FFH
F1: MOV R6,#FFH
F2: MOV R7,#24H
F3: DJNZ R7,F3
DJNZ R6,F2
DJNZ R5,F1
RET
其它的就只剩下特殊寄存器了.那些不能存东西.只能查或改.
而A 只是个暂存累加器.你可以把它当渡船了.
我来不是为分的.
建议你了解汇编就得了.没必要学深入.
直接去学C语言.
要想找书的话....其实很多书都是一样.就是封面不一样而已!
只要你到图书馆或者书店去.
书上写有[单片机入门]5个字回来一看就行了.
我当时就是随便拿了一本[手把手教你学单片机]学汇编的.
到后来全忘记了.根本没用.都是用C的多.
但是时间多学学也好!
-
还有就是..学这个东西得花点材料钱.
要是经济一般的话.买个几十块钱的实验板回去自己看书做实验,(任何一本相关书都可以).
仿真 建议用软件.
硬件太贵了.而且软件仿真跟实际也差不了多少..
编写软件就用KEIL吧!
我也是新手..希望能给你帮助!
各位大哥大姐帮帮忙!!!基于51单片机和ADC0809数字温度计
“供电运行时候ADC0809的D0-D7没有输出”是什么意思
根据你的描述,你对用的不是总线接法,所以,P0口要接上拉才能读到正确的数据
另外你测一下CLK,看有没有信号出来
51单片机电子琴程序,急啊,大哥大姐帮忙啊!叩谢!
我博客上有相关程序,还有我独创的音乐书写格式,你可以去参考。
大哥大姐帮帮忙,小弟谢过
删掉,重下
51单片机12HZ的,怎么计算延时时间?
应该是 12MHz 吧?
单片机内部,计时的单位是《机器周期T》。
下面是每条指令执行时,所用的周期数:
MOV R1,#60 1T
F: MOV R3,#248 1T
DJNZ R3,$ 2T
DJNZ R1,F 2T
RET 2T
下面是程序循环时所用的周期数:
MOV R1,#60
F: MOV R3,#248
DJNZ R3,$ 2 * 248 = 496 T
DJNZ R1,F (2 + 496 + 1) * 60 = 29940T
RET 2 + 29940 + 1 = 29943T
总共是: 29943T。
如果是 12MHz,时间就是:29943us。
另外,执行这个程序,还需要一条 CALL 指令,应该再加上 2T。
--怎么样实现5S的延时?
慢慢算呗。
如何算51单片机延时时间
用KEIL软件可以计算时间,将while的起始位置和终止位置加红点(双击即可);
然后左侧的SEC后面的就是执行的时间。
再给你几个延时程序做参考:
软件延时:(asm)
晶振12MHZ,延时1秒
程序如下:
DELAY:MOV 72H,#100
LOOP3:MOV 71H,#100
LOOP1:MOV 70H,#47
LOOP0:DJNZ 70H,LOOP0
NOP
DJNZ 71H,LOOP1
MOV 70H,#46
LOOP2:DJNZ 70H,LOOP2
NOP
DJNZ 72H,LOOP3
MOV 70H,#48
LOOP4:DJNZ 70H,LOOP4
定时器延时:
晶振12MHZ,延时1s,定时器0工作方式为方式1
DELAY1:MOV
R7,#0AH
;;晶振12MHZ,延时0.5秒
AJMP
DELAY
DELAY2: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--);
}
不过实际得到的延时会存在差异,所以最好用实验的方法调整延时参数。