找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2039|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机定时中断应用详解

[复制链接]
跳转到指定楼层
楼主
ID:86860 发表于 2015-7-26 00:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时中断对于初学者来说,相对还是比较难以把握的,不过根据本人十几年的学习经验,我知道这世界上的知识都是可以学会的,只要你有相应的基础,觉得难都是因为不会才觉得难,这话不矛盾的,学习的过程就是掌握基础的过程,基础掌握了,那么再继续学习,学会就只是时间上的问题了,这只是单纯的强调基础的重要性。学习需要的是有着充分的耐心和毅力,有了这些前提,我相信你肯定会发觉,这个过程其实是那么的美好。




#include《reg52》


sbitWEB1=P1^1;
sbitA=P1^0;
sbitL=P1^3;
sbitLED=P1^2;


voiddelay();


unsigned char codetable[]={
0X3F,0X06,0X5B,0X4F,0X66,
0x6d,0X7D,0X07,0X7F,0X6F,
0X77,0X7C,0X39,0X5E,0X79,
0X71};


int num=0;
int temp=0;
void main()
{
P0=0X00; //关闭点阵
L=0; //锁存
P0=0XFF;  // 关闭LED灯
LED=0;  //锁存
WEB1=1; //位选
P0=0XFE; //共有8个数码管,打开第一个数码管
WEB1=0; //锁存


  EA=1;//中断总控制位,EA=1,CPU开放中断
ET0=1;//定时中断T0控制位,ET0=1,允许定时中断0中断
TMOD=0X01; //定时方式开启1,即方式2
TH0=(65536-50000)/256;//给定时器T0高八位赋值 ,50000为50us,65536=2^16;
TL0=(65536-50000)%6; //给定时器T0低八位赋值
TR0=1;              //启动定时


while(1)
{
if(num==20)  //中断20次,即1秒,进入循环
{
if(temp==15)
temp=0 ;
A=1; //段选
  P0=table[temp]; //一个数码管有8个二极管,需要显示的数字
A=0; //锁存
//delay();
temp++;
num=0; //清0
}
}
}
voiddelay()
{
  inta,b;


for(a=1500;a>=0;a--)
  for(b=100;b>=0;b--);

}


voidexter0()   interrupt 1//interrupt为中断函数关键字,说明这个函数是中断函数,中断函数不用函数声明
{//0表示51单片机的5个中断源的第一个,即INT0,外部中断0 ,1为定时中断
TH0=(65536-50000)/256;   //每一次中断要给计数器赋值,因为计数器溢出后会清0
TL0=(65536-50000)%6;
num++;
  }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:80455 发表于 2015-7-29 10:54 | 只看该作者
STC的51进入中断需要多少个指令周期?另外STC的系统时钟是时钟周期的几分频?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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