当前位置:文档之家› 单片机各种延时程序符号的含义解析

单片机各种延时程序符号的含义解析

单片机各种延时程序符号的含义解析

单片机各种延时程序符号的含义解析

单片机延时程序

MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一本人的手上传到另一本人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOV R7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这条指令中被省略了(注意:并不是每一条传递指令都会省的,事实上大部份数据传递指令都会有传递者)。它的意义也很明显:将数据250送到R7中去,因此执行完这条指令后,R7单元中的值就应当是250。在250前面有个#号,这又是什么意思呢?这个#就是用来说明250就是一个被传递的东西本身,而不是传递者。那么MOV R6,#250是什么意思,应当不用分析了吧。

DJNZ:这是另一条指令,我们来看一下这条指令后面跟着的两个东西,一个是R6,一个是D2,R6我们当然已知是什么了,查一下D2是什么。D2在本行的前面,我们已学过,这称之为标号。标号的用途是什么呢?就是给本行起一个名字。DJNZ指令的执行过程是这样的,它将其后面的第一个参数中的值减1,然后看一下,这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移,转到什么地方去呢?可能大家已猜到了,转到第二个参数所指定的地方去(请大家用自已的话讲一下这条语句是怎样执行的)。本条指令的最终执行结果就是,在原地转圈250次。

执行完了DJNZ R6,D2之后(也就是R6的值等于0之后),就会去执行下面一行,也就是DJNZ R7,D1,请大家自行分析一下这句话执行的结果。(转去执行MOV R6,#250,同时R7中的值减1),最终DJNZ R6,D2这句话将被执行250*250=62500次,执行这么多次同一条指令干吗?就是为了延时。

一个问题:如果在R6中放入0,会有什么样的结果。

二、时序分析:

前面我们介绍了延时程序,但这还不完善,因为,我们只知道DJNZ R6,D2这句话会被执行62500次,但是执行这么多次需要多长时间呢?是否满足我们的要求呢?我们还不知

STC12系列单片机C语言的延时程序

STC12系列单片机C语言的延时程序 本举例所用CPU 为STC12C5412 系列12 倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。共有三条延时函数说明如下:函数调用 分两级:一级是小于10US 的延时,二级是大于10US 的延时 //====================小于10US 的【用1US 级延时】 ====================//----------微秒级延时---------for(i=X;i>X;i--) 延时时间 =(3+5*X)/12 提示(单位us, X 不能大于255)//================大于10US0;Ms--)for(i=26;i>0;i--);}i=[(延时值-1.75)*12/Ms-15]/4 如想延时60US 则 i=[(60-1.75)*12/6-15]/4=25.375≈26; 修改i 的值=26,再调用上面的【10US 级延时函数】Delay10us(6); 则就精确延时60US;如果想延时64US 可以用这二种函数组合来用: Delay10us(6); for(i=9;i>X;i--) 共延时64US//============== 对于大于20Ms 的可用中断来实现程序运行比较好===============中断用定 时器0, 1Ms 中断:void timer0(void) interrupt 1{ TL0=(0xffff-1000+2)% 0x100;TH0=(0xffff-1000+2)/0x100; //每毫秒执行一次if(DelayMs_1>0) DelayMs_1--;//大于20Ms 延时程序}函数调用void DelayMs(uint a)//延时 a 乘以1(ms)的时间。{ DelayMs_1=a; while(DelayMs_1);}如果延时50Ms 则函数值为DelayMs(50)tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

漫画式表情符号

漫画式表情符号 作者:akane 日期:2007-08-25 字体大小: 小中大利用「*」、「^」、「-」等符号作眼睛,「_」、「.」、「o」等符号放在中间成为口部,做出「^_^」、「*_*」、「^o^」、「^_~」之类的笑脸, 也有在笑脸旁边加上别的符号作为修饰物,表现更为丰富的表情,如「-_-|||」表示类似漫画中尴尬的面部,「-_-b」表示人物脸上滴下汗水等等。 基本形式 @_@ 疑惑、晕头转向 o_O 讶异 ^_^ 高兴 XD 眼睛鼻子都挤在一起,只露出咧开的大嘴巴。不一定代表什麼情绪,只是这种表情。 复杂形式 \^o^/ 抱抱 身体姿态 orz 败给你了(一个人五体投地的象形符号,有许多衍伸变化) orz or2 其他图示 <{=·····乌鸦飞过,冷场 泰国式颜文字:(-_-;)、(-o-) 东亚地区表情符号 在东亚地区由於书写文字在电脑上通常使用全形字体,利用全形字体也能够创作出许多不同类型的表情符号。

高兴 <( ̄) ̄)>满足且得意 <( ̄) ̄)/满足并且伸出手,表示赞同 <(@ ̄) ̄@)>满足地脸红 (# ̄▽ ̄#)害羞 \( ̄) ̄)/抱抱 b( ̄▽ ̄)d竖起双手拇指说好 ╰( ̄▽ ̄)╭眉飞色舞 ( ̄) ̄)↗出发吧 ○(* ̄) ̄*)○吃饱睡好 ♀( ̄▽ ̄)/优质女孩 ♂( ̄▽ ̄)/优质男孩 ╮(╯◇╰)╭啾~啾~亲一个 ╭(′▽‘)╭(′▽‘)╭(′▽‘)╯GO! ( ̄▽ ̄)~■□~( ̄▽ ̄)乾杯 <( ̄) ̄)><( ̄) ̄)><( ̄) ̄)>当我们同在一起 伤心 (┬_┬)流泪 (>﹏<)痛苦 (┬_┬)↘跌倒 〒▽〒真命苦 生气 …(⊙_⊙;)…嘎? ( ̄∞ ̄)猪! ()^))不满 ╰(‘□′)╯暴怒 ((‘□′))暴怒

单片机C延时时间怎样计算

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时 应该使用unsigned char作为延时变量。以某晶振为12MHz的单片 机为例,晶振为12M H z即一个机器周期为1u s。一. 500ms延时子程序 程序: 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--); } 计算分析: 程序共有三层循环 一层循环n:R5*2 = 81*2 = 162us DJNZ 2us 二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us 三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us

循环外: 5us 子程序调用 2us + 子程序返回2us + R7赋值 1us = 5us 延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms 计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5 二. 200ms延时子程序 程序: 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--); } 三. 10ms延时子程序 程序: 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--);

表情符号大全

表情符号大全 ?new news?new news? ???????????● ?●?????????????????♂♀????????⊙◎?????????????????????◇?????の★☆→あぃ£Ю〓§???¤????????≈???.. ..????? ???????? ~.~??-????【】┱┲?????????????????????????????????★☆??⊙????????╬『』∴? .??????????☆∷﹌の★◎??????

??????↘??▄█▌????????????????の☆→ ?ぃ£?????????????????????????????????????????????????????????????????????????????????????*????????????????????????o(?\'\'\'?)o?べò????????????べ?????????:基本符号?.1 ⊙●○①⊕◎Θ⊙¤㊣★☆♀◆◇◣◢◥▲▼△▽⊿◤◥?.2▆▇█ █ ■ ▓ 回□ 〓≡ ╝╚╔

╗╬ ═ ╓ ╩ ┠┨┯┷┏?.3┓┗┛┳⊥『』┌ ┐└ ┘∟「」↑↓→←↘↙♀♂┇┅﹉﹊﹍﹎╭?.4╮╰╯*^_^* ^*^ ^-^ ^_^ ^(^ ∵∴‖||︴﹏﹋﹌()〔〕?.5【】〖〗@:!/ " _ < > `,·。≈{}~ ~() _ -『』√ $ @ * & # ※?.6卐々∞Ψ ∪∩∈∏ の℡ぁ§∮”〃ミ灬ξ№∑⌒ξζω*?.7.·°∴☆..·°?Yesterday ?.·°?.8?KicaZ宝贝o(╥﹏╥)o ??じ☆ve 【??????】*°^_^.......???.9 ┢┦aΡpy ?^_^??????ぜ长ヤ乷?????Cool Friends??????.10【】—一▄【┻┳═一▄【┳一▄【┻═┳一▄【┳-一?.11 ▄【┻═

用单片机实现延时(自己经验及网上搜集).

标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。 在keil C51中,直接调用库函数: #include // 声明了void _nop_(void; _nop_(; // 产生一条NOP指令 作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。 在选择C51中循环语句时,要注意以下几个问题 第一、定义的C51中循环变量,尽量采用无符号字符型变量。 第二、在FOR循环语句中,尽量采用变量减减来做循环。 第三、在do…while,while语句中,循环体内变量也采用减减方法。 这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。 下面举例说明: unsigned char i; for(i=0;i<255;i++; unsigned char i; for(i=255;i>0;i--;

其中,第二个循环语句C51编译后,就用DJNZ指令来完成,相当于如下指令: MOV 09H,#0FFH LOOP: DJNZ 09H,LOOP 指令相当简洁,也很好计算精确的延时时间。 同样对do…while,while循环语句中,也是如此 例: unsigned char n; n=255; do{n--} while(n; 或 n=255; while(n {n--}; 这两个循环语句经过C51编译之后,形成DJNZ来完成的方法, 故其精确时间的计算也很方便。 其三:对于要求精确延时时间更长,这时就要采用循环嵌套的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。对于循环语句同样可以采用for,do…while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。 unsigned char i,j for(i=255;i>0;i--

特殊符号大全(2011.2.12日更新)

囧???⊕?Θ?¤㈱㊣??????▕??▓?▔⊿??▂▃▄▅▆▇██■?回□』∵╝╚╔╗╬═╓╩┠┨┯┷┏┓┗┛┳?》「┌┐└┘∟〉《′?″?↘↙??┇┅﹉﹊﹍﹎╭╮╰╯*^_^* ^*^ ^-^ ^_^ ^(^ ∮?‖||︴﹏﹋﹌()【】」『〒〓@:!/\ " _ < > `,?。?{}~ ~() _ -》「?$ @ * & # ?卐??Χ∪∩‵ ?の℡〔§?"?ミ灬μ??~μδω* ㄚ??+-??+-a/=∫??? ∧∨??‖※??∶∷?<>じ?veve′?????■?》「Χ?″??㊣?~〒〓@μδω□?』??ぷ?卐」『??∩¤????∽ㄚ∵↘↙┗┛╰?╮∽??????????≈???≌?????≒????????丨丩丬丶丷丿乀乙乂乄乆乛亅亠亻冂冫冖凵刂讠辶釒钅阝飠牜饣卩卪厸厶厽孓宀川巜彳廴三彐彳忄扌攵氵灬爫犭病癶礻糹纟罒 冈耂艹虍言西 兦亼亽亖亗盲凸凹卝卍卐匸皕旡玊尐开木囘囙囚四囜 囝回囟因女团団囤亢囦囧囨云囱囫囬园化囯困囱囲図围抡囶囷正囹固囻囼国图囿圀圁圂圃吾圅圆囵圈幸青国圌围园圏圐圑员圆圔圕图圗团圙圚圛圈圝圞 一般常用特殊符号 ,、。.?!~$%@&#*? ;?…¨,??? ‘’“”"?`?〃′??″↖↗↙↘㊣???⊕?????????□■▔▓§?〒????? 贴图符号大全 A、希腊字母大写ΑΒΓΓΔΕΖΘΗΚ∧ΜΝΞΟ?Ρ?ΤΥΦΦΧΨ B、希腊字母小写αβγδεδεζηθικλμνπξζηυθχψω C、俄文字母大写АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ D、俄文字母小写абвгде?жзийклмнопрстуфхцчшщъыьэюя E、注音符号??ㄅㄌㄐㄔㄘ?ー??ㄆㄉㄙㄍㄑㄕ?ヽ??ㄇㄊㄚㄎㄒㄖ???ㄈㄋㄛㄏㄓㄗ F、拼音o?ǎ-、ōμǒ′、±?°?ˉ、?3ǐ2、ū?ǔ·、ǖǘǚǜ1 G、日文平假名〔ぃぅぇぉかきくけこんさしすせそたちつってとゐなにぬねのはひふへほゑまみむめもゃゅょゎを

51单片机的几种精确延时

51单片机的几种精确延时实现延时 51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC 语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。 2 软件延时与时间计算 在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。 2.1 短暂延时 可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us( )、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs的延时函数可编写如下: void Delay10us( ) { _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); _NOP_( ); } Delay10us( )函数中共用了6个_NOP_( )语句,每个语句执行时间为1 μs。主函数调用Delay10us( )时,先执行一个LCALL指令(2 μs),然后执行6个_NOP_( )语句(6 μs),最后执行了一个RET指令(2 μs),所以执行上述函数时共需要10 μs。可以把这一函数

基于51单片机的精确延时(微秒级)

声明: *此文章是基于51单片机的微秒级延时函数,采用12MHz晶振。 *此文章共包含4个方面,分别是延时1us,5us,10us和任意微秒。前三个方面是作者学习过程中从书本或网络上面总结的,并非本人所作。但是延时任意微秒函数乃作者原创且亲测无误。欢迎转载。 *此篇文章是作者为方便初学者使用而写的,水平有限,有误之处还望大家多多指正。 *作者:Qtel *2012.4.14 *QQ:97642651 ----------------------------------------------------------------------------------------------------------------------序: 对于某些对时间精度要求较高的程序,用c写延时显得有些力不从心,故需用到汇编程序。本人通过测试,总结了51的精确延时函数(在c语言中嵌入汇编)分享给大家。至于如何在c 中嵌入汇编大家可以去网上查查,这方面的资料很多,且很简单。以12MHz晶振为例,12MHz 晶振的机器周期为1us,所以,执行一条单周期指令所用时间就是1us,如NOP指令。下面具体阐述一下。 ----------------------------------------------------------------------------------------------------------------------1.若要延时1us,则可以调用_nop_();函数,此函数是一个c函数,其相当于一个NOP指令,使用时必须包含头文件“intrins.h”。例如: #include #include void main(void){ P1=0x0; _nop_();//延时1us P1=0xff; } ----------------------------------------------------------------------------------------------------------------------2.延时5us,则可以写一个delay_5us()函数: delay_5us(){ #pragma asm nop #pragma endasm } 这就是一个延时5us的函数,只需要在需要延时5us时调用此函数即可。或许有人会问,只有一个NOP指令,怎么是延时5us呢? 答案是:在调用此函数时,需要一个调用指令,此指令消耗2个周期(即2us);函数执行完毕时要返回主调函数,需要一个返回指令,此指令消耗2个周期(2us)。调用和返回消耗了2us+2us=4us。然后再加上一个NOP指令消耗1us,不就是5us吗。

51单片机精确延时源程序

51单片机精确延时源程序 一、晶振为 11.0592MHz,12T 1、延时 1ms: (1)汇编语言: 代码如下: DELAY1MS: ;误差 -0.651041666667us MOV R6,#04H DL0: MOV R5,#71H DJNZ R5,$ DJNZ R6,DL0 RET (2)C语言: void delay1ms(void) //误差 -0.651041666667us { unsigned char a,b; for(b=4;b>0;b--) for(a=113;a>0;a--); } 2、延时 10MS: (1)汇编语言: DELAY10MS: ;误差 -0.000000000002us MOV R6,#97H DL0: MOV R5,#1DH DJNZ R5,$ DJNZ R6,DL0

RET (2)C语言: void delay10ms(void) //误差 -0.000000000002us { unsigned char a,b; for(b=151;b>0;b--) for(a=29;a>0;a--); } 3、延时 100MS: (1)汇编语言: DELAY100MS: ;误差 -0.000000000021us MOV R7,#23H DL1: MOV R6,#0AH I

棋影淘宝店:https://www.doczj.com/doc/f46866782.html,QQ:149034219 DL0: MOV R5,#82H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET (2)C语言: void delay100ms(void) //误差 -0.000000000021us { unsigned char a,b,c; for(c=35;c>0;c--) for(b=10;b>0;b--) for(a=130;a>0;a--); } 4、延时 1S: (1)汇编语言: DELAY1S: ;误差 -0.00000000024us MOV R7,#5FH DL1: MOV R6,#1AH DL0: MOV R5,#0B9H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET (2)C语言: void delay1s(void) //误差 -0.00000000024us { unsigned char a,b,c; for(c=95;c>0;c--) for(b=26;b>0;b--)

表情符号,~~~非常有用网络常用表情符号大集合哦~~~

全形顏文字 得意<( ̄︶ ̄)> 乾杯[]~( ̄▽ ̄)~*滿足( ̄ˇ ̄) 沒睡醒( ̄﹏ ̄) 狡猾(‵﹏′) 被打一巴掌( ̄ε(# ̄)無言( ̄. ̄) 無奈╮( ̄▽ ̄)╭ 裝傻( ̄▽ ̄)~* 驚訝(⊙?⊙) 發現( ̄. ̄)+ 驚嚇Σ( ° ?°|||)︴冷( ̄▽ ̄)" 沒辦法╮(╯▽╰)╭貓咪臉(= ̄ω ̄=) 疑惑( ̄3 ̄)a 阿達( ̄0  ̄)y 重創(。_。) 不(>﹏<) 懷疑(→_→) 睏( ̄o ̄) . z Z 崇拜m( __ )m 我想想(ˇ?ˇ)

生氣<( ̄﹌ ̄)> 就是你<( ̄﹌ ̄)@m Orz 挫折系列顏文字 這是經典... 大頭Orz 小頭orz 翹XXXXX Or2 放大版○| ̄|_ 雙手撐地ORZ 有表情囧rz 變化形OTL 換邊STO 換邊(小) _no 動物顏文字豬頭( ˉ(∞)ˉ ) 蝸牛"\@ 章魚(:?)≡ 蟑螂((( ●< 毛毛蟲(??)nnn 蝌蚪(: )~ 顏文字組合 使用時可加( ) 例:˙﹏˙ →(˙﹏˙) ˙?˙˙0˙˙︿˙˙ε˙˙ 3˙˙ω˙˙﹏˙˙?˙˙▽˙小眼睛

⊙?⊙⊙0⊙⊙︿⊙ ̄ε ̄ ̄3 ̄⊙ω⊙⊙﹏⊙⊙?⊙⊙▽⊙大眼睛  ̄? ̄ ̄0 ̄ ̄︿ ̄ ̄ε ̄ ̄3 ̄ ̄ω ̄ ̄﹏ ̄ ̄? ̄ ̄▽ ̄瞇瞇眼 ∩?∩∩0∩∩︿∩∩ε∩∩3∩∩ω∩∩﹏∩∩?∩∩▽∩微笑眼 ∪?∪∪0∪∪︿∪∪ε∪∪3∪∪ω∪∪﹏∪∪?∪∪▽∪悲傷眼 ˋ?ˊˋ0ˊˋ︿ˊˋεˊˋ3ˊˋωˊˋ﹏ˊˋ?ˊˋ▽ˊ生氣眼 >?<>0<>︿<>ε<>3<>ω<>﹏<>?<>▽<緊閉眼ˇ?ˇˇ0ˇˇ︿ˇˇεˇˇ 3ˇˇωˇˇ﹏ˇˇ?ˇˇ▽ˇ不爽眼 ╯?╰╯0╰╯︿╰╯ε╰╯3╰╯ω╰╯﹏╰╯?╰╯▽╰無奈眼 ≧?≦≧0≦≧︿≦≧ε≦≧3≦≧ω≦≧﹏≦≧?≦≧▽≦嬉皮眼 ????0??︿??ε??3??ω??﹏??△??▽?鬥雞眼 ????0??︿??ε??3??ω??﹏??△??▽?金魚眼 ●?●●0●●︿●●ε●● 3●●ω●●﹏●●?●●▽●外星人 +?++0++︿++ε++3++ω++﹏++?++▽+小丑眼 日系顏文字精選 (????)(??`ω′?)(?(?)?)(σ`?д?)σ(o?ω?o) 小眼睛 (???)(???*)(p?_q)(〃?o?〃)(*^?_?) (。???。) (*?0?)(?ε?●)(??ω?)(。?д?。)(???)(/??、)(?□?、*)(?-?。) (?▽?。)(?_?。) (?O?。)(ノ??。)(@???)(*??*)人(?ε?;) (?o ?)(?ェ?o)(′???『) 瞇瞇眼 (*  ̄ー ̄)( ̄ー ̄〃)(@ ̄ー ̄@)(*  ̄︿ ̄)(* ̄? ̄*)<(??*)> ( ̄(●●) ̄)( ̄?? ̄)(ー?ー)( ̄o ̄)( ̄、 ̄)(* ̄? ̄*)( ̄へ ̄)( ̄□ ̄) ( ̄~ ̄;)(。-?-。)( ̄ε ̄;)( ̄┬ ̄;)( ̄? ̄)(ノへ ̄、)(* ̄ro ̄)(ー人ー)(* ̄m ̄) 日系小眼睛 (′▽`〃)(′o`)(′ェ`)(′ε` )(=′ー`) ( ′θ`)(′○` )( ′-`)(′?`=)(*′▽`) (*′ノ0`)( ′ロ` )(′~`;)(′︿`)(*′?`*) (′m`)(′0ノ`*)(@。ε。@) (=′?`=)(●′ω`●) (′~`●)(′へ`、)(〃′o`)(;′⌒`) 日系大眼睛 (ΘΘ)(Θ~Θ〃)(ΘoΘ)(ΘェΘ)(Θ?Θ#)(ΘдΘ;)(Θ皿Θメ)(ΘーΘ*)(Θ0Θ●)(Θ▽Θ)(ΘεΘ?)(Θ?Θ。)(ΘへΘ)(Θ?Θ=)(Θ、Θ)(Θ?Θ@)(Θ3Θ) 圓珠眼 (°ー°〃)(#°Д°) (。□。) (*。?。) (*。?^*)(* ^ー。) (@。ー。@)(。?^?)(o。?。) (。▽。) (#。ε。#) (。?^d)(。?。;)(。皿。メ)(* 。3^) (〃。o。〃) ( °?°)(。?。) (°□°;) (ロ)。。(。Д。;)(*。ノO。)(;。。) 緊閉眼 (><)(;><)(>_<)(>.<)(>o<)(>▽<)(>O<)(o>▽<)(>?< ) (>▽<)(;>?<)( >з<)(o>ェ<)(>д<)(>皿<)(>_<、)(/_<。)(>。;)(>。ヘ)(ノ_<)(>。?)(>y<;)

单片机一些常用的延时与中断问题及解决方法

单片机一些常用的延时与中断问题及解决方法 延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP430单片机、C51单片机、8051F的单片机、avr单片机、STC89C52、PIC单片机…..在内的各种单片机常见的延时与中断问题及解决方法,希望对单片机新手们,有所帮助! 一、单片机延时问题20问 1、单片机延时程序的延时时间怎么算的? 答:如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。 如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 2、求个单片机89S51 12M晶振用定时器延时10分钟,控制1个灯就可以 答:可以设50ms中断一次,定时初值,TH0=0x3c、TL0=0xb0。中断20次为1S,10分钟的话,需中断12000次。计12000次后,给一IO口一个低电平(如功率不够,可再加扩展),就可控制灯了。 而且还要看你用什么语言计算了,汇编延时准确,知道单片机工作周期和循环次数即可算出,但不具有可移植性,在不同种类单片机中,汇编不通用。用c的话,由于各种软件执行效率不一样,不会太准,通常用定时器做延时或做一个不准确的延时,延时短的话,在c中使用汇编的nop做延时 3、51单片机C语言for循环延时程序时间计算,设晶振12MHz,即一个机器周期是1us。for(i=0,i<100;i++) for(j=0,j<100;j++) 我觉得时间是100*100*1us=10ms,怎么会是100ms 答: 不可能的,是不是你的编译有错的啊

51单片机延时模块程序

51单片机独立模块 一、延时模块 1、for循环延时 void delayms(UINT8 ms) { UINT8 x,y; for(x=ms;x>0;x--) for(y=112;y>0;y--); } 2、while循环延时 void delayms(UINT8 ms) { UINT8 x; while(ms--) for(x=112;x>0;x--); } 3、精确的单片机常用延时函数:(c代码误差0us 12M)(1)、延时0.5ms void delay0.5ms(void) //误差 0us { unsigned char a,b; for(b=71;b>0;b--) for(a=2;a>0;a--); } (2)、延时1ms void delay1ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } (3)、延时2ms void delay2ms(void) //误差 0us { unsigned char a,b; for(b=4;b>0;b--) for(a=248;a>0;a--); _nop_; //if Keil,require use intrins.h } (4)、延时3ms void delay3ms(void) //误差 0us

{ unsigned char a,b; for(b=111;b>0;b--) for(a=12;a>0;a--); } (5)、延时4ms void delay4ms(void) //误差 0us { unsigned char a,b,c; for(c=7;c>0;c--) for(b=8;b>0;b--) for(a=34;a>0;a--); } (6)、延时5ms void delay5ms(void) //误差 0us { unsigned char a,b; for(b=19;b>0;b--) for(a=130;a>0;a--); } (7)、延时10ms void delay10ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } (8)、延时15ms void delay15ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=238;b>0;b--) for(a=30;a>0;a--); } (9)、延时20ms void delay20ms(void) //误差 0us { unsigned char a,b; for(b=215;b>0;b--) for(a=45;a>0;a--); _nop_; //if Keil,require use intrins.h

表情符号全集

表情符表情符號大全號大全└(^o^)┘; 偶頭好狀壯捏 ﹌○﹋喔嗨呦^ˇ^≡ ~^o^~ 大家安安!! =^_^= 溫馨的微笑!!! Y(^_^)Y 舉雙手勝利 \^o^/ 歡呼 ^o^y 勝利^o^y ↖(^ω^)↗小豬為你打氣! ~^o^~ 加油呦! *^?^* 笑,打 *^ο^* 哦~,呵呵傻笑 *^◎^* 呵呵大笑(嘴唇好厚) *^÷^* 得意的笑(有上下唇的喲) ~~~^_^~~~ 笑斃囉(笑得連眼淚都蹦出來了...) (-.-)=3 鬆ㄌ一口氣~ ~~~///(^v^)\\\~~~ 微笑表示友善!!!~哈~哈~ ~@^_^@~ 可愛呦! \\*^o^*// 可愛ㄋㄟ~ ~*.*~ 害羞又迷人的小女生 #^_^# 臉紅了!! ∩__∩y 耶~~^^ (裝可愛?!)

(*^@^*)乖~(還含個奶嘴哦)X﹏X糟糕..完蛋的意思呀~~ (° ο°)~@ 暈倒了.. {{{(>_<)}}} 發抖 ╯﹏╰粉無奈~~ \(╯-╰)/ 很沒勁/無耐的意思 (╯︿╰﹀一臉苦瓜 ︸_︸粉無奈..粉悲情 -____-" 唉~~別提了..... 。_。受到打擊,表情呈現呆滯樣~ (*@︿@*﹀悲,暈 -︵- 好傷心. //(ㄒoㄒ)// 流淚中... ::>_<:: 哭 〒_〒鳴~~我在哭... %>_<% 我要哭了哦... ╰_╯我發火了!! 生氣的意思~~~眉毛都翹起來~~ >_<# 粉生氣~冒青筋 @x@ 生氣 (ˋ︿ˊ﹀-# 生氣 (>﹏<)不~ (*+﹏+*)~ @ 受不了~ x__x, 唉..... 別哭了!

============================================================= ?狀況外時會發生的情況 ?訝異的 >_<||| 很尷尬~!!! ^_^; 尷尬 ⊙﹏⊙∥∣°真尷尬~~ ^_^||| 好尷尬! ^_^" 尷尬的笑..... →_→ 懷疑的眼神~~ ..@_@|||||.. 頭昏眼花 …(⊙_⊙… ○圭~○列~~怎麼醬? o_o .... 沉思(說穿了"呆滯狀況" O__O" 呆滯的眼神~~~!! ///^_^....... 造成"冷"...乾笑~ ?o?||| 聽無(就是聽不懂ㄉ意思啦^^) ( )? 什麼意思?? (+_+)? 不知道你在什麼 (?ε?)? 哩公啥哇聽無啦~ o_O??? 發生啥事? @_@a 搔頭,疑惑 一一+ 銳利的眼神~

符号表情字符表情大全

符号表情字符表情大全 符号表情/字符表情大全ヽ(ˋДˊ)ノ ヽ(ˋ▽ˊ)ノ °(°ˊДˋ°)° ┑( ̄▽ ̄)┍ ┑( ̄Д ̄)┍ ┑( ̄。。 ̄)┍ ╮(╯Д╰)╭ ╮(╯▽╰)╭ (≧﹏≦) ( ̄ε ̄) 乀(ˉεˉ乀) ~( ̄▽ ̄~)(~ ̄▽ ̄)~ (*▔^▔*) \(▔^▔)/ ↖(▔^▔)↗ ㄟ(▔,▔)ㄏ \(▔▽▔)/

↖(▔▽▔)↗ ㄟ(▔▽▔)ㄏ ㄟ(▔^▔ㄟ) (╯▔^▔)╯ ㄟ(▔皿▔ㄟ) (╯▔皿▔)╯ ㄟ(▔︵▔ㄟ) (╯▔︵▔)╯ ㄟ(▔▽▔ㄟ)(╯▔▽▔)╯ ㄟ(▔︹▔ㄟ)(╯▔︹▔)╯ (~o▔▽▔)~o o~(▔▽▔o~) (╬▔^▔)凸 (╬▔︵▔)凸 (╬▔▽▔)凸 (╬▔皿▔)凸 (╬▔︹▔)凸 ⊙▂⊙⊙0⊙⊙︿⊙⊙ω⊙⊙﹏⊙⊙△⊙⊙▽⊙ ?▂??0??︿??ω??﹏??△??▽? ∩▂∩∩0∩∩︿∩∩ω∩∩﹏∩∩△∩∩▽∩ ●▂●●0●●︿●●ω●●﹏●●△●●▽●∪▂∪∪0∪∪︿∪∪ω∪∪﹏∪∪△∪∪▽∪ ≧▂≦≧0≦≧︿≦≧ω≦≧﹏≦≧△≦≧▽≦ >▂<>0<>︿<>ω<>﹏<>△<>▽< ╯▂╰╯0╰╯︿╰╯ω╰╯﹏╰╯△╰╯▽╰ +▂++0++︿++ω++﹏++△++▽+ ˋ▂ˊˋ0ˊˋ︿ˊˋωˊˋ﹏ˊˋ△ˊˋ▽ˊ ˇ▂ˇˇ0ˇˇ︿ˇˇωˇˇ﹏ˇˇ△ˇˇ▽ˇ

˙▂˙˙0˙˙︿˙˙ω˙˙﹏˙˙△˙˙▽˙ ≡(▔﹏▔)≡⊙﹏⊙∥∣°ˋ︿ˊ﹀-#╯︿╰﹀(=‵′=) <(‵^′)>o(?""?)o(ˉ▽ˉ;)(-__-)b\_/  ̄□ ̄||------\\(˙<>˙)/------<("""O""")> (#‵′)凸(‵▽′)ψ(°ο°)~@(^人^) (O^~^O)(*?↓˙*)[>\/<]↓。υ。↓ (*^︹^*)(/。\)('–')(^3^)╱~~ (;°○°)(>c<) 動物篇 <。)#)))≦烤魚(??)nnn毛毛蟲 \(0^◇^0)/麻雀 <*)>>>=<魚骨頭(=^^=)貓/(*w*)\兔子 ≡[。。]≡螃蟹(ˉ(∞)ˉ)豬■D"咖啡杯 (:≡水母(。。)~蝌蚪ε==3骨頭 <□:≡烏賊<‵▽′>老虎○●○—烤丸子 (:◎)≡章魚ζ。≡獅子(●-●)太陽眼鏡 @/"蝸牛Σ^)/烏鴉--<-<-<@玫瑰花 (((●<蟑螂(=^ω^=)狐狸<※花束 雜物篇 ■D〞咖啡杯∠※花束8<小剪刀 滿意.滿足

C51精确延时

C51中精确延时 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章51单片机Keil C 延时程序的简单研究,作者:InfiniteSpace Studio/isjfk,写得不错,他是用while(--i);产生DJNZ 来实现精确延时,后来有人说如果while里面不能放其它语句,否则也不行,用do-while就可以,具体怎样我没有去试.所有这些都没有给出具体的实例程序来.还看到一些延时的例子多多少少总有点延时差.为此我用for循环写了几个延时的子程序贴上来,希望能对初学者有所帮助.(晶振12MHz,一个机器周期1us.) 在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响. 一. 500ms延时子程序 程序: 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--); } 产生的汇编: C:0x0800 7F0F MOV R7,#0x0F C:0x0802 7ECA MOV R6,#0xCA C:0x0804 7D51 MOV R5,#0x51 C:0x0806 DDFE DJNZ R5,C:0806 C:0x0808 DEFA DJNZ R6,C:0804 C:0x080A DFF6 DJNZ R7,C:0802 C:0x080C 22 RET 计算分析: 程序共有三层循环 一层循环n:R5*2 = 81*2 = 162us DJNZ 2us 二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值1us = 3us 三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值1us = 3us 循环外: 5us 子程序调用2us + 子程序返回2us + R7赋值1us = 5us 延时总时间= 三层循环+ 循环外= 499995+5 = 500000us =500ms 计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5 二. 200ms延时子程序 程序: void delay200ms(void) { unsigned char i,j,k; for(i=5;i>0;i--) for(j=132;j>0;j--)

表情符号大全

表情符号大全

表情符号大全 |-P 捧腹大笑。 :-#| 这张笑脸上有着浓密的胡须。 :-< 难过时候的苦笑。 :-* 外国谚语:Put your money where your mouth is. :-# 抱歉,这是秘密,我答应人家不说的,我嘴巴被贴上了封条了。 -( 哼!不看我,受不了的痛苦…… :-% 银行家、股票玩家用的笑。 !-) 哇!是大眼瞪小眼,还是睁一只眼闭一只眼? :-& 我的舌头打结了,不能告诉你。 #-) 一夜没睡,眼睛都皱成一团了! :-') 感冒了。 #:-) 随时保持头发的乱度,决不轻易梳头。 :-'| 我感冒了,妈妈不许我出去玩。 :-9 舌头舔着嘴唇地笑 :-( 悲伤或者生气的脸。 %-) 哇,跌破眼镜!或者表示额前有着一小撮刘海。 :-(*)恶心,想吐。 %-} 呵呵呵……我可没醉……呵呵呵 :-(=)我的大门牙帅不帅?门牙很大。 :-{ 抿着嘴,一副如泣如诉的神情。 ^O^ 不必转头就可以看的笑脸。或是一只可爱的小猪。 ':-) 早上没睡好,刮胡子把眉毛剃掉了一边 ^-^ 不必转头就可以看的笑脸。 (-) 嘻,头发盖住了眼睛,我该去理发了。 ^-<@-@ 挤眉弄眼。 &:-) 头发是卷曲的。 ..~^.^~... 女生高兴得笑翻时甩着辫子。 {:-) 中分的发型,帅不帅? ~-~ 快乐的人儿。 (-: 写信人是个左撇子。 =^-^= 脸红什么? (-_-) 神秘笑容(这个不需转头看)。 (:)-) 哈哈!这是一个小蛙人,戴着潜水镜在偷笑。 (:-* 暗示这个人在生病、反胃。 :-)' 哇!都流口水了 (:-& 暗示这个人正在生气。 (:-( 紧皱眉头,又愁眉苦脸,不晓得又发生了什么事。 :-)8 打着领结的笑脸,是不是很帅。 (:-) 是一张大笑脸,也有人说是一个大光头。 :-* 生气了?怎么着嘴巴? (:-* Kiss…… :-/ 犹豫不决的笑容。 (:-…… 哇!心碎。

单片机精确毫秒延时函数

单片机精确毫秒延时函数 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。今天主要介绍软件延时以及单片机精确毫秒延时函数。 单片机的周期介绍在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期;而将在单位时间(如1秒)内所产生的脉冲个数称为频率。频率是描述周期性循环信号(包括脉冲信号)在单位时间内所出现的脉冲数量多少的计量名称;频率的标准计量单位是Hz(赫)。电脑中的系统时钟就是一个典型的频率相当精确和稳定的脉冲信号发生器。 指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。 时钟周期:也称为振荡周期,一个时钟周期= 晶振的倒数。对于单片机时钟周期,时钟周期是单片机的基本时间单位,两个振荡周期(时钟周期)组成一个状态周期。 机器周期:单片机的基本操作周期,在一个操作周期内,单片机完成一项基本操作,如取指令、存储器读/写等。 机器周期=6个状态周期=12个时钟周期。 51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/ 晶振频率)= x s。常用单片机的晶振为11.0592MHz,12MHz,24MHz。其中11.0592MHz 的晶振更容易产生各种标准的波特率,后两种的一个机器周期分别为1 s和2 s,便于精确延时。 单片机精确毫秒延时函数对于需要精确延时的应用场合,需要精确知道延时函数的具体延

单片机写延时程序的几种方法

单片机写延时程序的几种方法 1)空操作延時(12MHz) void delay10us() { _NOP_(); _NOP_(); _NOP_(); _NOP_(); _NOP_(); _NOP_(); } 2)循環延時 (12MHz) Void delay500ms() { unsigned char i,j,k; for(i=15;i>;0;i--) for(j=202;j>;0;j--) for(k=81;k>;0;k--); }

延時總時間=[(k*2+3)*j+3]*i+5 k*2+3=165 us 165*j+3=33333 us 33333*i+5=500000 us=500 ms 3)計時器中斷延時(工作方式2) (12MHz) #include; sbit led=P1^0; unsigned int num=0; void main() { TMOD=0x02; TH0=6; TL0=6; EA=1; ET0=1; TR0=1; while(1) { if(num==4000) { num=0;

led=~led; } } } void T0_time() interrupt 1 { num++; } 4)C程序嵌入組合語言延時 #pragma asm …… 組合語言程序段 …… #pragma endasm KEIL軟件仿真測量延時程序延時時間

這是前段事件總結之延時程序、由於不懂組合語言,故NO.4無程序。希望對你有幫助!!! 對於12MHz晶振,機器周期為1uS,在執行該for循環延時程式的時候 Void delay500ms() { unsigned char i,j,k; for(i=15;i>;0;i--) for(j=202;j>;0;j--) for(k=81;k>;0;k--); } 賦值需要1個機器周期,跳轉需要2個機器周期,執行一次for循環的空操作需要2個機器周期,那么,對於第三階循環 for(k=81;k>;0;k--);,從第二階跳轉到第三階需要2機器周期,賦值需要1個機器周期,執行81次則需要2*81個機器周期,執行一次二階for循環的事件為81*2+1+2;執行了220次,則(81*2+3)*220+3,執行15次一階循環,則 [(81*2+3)*220+3]*15,由於不需要從上階跳往下階,則只加賦值的一個機器周期,另外進入該延時子函數和跳出該函數均需要2個機器周期,故

相关主题
文本预览
相关文档 最新文档