您的位置 首页 新品

个人对单片机中止程序的了解

开题首先贴上一段练习中遇到的代码:*1:利用定时计数器T0从P10输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。*incl

开题首要贴上一段操练中遇到的代码:

/*1:使用守时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪耀,设晶振频率为12MHz。*/
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit P1_1=P1^0;
uchar time;
void main()
{
time=0;
TMOD=0x01;////设置守时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中止
ET0=1;//开守时器0中止
TR0=1;//发动守时器0
while(1);//等候中止发生
}
void T1_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time==20)
{
time=0;
P1_1=~P1_1;
}
}

hit:
在学习单片机的时分很简单依照C言语编程的格局来了解,程序在翻开中止之后会一向停留在while(1);傍边,但在实际上,程序确实会停留在while(1);里,因为敞开了中止开关而并未封闭,所以T0持续计数,所以后边一向会有中止。

进程能够了解为这样,程序一向在while(1);傍边,直到守时器计满发生中止;
发生中止后,履行中止程序,守时器从头赋值,time自加1;
回到while(1)中,等候下一次中止,守时器持续计数。

单片机怎样从主函数跳到中止函数中:
关于单片机的硬件,你了解吗?时钟和CPU是独立的,时钟中止程序时这样的:在CPU履行指令时,计数器(计时器)一起在计时,当计时器溢出时,就向CPU请求中止,假如答应呼应中止,CPU就转到中止服务程序履行相关的程序。
单片机的时钟中止相应要满意两个条件:榜首,答应中止源请求中止。第二,答应cpu呼应中止。二者缺一不可。 EA=1;//开总中止
ET0=1;//开守时器0中止
ET1=1;
TR0=1;//发动守时器0
TR1=1;
你这些句子,就答应了中止呼应,所以,当你的程序跑起来时,时钟时刻到了,CPU就转入中止服务程序了,履行完了再回来主程序。你能够在编译器顶用DEBUG检查履行进程的。假如你用汇编言语写,就更清楚了,能够看清每一步的操作的。
硬件部分是这样:在每个机器周期的S5P2,单片机会来采样,判别是否有中止请求。所以一旦时钟计数溢出,就会转入中止服务程序。

这个打个比如吧,你在上课,相当于主程序,这时时刻到了,打铃下课了,你就不读书了,跑出去玩了。这其实是相同的道理。你在上课,这和打铃不相关,并不是你让打铃的,校园的时钟在不停地走,到了时刻主动打铃,这不受你上课的影响的。可是假如你把耳朵堵上了(不答应呼应中止),便是把铃打碎了你也不知道下课了,所以你就一向读书。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/255107.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部