原创 6.报警产生器

2007-4-21 10:29 5248 12 13 分类: MCU/ 嵌入式

1. 实验任务<?XML:NAMESPACE PREFIX = O />


P1.0输出1KHz500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。


2. 电路原理图


<?XML:NAMESPACE PREFIX = V />


点击看大图


1


点击看大图
图2


3.程序设计内容


(1.       信号产生的方法


500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms,信号电平每500us变反1次;


 


4. 程序框图


点击看大图


图3


5. 汇编源程序


FLAG                           BIT 00H                                       ;用FLAG代替地址00H


                                      ORG 00H


START:                        JB P1.7,START

                         ;P1.7为1时跳转


                                      JNB FLAG,NEXT

                     ;FLAG(00H)为0时跳转


                                      MOV R2,#200


DV:                               CPL P1.0

                                     ;P1.0取反


                                      LCALL DELY500

                       ;跳转到DELY500延时


                                      LCALL DELY500


                                      DJNZ R2,DV

                              ;R2减1,不为0时转移到DV


                                      CPL FLAG


NEXT:                         MOV R2,#200


DV1:                   CPL P1.0


                                      LCALL DELY500


                                      DJNZ R2,DV1


                                      CPL FLAG


                                      SJMP START


DELY500:           MOV R7,#250


LOOP:                         NOP

                                       ;空操作,占1个机器周期


                                      DJNZ R7,LOOP


                                      RET


                                      END


6. C语言源程序


#include


#include


 


bit flag;


unsigned char count;


 


void dely500(void)


{


  unsigned char i;


  for(i=250;i>0;i--)


    {


      _nop_();


    }


}


 


void main(void)


{


  while(1)


    {


      if(P1_7==0)


        {


          for(count=200;count>0;count--)


            {


              P1_0=~P1_0;


              dely500();


            }


          for(count=200;count>0;count--)


            {


              P1_0=~P1_0;


              dely500();


              dely500();


            }


        }


    }


}


7. 仿真文件


rar

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户141569 2008-12-21 16:21

要求1KHz信号响100ms,500Hz信号响200ms,交替进行. 你这个是不是有1KHz与500Hz,我发现你没考虑过频率呀,是不???
相关推荐阅读
用户5577 2007-05-12 23:57
13.动态数码显示技术四
13.动态数码显示技术四——利用中断实现数码管动态显示1.  实验任务<?XML:NAMESPACE PREFIX = O />   数据端与P0口相连(参见原理图),控制端分别与P2.4...
用户5577 2007-05-12 23:41
13.动态数码显示技术三
13.动态数码显示技术三——LED数码管动态扫描显示“12345”和“HELLO”字样1.  实验任务<?XML:NAMESPACE PREFIX = O />如图4.13.1所示,P0端...
用户5577 2007-05-12 23:23
13.动态数码显示技术二
13.动态数码显示技术一——LED数码管动态扫描显示数字1~8一、电路和效果二、汇编源程序LED        EQU   P0            ORG 00H START:       MOV...
用户5577 2007-05-09 22:33
51单片机使用点滴
来源:电子世界  作者:吴健  8051单片机是我们最常见的一种单片机,我用8051已经很久了,也教过一段时间的单片机课程,在这里把自己的心得与大家分享一下。 一、硬件部分 一定要记得接晶振和复位电路...
用户5577 2007-05-09 22:29
什么是复位电路?
  简单地说,单片机的复位就和计算机的重起是一样的概念、任何单片机在工作之前都要有个复位的过程,复位对单片机来说,是程序还没有开始执行,是在做准备工作。一般的复位只需要5ms的时间。  如何进行复位呢...
用户5577 2007-05-09 22:27
什么是单片机的定时器?
  MCS—51系列的单片机一般有两个内部的16位定时器/计数器.分别称为T0和Tl。这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。   那...
我要评论
1
12
关闭 站长推荐上一条 /4 下一条