编写100MS软件延时程序 汇编语言编写延时程序 - 电脑|办公 - 电脑办公-杀毒安全-网络-V3学习网
微商网
 
 
导航:首页 |电脑|办公|正文

编写100MS软件延时程序 汇编语言编写延时程序

时间:2021-06-15 13:41:15
怎么编写单片机晶振为6MHz,编写100ms延时程序?设主频12MHz的51单片机,编一个100ms二重循环的延时程序如下,供参考。其它汇编可以类似编程。SSSS:MOV R0, 99;本指令是单周期
作者:

编写100MS软件延时程序

怎么编写单片机晶振为6MHz,编写100ms延时程序?

设主频12MHz的51单片机,编一个100ms二重循环的延时程序如下,供参考。

其它汇编可以类似编程。

SSSS:MOV R0,#99;本指令是单周期指令,用时1usKKKK0:DJNZ R0,KKKKK;2usMOV R1,#125;1usLLLL0:DJNZ R1,LLLLL;2usNOP;1usNOP;1usNOP;1usNOP;1usLLLLL:SJMP LLLL0;2usNOP;1usNOP;1usNOP;1usNOP;1usNOP;1usKKKKK:SJMP KKKK0;2usNOP;1usNOP;1usNOP;1usNOP;1usNOP;1usRET;2us这段程序延时时间是1+99*[2+1+125*(2+1+1+1+1+2)+1+1+1+1+1+2]+1+1+1+1+2=100000us=100ms可以适当调整循环常数99、125以求减小NOP(空操作指令),使程序更加精练。

dshxxf程序不错,但延时时间是50301us,计算如下1+100*(1+2*250+3)

单片机系统晶振为6MHz,编写一个0.8秒的延时程序,采用定时器0,...

DELAY1MS: MOV R6,#47HDL0:MOV R5,#02HDJNZ R5,$DJNZ R6,DL0RETvoid delay1ms(void) {unsigned char a,b;for(b=71;b>0;b--)for(a=2;a>0;a--);}DELAY100MS:MOV R6,#0ADHDL0:MOV R5,#8FHDJNZ R5,$DJNZ R6,DL0RETvoid delay100ms(void) {unsigned char a,b;for(b=173;b>0;b--)for(a=143;a>0;a--);}

51单片机C语言程序,利用定时器1控制LED灯每隔100ms亮一个,并...

#include #include //本例采用89C52, 晶振为11.0592MHZ //关于如何编制音乐代码, 其实十分简单,各位可以看以下代码. //频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍; //所以拿出谱子, 试探编吧! sbit Beep = P1^5 ; unsigned char n=0; //n为节拍常数变量 unsigned char code music_tab[] ={ 0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00}; void int0() interrupt 1 //采用中断0 控制节拍 { TH0=0xd8; TL0=0xef; n--; } void delay (unsigned char m) //控制频率延时 { unsigned i=3*m; while(--i); } void delayms(unsigned char a) //豪秒延时子程序 { while(--a); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了! } void main() { unsigned char p,m; //m为频率常数变量 unsigned char i=0; TMOD&=0x0f; TMOD|=0x01; TH0=0xd8;TL0=0xef; IE=0x82; play: while(1) { a: p=music_tab[i]; if(p==0x00) { i=0, delayms(1000); goto play;} //如果碰到结束符,延时1秒,回到开始再来一遍 else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符 else {m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数 TR0=1; //开定时器1 while(n!=0) Beep=~Beep,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!) TR0=0; //关定时器1 } } 展开

51单片机,用键盘输入数码管显示的程序!!!用汇编语言,大家帮忙...

再显示下一个数码管数据,要关了上一个数码管你如果没有用译码器,那应该问题出在扫描部分。

在显示下一个数码管显示的时候,有两种方法。

这样一直扫描。

固定扫描时间,同时更新第二个数码管数据输出端的数据。

延时一段时间之后,一种是定时器中断,一种是自已用延时程序来自已作一个软件定时器。

还有一个要注意的问题就是按键要设置一个40-100ms的延时...

delay语句解释 最好全部帮忙说明下, 这是个atmega128编程。

谢谢大...

哥们,这就是一个流水灯程序。

让灯不停的来回亮。

m_delay(100)是延时100ms,在程序中两个for循环是由软件计算出时间的,至于代码前加__disable_interrupt(),代码后加__enable_interrupt()也就是防止在延时过程中延时被打断,中间的代码又称为临界代码。

原因很简单,如果在延时过程中发生了中断,中断处理和中断恢复会占用一定的时间,那么就增加了延时的时间。

所以这里是可以加上这两句代码的。

接下来就是配置B口为输出且输出为高电平,流水灯向左为变量L_shift,向右微R_shift。

每一个灯亮灭100ms。

大家还关注
    
阅读排行
推荐阅读