您当前的位置:五五电子网电子知识单片机-工控设备源码-程序自动演奏延迟程序电路及配套程序介绍 正文
自动演奏延迟程序电路及配套程序介绍

自动演奏延迟程序电路及配套程序介绍

点击数:7782 次   录入时间:03-04 12:02:19   整理:http://www.55dianzi.com   源码-程序

  我们通过对一个自动演奏延迟程序电路及配套程序的介绍,来讲解“置位”、“清位”等指令和延时程序的编制原理。
  
  一、发声原理
  
  由图可知,如果我们要使B2发出一定频率的声音,只要改变Pl.7的高低电位,并在Pl.7高低电位变换之间延长一段时间即可。改变Pl.7的高低电位可用专门的位操作指令,也叫做布尔操作指令。比如,我们用一条“置位Pl.7”指令,可使Pl.7呈高电位,然后延时一段时间,再执行“清位Pl.7”指令,使Pl.7呈低电位,延时一段时间后再返回去执行“置位”指令。经过上述操作,Pl.7的电位就完成了一个高低变化周期,B2也就完成了一次全振动。如此,循环上述程序,Pl.7就会持续地向B2送出一定频率的方波,B2就会持续地发出一定频率的声音来。

发声原理

  二、延时原理
  
  为了使B2发声的频率稳定,Pl.7呈高电位的时间和呈低电位的时间必须是一个定数,这就要求CPU在完成对Pl.7的“置位”和“清位”之间延迟一定的时间,这期间必须保证不再对Pl.7进行改变电位的操作。CPU可以停止对Pl.7操作,但CPU绝不会停下来,它仍会按一定的节拍在工作,所以,上述延时时间内CPU或者去完成对其它I/O口输入输出的操作,或者就在那里“计数”以实现延时。后者是延时的常用手段。
  
  通常是先向某一个寄存器装入一个常数,然后让CPU完成几个“空操作”,再将寄存器里的数减l并对该寄存器中的数值进行判断,如果寄存器中的数值不为零,则进行一轮空操作后再进行判断;如果寄存器中的数值为零,说明延时时间已到,接着完成延时后的操作。
  
  三、乐声及其程序
  
  乐声是由长短高低不同的音阶构成的。由于音阶高低不同的音调是由振动频率决定的,所以我们只要用程序来确定振动频率、各频率联接的先后次序及各频率持续的时间,就能实现乐声演奏。以《小草》前两句为例,音阶是“6-6-1-7-6,6-6-3-2-3”,而所用到的不重复音阶只有“6、7、l、2、3”等5个。我们分别将能通过B2发出上述5种音高的程序联接起来,就能使电路连续演奏出《小草》这首歌的部分弦律来。
  
  音阶“6”的频率是220Hz,周期约为5.545ms,半周期约2.27ms,这样,我们可编一段2.27ms的延时程序嵌在Pl.7高低电位变化之间,即可使B2发出“6”音。
  
  “6”音的程序见清单中0063H至0075H区间。
  
  由程序可以看出,执行“置位Pl.7、送数R2,#E3”后,又连续执行了三次“空操作”。每次空操作用时2(s,而执行“减1转移Xl”用时4(s,此一个循环用时恰为l0(s。“减1转移”是一条条件转移指令。执行结果是将指定寄存器中的内容减1,然后判断寄存器中的数值,如果寄存器中的数值不为零,即转移到指定位置;如果寄存器中的数值为零,接着执行下面的程序。由于“送数R2,#E3H”装入R2中的数为E3H,即227,所以,当R2中的数为零时,共完成上述循环227次,用时恰好是2.27ms,而“置位”和“送数”指令所用4(s则可以忽略。
  
  就是说,至此,Pl.7呈高电位的时间已持续了2.27ms。
  
  同样,接着执行“清位Pl.7”和下面的程序,又使Pl.7呈低电位的时间持续了2.27ms。这样,Pl.7就输出了频率为220HZ的方波信号的一个完整的周期。持续循环上述程序,B2就会发出“6”的音阶。其它音阶程序原理与之相同。各音阶子程序之后是子程序返回指令。



www.55dianzi.com

  四、自动演奏过程及子程序
  
  调用电路中P3.7接有按钮开关Sl,我们设计这样一段主程序:不断地判断Sl的状态,Sl每按动一次,就调用一个音阶的子程序,B2就发出一个音阶。Sl按下的时间的长短,决定着相应音阶持续的时间,因此,演奏节拍可通过Sl人为控制。“调用”指令属控制类指令,我们只学习一种“长调用”指令。此指令的操作码为12H,后边的操作数由两个字节构成,指出了所调用的子程序的入口地址。因此,该“调用”指令的操作空间跨度为64K。
  
  五、程序清单

程序清单

程序清单

程序清单

程序清单




本文关键字:程序  源码-程序单片机-工控设备 - 源码-程序

《自动演奏延迟程序电路及配套程序介绍》相关文章>>>