您好,欢迎访问三七文档
任务四简易电子琴(定时器)任务要求•利用定时器编程,实现蜂鸣器发出“1”音调。•分别发出“1-7”七种音调。•编制程序,使按键A按下后蜂鸣器依次发出1-7的音阶,并循环。再按下按键A后声音停止。•增加数码管显示音调。实现定时常用的三种方法:软件定时:占用CPU时间,效率低。用555电路:不可编程。可编程芯片:功能强,需要另外扩展。单片机内部有2个16位的定时/计数器:T0、T1。使用灵活,编程方便。--优先选用符号名称中断引起原因C编程中断号INT0外部中断0P3.2引脚的低电平或下降沿信号0INT1外部中断1P3.3引脚的低电平或下降沿信号2T0定时器0中断定时计数器0计数回零溢出1T1定时器1中断定时计数器1计数回零溢出3TI/RI串行口中断串行通信完成一帧数据发送或接收引起中断4加1计数器(高8位、低8位)TMOD,工作方式设置;TCON,启动、停止及设置溢出标志。GATEC/TM1M0GATEC/TM1M0TH1TL1TH0TL0T1方式T0方式T1引脚T0引脚机器周期脉冲内部总线TMODTCON外部中断相关位TF1TR1TF0TR0定时/计数器的结构定时/计数器的工作原理计数器脉冲来源:振荡器脉冲经过12分频T0或T1引脚的外部脉冲定时/计数器的核心:加1计数器。定时模式:对内部机器周期计数定时时间t=计数值NxTcy计数模式:对外部事件脉冲计数计数脉冲周期要大于2Tcy计数器全1时,再输入1个脉冲就回零,并发生溢出(TCON中TF0或TF1置1),发中断请求。计数值:溢出时计数器值-计数初值。TMOD:工作方式。TCON:控制启动和中断申请。方式控制寄存器TMODGATEC/TM1M0GATEC/TM1M0TMOD(89H)T0T1GATE:门控位=0,启动/停止仅由软件对TRx位写“1/0”控制=1,启动/停止由软件对TRx位写“1/0”和在外中断INTx引脚出现信号的高/低共同控制C/T:计数器/定时器选择位=0,片内时钟定时器=1,外部事件计数器M1、M0:工作方式设置位00:13位计数器01:16位计数器10:可自动重装的8位计数器11:T0分为2个8位计数器,T1此时停止工作启/停控制寄存器TCONTCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0TFx:溢出标志位=0,计数未满=1,计数溢出在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。TRx:运行控制位=0,停止计数=1,启动计数;TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚00机器周期TH0TL08位5位溢出TCONTMODD0D7D7D0申请中断1方式013位计数。由TL0的低5位和TH0的8位组成。TH0溢出时,置位TF0标志,向CPU发出中断请求。方式116位计数,由TL0作为低8位、TH0作为高8位。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位8位溢出TCONTMODD0D7D7D0申请中断初值:X=216-N方式2自动重装初值的8位计数方式,适合于用作较精确的脉冲信号发生器。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位溢出TCONTMODD0D7D7D0申请中断初值:X=28-N方式3T0分成为两个独立的8位计数器TL0和TH0,T1处于方式3时停止计数。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚11机器周期TH0TL08位溢出TCONTMODD0D7D0申请中断机器周期8位申请中断溢出确定工作方式(对TMOD赋值)TMOD=方式字;预置定时/计数初值(写入TH0、TL0或TH1、TL1)TH0=高8位初始值;TL0=低8位初始值;TH1=高8位初始值;TL1=低8位初始值;开中断(对IE赋值)ET0=1;ET1=1;EA=1;启动定时/计数器(TR0或TR1置位)TR0=1;TR1=1;每个机器周期包括12个振荡周期,若晶振频率为12MHz,一个机器周期:若晶振频率为6MHz,一个机器周期:计数个数为:则应装入的计数初值为:2uS1061212T6p==晶振频率x2npcTTx方式0:n=13方式1:n=16方式2:n=8方式3:n=8定时器的四种工作方式方式1当TMOD中M1M0=01时,定时计数器工作在方式1。★该模式是一个16位定时/计数方式。寄存器TH0和TL0是以全16位参与操作,计数方式时最大计数216=65536(个外部脉冲)用于定时工作方式时,定时时间为:t=(216一T0初值)×时钟周期×12★16寄存器(THX和TLX)中THX提供高8位、TLX提供低8位计数初值方式2当TMOD中M1M0=10时,定时器工作在方式2。方式2是8位的可自动重装载的定时计数方式。★16位的计数器被拆成两个8位,其中TL0用作8位计数器,TH0用以保持计数初值。当TL0计数溢出,置位TF0,TH0中的初值自动装入TL0,继续计数,循环重复计数。★用于计数工作方式时,最大计数值为:28=256(个外部脉冲)。用于定时工作方式时,其定时时间为;t=(28—TH0初值)×振荡周期×12★这种工作方式可省去用户重装常数的程序,并可产生精确的定时时间,特别适用作串行口波待率发生器。设系统时钟频率为12MHz,编程实现从P1.1输出周期为1s的方波。解:方式1的最大计数值216=65536T=12/12MHz=1μs最大定时时间t=65536×1μs=65.536ms方式1:采用硬件定时+软件计数方式2:采用硬件定时+硬件计数•定时0.5s=硬件定时10ms×软件计数50次•选择定时/计数器0工作于方式1,定时方式。x=10ms/1μs=10000X=216-10000=65536-10000TH0=(65536-10000)/256;TL0=(65536-10000)%256;采用全局变量作软件计数,中断处理方式:GATEC/TM1M0GATEC/TM1M0TMOD(89H)EAESET1EX1ET0EX0IE(A8H)TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)#includereg51.hsbitP1_1=P1^1;unsignedchari;voidmain(void){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;i=0;TR0=1;while(1);}voidtime0_int(void)interrupt1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;i++;if(i==50){P1_1=!P1_1;i=0;}}任务布置•利用定时器编程,实现蜂鸣器发出“1”音调。•分别发出“1-7”七种音调。•编制程序,使按键A按下后蜂鸣器依次发出1-7的音阶,并循环。按下按键B后声音停止。•增加数码管显示音调。
本文标题:简易电子琴
链接地址:https://www.777doc.com/doc-3174741 .html