找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7075|回复: 2
收起左侧

[求助]关于控制频率输出的问题

[复制链接]
ID:7020 发表于 2009-2-5 13:07 | 显示全部楼层 |阅读模式
我写的这个程序想实现的效果是通过外部中断0的下降沿触发方式实现P2.6口40k频率的发射和停止。(端口低电平有效)

#include <reg52.h>
#include <stdio.h>
#define uint unsigned int
uint i=0;
sbit p2_6=P2^6;
void main()
{
TMOD=0x02; /*定时器工作在模式2*/
 IT0=1;
 EX0=1;
 ET0=1;
 TH0=249;   /*初始化定时器*/
 TL0=249;
 EA=1;
 while(1)
 {
  if(i%2==1) /*用i的值决定开始还是停止发送40k的频率*/
   {
    TR0=1;
   }
else

    p2_6=1;
 }
}


void extern_int0() interrupt 0
{
 TR0=0;  /*进入外部中断首先关闭定时器中断*/
 i++;      /*每进入一次外部中断改变一次i的值*/
}

void timer0() interrupt 1
{
 p2_6=!p2_6;   /*发送频率*/
}

我想实现的效果是当我不给外部0中断时p2.6口不会发射频率,当我给一个INT0口一个下降沿跳变时,定时器开始工作通过定时器中断来实现40k频率波的发射。当我再次给一个INT0口一个下降沿跳变时,P2.6口停止频率的发射。但是我现在出现的情况是有时候情况是正常的,即我给它一个外部中断它就会从一个状态转换为另一个状态,有时候要给INT0口几次下降沿跳变才会从一种状态转换为另一种状态。请大家帮我看看这个程序的问题出现在哪?该怎么解决?

回复

使用道具 举报

ID:2162 发表于 2009-2-22 00:39 | 显示全部楼层
当下降沿中断在定时器正处理中断的时候触发就会出问题,该成低电平触发试下
如果要再完美点就在频率输出后,再启动前重装定时器初值
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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