单片机,stm32定时器触发中断,我设置了跳变沿触发stm32定时器触发中断中断,但是我明明没有给那个端口跳变沿啊,怎么就触发中断了呢

百度拇指医生
&&&普通咨询
您的网络环境存在异常,
请输入验证码
验证码输入错误,请重新输入21ic官方微信-->
请完成以下验证码
打算用51的定时器和外部中断做个频率计,为什么总是实现不了呢,求大神给看一下
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
1602的部分就不用看了
#include&reg52.h&
#define uchar unsigned char
#define uint unsigned int
void delayms(unsigned char ms)& & & & & & & & //延时程序
{& & & & & & & & & & & & & & & & & & & & & & & &
& & & & while(ms--)
& & & & & & & & for(i = 0; i & 120; i++);
sbit rs=P2^5;& & & & & & & & //1602& & & & & & & & & & & & & & & && &
sbit rw=P2^6;& & & & & & & & //
sbit e=P2^7;& & & & & & & & //
uchar table1[]=&&;
long int k=0,m,n,flag=0;
long int g,s,b,q,w;
long double i,t;
void display();& & & & & & & && & //显示函数
void write_com(uchar com)& & & & & & & & & & & && &//1602写入指令
&&delayms(1);
&&delayms(5);
void write_data(uchar dat)& & & & & & & & & & & && &//1602写入数据
&&delayms(1);
&&delayms(5);
void init(void)& & & & & & & & & & & & & & & & & & & & & & & & & & & &&&//1602初始化设置程序
&&delayms(15);
&&write_com(0x38);
&&delayms(5);
&&write_com(0x38);
&&delayms(5);
&&write_com(0x38);
&&write_com(0x38);
&&write_com(0x08);
&&write_com(0x01);
&&write_com(0x06);
&&write_com(0x0c);
main()& & & & & & & & & & & & & & & && &//主函数
& & & & EA=1;& & & & & & & & //中断总开关
& & & & EX0=1;& & & && & //外部中断
& & & & IT0=1;& & & && & //负跳变沿触发
& & & & & & & & TMOD=0x01;& & & &&&//定时器0 方式1
& & & & & & & & TH0=0;& & & & & & & && &//初值 高8位
& & & & & & & & TL0=0;& & & & & & & && &//初值低8位
& & & & & & & & EA=1;
& & & & //& & & & ET0=1;& & & & & & & &&&//打开定时器中断
& & & & //& & & & TR0=1;& & & & & & & &&&//启动定时器
& & & & while(1)
& & & & {& & & &
& & & & & & & & display();
& & & & & & & &
void timer0() interrupt 1
& & & && && &&&k++;& & & & & & & &&&//计数器溢出值
& & & & & & & && & TH0=0;
& & & & & & & && & TL0=0;
& & & & & & & && &
& & & & & & & && &
& & & & & & & && &
void int0() interrupt 0
& & & && &if(flag==0)& & & & & & & &&&//第一次中断
& & & && &{
& & & && && & & & i=0;
& & & & & & & & k=0;
& & & & & & & & TH0=0;
& & & & & & & & TL0=0;
& & & & & & & & ET0=1;& & & & & & & & //打开定时器中断
& & & & & & & & TR0=1;& & & & & & & & //
& & & & & & & & flag++;
& & & && &}
& & & && &
& & & && &if(flag==1)& & & && & //第二次中断
& & & && &{& & & & & & & && & & & & && && & & && && & & && &
& & & && &m=TH0;
& & & && &n=TL0;
& & & && &
& & & && &ET0=0;& & & && &//关闭定时器中断
& & & && &TR0=0;& & & && & //
& & & && &flag=0;
& & & && &t=k**m+n;& & & && &//被测频率的一个周期
& & & && &
& & & && &i=100000/t;& & & & & & & && && & & &&&//频率& & & & & & & &&&& & & & & & & & & & & && && & & & & & & &
& & & & & & & &&&& & & &
& & & &&&}& & & & & & & & & & & &
& & & & & & & && & & & & & & & & & & & & && && & & && && & & & & & & & & & & & & & & &
void display()
{& & & & & & & && & & & & & & & & & & & & && &&&
& & & & & & & && & & & & && &&&
& & & & & & & & & & & & & & & &
& & & & & & & & & & & &
& & & & & & & & & & & && & g=(long int)i%10;& & & & & & & & & & & & //& & & & 个位
& & & & & & & & & & & && & s=(long int)i/10%10;& & & & & & & & & & & & //& & & &&&十
& & & & & & & & & & & && & b=(long int)i/100%10;& & & && & //& & & && &百
& & & & & & & & & & & && & q=(long int)i/1000%10;&&& & & & & & & & //& &千& & & & & & & &
& & & & & & & & & & & && & w=(long int)i/10000;& & & & & & & & & & & & //& & & && &万
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & init();
& && & & & & & & & & & & & & & & & write_com(0x80); & & & & & & & & & & & && &//显示
& && & & & & & & & & & & & & & & & write_data(table1[w]);
& && & & & & & & & & & & & & & & & delayms(10);
& && & & & & & & & & & & & & & & & write_com(0x81);
& && & & & & & & & & & & & & & & & write_data(table1[q]);
& && & & & & & & & & & & & & & & & delayms(10);
& && & & & & & & & & & & & & & & & write_com(0x82);
& && & & & & & & & & & & & & & & & write_data(table1);
& && & & & & & & & & & & & & & & & delayms(10);
& && & & & & & & & & & & & & & & & write_com(0x83);
& && & & & & & & & & & & & & & & & write_data(table1);
& && & & & & & & & & & & & & & & & delayms(10);
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & write_com(0x84);
& && & & & & & & & & & & & & & & & write_data(table1[g]);
& && & & & & & & & & & & & & & & & delayms(10);
& & & & & & & & & & & & while(1);&&& & & & & & & & & & & & & & & & & & & & & & & &&&& & & & & & & && & & & & & & & & & & & & && && & & && &
& & & & & & & && &
满意回复+5
if(flag==0)
//第一次中断
不知道你的频率计测频范围准备做多高?
要想准,计时部分不能由软件控制,最好是全硬件的。对于你要求的10kHz测频,可以考虑先对输入信号做分频,然后用定时器的捕获模式来测周期,精度可以 ...
//被测频率的一个周期
i=100000/t;
这两句要耗费大量的时间,导致 ...
频率小的时候很准,当频率超过一千误差就大了
楼上的很对。
觉得这个t=k**m+n;
时间长的话就用移位来做,时间就很短了。
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
求大神啊,上午在线等
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
木有人来啊
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
自己顶一下,别沉了啊
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
技术达人, 积分 8241, 距离下一级还需 1759 积分
技术达人, 积分 8241, 距离下一级还需 1759 积分
技术达人, 积分 8241, 距离下一级还需 1759 积分
技术达人, 积分 8241, 距离下一级还需 1759 积分
t=k**m+n;& && && & //被测频率的一个周期
& && && & i=100000/t;& && && && && && && && && &//频率& &&&
这两句要耗费大量的时间,导致中断程序耗时过长,不能及时响应下一个中断,最终频率测量不准。
其它的没细看。
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
cjseng 发表于
t=k**m+n;& && && & //被测频率的一个周期
& && && & i=100000/t;& && && && && && &&&...
为什么这两句要用好长时间呢?
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
if(flag==0)& && && && && &&&//第一次中断
& && && & {
& && && && && && &i=0;
& && && && && & k=0;
& && && && && & TH0=0;
& && && && && & TL0=0;
& && && && && & ET0=1;& && && && && & //打开定时器中断
& && && && && & TR0=1;& && && && && & //
& && && && && & flag++;
& && && & }
& && && & if(flag==1)& &
这里&&一次中断两个IF都执行了 。。。
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
if(flag == 0)
else if(flag == 1)
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
灯火阑珊处 发表于
额,,,&&为什么这两句要用好长时间呢?
单片机计算* /用时长 建议不要这个用,可试试使用移位操作 而且最好判断除数是否为0&&
资深技术员, 积分 338, 距离下一级还需 162 积分
资深技术员, 积分 338, 距离下一级还需 162 积分
资深技术员, 积分 338, 距离下一级还需 162 积分
资深技术员, 积分 338, 距离下一级还需 162 积分
楼上的很对。
觉得这个t=k**m+n;& & 时间长的话就用移位来做,时间就很短了。
t=(k&&16)|(m&&8)|n;
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
longmaodo 发表于
if(flag == 0)
有道理&&这确实是有问题啊
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
很忙 发表于
楼上的很对。
觉得这个t=k**m+n;& & 时间长的话就用移位来做,时间就很短了。
有道理啊 懂的真多呀
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
一些问题修改之后1602还是输出00000,是不是哪里有更大的问题啊[em:24:][em:24:][em:24:][em:24:][em:24:][em:24:][em:24:][em:24:][em:24:][em:24:]
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
灯火阑珊处 发表于
一些问题修改之后1602还是输出00000,是不是哪里有更大的问题啊[ ...
你可以断点调试吗&&
如果可以&&那你就幸福了 只要一步一步的检测那个地方出错了就行了
如果不行 你最好先确定问题的位置&&一步步排除 比如先测试1206显示没问题
再确定你的采集回来的数据&&
PS:顺便问一下 你的时钟是多少 你这样设计是基于你的频率不能很大的
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
longmaodo 发表于
你可以断点调试吗&&
如果可以&&那你就幸福了 只要一步一步的检测那个地方出错了就行了
如果不行 你最好 ...
12M晶振啊,这种用外部中断+定时器的做法是不是有问题啊,好多人都是定时器+计数器做出来的
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
灯火阑珊处 发表于
12M晶振啊,这种用外部中断+定时器的做法是不是有问题啊,好多人都是定时器+计数器做出来的 ...
刚才没怎么仔细看你的要求&&我觉得你的思路有点问题& &
计算频率 你可以看成是计算1S时间内波的个数&&
所以只要定义一个1S中的定时器 和一个外部中断就可以了
在外部中断中循环计算&&在1S定时中判断个数
这样就没有除法了&&最简单 只是提供思路 代码请自编
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
中级技术员, 积分 156, 距离下一级还需 144 积分
longmaodo 发表于
刚才没怎么仔细看你的要求&&我觉得你的思路有点问题& &
计算频率 你可以看成是计算1S时间内波的个数&&
对呀,思路稍微变一下就可以,我怎么就没想到呢,还在测周期,容易出错还不准,,,大神能不能留个扣扣
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
资深技术员, 积分 317, 距离下一级还需 183 积分
灯火阑珊处 发表于
对呀,思路稍微变一下就可以,我怎么就没想到呢,还在测周期,容易出错还不准,,,大神能不能留 ...
不要叫大神&&都是从百度和论坛上过来的人
见到了就说一下 QQ就不要了&&一个人的力量是有限的&&
多问问论坛上的人就成了 我只能解答初级问题
助理工程师, 积分 1831, 距离下一级还需 169 积分
助理工程师, 积分 1831, 距离下一级还需 169 积分
助理工程师, 积分 1831, 距离下一级还需 169 积分
助理工程师, 积分 1831, 距离下一级还需 169 积分
不知道你的频率计测频范围准备做多高?
扫描二维码,随时随地手机跟帖
技术新星奖章
人才类勋章
突出贡献奖章
等级类勋章
时间类勋章
沉静之湖泊
发帖类勋章
技术导师奖章
人才类勋章
时间类勋章
技术高手奖章
人才类勋章
涓涓之细流
发帖类勋章
社区建设奖章
等级类勋章
湍急之河流
发帖类勋章
时间类勋章
您需要登录后才可以回帖
热门推荐 /22013年12月 VB大版内专家分月排行榜第二2013年3月 VB大版内专家分月排行榜第二2013年1月 VB大版内专家分月排行榜第二2012年9月 VB大版内专家分月排行榜第二2012年8月 VB大版内专家分月排行榜第二2012年7月 VB大版内专家分月排行榜第二2006年7月 VB大版内专家分月排行榜第二2006年5月 VB大版内专家分月排行榜第二
2014年9月 VB大版内专家分月排行榜第三2013年7月 VB大版内专家分月排行榜第三2013年6月 VB大版内专家分月排行榜第三2013年4月 VB大版内专家分月排行榜第三2012年11月 VB大版内专家分月排行榜第三2006年6月 VB大版内专家分月排行榜第三2006年4月 VB大版内专家分月排行榜第三2002年12月 VB大版内专家分月排行榜第三2002年11月 VB大版内专家分月排行榜第三
2013年12月 VB大版内专家分月排行榜第二2013年3月 VB大版内专家分月排行榜第二2013年1月 VB大版内专家分月排行榜第二2012年9月 VB大版内专家分月排行榜第二2012年8月 VB大版内专家分月排行榜第二2012年7月 VB大版内专家分月排行榜第二2006年7月 VB大版内专家分月排行榜第二2006年5月 VB大版内专家分月排行榜第二
2014年9月 VB大版内专家分月排行榜第三2013年7月 VB大版内专家分月排行榜第三2013年6月 VB大版内专家分月排行榜第三2013年4月 VB大版内专家分月排行榜第三2012年11月 VB大版内专家分月排行榜第三2006年6月 VB大版内专家分月排行榜第三2006年4月 VB大版内专家分月排行榜第三2002年12月 VB大版内专家分月排行榜第三2002年11月 VB大版内专家分月排行榜第三
匿名用户不能发表回复!|当前页面:&&&&&51单片机中断学习
51单片机中断学习
摘要:一、中断的概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 二、中断源
一、中断的概念& & & CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);& & &&&CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);& & &&待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断&二、中断源& & 在51单片机中有5个中断源& & 中断号& && && & 优先级& && && && && && &&&中断源& && && && && && &&&中断入口地址& && & 0& && && && && &1(最高)& && && && & 外部中断0 & & & & & & & & & &0003H& && & 1& && && && && &2 & & & & & & & & & & & & 定时器0& && && && && && && &&&000BH& && & 2& && && && && &3 & & & & & & & & & & & & 外部中断1 & & & & & & & & & &0013H& & & &3& && && && && &4 & & & & & & & & & & & & 定时器1& && && && && && && &&&0018H& && & 4& && && && && &5 & & & & & & & & & & & & 串口总段& && && && && && && & 0023H&三、中断寄存器& & &&单片机有10个寄存器主要与中断程序的书写控制有关& & & 1.中断允许控制寄存器IE& & & 2.定时器控制寄存器TCON& & & 3.串口控制寄存器SCON& & & 4.中断优先控制寄存器IP& & & 5.定时器工作方式控制寄存器TMOD& & & 6.定时器初值赋予寄存器(TH0/TH1,TL0/TL1)寄存器详细四、寄存器功能与赋值说明& & & 注:在用到中断时,必须要开总中断EA,即EA=1。&&//开总中断& & & 1.中断允许控制寄存器IE& & & & EX0(EX1):外部中断允许控制位& && &&&EX0=1 外部中断0开关闭合& &//开外部0中断& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& && &&&EX0=0 外部中断0开关断开& & & & ET0(ET1):定时中断允许控制位& && &&&ET0=1 定时器中断0开关闭合 //开内部中断0& & & & ET0=0 定时器中断0开关断开& & & & ES: 串口中断允许控制位& &&&& & & & ES: 串口中断允许控制位& &&&& & & & ES: 串口中断允许控制位& &&&& & & & ES: 串口中断允许控制位&& & & & ES=1 串口中断开关闭合& & & & //开串口中断& && &&&ES=0 串口中断开关断开& &&& & & & 2.定时器控制寄存器 TCON& & & & //控制外部中断和定时器中断& & & & 外部中断:& && &&&IE0(IE1):外部中断请求标志位& & & & 当INT0(INT1)引脚出现有效的请求信号,此位由单片机自动置1,cpu开始响应,处理终端,而当入& && &&&中断程序后由单片机自动置0.& && &&&//外部中断,即外部中断相应的引脚接入低电平或下降沿信号时,中断开始响应。& & & & & & IT0(IT1):外部中断触发方式控制位& && && && && && & //选择有效信号&& & & & IT0(IT1)=1:脉冲触发方式,下降沿有效。& & & & IT0(IT1)=0:电平触发方式,低电平有效。&& & & & 内部中断:& && &&&TF0(TF1):内部定时器/计数器溢出中断标志位& & & & 当定时器、计数器计数溢出的时候,此位由单片机自动置1,cup开始响应,处理中断,而当进入中& && &&&断程序后由单片机自动置0.& &&&//内部中断实际上就是利用内部的计数器,只不过提供计数的脉冲来自单片机自身。& && &&&TRO(TR1):定时器/计数器启动位& & & & & & & & & & //启动定时器& && &&&TRO(TR1)=1; 启动定时器/计数器0& && &&&TR0(TR1)=0; 关闭定时器/计数器0& &&&& & & & 3.串口控制寄存器SCON& && & &TI:串行口发送中断标志位&& & & & 当单片机串口发送完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,& & & & 必须由用户在中断服务中用软件清0.& & & & RI:串行口接收中断标志位& & & & 当单片机串口接收完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,& & 必须由用户在中断服务软件中用软件清0.& &&&(IP以后补上,TMOD,TL0/TH0 在定时器/计数器中讲) 五、中断结构图:六、定时器/计数器& & & & 1.计数的定义:& && &&&计数是指对外部事件进行计数,外部事件的发生以输入脉冲的形式表示,因此计数功能的实质就是对外来的脉冲进行计数,在单片机中对应引脚T0和T1,两个脉冲输入端。& && &&&外部输入的脉冲在负跳变时有效(即外部脉冲由1变化到0),计数器加1.& & & & 2.定时器:& && &&&定时器是通过计数器的计数来实现的,不过此时的计数脉冲来自单片机的内部,因此定时器的实质是对内& & 部脉冲的计数,在单片机中,每个机器周期产生一次计数脉冲,计数器加1.&& & & & 3.工作方式控制寄存器TMOD:& && &&&TMOD的低半字节(D0,D1,D2,D3)用来控制定时器/计数器0&& & & & TMOD的高半字节(D4,D5,D6,D7)用来控制定时器/计数器1&& & & & &对TMOD中的内容说明:& && &&&GATE——门控制。   & & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& & & & &GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。   & && && && & 当INT0引脚为高电平时TR0置位,启动定时器T0;   & && && && & 当INT1引脚为高电平时TR1置位,启动定时器T1。   & & & & &GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。& && &&&C/T——功能选择位   & && && &&&C/T=0时为定时功能,C/T=1时为计数功能。     & && &&&M0、M1——方式选择功能   & && &&&由于有2位,因此有4种工作方式 & && &&&& & & &4.根据单片机晶振,所选TMOD的的工作方式,所要定的时间,来确定THO和TLO所要赋予的初值& & (以12M晶振,工作方式1,16位计数器为例,设所定时间为Xus(16为计数器最大数65536,即65536us,若所定时间大于65535,则要用if语句控制,现假设X&65535))& span=&&&& & & &1.时钟周期的时间t=1/12M=1/12 us&& & & &2.机器周期的时间T=12*1/12=1 us&& & & &3.因为每经过一个机器周期计数器 1,所以,计数器 1,经过的时间为 1 us。& & & &若所定时间为X,则要求经过Xus,中断响应,又因为16为计数器要全部置1(即达到65535) 1后,中断才会&响应,所以,初值=(65536-X)& & & &4.将初值转化为16进制码,分别付给THO和TLO& &&&eg:所定时间5ms& && && &初值=()=60536=EC78& & && & & &&TH0=0XEC; TL0=0X78;& &&&(当工作方式不同时,TH0/TL0的赋值也不同,个人觉得有了16位计数器了,其余的没什么用,不介绍了)&&5.写程序时另一种THO/TLO赋值方法& &&&TH0=()/256;& &&&& & & &&TL0=()%6; & &&&TL0=()%6; & &&&TL0=()%6; & &&&TL0=()%6; & &&&TL0=()%6; & &&&TL0=()%6;&&&&&这样设置,每经过20ms,发生一次中断,中断时间一般以秒为单位,所以经过n次中断即可。   & 
更多内容请访问 工控网()
手机扫描二维码分享本页
工控网APP下载安装
工控速派APP下载安装
提点建议:
,请填写评语后直接提交。
&&匿名留言
看过的用户还看过
扫描二维码关注微博
扫描二维码关注微信

我要回帖

更多关于 单片机定时器中断 的文章

 

随机推荐