菜鸟零基础学电子之像把妹一样去学51
时间:08-25
来源:互联网
点击:
作者:Snake0301
亲爱的各位同志,前面和大家分享了如何利用各种资源为自己的学习之路获取必要的装备,主要提到了TI公司的大学计划,其实很多其他的芯片厂家都有相关的大学计划活动,大家可以根据兴趣来选择。感谢新中国为我们提供了如此肥沃的土壤,全世界无产阶级万岁,全世界人民大团结万岁。
记得科任老师曾经给我打过一个比喻,如果把数电、模电和高频电子电路(有些学校也叫通信电子电路或非线性电路)比作三座大山,那么数电大可看做秦岭,攀登起来较为轻松,但是也必须花费相当的体力才能欣赏到沿途的风景;模拟电子电路则像是五岳,必须具备坚强的意志和充沛的体力,才能体会个中美味;而高频电子电路,则像是珠穆朗玛,真正能够达到顶峰的筒子屈指可数,只有超过常人的付出,才能够到达那种高度。高手总是寂寞的,高处不胜寒啊。
小弟才疏学浅,并且还是半路出家,这里不敢在科班出身的筒子面前妄谈。前面提这么多,主要是想和大家分享一下MCU的入门,玩MCU,首先要了解基本的硬件结构,也就涉及到数电、模电了。提到微控制器,不得不提到51内核的MCU,一个经典的产品就是爱特梅尔的AT89S51。这货使用起来实在是太简便了,外设非常少,双向IO口的控制寄存器非常简单,不需要处理IO方向,不需要处理IO翻转,不需要set,不需要clear,不需要……,直接对IO端口写1或者写0就能够控制输出的高或者低电平,直接读IO端口就能获得IO端口状态。如果之前您玩过其他外设特别多的MCU,会觉得尼玛S51的世界是如此清净,原来生活是如此美好,控制是如此简单。还是那句话,功能越多,寄存器越复杂,结构越简单,过程越复杂。这么看来,其实51内核的MCU是用来入门的核弹啊,所以这里建议大家能够从51下手,建立起基本的概念,然后再深入去了解其他的MCU。
在入门之前,必须要有一定的C语言基础,说到C语言,理工科的童鞋们应该都不陌生。MCU入门,其实对C语言要求并不是非常高,只需要掌握基本的语法和结构就好了,千万不能出现代码里面出现多个main函数的情况,呵呵。随着学习的深入,再慢慢接触一些比较高深的C语言思想和结构,C语言啊,深了去了。再就是编译平台,其实就是一个编译器,可以生成各种MCU所需的文件,基本流程就是 环境设置-代码编写-build-download,编译平台纯粹是一个操作性工作,多用几次也就熟悉了。
好多教材里面,上来就使出吃奶的劲去分析51内核,系统总线结构,内部各种模块,新手们往往就去年买了个表:想玩个单片机,还得先成为数字系统高手。其实个人感觉必要性不是很大,我们使用集成电路,更多的时候是将其看做一个黑匣子,我们只关心它的输入与输出的关系,至于内部如何工作,我们不想知道,也没兴趣去知道,对吧。如果日后需要,再去了解也不迟。Ok,下面举几个例子,来看看简单的MCU控制。
点灯
就好像伟大的程序猿们,学习一门新的语言时,先会尝试打印一句“Hello World!”一样,高手们拿到一块新的MCU,往往都会先拿来点亮一个LED。不要小看这个点亮LED,虽然很简单,但是至少要求有基本的模电知识和了解这块MCU的IO端口寄存器的基本操作。LED啊LED,PN结啊PN结,导通啊导通,发光啊发光。在模电里面我们知道,LED其实就是个掺入了电致发光材料的PN结,只要PN结导通,并有电流流过,就能够发光。瞧瞧上面的两种接法,假设IO口是P1.1,D1在IO口输出什么电平的情况下发光呢?看看接法1,D1阳极连接Vcc,阴极连接IO口,D1导通的前提是PN结正偏,阳极电压要大于阴极电压,且差值要大于某个值,这个值由D1的材料特性决定。到这里,P1.1要输出啥,D1才会亮呢?吼吼,必须是一个低电平哟。那好,代码里面,我们写上“P1.1=0;”,编译下载,“咣机”,瞧瞧是不是灯亮了?要是我们再写一个300ms延时函数delay(),“P1.1=1;delay();P1.1=0;delay();”,重新编译下载,瞧瞧,灯是不是闪起来了?吼吼,控制就是这么简单。还有接法2,大家可以自己分析一下了。在这个基础上,还有更多的玩法,跑马灯、呼吸灯等等。
中断
这部分涉及IO口操作很少,基本上都是内部中断寄存器的操作。中断,其实就是优先级更高的一个任务;比如周末有一打算睡到12点的任务,当您正在呼呼大睡的时候,突然老板9点钟打来一个电话中断了睡觉任务,并给出12点前完成深入开展当的群众路线的高质量个人对照检查材料的任务,睡觉任务被打断了,只能起床苦逼地进行写材料的任务,10点钟完成材料的撰写并发送任务后,继续睡觉到12点。上面这个流程,基本上就是一个中断的基本流程。而我们操作内部中断寄存器,主要是为了确定是否应答中断和中断如何开始。S51的中断寄存器常用的有6个,中断允许控制寄存器IE是决定系统是否响应中断,如果需要中断,这个寄存器必须要置位;定时器控制寄存器TCON决定系统是否采用定时器方式来激活中断;定时器工作方式控制寄存器TMOD用于选择定时器的工作方式,一般需要先使用定时器初值赋予寄存器(TH0/TH1,TL0/TL1)来装载一个初始值,然后根据TMOD来确定是加计数至溢出来产生中断,还是减计数至0来产生中断;串口控制寄存器SCON则是确定是否由串口数据传输来激活中断;而中断优先控制寄存器IP则是用于控制多个中断产生时,系统响应的顺序。当然,最最重要的还是中断服务程序,也就是一旦中断来临,系统需要进行的动作,一般情况下,建议中断服务程序还是尽可能的简单,不要进行复杂的数据运算或长时间的延时,最好只是给出一个事件标志,由main函数根据这个事件标志去完成相对应的动作。
中断是MCU里面的压轴货,从应用层面来讲,可以实现简单多任务,如果中断high不起来,谁也不能说自己精通S51。
外设驱动
一个系统,只有51单片机,那叫光杆司令,绝大部分情况下,51单片机外围会连接各种各样的芯片,这些芯片会以各种总线形式与单片机相连接,常见的有1-wire、I2C、SPI、Can等等。物理连接后,单片机与芯片之间必须建立起某种协议才能正常进行通信。啥叫协议?听上去很牛逼,其实说白了就一句话,语言、习惯要相通。先说语言,就好像说话,单片机说汉语,外设芯片说德语,咋沟通交流?再说习惯,就好像喝酒猜拳,外设芯片猜拳前要开场词“哥俩好”,单片机单刀直入直接喊拳码,这样哥俩明显不能同步,不能交流了撒。一般情况下,都需要利用数电知识仔细研究外设芯片的操作时序,操作时序图直接描述了外设芯片的语言习惯,对单片机编程时,必须符合外设芯片的语言习惯,兄弟俩才能正常沟通。以I2C总线为例,I2C总线空闲时,单片机以启动信号START来掌管总线,以停止信号STOP来释放总线;每次通讯以START开始,以STOP结束;启动信号START并后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R/W位为0表示由单片机向被控器件写数据,R/W为1表示由单片机向被控器件读数据;当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号ACK;单片机检测到ACK信号后,开始数据的传输,每个字节数据传输结束,都会发送一次ACK信号,如果全部结束则发送NACK信号,每个数据字节在传送时都是高位(MSB)在前。这个例子其实可以很明显地看出,要想完成外设芯片的驱动,必须通过迪特希特的时序图了解它的习惯,让单片机去适应它,最后达到天人合一,鱼水交融的境界,就像把妹一样。邪恶了,吼吼。
小结
上面是小弟在学习过程中的一点点小认识,由于能力关系肯定会有不对的地方,欢迎各路大神,各种品牌、各种材质的板砖。
其实单片机入门没有那么困难,特别是用简单方便的51单片机来入门,简直是无敌了,但前提是要熟悉编译环境和一定的C语言基础。学51单片机和屌丝们把妹是一样一样的,你用心去对待它,用热情去融化它,用真诚去感动它,女神也会被推倒。
亲爱的各位同志,前面和大家分享了如何利用各种资源为自己的学习之路获取必要的装备,主要提到了TI公司的大学计划,其实很多其他的芯片厂家都有相关的大学计划活动,大家可以根据兴趣来选择。感谢新中国为我们提供了如此肥沃的土壤,全世界无产阶级万岁,全世界人民大团结万岁。
记得科任老师曾经给我打过一个比喻,如果把数电、模电和高频电子电路(有些学校也叫通信电子电路或非线性电路)比作三座大山,那么数电大可看做秦岭,攀登起来较为轻松,但是也必须花费相当的体力才能欣赏到沿途的风景;模拟电子电路则像是五岳,必须具备坚强的意志和充沛的体力,才能体会个中美味;而高频电子电路,则像是珠穆朗玛,真正能够达到顶峰的筒子屈指可数,只有超过常人的付出,才能够到达那种高度。高手总是寂寞的,高处不胜寒啊。
小弟才疏学浅,并且还是半路出家,这里不敢在科班出身的筒子面前妄谈。前面提这么多,主要是想和大家分享一下MCU的入门,玩MCU,首先要了解基本的硬件结构,也就涉及到数电、模电了。提到微控制器,不得不提到51内核的MCU,一个经典的产品就是爱特梅尔的AT89S51。这货使用起来实在是太简便了,外设非常少,双向IO口的控制寄存器非常简单,不需要处理IO方向,不需要处理IO翻转,不需要set,不需要clear,不需要……,直接对IO端口写1或者写0就能够控制输出的高或者低电平,直接读IO端口就能获得IO端口状态。如果之前您玩过其他外设特别多的MCU,会觉得尼玛S51的世界是如此清净,原来生活是如此美好,控制是如此简单。还是那句话,功能越多,寄存器越复杂,结构越简单,过程越复杂。这么看来,其实51内核的MCU是用来入门的核弹啊,所以这里建议大家能够从51下手,建立起基本的概念,然后再深入去了解其他的MCU。
在入门之前,必须要有一定的C语言基础,说到C语言,理工科的童鞋们应该都不陌生。MCU入门,其实对C语言要求并不是非常高,只需要掌握基本的语法和结构就好了,千万不能出现代码里面出现多个main函数的情况,呵呵。随着学习的深入,再慢慢接触一些比较高深的C语言思想和结构,C语言啊,深了去了。再就是编译平台,其实就是一个编译器,可以生成各种MCU所需的文件,基本流程就是 环境设置-代码编写-build-download,编译平台纯粹是一个操作性工作,多用几次也就熟悉了。
好多教材里面,上来就使出吃奶的劲去分析51内核,系统总线结构,内部各种模块,新手们往往就去年买了个表:想玩个单片机,还得先成为数字系统高手。其实个人感觉必要性不是很大,我们使用集成电路,更多的时候是将其看做一个黑匣子,我们只关心它的输入与输出的关系,至于内部如何工作,我们不想知道,也没兴趣去知道,对吧。如果日后需要,再去了解也不迟。Ok,下面举几个例子,来看看简单的MCU控制。
点灯
就好像伟大的程序猿们,学习一门新的语言时,先会尝试打印一句“Hello World!”一样,高手们拿到一块新的MCU,往往都会先拿来点亮一个LED。不要小看这个点亮LED,虽然很简单,但是至少要求有基本的模电知识和了解这块MCU的IO端口寄存器的基本操作。LED啊LED,PN结啊PN结,导通啊导通,发光啊发光。在模电里面我们知道,LED其实就是个掺入了电致发光材料的PN结,只要PN结导通,并有电流流过,就能够发光。瞧瞧上面的两种接法,假设IO口是P1.1,D1在IO口输出什么电平的情况下发光呢?看看接法1,D1阳极连接Vcc,阴极连接IO口,D1导通的前提是PN结正偏,阳极电压要大于阴极电压,且差值要大于某个值,这个值由D1的材料特性决定。到这里,P1.1要输出啥,D1才会亮呢?吼吼,必须是一个低电平哟。那好,代码里面,我们写上“P1.1=0;”,编译下载,“咣机”,瞧瞧是不是灯亮了?要是我们再写一个300ms延时函数delay(),“P1.1=1;delay();P1.1=0;delay();”,重新编译下载,瞧瞧,灯是不是闪起来了?吼吼,控制就是这么简单。还有接法2,大家可以自己分析一下了。在这个基础上,还有更多的玩法,跑马灯、呼吸灯等等。
中断
这部分涉及IO口操作很少,基本上都是内部中断寄存器的操作。中断,其实就是优先级更高的一个任务;比如周末有一打算睡到12点的任务,当您正在呼呼大睡的时候,突然老板9点钟打来一个电话中断了睡觉任务,并给出12点前完成深入开展当的群众路线的高质量个人对照检查材料的任务,睡觉任务被打断了,只能起床苦逼地进行写材料的任务,10点钟完成材料的撰写并发送任务后,继续睡觉到12点。上面这个流程,基本上就是一个中断的基本流程。而我们操作内部中断寄存器,主要是为了确定是否应答中断和中断如何开始。S51的中断寄存器常用的有6个,中断允许控制寄存器IE是决定系统是否响应中断,如果需要中断,这个寄存器必须要置位;定时器控制寄存器TCON决定系统是否采用定时器方式来激活中断;定时器工作方式控制寄存器TMOD用于选择定时器的工作方式,一般需要先使用定时器初值赋予寄存器(TH0/TH1,TL0/TL1)来装载一个初始值,然后根据TMOD来确定是加计数至溢出来产生中断,还是减计数至0来产生中断;串口控制寄存器SCON则是确定是否由串口数据传输来激活中断;而中断优先控制寄存器IP则是用于控制多个中断产生时,系统响应的顺序。当然,最最重要的还是中断服务程序,也就是一旦中断来临,系统需要进行的动作,一般情况下,建议中断服务程序还是尽可能的简单,不要进行复杂的数据运算或长时间的延时,最好只是给出一个事件标志,由main函数根据这个事件标志去完成相对应的动作。
中断是MCU里面的压轴货,从应用层面来讲,可以实现简单多任务,如果中断high不起来,谁也不能说自己精通S51。
外设驱动
一个系统,只有51单片机,那叫光杆司令,绝大部分情况下,51单片机外围会连接各种各样的芯片,这些芯片会以各种总线形式与单片机相连接,常见的有1-wire、I2C、SPI、Can等等。物理连接后,单片机与芯片之间必须建立起某种协议才能正常进行通信。啥叫协议?听上去很牛逼,其实说白了就一句话,语言、习惯要相通。先说语言,就好像说话,单片机说汉语,外设芯片说德语,咋沟通交流?再说习惯,就好像喝酒猜拳,外设芯片猜拳前要开场词“哥俩好”,单片机单刀直入直接喊拳码,这样哥俩明显不能同步,不能交流了撒。一般情况下,都需要利用数电知识仔细研究外设芯片的操作时序,操作时序图直接描述了外设芯片的语言习惯,对单片机编程时,必须符合外设芯片的语言习惯,兄弟俩才能正常沟通。以I2C总线为例,I2C总线空闲时,单片机以启动信号START来掌管总线,以停止信号STOP来释放总线;每次通讯以START开始,以STOP结束;启动信号START并后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R/W位为0表示由单片机向被控器件写数据,R/W为1表示由单片机向被控器件读数据;当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号ACK;单片机检测到ACK信号后,开始数据的传输,每个字节数据传输结束,都会发送一次ACK信号,如果全部结束则发送NACK信号,每个数据字节在传送时都是高位(MSB)在前。这个例子其实可以很明显地看出,要想完成外设芯片的驱动,必须通过迪特希特的时序图了解它的习惯,让单片机去适应它,最后达到天人合一,鱼水交融的境界,就像把妹一样。邪恶了,吼吼。
小结
上面是小弟在学习过程中的一点点小认识,由于能力关系肯定会有不对的地方,欢迎各路大神,各种品牌、各种材质的板砖。
其实单片机入门没有那么困难,特别是用简单方便的51单片机来入门,简直是无敌了,但前提是要熟悉编译环境和一定的C语言基础。学51单片机和屌丝们把妹是一样一样的,你用心去对待它,用热情去融化它,用真诚去感动它,女神也会被推倒。
电子 电路 MCU 爱特梅尔 C语言 总线 单片机 集成电路 LED 电流 电压 51单片机 相关文章:
- 利用蓝牙技术和远程信息控制单元实现汽车诊断(11-13)
- 六大特点助CMOS图像传感器席卷医疗电子应用(11-13)
- 汽车网络的分类及发展趋向(11-13)
- 多核嵌入式处理技术推动汽车技术发展(11-18)
- CAN总线的客车轻便换档系统设计与实现(02-13)
- 高性能嵌入式ARM MPU在医疗电子系统中的设计应用(05-12)