历史上的今天
返回首页

历史上的今天

今天是:2025年02月08日(星期六)

正在发生

2020年02月08日 | PIC单片机振荡电路中怎样选择晶体?

2020-02-08 来源:eefocus

什么是中断程序呢?


形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程序方面来说 当CPU在执行一个程序的时候,突然产生了中断事件CPU就去执行中断程序了,当执行完成后CPU又回来执行原先的程序。


中断事件


什么是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。


讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如 你是经理 如果你想知道属下任务完成了没有 一种方式就是去询问属下,任务完成没有。早上没完成,下午在问。下午没完成第二天再问。。。。一直到完成为止 这种方式就相当于查询的方式,另一种就是然属下完成任务好直接汇报,在下属执行任务的期间你无需去打挠下属,当下属任务完成后就第一时间向你汇报,这种方式就好像中断。


查询方式:缺点就是可能会大量浪费CPU的时间,不断去查询。如果事情不多还好,可是一旦事情多了会明显感到运行速度变慢。


中断方式:可以用在对时间和响应速度有要求的场合。


具体有哪些事件会引起中断 可以看


1,中断控制寄存器INTCON


2,外设中断允许寄存器 PIEX 注 : X可以是1 2 3 4.。。。不同型号的单片机数目不同


3,外设中断标志寄存器 PIRX 注: X可以是1 2 3 4.。。。不同型号的单片机数目不同


INTCON 中断控制寄存器讲解:


1开启或关闭 全体的中断功能(GIE)


2开启或关闭全体外设的中断功能(PEIE)外设就是在外设中断允许/标志寄存器里面所写的设备。


3开启一些中断事件。


PIEX 与 PIRX 是相互对应的如:当把PIE1的TMR1IE设置为1 定时器timr1将开启中断。等到TMR1定时器溢出后,则会在PIR1的TMRIF将为1,并且执行中断程序。


实例讲解:


我们把上一讲的《PIC单片机之定时器》中的实例修改成中断方式 实现 每隔 50MS亮起LED,每隔50MS灭掉LED。


/*开发环境MPLAB X IDE 芯片型号PIC16LF1823*/


#include


__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON


&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);//这个要放到上一行去


__CONFIG(PLLEN_OFF&LVP_OFF) ;


#define LED LATA5


void init_fosc(void)


{


OSCCON= 0x68;


}


void init_gpio(void)


{


PORTA = 0;


LATA = 0;


ANSELA = 0;


TRISAbits.TRISA5=0;


}


void init_timer0(void)


{


OPTION_REG=0x87;


}


void interrupt isr(void)//中断程序,interrupt是个关键字说明该函数,是中断函数。


{


LED = ~LED;//改变LED的状态


INTCONbits.TMR0IF=0;//清零中断标志位 如果在离开中断程序前没有清零,程序将不停的中断。


TMR0=61;//给TMR0付初始值61 ,开始下一个50ms计时做准备。


//中断函数结束 返回主函数。哪里来回 回那里去,也就是回到主函数的while(1);处


}


int main(int argc, char** argv)


{


init_fosc();


init_gpio();


init_timer0();


INTCONbits.GIE=1; //开启总中断


INTCONbits.TMR0IF=0;//清零TMR0溢出中断标志位


INTCONbits.TMR0IE=1;//开启TMR0溢出中断


TMR0=61;


while(1);//主函数 在此什么都没做一直在死循环。但等到50ms时间到了TMR0将会溢出,程序就会跳到void interrupt isr(void)处执行。


}


我帮大家理清下中断初始设置大致的步骤


1 ,开启总中断,开启外设中断。INTCONbits.GIE=1; INTCONbits.PEIE=1;其实即使没用到外设开启也无妨。


2 ,清楚相应中断的标志位。如INTCONbits.TMR0IF=0;


3 ,开启相应中断。如INTCONbits.TMR0IE=1;


中断函数/程序 中要注意的就是 清零相应的中断标志位 如INTCONbits.TMR0IF=0; 否则单片机会认为中断未被执行 则一直中断。

推荐阅读

史海拾趣

意普(ESPE)公司的发展小趣事

为了提升产品质量和竞争力,意普(ESPE)公司开始注重品质管理,建立了严格的质量检测体系。同时,公司积极申请国际认证,成功获得了欧洲四级安全认证体系,进一步提升了产品的国际竞争力。这些努力不仅赢得了客户的信任,也为公司打开了国际市场的大门。

Efficient Power Conversion公司的发展小趣事

随着EPC公司氮化镓技术的不断完善和成熟,其产品开始受到市场的广泛认可。无线电源传送、全自动汽车、高速移动通信等领域的企业纷纷采用EPC公司的氮化镓功率半导体器件,以提高其产品的性能和效率。EPC公司的市场份额逐渐扩大,成为氮化镓功率管理技术领域的领军企业。

宇阳科技(EYANG)公司的发展小趣事

随着公司业务的不断发展,宇阳科技在产能扩张和全球布局方面也取得了显著进展。公司在深圳、东莞、安徽等地建立了多个生产基地,引进了先进的生产线和检测设备,确保了产品的高品质和稳定供应。同时,宇阳科技还积极拓展海外市场,与全球多家知名企业建立了长期稳定的合作关系。

Digital Voice Systems Inc公司的发展小趣事

Digital Voice Systems, Inc.(DVSI)于1988年成立,当时正值数字通信技术的兴起阶段。公司创始人凭借对语音编解码技术的深刻理解和前瞻性的市场洞察力,决定投身于这一领域。他们开发出了具有专利保护的基于鲁棒性多带激励模型(MBE Model)的低码率语音压缩算法,如IMBE和AMBE编解码系统。这些算法在当时的市场上独树一帜,为DVSI赢得了第一桶金。

在创立初期,DVSI面临着资金、技术、市场等多方面的挑战。然而,他们凭借着坚定的信念和不懈的努力,逐步克服了这些困难。他们不断投入研发,优化算法,提高产品的性能和稳定性;同时,他们积极开拓市场,与各大通信设备制造商建立合作关系,将产品推向市场。

随着时间的推移,DVSI的产品逐渐在市场上获得了认可。他们的编解码系统被广泛应用于移动通信、卫星通信、军事通信等领域,为客户提供了高效、稳定的语音通信解决方案。DVSI也因此逐渐崭露头角,成为了电子行业中一颗耀眼的明星。

故事二至五框架概述

  1. 技术创新与突破:DVSI在语音编解码技术方面的持续创新,如推出新一代的高效压缩算法,进一步提升了产品的竞争力。
  2. 市场拓展与国际化:随着公司实力的增强,DVSI开始拓展国际市场,与全球多家知名企业建立合作关系,实现了国际化发展。
  3. 合作与竞争:在电子行业中,DVSI与其他企业的合作与竞争并存。他们通过合作共赢的方式,共同推动行业的发展;同时,也面临着来自竞争对手的挑战和竞争压力。
  4. 企业文化与团队建设:DVSI注重企业文化建设,倡导创新、协作、共赢的价值观。他们注重团队建设,吸引了一批优秀人才加入公司,为公司的发展提供了有力的人才保障。

以上故事和框架概述仅供参考,您可以根据这些线索进一步挖掘和编写关于DVSI公司的故事。

FDK AMERICA公司的发展小趣事

随着环保意识的日益增强,FDK AMERICA公司积极响应绿色制造理念。公司投入大量资金研发环保型电子产品,采用环保材料和绿色生产工艺,减少对环境的影响。同时,公司还积极参与各类环保活动,倡导绿色消费理念。这种环保举措不仅提升了公司的社会形象,也为公司赢得了更多消费者的青睐。

Erocore Enterprise Co Ltd公司的发展小趣事

随着技术实力的提升,Erocore开始积极拓展市场。公司凭借优质的产品和服务,逐渐在电子行业中树立了良好的品牌形象。通过与国内外知名企业的合作,Erocore的产品逐渐进入更广泛的市场领域。同时,公司也加大了市场营销力度,通过参加展会、举办研讨会等方式,提升品牌知名度和影响力。

问答坊 | AI 解惑

有效应对多频手机中的天线设计问题

现在手机中的射频信号通道越来越拥挤。蜂窝电话已经从双频向三频甚至四频快速发展。这些复杂手机还需要处理来自外围无线设备的各种信号,如蓝牙、Wi-Fi和GPS。而随着WiMAX和LTE(4G)的加入,这种复杂度将越来越高。在移动电话中,天线开关控制着天线 ...…

查看全部问答>

Protel.DXP.电路设计制版.100例

Protel.DXP.电路设计制版.100例…

查看全部问答>

DDraw怎样获取显存大小?

我用这个方法,但是好像获取的大小有问题,不知道这个方法是不是正确的方法,还没有更好的办法? DDCAPS   ddcaps;      ddcaps.dwSize   =   sizeof   DDCAPS;    lpdd ...…

查看全部问答>

c#窗体问题1

c#有没有什么方法,能够获取当前桌面所有正在运行的窗体?…

查看全部问答>

是不是哪里错了?总提示设备没有连接

                 LPCWSTR strDrvName=L\"\";         strDrvName=TEXT(\"NDS0:\");         HANDLE hHandle;         hHandle ...…

查看全部问答>

内存扩容问题,急???

128M扩到512M,我用的是uboot+NK.nb0,uboot已经改好ram初始化部分,没有开mmu,在uboot下测试512内存读写正常,wince改了config.bib中ram大小,oemtable也改了内存映射,但是现在内核跑到oeminit跑完就死了,不好调试。试着用oemgetextensiondram( ...…

查看全部问答>

wince4.2PB编译时出现0xffffffff错误

如题,想问一下是什么原因啊?…

查看全部问答>

STM32可以通过SPI实现一主多从的多机连接方式么?

我想做一个一主多从(1对8甚至1对16)的系统, 想选用SPI作为板级通讯总线,不知这样做能不能实现? 如果能,那么在设计时要注意什么? 我现在想到的是加254增加驱动,还有就是适当的降低SPI速度以降低误码率, 不知我的这些想法对不对?…

查看全部问答>

wire型和reg型的一点小疑惑

今天在看书时发现一点疑惑,问题大致是这样的: 一个电路网络,要对其中一个2输入与门的输出(定义为tmp吧,其实此处并不存在端口或变量)进行一些赋值操作,。在Verilog编程中按说是应该把其定义为wire型变量,可是今天看的一个例子却定义成了reg ...…

查看全部问答>