单片机基础讲义陈明专用第一节课点亮LED灯1.单片机内部资源的三大指标:FLASH(程序存储空间ROM),RAM(内存),SFR(特殊功能寄存)。2.单片机最小系统;三要素:电源电路、复位电路、晶振电路。特点:单片机可以运行程序,是单片机控制系统的核心。3.单片机C语言SFR声明:sfrP0=0x80;sfrTCON=0x88;sbitIT0=TCON^0;sbitLED=P0^0;一个字节是8位,一位控制一个I/O口,字节控制所有的I/O口4.作业牢记发光二极管参数和限流电阻计算方法。理解单片机基本外围电路,以及单片机的FLASH、RAM、SFR的概念。初步了解单片机程序的基本方式,并且通过查看数据手册来了解SFR的有关内容第二节课硬件基础学习1.去耦电容的使用低频滤波电容,平常应用最多的是钽电容,电解电容,陶瓷电容,起到去除电源低频纹波,稳定电源的作用。高频滤波电容,电源附近,通常用104电容来进行去除高频干扰。2.三极管三极管是我们的日常应用电路中经常会用到的一个器件。分为PNP和NPN型。三极管常用功能:1、开关控制2、信号放大3、电平转换3.74HC13874HC138:由三个输入来控制8个输出口的状态,即所谓的三八译码器。00001111111001101111110101101111101111101111100111101111011111101111011111101111111111105.作业1、理解并掌握电源输入端滤波电路及其电容的应用和原理。2、记忆三极管的型号和导通原理。3、理解三八译码器的原理,并且学会使用。第三节课流水灯1.常用延时办法非精确延时1、for(i=0;i100;i++);2、i=100;while(i--);精确延时办法1、利用库函数_nop_();(需要includeintrins.h)2.变量类型关键字所占字节取值范围unsignedchar10~255“00000000”到”11111111”unsignedint20~65535“0000000000000000”到“1111111111111111”依照国际惯例,我们可以用uint8uint16等缩写来替代,只需要用typedef语句可以完成:typedefunsignedcharuint8;typedefunsignedintuint16;4.流水灯实验8个LED发光二极管,分别对应单片机IO口的P0.0到P0.7口,8个单片机IO口组成一个字节,在程序编写过程中,可以直接用P0来进行操作。C语言的8位二进制数代表了8个IO口P0=0xfe;P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0111111105.C语言运算符左移右移X2X2左移,最低位填0补充;右移,最高位填0补充0xf01110000001111000按位取反符号~取反后1变成0,0变成10x0F取反后成为0xF0,即00001111-111100006.数码管6.数码管真值表根据单片机连接电路,可以计算出数码管的真值表:P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0dpgfedcba11111001P0=0xF9;根据单片机连接电路,计算出数码管的真值表(共阳极)0123450xc00xf90xa40xb00x990x926789Ab0x820xf80x800x900x880x83CdEF0xa70xa10x860x8e6.作业记住C语言2个变量类型及其范围,掌握C语言的位操作和字节操作。用3个LED小灯做一个交通灯的程序。根据原理图和流水灯程序,独立完成流水灯反方向流动以及小灯一个个点亮直到全亮的功能。明白数码管的原理,写出数码管真值表。第四节课定时器1.时钟周期和机器周期时钟周期T是时序中最小的时间单位。具体计算就是1/时钟源。我们开发板上单片机使用的时钟周期=1/11059200s。机器周期CPU完成一个操作的最短时间。普通51一个机器周期是12个时钟周期。2.定时器和计数器2个定时器/计数器:定时器0和定时器1定时器:每经过一个机器周期,寄存器加1。因此,可以将机器周期看作为计数周期。计数器:后续课程介绍。3.特殊功能寄存器TCON位76543210符号TF1TR1TF0TR0IE1IT1IE0IT0TF:定时器溢出标志。溢出时,该位自动置1。中断执行时硬件清零,或者软件清零。TR:定时器运行控制位,置1开始计时,清0停止计时。4.定时器的特殊功能寄存器TMOD位76543210符号T1GATET1C/TT1M1T1M0T0GATET0C/TT0M1T0M0T1和T0分别代表单片机两个计数器GATE:该位被置位时为门控位。仅当TR1被置位并且INT1脚为高,定时器开始计数。当该位被清零时,只要TR1被置位,定时器1马上开始计数。C/T:该位为0的时候,用作定时器,该位为1的时候,用做计数器。M1,M000011011模式0模式1模式2模式3模式1:16位的计数器。(TH1,TL1)模式2:自动装载8位计数器。主要应用在串口波特率发生器。模式0&模式3:几乎不用。TCON和TMOD复位后都会自动变成0x00.12*(65536-x)/11059200=0.0015.使用定时器的方法第一:设置特殊功能寄存器TMOD,使之工作在需求的状态。第二:设置计数寄存器的初值,精确设定好定时时间。第三:设置特殊功能寄存器TCON,通过打开TR来让定时器进行工作。(也可设置为中断模式)TH1=0xfc;TL1=0X66;12(65536–x)/11059200=0.02s7.程序#includereg52.htypedefunsignedcharuint8;typedefunsignedintuint16;sbitENLED=P1^4;sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitLED=P0^0;main(){uint8counter;ENLED=0;ADDR0=0;ADDR1=1;ADDR2=1;ADDR3=1;TMOD=0x01;TH0=0xB8;TL0=0x00;TR0=1;while(1){if(1==TF0){TF0=0;TH0=0xB8;TL0=0x00;counter++;}if(50==counter){counter=0;LED=~LED;}}}第五课基础学习+习题课1.变量局部变量:在函数内部声明的变量是内部变量,它只在本函数内有效,在此函数外是不能作用的。函数体内占内存,出了函数释放内存。全局变量:在函数外边声明的变量就是外部变量,也叫做全局变量,一个源文件(.c)可以包含一个或者多个函数,全局变量的作用范围是从声明的位置一直到文件结束,一直占用内存。静态变量在函数体内声明,前边加static关键字声明,属于局部变量,和局部变量的区别是一直占用内存,和全局变量的区别是只能在函数体内使用。注意:只有第一次赋值有效。2.晶振电路晶振选择:根据实际系统需求选择,6M,12M,11.0592M,20M等等负载电容:对地接2个10到30pF的电容即可,常用20pF。万用表测晶振:直接用红表笔对晶振引脚,黑表笔接GND,测量电压即可。3.复位电路复位:把单片机内部电路设置成为一个确定的状态,所有的寄存器初始化。51单片机的复位时间大约在2个机器周期左右,具体需要看芯片数据手册。一般通过复位芯片或者复位电路,具体的阻容参数的计算,通过google查找。4.单片机IO口状态1、普通IO口2、强推挽3、开漏(开集)4、单片机IO口的驱动能力5、74HC245的应用5.上下拉电阻上拉就是将不确定的信号通过一个电阻嵌位在高电平,下拉同理。1、电平转换,提高输出电平数值。2、OC门必须加上拉电阻才能使用。3、加大普通IO引脚驱动能力。4、悬空引脚上下拉抗干扰。6.上拉电阻选取原则1、从节约功耗及芯片灌电流能力考虑应当足够大;电阻大,电流小。2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。3、对于高速电路,过大的上拉电阻可能会导致边沿变平缓。综合考虑:上拉电阻常用值在1K到10K之间选取,下拉同理。7.在线仿真ISP:In-SystemProgramming,是指在系统可编程,指电路板上的空白器件(单片机)可以编程写入最终用户代码,而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。Ice:InCircuitEmulator,是指在线仿真器,ICE是最为常用的调试设备,它的核心思想是完全模拟CPU工作,通过外围电路捕获CPU的各种状态信息,输送到PC端,通过PC来查看当前CPU的工作状态。8.&和|对于不能进行直接位操作的SFR进行位操作的办法:某一位置1的办法:a=a|10000000,将要置1的位为1,其他为0。a|=0x01;低位置1a=xxxxxxx1某一位清0的办法:a=a&xxxxxxx0,将要清0的位为0,其他为1。a&=0xef;xxx0xxxx#includereg52.htypedefunsignedcharuint8;typedefunsignedintuint16;sbitLED=P0^0;sbitENLED=P1^4;sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;main(){uint8j=8;uint16i;ENLED=0;ADDR3=1;ADDR0=0;ADDR1=1;ADDR2=1;while(1){P0=~(1--j);for(i=0;i20000;i++);if(0==j){j=8;}}}9.作业充分理解并且学会使用晶振电路、复位电路。理解单片机的IO口的状态,并且具有以后阅读数据手册进行IO口设计的能力。理解并且牢记上下拉电阻的原理和选用方式。学会如何使用在线仿真进行调试程序,要学会定位问题并且解决问题。第六课中断1.中断的SFR位76543210符号EAECET2ESET1EX1ET0EX0中断使能控制寄存器IEEA:总中断使能位,总阀门。EC:PCA中断使能位ET2:定时器2中断使能位ES:串口中断ET1:定时器1溢出中断使能EX1:外部中断1使能ET0:定时器0溢出中断使能EX0:外部中断0使能位76543210符号保留PPCPT2PSPT1PX1PT0PX0位76543210符号保留PPCHPT2HPSHPT1HPX1HPT0HPX0H中断优先级寄存器IPIPHPPC:PCA中断优先级PT:定时器中断优先级PS:串口中断优先级PX:外部中断优先级2.中断优先级的说明当设置为默认中断优先级时:当几个中断同时发生时,则先处理中断优先级高的中断程序,在处理任意中断期间发生中断,都不会响应。当人为配置了中断优先级,同时发生中断,优先级高的先响应,在处理任意中断时,发生同级别或低级的中断,则不响应,发生优先级更高的中断时,则先处理高优先级中断,处理完毕,再回来处理当前中断。当设置为默认中断优先级时:假设“水开”默认优先级高于“门铃”优先级,当先听到“水开”则先处理“水开”这件事,当先听到“门铃”则先处理“门铃”这件事。只有当两件事同时发生时,则会先去处理“水开”,再处理“门铃”。当人为配置了中断优先级配置“水开”为高优先级,则当“水开”事件发生时,直接处理“水开”,在处理“水开”的过程中,使“门铃”响了,也不会去理会。当“门铃”响了,正在走向门口时,这个时候,“水开”事件又发生了,那么从门口转向,先去处理“水开”,处理好了后,再回头到门口,处理“门铃”事件。3.includereg52.htypedefunsigne