智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2373|回复: 2
打印 上一主题 下一主题

中断

[复制链接]

3

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
QQ
威望
194
贡献
22
兑换币
0
注册时间
2009-11-26
在线时间
0 小时
跳转到指定楼层
1#
发表于 2010-1-18 08:55:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <AT89X51.H>                // 头文件
    #define uchar unsigned char
    uchar deda=0;                                   // 5mS计数单元清零              
    uchar sec=0;                                    // 秒单元清零         
    void init_timer();                              // 声明定时函数
    void sc();                         // 声明输出函数
//--------------------------------------------------- 主函数  ----------------------------------------------
  main()
    {
       init_timer();                                // 调用定时函数
        while(1)                                    // 无限循环
         {
            sc ( ) ;                                // 调用输出函数
         }
    }
//--------------------------------------------------- 定时函数 ---------------------------------------------

void init_timer()
   {
      TMOD=0x01;                                  // 设置定时器T0工作模式1
      TH0=-(4800/256);                            // 加载高字节计数初值      
      TL0=-(4800%256);                            // 加载低字节计数初值      
      IE=0x82;                                    // 启用定时器T0中断产生   
      TR0=1;                                      // 启动定时器T0开始计时   
   }

//---------------------------------------------- 中断服务函数 --------------------------------------------
void T0_srv(void) interrupt 1
{
        TH0=-(4800/256);                          // 重置定时器计时初始值  
        TL0=-(4800%256);   
deda++;                                           // 计数单元deda 值递增
    }                                                                                                   

//------------------------------------------------- 输出模块 -----------------------------------------------  
   void sc (  )                                                   
    {                                          
      if(deda>=200){sec++;deda=0;}                 // 中断200次秒加1,deda清0
      if(sec==30){P1_0=~P1_0;sec=0;}               // 满30次后,反相输出1次,清0
   
   }
这里的中断时怎么使用的!!!请大侠指点,就是不明白这个中断什么时候执行,是定时器的时间到了之后中断就执行吗?

1

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
威望
250
贡献
25
兑换币
0
注册时间
2010-1-9
在线时间
1 小时
2#
发表于 2010-1-21 15:56:26 | 只看该作者
只是产生PWM,可控制占空比。是定时器的时间到了就执行的。
回复 支持 反对

使用道具 举报

1

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
威望
216
贡献
46
兑换币
2
注册时间
2009-10-17
在线时间
7 小时
3#
发表于 2010-2-7 18:36:23 | 只看该作者
这不是飞思卡尔的程序吧
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 21:02 , Processed in 0.070572 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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