扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1.SETB EA ;中断总允许
创新互联是一家集网站建设,龙岗企业网站建设,龙岗品牌网站建设,网站定制,龙岗网站建设报价,网络营销,网络优化,龙岗网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
SETB EX1 ;外中断1允许
SETB IT1 ;脉冲方式(当IT1为0时,为电平方式)
然后就可以定义你要的初值。
2.边沿触发最大的特点是只在水平的边缘改变外翻盖奖励的那一刻是有效的。相对JK主站和从站中,良好的稳定性的优点,激励电平只需要保证在短时间内向边缘稳定,外界干扰的窗口是小的。
因为定时器计数溢出时才产生中断,th0tl0全等于0。这种定时工作方式不会自动重装定时初值,所以中断子函数中要人工装载。主函数中如果省去初值,那就是从0开始计数,第一次进入中断的时间会有误差,所以不能省。
TH0=-(50000/256);
相当于 TH0=0-(50000/256); 或者 TH0=256-(50000/256);
或者 TH0=(65536-50000/256);
计算结果都一样。0-255=1 256-255=1 无符号数的溢出计算
一般写成这样 TH0=(65536-50000/256); 表示定时 50000次
因为定时器是向上溢出,计时50000的话要赋值 TH0=15535/256 这样不够直观,写成
TH0=(65536-50000/256); 很直观就看出是 50000次
TH0=-(50000/256); 效果一样。
c51中断函数的介绍
C51编译器允许用c51创建中断服务程序,大家仅仅需要关心中断号和寄存器组的选择就可以了。编译器自动产生中断向量和程序的入栈及出栈代码。在函数声明时包括interrupt,将把所声明的函数定义为一个中断服务程序。另外,可以用using定义此中断服务程序所使用的寄存器组。
一、中断函数的定义
1、中断函数定义的格式为:
函数类型 函数名 interrupt n using n
其中:
Interrupt后面的n是中断号。
关键字using后面的n是所选择的寄存器组,取值范围是0-3.
定义中断函数时,using是一个选项,可以省略不用。如果不用则由编译器选择一个寄存器组作为绝对寄存器组。
2、8051的中断过程通过使用interrupt关键字和中断号来实现,中断号告诉编译器中断程序的入口地址。中断号对应着IE寄存器中的使能位,换句话说,IE寄存器中的0位对应着外部中断0,相应的外部中断0的中断号是0.
IE寄存器中的使能位与外部中断对应关系:
中断号 中断源
0 外部中断0
1 定时器0
2 外部中断1
3 定时器1中断
4 串行口中断
5 定时器2中断
二、使用中断函数时要注意的问题:
1. 在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的。其次它可使中断服务程序的结构简单,不容易出错。
中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的ISR.
2. 中断函数不能传递参数。
3. 中断函数没有返回值。
4. 中断函数调用其他函数,则要保证使用相同的寄存器组,否则出错。
5. 中断函数使用浮点运算要保存浮点寄存器的状态。
#include reg51.h
void init(void)//声明中断初始化
{ EA=1;//中断总开关
EX0=1;//开中断0开关。中断1为,EX1=1;
IT1=1;//采用边沿触发,下降沿有效。IT1=0为低电平触发中断。
}
main()
{ init();调用中断初始化函数
==
===主程序;
}
void in_0(void)interrupt 0//中断服务函数
{ ==
==要服务的程序
}
定时器0为16位!它的最大计数范围为2的16次方,也就是65536,可以把定时器比作一个水桶,如果这个桶是空的,那么它装满水需要65536滴水!也就是说它最多能定时65.536毫秒 ,当然前提是在12Mhz晶振下!假如说你只要定时10ms,那么你的桶里面必须要先装(65536-10000)滴水,这就是所谓的赋初值!假设我们从水池上面接上水管!往你桶里滴水,水管上有三个水龙头,有个总龙头!所有水管要出水,这个总龙头必须要打开,就是EA=1;然后你只是想让定时器0这个方向的水管出水,那就要把这个龙头打开,也就是ET0=1;然而你总得要出水出来吧,并且要知道它还能装多少水吧!所以你还得把最后要出水的这个龙头打开,TR0=1;然后你的水就一滴一滴的往你桶里去,当滴了10000滴后,它是不是就满了,你再滴是不是溢出了,溢出是不是就引起中断了,然后你是不是要把滴进来的水又倒掉!好让下一次的再滴!这是不是就是定时器中断里面的重新赋初值啊!很好理解的
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流