数电,模电基础不好可以学习单片机吗?使用单片机学习板四快学习法有效果吗吗?

查看: 2890|回复: 0
用51hei-5板子学习单片机的空闲与掉电模式
&&& 我们知道单片机内部有一个电源管理寄存器PCON,这个寄存器的最低两位,IDL和PD这两位分别用来设定是否使单片机进入空闲模式和掉电模式。1.&空闲模式&&&& 当单片机进入空闲模式时,除CPU处于休眠状态外,其余硬件全部处于活动状态,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据在空闲模式期间都将保持原值。但假若定时器正在运行,那么计数器寄存器中的值还将会增加。单片机在空闲模式下可由任一个中断或硬件复位唤醒,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。&&&& 让单片机进入空闲模式的目的通常是为了降低系统的功耗,举个很简单的例子,大家都用过数字万用表,在正常使用的时候表内部的单片机处于正常工作模式,当不用时,又忘记了关掉万用表的电源,大多数表在等待数分钟后,若没有人为操作,它便会自动将液晶显示关闭,以降低系统功耗,通常类似这种功能的实现就是使用了单片机的空闲模式或是掉电模式。以STC89系列单片机为例,当单片机正常工作时的功耗通常为4mA~7mA,进入空闲模式时其功耗降至2mA,当进入掉电模式时功耗可降至0.1μA以下。2.&&休眠模式&&&& 当单片机进入掉电模式时,外部晶振停振、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。使单片机进入休眠模式的指令将成为休眠前单片机执行的最后一条指令,进入休眠模式后,芯片中程序未涉及到的数据存储器和特殊功能寄存器中的数据都将保持原值。可由外部中断低电平触发或由下降沿触发中断或者硬件复位模式换醒单片机,需要注意的是,使用中断唤醒单片机时,程序从原来停止处继续运行,当使用硬件复位唤醒单片机时,程序将从头开始执行。&下面的例子演示单片机进入空闲和休眠模式,并且演示出从空闲和休眠模式中唤醒的过程。&&&& 【例】:在实验板上完成如下描述,开启两个外部中断,设置低电平触发中断,用定时器计数并且显示在数码管的前两位,当计到5时,使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后,从空闲(休眠)模式返回,同时开启定时器。&新建文件part3.4.1.c,程序代码如下:#include &reg52.h&&&& &&//52系列单片机头文件#define uchar unsigned char#define uint unsigned int sbit dula=P2^6;&&//申明U1锁存器的锁存端sbit wela=P2^7;&&//申明U2锁存器的锁存端uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delayms(uint);void display(uchar shi,uchar ge)& //显示子函数{&&& dula=1;&P0=table[shi];&&& //送十位段选数据&dula=0;&P0=0&&//送位选数据前关闭所有显示,防止打开位选锁存时&wela=1;&&&//原来段选数据通过位选锁存器造成混乱&P0=0&&//送位选数据&wela=0;&delayms(5);&//延时&dula=1;&P0=table[ge];& //送个位段选数据&dula=0;&P0=0&wela=1;&P0=0&wela=0;&delayms(5);}void delayms(uint xms)&&&&{&uint i,j;&for(i=i&0;i--)&&&&&&& //i=xms即延时约xms毫秒&&for(j=110;j&0;j--);}void main(){&uchar a,b,num1;&TMOD=0x01; //设置定时器0为工作方式1()&TH0=()/256;&&&& &TL0=()%256;&EA=1;&ET0=1;&EX0=1;&EX1=1;&TR0=1;&while(1) &{&&if(num&=20)&&{&&&num=0;&&&num1++;&&&if(num1==6)&&&{&&&&ET0=0;&&&&PCON=0x02; (或PCON=0x01;)&&&}&&&a=num1/10;&&&b=num1%10;&&}&&display(a,b);&}}void timer0() interrupt 1{&TH0=()/256;&TL0=()%256;&num++;&}void ex_int0() interrupt 0{&PCON=0;&ET0=1;}void ex_int1() interrupt 2{&PCON=0;&ET0=1;}
分析:&(1)&EA=1;&&开总中断&ET0=1;&&开定时器0中断&EX0=1;&&开外部中断0&EX1=1; &&开外部中断1&TR0=1;&&启动定时器0&(2)主程序中有“ET0=0;”下句是“PCON=0x02;”意思是在进入休眠模式之前要先把定时器关闭,这样方可一直等待外部中断的产生,如果不关闭定时器,定时器的中断同样也会唤醒单片机,使其退出休眠模式,这样我们便看不出进入休眠模式和返回的过程。(3)void ex_int0() interrupt 0& &{&&PCON=0;&&ET0=1;&}&这是外部中断0服务程序,当进入外部中断服务程序后,首先将PCON中原先设定的休眠控制位清除(如果不清除,程序也可以正常运行,大家最好亲自做实验验证),接下来再重新开启定时器0。&(4)下载程序后,实验现象如下:数码管从“00”开始递增显示,到“05”后,再过一秒后,数码管变成只显示一个“5”,单片机进入休眠或空闲模式,用导线一端连接地,另一端接触P3.2或P3.3,(或者直接按下板子上的int0键),数码管重新从“06”开始显示,递增下去。整个过程演示了单片机从正常工作模式进入休眠模式或空闲模式,然后再从休眠模式或空闲模式返回到正常工作模式。&(5)测试过程大家可将数字万用表调节到电流档,然后串接入电路中,观察单片机在正常工作模式、休眠模式、空闲模式下流过系统的总电流变化情况,经测试可发现结果如下:正常工作电流&空闲模式电流&休眠模式电流。
[此贴子已经被作者于 18:30:50编辑过]
Powered by查看: 466|回复: 8
学单片机需要具备什么条件,文化程度?数电模电程度?
学单片机需要具备什么条件,文化程度?数电模电程度?
初中以上,可以自学英文, 对电子有狂热的爱好+悟性, 数电+模电+电路分析基础+C, 如果是一时的头脑发热, 就没必要学。有句话“ 兴趣是最好的老师”。 没兴趣就是请最好的老师也教不会的
回帖助人的奖励!
可以搞个开发板玩下,把兴趣提起来。
回帖助人的奖励!
想学单片机建议你看网上郭天祥的视频和资料、C语言教程、清楚、易理解
回帖助人的奖励!
我也是初学者,目前感觉只要有c语言的基础就行了。
回帖助人的奖励!
不需要太多东西,都能学会,需要具备C语言基础
回帖助人的奖励!
不需要太多东西,都能学会,需要具备C语言基础
同感,有板慢慢玩
我觉得英文是无所谓的,顶多也就是那几十个英文,死记硬背居住行了,至于一些变量名字,函数的名字,我平时都是使用汉语拼音,这样子对于英文不好的协同来说程序就很容易看懂了,虽然一打开一版全是字母但是一大半都是拼音。
英文很重要,英文过硬直接看datasheet 和User's guide 就可以编程,英文不行,就要找别人嚼过和翻译的不是很准确的文件, 最新的MCU刚面世都是英文, 有些人在家里胡乱翻译几个DATASHEET 发表错误百出,你愿意看吗? 这不是抢你的钱吗?拼音的命名有两个问题:1。 只有你自己看的懂,几十行的程序没太大问题。 当做大项目时根本行不通, 对后来者更新和修改提出了严重挑战;2。 不是标准话的命名和函数是不方便移置的。 写代码一开始就要有好习惯,有句话“ 好的开始是成功的一半”。 鬼佬写的STM32F10x/40x 系列的库写法都很标准,都是我们学习的榜样。
回帖助人的奖励!
Powered by

我要回帖

更多关于 蓝牙模块与单片机连接 的文章

 

随机推荐