打印

单片机c语言中断程序求助

[复制链接]
3277|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
真的Andy|  楼主 | 2010-7-19 21:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好  第一次发帖  有瑕疵处 请见谅
我最近在看单片机c语言编程,遇到了中断程序 例如:
利用定时/计数器T1产生定时时钟,
由P1口控制8个发光二极管,
使8个指示灯依次一个一个闪动,
闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。
设晶振频率为12MHz。
#include<reg52.h>  //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
sbit P1_0=P1^0;           
uchar tt,a;
void main()      //主函数
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
a=0xfe;               
while(1);//等待中断产生
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==2)
{  
  tt=0;
  P1=a;
  a=_crol_(a,1);        
}
}
我所不理解的地方时  进入主程序需要时间,在主程序中到达启动定时器0也要时间,而启动后50ms,执行中断服务程序也要时间,究竟定时器怎么把时间分配的。。。
期待大侠了。。

相关帖子

沙发
Metalor| | 2010-7-20 09:47 | 只看该作者
不是太明白你的意思。。
你所说的那几个时间都是us级的,在流水灯里几ms都可以忽略更别说us了。
你好像不太明白一点:定时器计数和主函数程序是同时(并行)执行的。只有当定时器计数溢出之后才获得cpu的控制权。

使用特权

评论回复
板凳
真的Andy|  楼主 | 2010-7-20 10:07 | 只看该作者
太感谢了    我明白你的意思了     
我可算走出误区了        
说实话我确实不知道定时器计数和主函数是同时执行的。  
我再仔细研究研究。。。

使用特权

评论回复
地板
Metalor| | 2010-7-20 11:04 | 只看该作者
太感谢了    我明白你的意思了     
我可算走出误区了        
说实话我确实不知道定时器计数和主函数是同时执行的。  
我再仔细研究研究。。。
真的Andy 发表于 2010-7-20 10:07




补充一下:
不是程序同时执行,而是cpu在执行main函数的同时,定时器同时也在计数。当计数溢出之后,main函数就不再执行转而执行中段函数去了。中段函数执行完之后再返回执行main。就是这么个过程。多写写程序体会就深了。

使用特权

评论回复
5
真的Andy|  楼主 | 2010-7-20 16:02 | 只看该作者
我上午用keil软件,调试了一下我一步一步进行的, 发现我说的几个时间段都很小。
“cpu在执行main函数的同时,定时器同时也在计数”这一点我还是多做题体会体会吧。
总而言之太感谢了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝