nop等于多少秒,为什么给单片机的IO口赋值后都要给一定延时例如P10xffNOP
来源:整理 编辑:亚灵电子网 2023-10-15 18:06:25
1,为什么给单片机的IO口赋值后都要给一定延时例如P10xffNOP
你这可是断章取义,以点代全。这是在哪看到的这么写的两行,就以为所有程序就都得这么写呀。这是谁这么写的?也不能代表全世界的人也都这么写。现在,有很多人写程序都很随便,也很随意,但不能以各别人的程序为例,就来说事。还有,这要看是在什么程序中,是在什么情况下,需要延时,不代表任何时候都要延时。因此,这个问题只是各别的,没有什么原因,更不能解释为什么是两微秒而不是20微秒。
2,知道单片机的晶振怎么计算它延迟一秒的程序
晶振频率分之1,就是时钟周期时间。一个_nop_();相当于1us;51单片机中一个机器周期等于12个时钟周期。延迟1秒就是1000000个_nop_。void Delay1000ms() //@11.0592MHzunsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;dodowhile (--k);} while (--j);} while (--i);}
3,汇编中出现nop是啥意思
"nop" 英文原型:no operation 表示无操作,相当于英文中的 do nothing
其实就是空指令空指令,可用在延时中,如(延时1秒):
DELAY:MOV R1,#100
D1: MOV R2,#100
D2: MOV R3,#50
DJNZ R3,NOP
DJNZ R2,D2
DJNZ R1,D1
RET
4,51单片机机器周期不解
标准51是12T的,就是说12个时钟周期(晶振周期,例如12M的,周期是1/12M,单位秒),机器做一个指令周期,刚好就是1/12M*12=1uS,常见指令例如nop就是一个周期,刚好1uS,其他的大多多于一个周期,乘除法更多。所以如果计算指令时间可以这样算。而现在很多51核的单片机工艺质量上去后,频率大大提高,增强型51有6T的,如果接12M的话,一个nop就只需要0.51uS,如果是STC的部分单片机12T的话,那只需要1/12uS。对于普通的51单片机而言,一个机器周期等于12个晶振的周期。12m晶振而言,12个周期正好1us。都有时钟了,它的倒数就是啊,1个振荡周期是1/12微秒(US),1个机器周期等于12个振荡周期,不正好是1US嘛一个振荡周期应该是1/12uS=83.333nS一个机器周期是振荡12下,就是0.08333*12=1uS
5,单片机c语言intrins头文件中的nop是什么意思
空操作 就是不进行任何操作的延时 作用一般就是用作延时用你好!空操作 就是不进行任何操作的延时 作用一般就是用作延时用打字不易,采纳哦!1、C语言中没有_nop_()函数,该函数是在51单片机中用的延时函数,延时一个指令周期。2、例如用6MHz的晶振,则如下for循环大约延时1秒。int i;for(i=0; i<6000000; i++) _nop_(); // 延时一个指令周期,相当于执行一条无意义的语言这个表示空运行,就是什么都不做!相当于延迟 如果是在12M的晶振且12分频的话一个nop差不多1us! 多用于这个与器件通信的这个时序因为有的器件的时序要求就是几个us的高电平或者低电平!就可以写几个_nop_();空操作,占指令周期但不起实质用,通常是为了保证稳定,给外设一定反应时间
6,这段延时是多少毫秒
你的看法是250*8=2000US=2毫秒,但是每一次for的执行也是需要时间的,刚好也是8个指令周期,所以还要加一倍的时间。刚好是4ms。你就直接用示波器看着调就可以了,注意优化级别不同,延时时间也会变滴。振荡周期和机器周期不一样的,C写的话还是软件仿真看吧16F73是四分频的,所以4M晶体,内核的振荡频率相当于1M,对应的机器周期就是1us。一个空指令的指令周期等于一个机器周期。所以根据以上的规则就可以知道这个函数执行的时间(前提是这个函数过程中没有任何中断打扰,现实中不太可能):1、函数现场保护和跳转进来的时间。2、多个空指令的循环体执行时间。3、函数现场恢复和跳转回去的时间。置一引脚为1,delay,置引脚为0,delay,在置1, 抓为0的时间不就好了,肯定不是2MS,汇编一条指令为1US,C又不是,用C语言写程序,会用到单片机更多的资源。我刚用示波器看了波形,这段延时程序延时了4毫米,怎么回事?其中没中断等,CPU就是在这里纯粹执行这段延时程序。
7,单片机 音乐盒
//此程序在硬件上调试通过//本程序的单片机晶振采用11.0592M#include <reg51.h>sbit speaker=P2^3; unsigned char timer0h,timer0l,time; //世上只有妈妈好数据表code unsigned char sszymmh[]= 6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1, 6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0 }; // 音阶频率表 高八位code unsigned char FREQH[]= 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, } ; // 音阶频率表 低八位code unsigned char FREQL[]= 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, };void delay(unsigned char t) unsigned char t1; unsigned long t2; for(t1=0;t1<t;t1++) for(t2=0;t2<8000;t2++) ; } } TR0=0; }void t0int() interrupt 1 TR0=0; speaker=!speaker; TH0=timer0h; TL0=timer0l; TR0=1; }void song() TH0=timer0h; TL0=timer0l; TR0=1; delay(time); }
void main(void) unsigned char k,i; TMOD=1; //置CT0定时工作方式1 EA=1; ET0=1;//IE=0x82 //CPU开中断,CT0开中断 while(1) i=0; while(i<100) k=sszymmh[i]+7*sszymmh[i+1]-1; timer0h=FREQH[k]; timer0l=FREQL[k]; time=sszymmh[i+2]; i=i+3; song(); } } }
还有不明白的话,我推荐你去这里看看别人怎么做: http://hjdz.5d6d.com/; 蜂鸣器唱《祝你平安》 * ; *;********************************************************************************/SPK bit P2.3
ORG 0000H LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断 RETI
START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82HMUSIC0: NOP MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0 MOV B,#00H ;表序号清0MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3MUSIC5: NOP MOV R6,A INC DPTR MOV A,B MOVC A,@A+DPTR ;取节拍代码送R7 MOV R7,A SETB TR0 ;启动计数MUSIC2: NOP CPL SPK MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环 MOV 20H,#00H ;等于,则取下一代码 INC DPTR; INC B LJMP MUSIC1MUSIC3: NOP CLR TR0 ;休止100毫秒 MOV R2,#0DHMUSIC4: NOP MOV R3,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1END0: NOP MOV R2,#64H ;歌曲结束,延时1秒后继续MUSIC6: MOV R3,#00H LCALL DEL DJNZ R2,MUSIC6 LJMP MUSIC0DEL: NOPDEL3: MOV R4,#02HDEL4: NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RET NOPDAT:db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20hdb 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20hdb 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20hdb 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20hdb 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10hdb 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20hdb 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20hdb 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20hdb 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10hdb 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80hdb 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20hdb 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20hdb 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10hdb 20h,10h,2bh,10h,26h,30h,30h,80h,00H
END
文章TAG:
nop等于多少秒等于 多少 为什么