注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

单片机(3)——简单中断  

2011-02-24 22:29:02|  分类: 单片机及DSP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

单片机(3)——简单中断

弄个这中断可有个时间了,从一开始搞ARM这个东西就一直是个东西,当个事儿似的折腾着,也没怎么样,毕竟用得不多。

现在重新看C51的中断,发现这个可简单多了,但细一想,和ARM的中断其实是一样的啊,记得在UCOS中使用中断一直不顺利,从这里开始整,也算了一次很好的复习。防止出现这样那样的误解,记下来还是比较重要的。

因为是串口使用的中断,所以一开始要REN设置成可以接收,然后设置串口的工作方式为1,如果不设置默认为0,为同步移位寄存器的输入输出方式,就和我们的要求差一小截了。这里还提起注意的是,既然是用方式1还得设置波特率的大小,这个是由时钟T1的溢出率真决定的。

       REN = 1;

       //设置串口工作方式

       SM0 = 0;

       SM1 = 1;

 

       TMOD = 0x20;//使用T1

       TH1 = 0xfd;//设置溢出率

       TL1 = 0xfd;

 

       TR1 = 1;//启动时钟

然后,我们可以使用中断方式也可以使用非中断方式,这里因为讲的中断,所以用中断方式,我们写一个中断例程,也叫中断服务程序,如下

void ser() interrupt 4

{

       RI = 0;  //接收状态位是需要软件置0的 ,TI也是如此。

       P1 = SBUF;

 

       a = SBUF;

       flag = 1;

}

具体的格式我就不讲解了,估计这个多得都到麻木了。这里有一个问题,我们在主程序里如何控制中断的使用,当然最先要设置中断使能。       EA = 1;ES = 1;,然后我们进入简单的循环状态,这里的关键在于,如果我们只是进行简单的数据发送和TI的控制,那么我们下到实验板中会发现,串口的执着收界面上不断的接收着一个个相同的数据,所以我们这里最重要的是要把中断控制ES置位0,然后在完成数据的传输后,再将其重新置回1。

这和我们当初学ARM中断是是一样的,先要开所有中断,然后开使用中断,然后进入中断后关中断,(否则中断不断传来,没法子弄了)然后处理完成中断接着开中断。

这也就带来了一个现象,中断处理函数或者是中断服务例程里的程序段不能太大,执行的时间不能太长,在LINUX里为了解决这个矛盾,使用上中断的上半部分和下半部分。林林总总其实都是这个意思。

没想到原来打破脑袋想了很久的中断在这里竟然是这样简单可行,还是人们常说的,从51学嵌入式是走一条看似多余,其实最短的捷径。在这里理解了一些基本概念和基本的东西,再学高级的DSP和ARM,就入门快多了。

由简入繁,循序渐进,才会走得更轻快,更便捷。

  评论这张
 
阅读(590)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017