【学习笔记】 单片机的40个经典实验之18:“嘀、嘀、……”报警声

  一、实验任务

  二、电路原理图


  图 4.18.1

  三、系统板硬件连线

  (1. 把“单片机系统”区域中的 P1.0 端口用导线连接到“音频放大模块”区域中的 SPK IN 端口上,

  (2. 在“音频放大模块”区域中的 SPK OUT 端口上接上一个 8 欧或者是 16 欧的喇叭;

  四、程序设计方法

  (1.生活中我们常常到各种各样的报警声,例如“嘀、嘀、…”就是常见的一种声音报警声,但对于这种报警声,嘀 0.2 秒钟,然后断 0.2 秒钟,如此循环下去,假设嘀声的频率为 1KHz,则报警声时序图如下图所示:上述波形信号如何用单片机来产生呢?

  (2. 由于要产生上面的信号,我们把上面的信号分成两部分,一部分为 1KHZ方波,占用时间为 0.2 秒;另一部分为电平,也是占用 0.2 秒;因此,我们利用单片机的定时/计数器 T0 作为定时,可以定时 0.2 秒;同时,也要用单片机产生 1KHZ 的方波,对于 1KHZ 的方波信号周期为 1ms,高电平占用 0.5ms,低电平占用 0.5ms,因此也采用定时器 T0 来完成 0.5ms 的定时 ;最后,可以选定定时/计数器 T0 的定时时间为 0.5ms,而要定时 0.2 秒则是 0.5ms 的 400 倍,也就是说以 0.5ms 定时 400 次就达到 0.2 秒的定时时间了。

  五、程序框图


  主程序框图

  中断服务程序框图

  图 4.18.2

  六、汇编源程序

  T02SA EQU 30H

  T02SB EQU 31H

  FLAG BIT 00H

  ORG 00H

  LJMP START

  ORG 0BH

  LJMP INT_T0

  START: MOV T02SA,#00H

  MOV T02SB,#00H

  CLR FLAG

  MOV TMOD,#01H

  MOV TH0,#(65536-500) / 256

  MOV TL0,#(65536-500) MOD 256

  SETB TR0

  SETB ET0

  SETB EA

  SJMP $

  INT_T0:

  MOV TH0,#(65536-500) / 256

  MOV TL0,#(65536-500) MOD 256

  INC T02SA

  MOV A,T02SA

  CJNE A,#100,NEXT

  INC T02SB

  MOV A,T02SB

  CJNE A,#04H,NEXT

  MOV T02SA,#00H

  MOV T02SB,#00H

  CPL FLAG

  NEXT: JB FLAG,DONE

  CPL P1.0

  DONE: RETI

  END

  七、C 语言源程序

  #include <AT89X51.H>

  unsigned int t02s;

  unsigned char t05ms;

  bit flag;

  void main(void)

  {

  TMOD=0x01;

  TH0=(65536-500)/256;

  TL0=(65536-500)%256;

  TR0=1;

  ET0=1;

  EA=1;

  while(1);

  }

  void t0(void) interrupt 1 using 0

  {

  TH0=(65536-500)/256;

  TL0=(65536-500)%256;

  t02s++;

  if(t02s==400)

  {

  t02s=0;

  flag=~flag;

  }

  if(flag==0)

  {

  P1_0=~P1_0;

  }

  }

阅读本文用了:

秒,转发只需1秒

转载是一种智慧分享是一种美德❀ 

(0)

相关推荐