《匠人手记》推荐网上购书渠道:
EDN网(ednchina)购书入口   >>>
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历

百宝专栏

  • 首页 相册 标签
  • 电脑应用(65)
  • 供需信息(22)
  • 写书近况(82)
  • 匠人文集(115)
  • 硬件技术(171)
  • 匠人公告(86)
  • 与非门专栏(545)
  • 匠人笔记(115)
  • 团队撰写(96)
  • 汽车电子(52)
  • 编程技巧(465)
  • 程序宝典(476)
  • 网络酷文(472)
  • 开发工具(19)
  • 资料宝藏(274)
  • 项目管理(11)
  • 藏经宝阁(42)
  • 趣味设计(5)
  • 社区热贴(2)
  • 比尔盖茨熊专栏(0) 
  • 百宝信息

    载入中...

    百宝流量

    (2006-07-01开始)



    匠人手记

    从定时器开始说中断
    程序匠人 发表于 2006-10-12 12:51:00  阅读全文 | 回复(0) | 引用通告 | 编辑

    从定时器开始说中断什么叫中断?这个对于刚进入MCU界的人来说是一个难以了解的问题,因为我第一次学单片机的时候就不完全不了解什么叫中断。后来慢慢来知道原来中断是单片机运行到一半突然飞到某个地方运行某些东西运行后又飞回来而已。

    后来学着学着就了解到中断的意义了,不过对于第一次接触单片机的人来说,还是很难解说的清楚的。

    所以这里我做个比喻吧。假设你客厅的电话来电时,有铃声和闪光提示,而你在房间看书,那么有电话来的时候,你听到铃声,然后放下手上的书,并用书签记录你的页数,再出去听电话。听完后,回到房间,从书签标记的位置继续看你的书。

    OK,分析上面的几个动作,电话响并被你听到,那是中断来了;你用书签标记位置,那是现场保护;听电话,就是执行中断咯;听完电话,你要从你刚才标记的地方继续看书,那就是中断执行完毕后回到原中断处继续执行程序。这个就是中断的过程了。

    假设没有了中断的话,你会如何?你会用扫描法:电话不会响铃了,只有闪光,但你必须在房间看书,那你只能每看几段,就跑出去看看是否有电话到,如果没有,就跑回去看书,如果有了,那你就听电话吧。很明显,扫描法效率非常低,因为你每看一会书就得花时间看看电话的闪光以判断是否有电话的到来,这样你看书的效率就大大减低了。而且扫描法还有个最大的缺点,就是中断丢失,试想如果你扫描的间隔过大(就是看很久书才去看一下电话),那你极有可能丢了几个重要的来电。

    其实上面的比喻,正能很好地表现中断的作用——其实中断就是为了处理突发事件。

    对于单片机来说,突发的事情实在太多了,例如用户对单片机输入数据,按键,那都是单片机本身无法估计的事情。外来数据的突然进入,也属于突发事件。这些外部来的突发信号,一般就由单片机的外部中断来处理。外部中断其实就是一个管脚的状态改变引起的中断,在之后会说。

    这里先介绍定时器和定时器中断:

    在测量控制系统中,常常需要实时时钟,以实现定时控制、定时测量或定时中断等。也常需要计数器以实现对外部事件的计数。MCS-51单片机中有两个(增强型有三个)十六位的定时计数器T0,T1,简称定时器0和定时器1,两者均为可编程定时计数器。

    ——以上P话抄自《单片微型计算机与接口技术》94页第一段-_-#!!!!!

    其实你问清楚什么叫定时器,我真的不知道用什么言语来说。刚学的时候,听过这样一句话“定时器是单片机上的宝贵资源”,当时不了解,为什么这个资源是宝贵的呢??后来才慢慢知道定时器的伟大所在。当然这个是需要一定的时间来领悟的咯,在这里你还是踏踏实实地往下看吧:)

    一开始我就说了,看本教材的时候你手上需要至少一本单片机的基础书,什么书随便买本就是了,反正现在的单片机书啊,都是你抄我我抄你的了,都一个样,最重要的还是例子吧。拿起你的书看看单片机的中断寄存器和定时器寄存器吧,咱们要开始写程序咯,时间是不等人D~~~~

    单片机方式0是13位的,从来就没用过,有16位不用你用13位?真浪费也~~~

    然后是计算装入值,16位啊,就是16位2进制,2的16次方,就是65536了。16位定时器就是从某个所谓的装入值开始自加,加到65536就计满,如果你允许定时器中断,那就有中断来临。所以16位方式装入值的计算很简单:

    65536-你要计算的脉冲数=装入值

    但我们一般是要定时时间的,而不是单单计多少个脉冲,所以你要计算的脉冲数要转化为时间,跟你说,一个脉冲的时间就是一个机器周期,51的机器周期就是12/晶振值。如果你的晶振是12M那么这样一除就是1US咯。1US整数,算什么都好算,所以你现在知道为什么这么多12M,24M的晶振买了吧,都是为51准备的咯。

    #i nclude "reg51.h"

    void initTimer(void)
    {
    TMOD=0x1;
    TH0=0xd8;
    TL0=0xf0;
    }

    void timer0(void) interrupt 1
    {
    TH0=0xd8;
    TL0=0xf0;
    //add your code here.

    }

    void main(void)
    {
    initTimer();
    TR0=1;
    ET0=1;
    EA=1;

    while(1);
    }

    上面的代码是12M晶振下定时10000US的程序,也就是10MS发生一次中断。initTimer()是初始化函数,设置定时值和中断的。

    10000US在12M晶振下就是100000个机器周期了,65536-100000=55536=D8F0(十六进制),所以上面就是TH0=0xd8;TL0=0xf0;

    void timer0(void) interrupt 1就是定时器0中断函数,我们不需要理会汇编的中断先,只需要知道当中断来临的时候,程序就自动跳到timer0(void)这个函数运行了,运行完后就会回到原来中断处继续执行原先的程序。

    interrupt是C51中的关键字,后面跟有interrupt的函数都是中断函数,那么对应哪个中断呢?请大家参考:一开始为大家介绍的 Keil Software –Cx51 编译器用户手册 中文完整版,(名字太长了,以后叫KEIL手册)的第125页。

     

    中断号 中断地址
    0 0003H
    1 000BH
    2 0013H
    3 001BH
    4 0023H
    5 002BH
    6 0033H
    7 003BH
    8 0043H
    9 004BH
    10 0053H
    11 005BH
    12 0063H
    13 006BH
    14 0073H
    15 007BH
    16 0083H
    17 008BH
    18 0093H
    19 009BH
    20 00A3H
    21 00ABH
    22 00B3H
    23 00BBH
    24 00C3H
    25 00CBH
    26 00D3H
    27 00DBH
    28 00E3H
    29 00EBH
    30 00F3H
    31 00FBH

     

    看到了吧,中断号就是对应中断进入地址的,至于什么是中断进入地址?那就是发生某个中断的时候单片机自动跳进的一个地址段了.

    对于定时器0来说,就是000BH,所以对应中断号1。其他中断地址看看书就知道了。由上面的表可以看出,KEILC支持32个中断,不过到现在为止,我还没看到过有51单片机有32个中断的:)

    好了,进入调试实践中了,把上面的代码敲进去吧,又或者直接下载我这个编译好的工程:

    timer0

    进入工程后,你需要设置点东西:

     

     

    Debug Information是调试信息,你选择这个东西,才可以在C语言上进行仿真(不管是软还是硬仿真),否则你的仿真环境是汇编的!

    软仿真设置:

     

    Go till main()就是在仿真的时候直接跳到MAIN函数上。如果没有选,那就由0地址开始运行。这里说个概念,在C51中,mian()函数并不代表0地址的,要知道,keilc在一开始的时候是需要经过比较多的初始化,例如清空RAM内容,设置堆栈等东西,这些都是不需要你做的,你的用户程序也不包括这些,做完这些初始化后,KEIL才自动跳到你的mian进行处理.

     

    软件仿真是可以选晶振的,我们选的12M。下面的这些东西你就按图中的来选吧,具体内容以后再说。

    如果编译成功的话,那么我们就开始第一次的软件仿真咯:

     

     

    上面的是已经进入仿真状态的了,因为我们选择了Debug Information所以可以在C下面调试,也因为选择了Go till main()我们可以看到一开始就有个箭头指着main()的第一句话。而程序旁深色的东东,也就是我圈着的东西,就是有效代码段,程序只会在那里跑,也就是那个黄色箭头只会在那个区域跑。现在你已经可以仿真的了,可以选单步,全速来运行了。关于KEIL的具体仿真,将在下一章为大家解说。

     

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    发表评论:
    载入中...

    芯片专题

    器件专题

    软件专题

    硬件专题

    综合专题

    项目专题

    原创专题

    器件检测
    LCD LED
    按键 触摸键
    E2PROM
    电池 电机
    电阻 电容 电感

    指令系统
    软件算法
    编程规范
    滤波算法
    串行通讯

    PCB设计
    I2C PWM
    红外遥控
    充电技术
    中断 ADC 

    匠人手记
    匠人夜话
    网络心路
    一周热点串烧
    从零开始玩PIC
    DIY旋转时钟

    广告5号位 [投放]


    学习板、开发板、编程器、下载器、仿真器(查看详情……)

    站内搜索


    站外搜索


    百度  google
    mp3  歌词 
    图片  FLASH 
    知道  文档
    新闻  词典 
    地图  mp3 
    软件  天网 
    雅虎  爱问 
    搜狗  讯雷 
    网讯  华军 
    天空 

    21IC器件搜索
    百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     
     

    新鲜货色

    匠人手记

    近期动态

    载入中...

      《匠人手记》购书全攻略 
     书友近况:淘书手记答疑与讨论:什么是散转程序 
     《匠人手记》新书艳照
     EDN《匠人手记》签名售书优惠活动开始报名啦!
     欢迎加入《匠人手记》EDN书友会
     欢迎加入《匠人手记》书友会Q群
     《匠人手记》终稿目录
     《匠人手记》封面,请大家先睹为快
     上周六收到了北航寄来的《匠人手记》清样,让大家先睹为快

    匠人原创

    粉丝评论

    往日酷贴

    载入中...

    载入中...



     网络酷文:博客,改变的不仅仅是图书 
     网络酷文:C语言宏定义技巧C语言 条件编译详解

      21IC上海2008-04聚会报名进行中。。。 
     两分钟让你明白什么是ERP![转]
      神奇的Duff's Device 算法
      实用一线通讯电路及软件设计方法
      程序员的“七年之痒”
      史上最短但最精彩的武侠小说
      网络无厘头文学《缺钙水浒》(爆笑)

     你的博客还能持续多久(转贴)
     电动车无刷电机控制器软件设计要点(作者:谢渊斌)

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!