一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3568|回复: 18

[其他综合] 怎样将2个定时器嵌套使用???

  [复制链接]
发表于 2012-11-10 19:31 | 显示全部楼层 |阅读模式
同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,
1k(hz)的方波



实现这个课题给卡组了,过不去了
发表于 2012-11-10 19:35 | 显示全部楼层
仔细看看中断及定时那一章.注意中断的嵌套还有优先级设置.
回复

使用道具 举报

发表于 2012-11-10 19:47 | 显示全部楼层
怎么卡发?范围太大,
定不下元件,没笔,没纸,没时间,无法用实物验证,还是不知道定时器是什么。
提问要尽可能说清楚问题。

一个不带闹钟的时钟都有分,秒,时,的指针,
你这个才两个变量。画个画流程图就行了..............
回复

使用道具 举报

 楼主| 发表于 2012-11-10 20:06 | 显示全部楼层
我反复看了好多遍,明白优先级;可是不明白如何做嵌套使用,实现上面的课题要求?
回复

使用道具 举报

发表于 2012-11-10 21:17 | 显示全部楼层
真正写单片机怎么也得知道有限状态机是怎么回事
其实这个课题就是要引出软件工程的状态机这个概念
回复

使用道具 举报

 楼主| 发表于 2012-11-10 21:25 | 显示全部楼层
怎么讲,说说
回复

使用道具 举报

发表于 2012-11-10 22:49 | 显示全部楼层
本帖最后由 文句子 于 2012-11-10 23:01 编辑

网络上各个角度讲状态机的文章很多,你不要为了问问题而问问题.

在单片机中可以如下理解:1.它是延时的天敌2.函数重入是它的惯用伎俩3.它眼里没有控制流程,只关心状态,看到switch case时基本就是它在干活了

你这种情况算简单了,能实现的方法很多.
假如让你同时在8个io口上同时输出8种频率的方波,那你还不得疯了.
回复

使用道具 举报

发表于 2012-11-11 02:10 | 显示全部楼层
我是新手
我说说我的看法,定时器嵌套有什么意义,
写软件只要能把自己需要的功能实现即可,干嘛还要用定时器嵌套。自找麻烦不是!
回复

使用道具 举报

发表于 2012-11-11 11:05 | 显示全部楼层
如果是应试考试,有要求要【嵌套使用】,你可以弄安全点的,中断触发后,在程序里停止中断,运行代码后,再开放中断,这样不会因为代码没有运行完,又一次中断调用,弄成死循环,。

这个很简单的了,你弄两个全局变量,一个中断改变一个变量,然后在


int main(void)
{
  for (;;)
    {
???????????
    }
}
里面根据两个全局变量,做你爱做的事情
回复

使用道具 举报

 楼主| 发表于 2012-11-11 12:13 | 显示全部楼层
/*
同时用两个定时器控制蜂鸣器发声,定时器0控制频率,
定时器1控制同个频率持续的时间,
间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波
*/
#include <REG52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define _Bf_()  _Beef_ = ~_Beef_;
uchar code TAB[] = {8000,800,640,80,40,2,1,8};
//sbit D0 = P0^0;
//sbit _573_LT = P1^0;
//sbit _LED_EN = P1^1;
sbit  _Beef_ = P1^5;
//sbit _LED_D0 = P0^0;
//sbit _138_A  = P2^2;
//sbit _138_B  = P2^3;
//sbit _138_C  = P2^4;
uchar tt,aa,tim;
/*
void delayus(uint tm) //1US
{
uint i,k;
for(i = 0;i < tm;i ++)
  for(k = 0; k < 13;k ++)
  {
   _nop_();
  }   
}
void delayms(uint k)  //1MS
{
uint a;
for(a = 0;a < k;a ++)
{
  delayus(12500);
}  
}
*/
void uirt()
{
tim = 0;
tt = 0;
aa = 0;
P0 = 0;
//_573_LT = 1;
//_LED_EN = 0;
}
void uirt_TC()
{
TMOD = 0x11;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
TH1 = (65536-125)/256;
TL1 = (65536-125)%256;
EA = 1;
ET0 = 1;
ET1 = 1;
TR0 = 1;
TR1 = 0;

}
void main()
{
uirt();
uirt_TC();
while(1)
{
  
}
}
void time0() interrupt 1 using 0
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
tt++;
if(tt == 3)
  {
   tt = 0;
   tim ++;
   if(tim == 8)
   tim = 0;
   TR1 = 1;
   }
}
void time1() interrupt 3 using 1
{
TH1 = (65536-125)/256;
TL1 = (65536-125)%256;
aa ++;
if(aa == TAB[tim])
  {
   aa = 0;
   _Bf_();
  }
}


这是我昨晚写的,调试一晚上声音都不对,课题实现的就是一首歌“祝你平安”
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-3 11:17 , Processed in 0.036103 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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