首页 > 算法 > 神经网络 > 51中延迟1s应为多少,51延时1S程序汇编

51中延迟1s应为多少,51延时1S程序汇编

来源:整理 时间:2023-09-12 22:13:34 编辑:亚灵电子网 手机版

1,51延时1S程序汇编

DELAY:MOV R4,#25 ;延时子程序,12M晶振延时1.001秒 L3: MOV R2 ,#200L1: MOV R3 ,#248L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET
去下一个单片机小精灵 可以帮你生成精确延时的代码11.0592的delay: ;误差 -0.651041666667us mov r6,#66hdl0: mov r5,#03h djnz r5,$ djnz r6,dl0 ret

51延时1S程序汇编

2,51单片机延时一秒函数晶振12MHZ

#include<reg51.h>#unsigned char t;main()EA=1;ET0=1;TR0=1;TH0=0xd8; //10msTL0=0xf0;while(1)if(t==100)};}void ti0() interrupt 1TH0=0xd8;TL0=0xf0;t++; }

51单片机延时一秒函数晶振12MHZ

3,51单片机延时程序问题

我以2MS为例说明一下: 单片机的晶振周期为12HZ,则执行一条代码为一个机器周期,为1微妙(uA),所以2MS=10*200(uA), 对R2赋值200(4位二进制数最大值为256,所以只能取到200)即#C8H。再对R2循环20次就实现了2MS延时。至于100ms、 200ms、 1s等等方法类似,只是调整相应的初值。多设置几次循环就行。 程序代码如下: DELAY: MOV R1,#0AH ;赋值R1为10次 DELAY1: MOV R2,#C8H ;赋值R2为200次 DELAY2: DJNZ R2,$ ;R2自减到0,不到0继续等待 DJNZ R1,DELAY1 ;R2减到0后R1自减1,重新给R2赋初值后继续循环,直到R1到0为止,延时结束 RET
看你用汇编还是C

51单片机延时程序问题

4,关于51单片机1s延时的问题

延时里面的前3个for循环后面的分号去掉有分号只会自己循环不会执行for下面的程序的顺便发个12MHz晶振1S的延时给你参考一下void delay1s(void) unsigned char a,b,c; for(c=46;c>0;c--) for(b=152;b>0;b--) for(a=70;a>0;a--);}

5,MCS51单片机的编程题已知系统晶振频率为12MHZ采用定时器T

void timer0() interrupt 1 { uchar count; TH0 = (65536-50000)/256; TL0 = (65536-50000)%256; count++; if(count == 20) { count = 0; sec++; if(sec == 100) { sec = 0; } } }
#include <reg51.h> void InitTimer0(void) { TMOD = 0x04; TH0 = 0x1C; TL0 = 0x18; EA = 1; ET0 = 1; TR0 = 1; }
1楼说了,主程序里还要定义一下的。1秒用定时器来实现,还有很多种方法的

6,定时器怎么做延时函数用比如说要精确延时1s该怎么写百度知

unsigned long TimeTickCount;//1ms计时器void Timer0Configuration();void Delay1ms(unsigned int a);void main()while(1)Delay1ms(1000);//1s延时;}}void Delay1ms(unsigned int a)//0~65535unsigned long b;//0~0xffffffffb = TimeTickCount;//记下及时器初始值while((TimeTickCount-b<a)||(0xffffffff+TimeTickCount-b<a));//当计数器未溢出只须用 计数器实时变化的值-其初始值//当计数器溢出则须用 计时器上限值+计数器实时变化的值-其初始值}void Timer1Configuration()TMOD=0X10;//选择为定时器模式,工作方式1。TH1=0Xfc; //给定时器赋初值,定时1000usTL1=0X18;ET1=1;//打开定时器1中断允许EA=1;//打开总中断TR1=1;//打开定时器}void interrupt_timer1() interrupt 3 //1000usTH1 = 0xfc; //重装TL1 = 0x18;TimeTickCount++;//1000us计时器}

7,51单片机怎么理解这句话延时1ms 3j2i3332101010微

程序中 j 循环 执行了33次,注释中的计算数据 是 3j+2,for 循环中,只有第一句 j=0 被执行一次,判断条件 j<33 及 增量 j++ 均执行了 33次,那么 公式中 的 加2 就是 j=0 的执行时间。从 注释 的计算中得知,计算单位为 us,赋值语句(j=0)只算了 2个单位(us),可知 单片机机械周期(指令周期)为 1us;根据 单片机 指令周期时间 ,赋值语句 (等号) Td 占 2个机械周期(2us),自增/自减 语句 Tz 占 1个机械周期(1us),判断语句(>、<、==等)Tp 占 2个机械周期(2us);在 本程序中,j 的 for循环 赋值语句 执行 1 次(共 Td ×1=2us),自增语句 及 判断语句 均执行 了33 次(共(Tz+Tp)×33=3us×33),j 循环总和为 (Tz+Tp)×j+Td=3j+2=3×33+2;i for 循环 则决定了 j 循环的次数,初略计算 可以 使用 (3j+2)×i,精确计算 还得考虑 i 的 Td 也=2us,i 的 (Tz+Tp)×10 也=3×10=30us,也就是说,i 循环本身 总时间是 3i+2 =32us。综上,实际 总时间 是 3i+2+(3j+2)×i=1042us
你的外部时钟是12mhz的吗?对于大部分指令, 执行时间为一个机器周期, 即12个时钟周期。举个例子, 如果是12mhz的话, 相当于一条指令的执行时间为12*(1/12mhz)即1us。你把它带到你的延迟函数就明白是延迟多久了

8,51单片机 延迟时间问题

这是靠单片机指令周期延时的程序,12M晶振,每个周期为1us,每个for语句3个周期,所以124*3*3约等于1ms,所以可以进行简单的延时。
这是一个双重循环,通过选取xms的大小来控制延时时间。xms*124是总体的循环次数。次数越多,延时越久。
举例来说明吧:delay: mov r0,#10 ;1delay1: mov r1,#100 ;1*10 djnz r1,$ ;2*100*10 djnz r0,delay1 ;2*10 ret ;2total=1+1*10+2*100*10+2*10+2=2033time=total*1/(focse/12)总结:第一步:在延时程序没行后边标注该指令执行的机器周期第二步:在机器周期后边乘以该指令循环的次数第三步:计算总共用的机器周期数第四步:计算总延时时间。
这些数据都是在keil或proteus仿真里面反复测试得到的,没有什么道理可讲,如果你想延时指定的时间可以仿真试试,这样你就知道这些数据怎么来的了,如果你只是想用这个函数,就别问那么多了,只会浪费你自己的时间
如上楼说的,确实反复测试得到,也可以把这些语句反汇编,然后通过计算那些语句的机器周期从而得到执行时间,若严格的话还需要包括调用时间,有些麻烦。还是仿真测试好些。

9,51单片机延时

org 00h jmp main org 000bh ;timer0中断入口 push psw ;cjne指令会影响PSW,所以先压栈 mov tl0,#0b0h mov th0,#3ch ;装入初值 inc r7 cjne r7,#10,next ;50ms中断,10次就是0.5s mov r7,#00h ;在此处写中断程序的具体内容next: pop psw retimain: mov tmod,#01h mov th0,#3ch mov tl0,#0b0h mov r7,#00h ;r7记录中断次数 setb tr0 setb et0 setb ea jmp $
我以2ms为例说明一下: 单片机的晶振周期为12hz,则执行一条代码为一个机器周期,为1微妙(ua),所以2ms=10*200(ua), 对r2赋值200(4位二进制数最大值为256,所以只能取到200)即#c8h。再对r2循环20次就实现了2ms延时。至于100ms、 200ms、 1s等等方法类似,只是调整相应的初值。多设置几次循环就行。 程序代码如下: delay: mov r1,#0ah ;赋值r1为10次 delay1: mov r2,#c8h ;赋值r2为200次 delay2: djnz r2,$ ;r2自减到0,不到0继续等待 djnz r1,delay1 ;r2减到0后r1自减1,重新给r2赋初值后继续循环,直到r1到0为止,延时结束 ret
#include <regx52.h>bit t;main() TMOD=0x01; TH0=(-50000)/256; TL0=(-50000)%256; EA=1; ET0=1;TR0=1; while(1);}void time0()interrupt 1 static unsigned char i=0; TH0=(-50000)/256; TL0=(-50000)%256; i++; if(i==10) i=0; t=~t; }}我不知道你利用定时器延时来干嘛用,就随便给你写了一个,一般我们直接用软件延时就可以了,定时延时是较为麻烦和不便的,上面的程序中,设了一个全局bit类型的变量t,每过半秒t就会取反一次,你就可以利用t的值去执行某种操作,如:if(t==1) P1_0=0;else P1_0=1; 如果P1_0是一个LED灯,并且这段程序在循环控制结构中,那灯就会循环每半秒闪烁一次。具体程序具体对待!定时器定时、中断系统你参考上面的程序。下面是毫秒级的软件延时,精确到小数点的第三位:ys(unsigned int y) unsigned char s; while(y--) for(s=122;s>0;s--);}

10,如何算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工作方式为方式1DELAY1:MOV R7,#0AH ;;晶振12MHZ,延时0.5秒AJMP DELAY DELAY2:MOV R7,#14H ;;晶振12MHZ,延时1秒 DELAY:CLR EX0MOV TMOD,#01H ;设置定时器的工作方式为方式1MOV TL0,#0B0H ;给定时器设置计数初始值MOV TH0,#3CHSETB TR0 ;开启定时器 HERE:JBC TF0,NEXT1SJMP HERE NEXT1:MOV TL0,#0B0HMOV TH0,#3CHDJNZ R7,HERECLR TR0 ;定时器要软件清零SETB EX0RET 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--); }不过实际得到的延时会存在差异,所以最好用实验的方法调整延时参数。
mcu 可以 写一个,t0 ,t1两个, 例如:mcu的等待延时 void delay(uint z) uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); 下面这两个是独立运行的,不浪费mcu的时间 /***初始小灯0.25秒循环闪烁***/void timer0() interrupt 1 th0=(65536-500)/256; tl0=(65536-500)%256; if(tt==5) tt=0; led=0; else led=1; }/***按下按键初始小灯1秒闪烁数码管同步加1***/void timer2() interrupt 3 th0=(65536-50000)/256; tl0=(65536-50000)%256; if(tt0==20) tt0=0; if(key==0) tr0=0; led=0; num++; if(num==10) num=0; num0++; if(num0==6) num0=0; } } else led=1; }}
文章TAG:51中延迟1s应为多少延迟应为多少

最近更新

  • 470d多少pin电源线,蓝宝石470d要用多大的电源470d多少pin电源线,蓝宝石470d要用多大的电源

    蓝宝石470d要用多大的电源满载达到208w电源必需额定450W2,rx480用的是多少pin的电源接口Rx480是单6pin供电单6pin电源接口啊,上面有些啊,看显卡接口旁边也可以看到的。3,买了块470d显卡发.....

    神经网络 日期:2024-04-11

  • 5532 前置电路图,ne5532预调谐电路图5532 前置电路图,ne5532预调谐电路图

    使用功率放大器电路的前一级,时基电路可以用作振荡器或延迟电路,但不能用作放大器电路。音色和音调电路可以从无线电杂志中的演示电路中选择,它们可以由正负电源供电-或者所有电路都可以.....

    神经网络 日期:2024-04-10

  • 电平变换电路,2/4电平转换电平变换电路,2/4电平转换

    连接:CMOS电路和TTL电路可以通过电平转换来匹配它们的电平域值。电平转换,完整的MOS晶体管双向电平转换电路如下图所示,在I中经常使用,输出高压低于电源电压,本电路适用于UART/USART串行端.....

    神经网络 日期:2024-04-10

  • 相机电路知识,摄像机电路相机电路知识,摄像机电路

    否则,可能会导致摄像头电路短路。根据驱动电路的相数,驱动电路可分为单相、两相和三相,数码相机镜头保养知识镜头是数码相机的重要组成部分,电路通电后,超声波电机目前将采用两相输入,当被触.....

    神经网络 日期:2024-04-10

  • 电网电压波动导致跳闸,电压波动导致跳闸电网电压波动导致跳闸,电压波动导致跳闸

    过电压:电路中的过电压可能导致跳闸保护,这可能是由电网电压波动或雷电引起的。在此期间,用电量较小时电网电压会升高,不良线路或电器的回波电压会升高并泄漏,微动开关启动器插在电源上不.....

    神经网络 日期:2024-04-09

  • 电动转向电路图,单相电机正反转电路图电动转向电路图,单相电机正反转电路图

    电动机根据不同的电源分为DC电动机和交流电动机,电力系统中的大多数电动机是交流电动机。参考电路图(如图所示,电机在规定时间范围内连续可逆正反转运行的自动控制电路,能让马达反转,电机正.....

    神经网络 日期:2024-04-09

  • 贴片电阻0603多少瓦,贴片电阻0603在生产中可以替代0805吗一个是18W一个是110贴片电阻0603多少瓦,贴片电阻0603在生产中可以替代0805吗一个是18W一个是110

    贴片电阻0603在生产中可以替代0805吗一个是18W一个是110应该是可以的,工程那边能通过就没什么大问题2,0603封装的贴片电阻功率是多大0603封装的贴片电阻功率是0.1W这个很便宜,一厘多钱一.....

    神经网络 日期:2024-04-09

  • 增益可控放大电路实验,可控增益放大器电路课程增益可控放大电路实验,可控增益放大器电路课程

    可编程增益放大器电路可以对模拟信号进行放大、转换和滤波,将设备中的多个功能模块互连,重构电路,并调整电路的增益、带宽和阈值。输入信号和输出信号被反转;它具有大的电流和电压增益;通常.....

    神经网络 日期:2024-04-09