案例2-单片机最小系统设计_第1页
案例2-单片机最小系统设计_第2页
案例2-单片机最小系统设计_第3页
案例2-单片机最小系统设计_第4页
案例2-单片机最小系统设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

案例2单片机最小系统设计

01

用户名:stu

密码:stu2014.9.18单片机最小系统设计步骤硬件设计工具软件:AltiumDesigner、DXP软件设计工具软件:KeiluVision调试万用表示波器最小系统-硬件单元电路电源及其指示灯电路晶振电路复位电路ROM启动选择电路下载接口电路独立按键电路发光二极管电路等电源及其指示灯电路电源接插件XH2.54KF2510KF7.62HT5.08DC电源插座压线钳发光二极管5mm、3mm直径贴片发光管060308051206电阻1/4W立式电阻(碳膜、金属膜)贴片电阻热敏电阻压敏电阻晶振电路时钟:定时与控制部件晶振和电容组成的并联谐振回路。晶振:1.2MHz~12MHz之间选择(典型:6M、12M、11.0592M)电容:瓷片电容5~30PF调试单片机最小系统时,可用示波器测晶振波形(正弦信号)来判断CPU是否已工作(正弦波)无源有源瓷片电容8051周期振荡周期:指振荡源的周期(石英晶体的振荡周期)时钟周期:(称S周期)为振荡周期的2倍机器周期:一个机器周期含6个时钟周期,即12个振荡周期。指令周期:完成一条指令占用的全部时间。805l的指令周期含1-4个机器周期机器周期:T=12/fosc若fosc=6MHz,则805l的:振荡周期=1/6us;时钟周期=1/3us;机器周期=2us;指令周期=2~8us。

复位电路为什么要复位?单片机死机时,需要复位;复位后CPU从地址0000H开始执行程序。怎么复位?在RST输入端出现高电平时实现复位和初始化。复位时RST引脚至少保持一定时间的高电平-高电平持续24个振荡周期以上(6MHz-4us)。当RST引脚返回低电平以后,CPU从地址0000H开始执行程序,复位时晶振上无信号。6*6*5mm微动按钮12*12*7mm微动按钮复位电路复位电路上电复位(R=10k,C=10uFt=RC=100ms)手动复位看门狗自动复位看门狗监控复位电路IMP705/706/813L为带看门狗μP监控电路。程序中要对813“喂狗”,若1.6秒内没有“喂狗”信号(P1.0),则813会自动产生信号对CPU复位。8051存储器系统存储器分类ROM:程序存储器,放代码AT89S51片内(4K)片外最大64K(0000H~FFFFH)RAM:数据存储器,放数据AT89S51片内(256字节)片外最大64K(0000H~FFFFH)8051的ROM与RAM采用独立编址(地址会出现重叠)系统是通过控制信号PSEN#(ROM编程选择使能)RD#(RAM读控制)WR#(RAM写控制)来区分对ROM还是RAM的操作ROM启动选择电路AT89S51单片机片内含4KFlashROM地址范围:000H~3FFH片外亦可扩展到最大64K的ROM地址范围:0000H~FFFFH8051单片机系统是从0H地址处开始运行的,因此8051单片机设置了EA#(ExternalAddress外部地址)选通控制位EA#=0:用外部ROM启动EA#=1:用内部ROM启动ROM(程序存储器)ROM保留地址其它ROM地址RAM(随机存储器)低128字节(00H~7FH)RAM区高128字节(80H-FFH)特殊功能寄存器(SFR)的区8051有21个特殊功能寄存器,其它是预留,不能用于存储数据具体见下页805121个特殊功能寄存器(SFR)符号地址注释符号地址注释*ACCE0H累加器*P3B0H通道3*BF0H乘法寄存器PCON87H电源控制及波特率选择*PSWD0H程序状态字*SCON98H串行口控制器SP81H堆栈指针SBUF99H串行数据缓冲器DPL82H数据存储器指针(低8位)*TCON88H定时器控制DPH83H数据存储器指针(高8位)TMOD89H定时器方式选择*IEA8H中断允许控制器TL08AH定时器0低8位*IPD8H中断优先控制器TL18BH定时器0高8位*P080H通道0TH08CH定时器1低8位*P190H通道1TH18DH定时器1高8位*P2A0H通道2*:表示该SFR可以位寻址8051单片机程序下载编程器方式ISPInSystemProgram在系统编程IAPInApplicationProgram在应用编程:通过RS232、CAN、以太网等ISP下载接口电路ByteBlasterII并口下载实验室台式机参阅\Isplay1.3\ISPlay使用手册.pdfAVRISPUSB下载学生笔记本参阅\progisp168\USB-ASP使用说明.docFC10P压线头DC10P简易牛角座IDC压线钳输入检测电路1-独立按键电路高电平有效低电平有效输入检测电路2-大信号输入工程应用中,很多开关量输入信号为12V或24V,要传入MCU,应将对应信号转换成MCU的匹配电平,可采用电阻分压或光耦方式实现,具体电路见下:电路1:电阻分压电路(74HC14:六施密特反相器)输入检测电路2-大信号输入若输入信号为12V或24V的开关信号,要传入MCU,应将对应信号转换成MCU的匹配电平,可采用电阻分压或光耦方式实现,具体电路见下:电路2:光耦电路开关量输出控制电路1-发光二极管电路上拉接法(典型)低电平驱动下拉接法高电平驱动开关量输出控制电路2-大信号输出工业现场的开关量通常是12V或24V,而MCU输出一般为5V或3.3V,因此需要加驱动电路。具体方法可采用三极管或集成达林顿管驱动。继电器驱动电路开关量输出控制电路2-大信号输出工业现场的开关量通常是12V或24V,而MCU输出一般为5V或3.3V,因此需要加驱动电路。具体方法可采用三极管或集成达林顿管驱动。达林顿管驱动8051I/O口8051单片机有4组8位P0P1P2P3每个端口可作为输入或输出字节操作位操作(位寻址)部分端口除I/O功能外的第二功能P0AD7~AD0低8位地址总线/8位数据总线分时复用P2A15~A8高8位地址总线P3RXD、TXD、INT0#、INT1#T0、T1、WR#、RD#8051I/O读写操作字节操作#include“reg51.h”//sfrP1=0x90;读字节unsignedchara;a=P1;//读8位a=P1&0x01;//读1位a=P1&0x0f;//读4位写字节P2=0x01;//写8位常量P2=a[i];//写8位数组元素P2=P2|0x01;//对P2.0置1P2=P2&0x0f;//对P2高4位清0,低4位保持不变位操作sbitP1_0=P1^0;//必须先定义位读位bdatamy_byte=0x20;sbitmy_bit=my_byte^0;或bitmy_bit=0x00;my_bit=P1_0;if(my_bit==1){;}if(P1_0==1){;}写位P1_0=1;P1_0=0;P1_0=~P1_0;端口输出控制-字节操作方式#include"reg51.h"#defineDELAY1000voiddelay(unsignedintn){ unsignedinti; for(i=0;i<n;i++) ;}voidmain(){ P2=0x7f; delay(DELAY_1S); P2=0xBf; delay(DELAY_1S); P2=0xDf; delay(DELAY_1S); P2=0xEf; delay(DELAY_1S); P2=0xF7; delay(DELAY_1S); P2=0xFB; delay(DELAY_1S); P2=0xFD; delay(DELAY_1S); P2=0xFE; delay(DELAY_1S);}问题:1、8状态完成后程序结束,应该加死循环while(1);2、低电平有效时,16进制数据书写较繁琐,可采用位取反“~”实现;3、8组语句可采用通过数组,用循环实现,以简化程序。具体方法见下页端口输出控制-字节操作方式while内嵌for语句voidmain(){ unsignedchard[8]={0x80,0x40,0x20,0x10, 0x08,0x04,0x02,0x01}; unsignedchari; while(1) { for(i=0;i<8;i++) { P2=~d[i]; delay(DELAY_1S); } }}while内嵌if语句voidmain(){ unsignedchard[8]={0x80,0x40,0x20,0x10, 0x08,0x04,0x02,0x01}; unsignedchari; i=0; while(1) { P2=~d[i]; delay(DELAY_1S); i++; if(i==8) i=0; }}问题:1、程序中数组d与变量i为什么要用unsignedchar类型定义?2、左右程序执行一次while循环各用多少时间?采用哪种方式更好?为什么?3、若要改变循环移动方向,程序应如何修改?端口输出控制-字节操作方式循环左移改为循环右移voidmain(){ unsignedchard[8]={0x80,0x40,0x20,0x10, 0x08,0x04,0x02,0x01}; unsignedchari; i=0; //i=7; while(1) { P2=~d[i]; delay(DELAY_1S); i++; //i--; if(i==8) //if(i==-1) i=0; //i=7 }}观察Proteus仿真效果voidmain(){ unsignedchard[8]={0x80,0x40,0x20,0x10, 0x08,0x04,0x02,0x01}; chari; i=7; while(1) { P2=~d[i]; delay(DELAY_1S); i--; if(i==-1) i=7; }}问题原因:1、unsignedchari;i是不可能为负的,因此应修改为chari;端口输出控制-位操作方式注意sbit定义位必须在源程序的上方必须在函数外该程序的最终执行效果如何?显然本例用字节方式输出更方便端口输入检测-字节操作方式voidmain(){ while(1) { if(P1&0x01==0) //S0按下 { //循环左移 } elseif(P1&0x02==0) //S1按下 { //循环右移 }

}}8051输入S0(P1.0)S1(P1.1)有效电平:低电平,即只要判断P1.0、P1.1是否为低电平即可字节输入方式判断存在的问题:关系运算符(==)比位与运算符(&)的优先级高端口输入检测-位操作方式voidmain(){ while(1) { if(S0==0) //S0按下 { //循环左移 } elseif(S1==0) //S1按下 { //循环右移 }

}}8051输入,首先定义sbitS0=P1^0; //位定义sbitS1=P1^1; //位定义有效电平:低电平,即只要判断P1.0、P1.1是否为低电平即可位输入方式判断对于按键判断,显然位方式输入更简单延时1秒实现#defineDELAY_1S10000采用宏定义设置1S延时常数,根据实际运行效果改变其值,达到粗略的运行效果。延时函数定义voiddelay(unsignedintn){ unsignedinti; for(i=0;i<n;i++) ;}其形参数值范围为0~65535,采用循环空语句方式实现延时。延时函数调用delay(DELAY_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论