找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3613|回复: 3
收起左侧

定时器做可调频方波,为何频率调整速度变慢???

[复制链接]
ID:61390 发表于 2016-7-7 13:34 | 显示全部楼层 |阅读模式
//程序名:方波发生器,LCD1602显示
//T0用于方波输出,T1用于脉冲调整
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include"1602.h"         //液晶显示器头文件
#include"delay.h"
sbit out=P0^1;           //方波输出端口
sbit KEY_ADD=P3^0;            //频率增加按键
sbit KEY_DEC=P3^1;          //频率减小按键
#define uchar unsigned char
#define uint unsigned int
unsigned int a=1250;   //时钟周期数量

//定时器初始化
void InitTimer0(){
     TMOD|=0x01;                  //定时器方式1
     TH0=0xfb;   //定时器初值1.25ms,频率400HZ
     TL0=0x1e;
     TR0=1;                      //启动T0  
     ET0=1;                     //允许T0中断
     EA=1;                      //开总中断

}

//定时器0中断
void Time0Int() interrupt 1{
    TH0=(65536-a)/256;   //定时器初值1.25MS
    TL0=(65536-a)%256;
    out=~out;
}


//主函数
void main()
{  
   char temp[14];
   uint b;
   InitTimer0();  
   LCD_Init();         //初始化液晶屏
   LCD_Clear();        //清屏
   LCD_Write_String(0,0,"VOLT: 5.000    V");//写入第一行信息,主循环中不再更改此信息,所以在while之前写入
   LCD_Write_String(0,1,"FREQ:         HZ");

   while(1)
    {

      if(!KEY_ADD)  //如果检测到低电平,说明按键按下
        {
               DelayMs(10); //延时去抖,一般10-20ms
           if(!KEY_ADD)     //再次确认按键是否按下,没有按下则退出
               {
                   a++;
                                 
                }
             }

       else  if(!KEY_DEC)  //如果检测到低电平,说明按键按下
                {
                   DelayMs(10); //延时去抖,一般10-20ms
                    if(!KEY_DEC)     //再次确认按键是否按下,没有按下则退出
                     {
                        a--;   
                      }
                 }                                      
         b=500000/a;
        sprintf(temp,"%05.0f",(float)b);
        LCD_Write_String(6,1,temp);//显示到液晶第二行
     }
}

//b值变到620以上后,一致变化都很慢。
如果减至600以下,变化速度又变正常。
如果程序的初始值b为620时,速度也很慢显示也很慢!

请各位大仙分析一下是什么原因????

回复

使用道具 举报

ID:111634 发表于 2016-7-7 21:49 | 显示全部楼层
本帖最后由 zl2168 于 2016-7-7 21:51 编辑

实例69  输出周期脉冲方波(示波器显示)


Proteus仿真一下,确认有效。
实例69 输出周期脉冲方波.rar (34.2 KB, 下载次数: 10)
输出周期脉冲方波.jpg





以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版


书中电路和程序设计有详细说明,程序语句条条有注解。


回复

使用道具 举报

ID:111634 发表于 2016-7-7 21:51 | 显示全部楼层
实例70  输出矩形脉冲波(示波器显示)


Proteus仿真一下,确认有效。

实例70 输出矩形脉冲波.rar (34.07 KB, 下载次数: 6)
矩形脉冲波.jpg


以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版


书中电路和程序设计有详细说明,程序语句条条有注解。




回复

使用道具 举报

ID:61390 发表于 2016-7-23 06:31 来自触屏版 | 显示全部楼层
找到原因了,中断中加了运算呀导致的原因,加②个中间变量就解决了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表