基于单片机C51智能车.doc_第1页
基于单片机C51智能车.doc_第2页
基于单片机C51智能车.doc_第3页
基于单片机C51智能车.doc_第4页
基于单片机C51智能车.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

摘要本设计采用AT89S52单片机作为核心控制器和数据处理中心。为了简化电路,减少小车负担,用软件编程发给伺服电机的高、低电平信号,来控制电机的转向、转速。设计分为五个模块:单片机最小系统、电机驱动电源、伺服电机驱动电路、胡须导航、红外线导航。来实现小车走个“日”字、胡须避障和红外线避障功能。整个系统的电路结构简单、可靠性能高,为工厂的智能控制化做好铺垫。关键字:单片机,智能车,避障,伺服电机AbstractThis design uses AT89S52 microcontroller as the core controller,and as the data processing center. To simplify the circuit, reducing the burden of the car, the software program distributed by the high servo motor, low-level signals to control the steering motor, rotational speed. Design is divided into five modules: SCM minimum system, motor drive power supply, servo motor drive circuit, beard navigation, infrared navigation. Car to go to achieve a Day, which beard obstacle avoidance and infrared obstacle avoidance capabilities. Simple circuit structure of the system reliability can be high, the intelligent control of the factory pave the way.Key words: Microcontroller, smart cars, obstacle avoidance, servo motor 目录1 绪论-12 硬件设计-12.1总体设计方案-12.2电源模块-22.3伺服电机驱动模块-22.4胡须导航模块-42.5红外线导航模块-62.6单片机最小系统设计-83 软件设计-143.1程序流程图-143.2 安装软件-163.3编制Uart.h头文件-203.4编制胡须避障程序-263.5编制红外线避障程序-303.6智能车走“日”字程序-354 结论-38参考文献-39致谢-401 绪论智能化是21世纪机电一体化的发展方向。近几年,处理器速度的提高和微机的高性能化、传感器系统的集成化与智能化为嵌入智能控制创造了条件,有力地推动着机电一体化产品向智能化方向发展。智能机电一体化产品可以模拟人类智能,具有某种程度的判断推理、逻辑思维和自主决策能力,从而取代工程中人的部分脑力劳动。现目前人工智能的出现和发展,促进了自动控制系统向更高层次即智能控制的发展。智能控制是一种无需人的干预就能够自主地驱动智能机器实现其自身目标的过程是用机器模拟人类智能的一个重要领域。智能控制技术包括分级递阶智能控制技术,模糊控制技术,专家控制技术,机器学习技术。智能机器人技术是机械电子,计算机,自动控制技术等多学科技术发展的结晶。其应用和发展将对人类21世纪的社会发展,经济发展,科技发展,生产力发展产生深远的影响。智能机器人是一个复杂而庞大系统,必须配备各种传感器,以便获得周围环境的必要信息,提供给智能机器人的智能控制系统进行决策和执行。其研究重点开始转向具有感觉环境模型,自主自导式的智能机器人。视觉技术和多传感器组合技术都是研究的重点:研究阵列式触觉,力觉传感新型材料的人工皮肤,内传感器的产品化程序等。回顾以前成果,在1977年到1987年Apple公司重点研究轻型装配机器人,采用DD驱动和人工视觉等新技术,特点是高精度,高速度,高柔性,带视觉等。直至今天,中国“智水型”机器人和中国“月球车”的研制成功,它代表着人工智能控制技术在国内的进一步发展的结果,在今后智能控制技术领域仍然处于科技研究领域的热点问题。随着现代化信息技术的飞跃发展,最近几年智能控制技术广泛的应用和研究。本设计所阐述的智能小车按指定路线前行外加胡须和红外避障,在该设计领域,智能控制发挥着重要的作用,扮演着不同的各种角色。该技术可用于做探测性实验和一些高科技的智能控制装置,比如航天领域,医学智能仪器,工业安全生产,农业,地质勘探,军事,仪器仪表,探测性智能测试,网络通信等领域占据了不可替代的重要地位。2 硬件设计2.1 总体设计方案胡须导航电机驱动模块单片机最小系统红外导航驱动电源模块智能小车设计分为五个模块:单片机最小系统、电机驱动电源、伺服电机驱动电路、胡须导航、红外线导航。具体的智能车控制系统总体方案如图1-1所示。图2-1 总体设计方案图2.2电源模块在电源模块中使用的是LM7805稳压芯片,它在7.5V锂电池的输入供电下,能实现5V的稳压输出。因此为了简化了电路,便于小车的组装,综合考虑采用LM7805的稳压芯片输出5v电压。用LM78系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。该系列集成稳压IC型号中的LM78后面的数字代表该三端集成稳压电路的输出电压,本设计用的LM7805表示输出电压为正5V。因为三端固定集成稳压电路的使用方便,所以在本设计制作中采用。其电源模块接线图2-2如下。图2-2 电源模块接线图其中C1、C2分别为输入端和输出端滤波电容。2.3 伺服电机驱动模块机器人的伺服电机是用来将机器人大脑(计算机)发出的运动指令转换为运动动作的部件,相当于肌肉的作用。所为伺服,就是可以按照指令进行连贯动作,伺服电机就是可以按照指令连续控制位置或速度的点击。1它们不同于传统的直流电机或交流电机,这些电机不能控制位置和速度,只能以某一种恒定的速度旋转。现在的伺服电机的种类很多,本设计中使用的是一种控制非常方便和简单的伺服电机,它最初主要用于航空模型等方向舵的位置控制,因而又称作伺服舵机。脉冲信号不同可以控制伺服电机的转速。下面是电机转速为零、电机顺时针全速旋转和电机逆时针全速旋转的时序图。图2-3 电动机转速为零的控制信号时序图图2-4 电机顺时针全速旋转的控制信号时序图图2-5 电机逆时针全速旋转的控制信号时序图图2-3所示是高电平持续1.5ms低电平持续20ms,然后不断重复的控制脉冲序列。该脉冲序列发给经过零点标定后的伺服电机,伺服电机不会旋转。所谓零点信号就是指伺服电机在保持静止时接收到某一特定的控制信号。如果在接收到零点信号时可以能会转动,这时要用螺丝刀调节伺服电机模块内的调节电阻从而让伺服电机保持静止。从图2-4和2-5可知,控制电机运动转速的是高电平持续的时间,当高电平持续时间为1.3ms时,伺服电机顺时针全速旋转,当高电平持续时间1.7ms时,伺服电机逆时针速全速旋转。每个伺服电机的控制电线有三根,其中白色线用来传送电机的控制信号,红线用来连接到电源上,而黑线则是接地线。2连接伺服电机驱动电路图如图2.6所示。图2-6 左、右伺服电机驱动电路图P1_0引脚的控制输出用来控制右的伺服电机,而P1_1引脚的控制输出则用来控制左边的伺服电机。2.4 胡须导航模块许多自动化机械都依赖于各种触觉型开关,例如,当机器人碰到障碍物时,接触开关就会察觉,通过编程让机器人躲开障碍物;旅客登机桥在靠近飞机时为了保护昂贵的飞机,在登机桥接口安装触须,当登机桥离飞机很近后触须就会碰到飞机,立即通知控制器提醒离飞机已经很近了,需要降低靠近速度;工厂利用触觉开关来计量生产线上的工件数量;在工业加工过程中,也被用来排列物体。在所有这些实例中,触觉开关提供的输入信息决定设备控制器的输出,以采取相应的动作。在本设计中,在智能车上安装一个称为胡须的触觉开关,通过对智能车编程来监视学觉开关的状态,以及当它遇到障碍物时决定如何动作,最终的结果是通过触觉给智能车自动导航。胡须的硬件部件清单:(1)金属丝2根。(2)平头M322盘头螺钉2个。(3)13mm圆形立柱2个。(4)M3尼龙垫圈2个。(5)3-pin公-公接头2个。(6)220电阻2个。(7)10k电阻2个。搭建的胡须电路,如图2-7所示。图2-7 胡须电路示意图其中右面的胡须是通过P1_4引脚完成,左面的胡须是通过P2_3引脚完成。如图2-7所示,连接到每个胡须电路的I/O引脚监视着10K上拉电阻上的电压变化。当胡须没有被触动,连接胡须的I/O管脚的电压是5V;当胡须被触动时,I/O短接到地,所以I/O管脚的电压是0V。2.5 红外线导航模块人类70%以上的知识均来自眼睛,也就是人类的视觉系统,尽管人们的眼睛所能见到的光线只占整个光波范围很小的一部分。许多自动化机械设备广泛采用红外线一种频率低于可见光的不可见光线进行环境的探测和通信。3因为这种光线虽然看不到,但很容易获得,而且成本很低。红外探测器(Infrared Detector)是将入射的红外辐射信号转变成电信号输出的器件。红外辐射是波长介于可见光与微波之间的电磁波,人眼察觉不到。要察觉这种辐射的存在并测量其强弱,必须把它转变成可以察觉和测量的其他物理量。一般来说,红外辐射照射物体所引起的任何效应,只要效果可以测量而且足够灵敏,均可用来度量红外辐射的强弱。4许多智能车使用雷达(RADAR)或声纳(SONAR)来探测物体而不需要和物体接触。本设计中将使用红外光来照射智能车前进的路线,然后确定何时有光波从被探测目标反射回来,通过检查反射回来的红外线就可以确定前面是否有物体,来决定它的动作,从而实现导航。在智能车上建立的红外光探测物体系统在许多方面就象汽车的前灯系统。当汽车前灯射出的光从障碍物体反射回来时,人的眼睛就发现了障碍物体,然后大脑处理这些信息,并据此控制身体动作驾驶汽车。智能车使用红外线二极管LED作为前灯,如图2-8所示。图2-8 红外光探测障碍物红外线二极管发射红外光,如果智能车的前面有障碍物,红外线将从物体反射回来,相当于智能车眼睛的红外检测(接收)器,检测到反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。智能车的大脑单片机AT89S52基于这个传感器的输入控制伺服电机。红外线(IR)接收/检测器有内置的光滤波器,除了需要检测980 nm波长的红外线以外,它几乎不允许其它光通过。5红外检测器还有一个电子滤波器,它只允许大约38.5kHz的电信号通过。也就是说,检测器只寻找每秒闪烁38,500次的红外光。6这就防止了普通光源象太阳光和室内光对IR的干涉。太阳光是直流干涉(0Hz)源,而室内光依赖于所在区域的主电源,闪烁频率接近100或120 Hz。由于120 Hz在电子滤波器的38.5 kHz通带频率之外,它完全被IR探测器忽略。红外线的硬件部件清单:(1) 两个IR LED。(2) 2个红外检测器。(3) 四个470欧电阻。(4) 两个9013三极管。搭建电路图,如图2-9所示。P1.2和P3.5分别是左右红外检测器,P1.3和P3.6分别是左右红外发射器。图2-9 左侧和右侧IR组原理图这里加入三极管9013来使其工作状态在开关状态。三极管是一种控制元件,主要用来控制电流大小,简单地说,是用小电流去控制大电流。硬件中用到的9013是NPN型三极管。它的工作原理是:它的基区做得很薄,当按图2-9连接时,发射结正偏,集电结反偏,发射区向基区注入电子,这时由于集电结反偏,对基区的电子有很强的吸力,所以由发射区注入基区的电子大部分进入集电区,于是集电极的电流得到了增大。7在这个设计中,三极管相当于一个开关:当P1_3(P3_6)置高时,从集电区经基区到发射区电路导通,加载在IR LED上的电压为VCC(5V),IR LED向外发射红外线;当P1_3(P3_6)置低时,电路又断开,IR LED停止发射。2.6 单片机最小系统设计本设计采用AT89S52单片机最小系统电路为整个系统的控制系统,它负责对各路传感信号的采集、处理、分析及对各部分硬件电路进行调整。AT89S52是一种低功耗,高性能CMOS 8位微控制器,具有8KB在系统可编程Flash存储器。8使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上FLASH允许程序存储器在系统可编程,亦适于常规编程器。该芯片拥有灵巧的8位CPU和在系统可编程FLASH,使得AT89S52为众多嵌入式控制应用系统提供高灵活,超有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。9空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。它的引脚结构图如下所示。图2-10 AT89S52引脚结构示意图P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。10在这种模式下,P0不具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1口:P1 口是一个具有内部上拉电阻的8位双向I/O 口,p1 输出缓冲器能驱动4个TTL逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。11作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。 表2-1 P1端口引脚第二功能端口第二功能P1.0T2(定时器/计数器T2的外部计数输入),时钟输出。P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)。P1.5MOSI(在系统程序用)。P1.6MISO(在系统编程用)。P1.7SCK(在系统编程用)。P2口:P2口是一个具有内部上拉电阻的8位双向I/O 口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。12作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3口:P3 口是一个具有内部上拉电阻的8位双向I/O 口,p3输出缓冲器能驱动4个TTL 逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。表2-2 P3端口引脚第二功能 端口第二功能P3.0RXD(串行输入口)。P3.1TXD(串行输出口)。P3.2INTO(外中断0)。P3.3INT1(外中断1)。P3.4TO(定时/计数器0)。P3.5T1(定时/计数器1)。P3.6WR(外部数据存储器写选通)。P3.7RD(外部数据存储器读选通)。此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。 RST复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。 ALE/PROG当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。 对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。 如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。 PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。 如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。 FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。13为了让单片机与PC机能相互通信,必须让RS232电平和TTL电平相互转换。TTL(Tansistor-Transistor Logic),是指三极管三极管逻辑电路。很多单片机,包括我所使用的AT89S52 都是用的这种标准。它的逻辑“1”电平是5V,逻辑“0”电平是0V。RS232标准是1969 年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的逻辑“1”电平是-5V-15V,逻辑“0”电平是+5V+15V。以下是PC机与单片机电平转换的示意图。图2-11 PC机与单片机电平转换示意图为了完成PC机的RS232电平进入单片机之前变成TTL电平;单片机的TTL电平进入PC机之前变成RS232电平。本设计采用了转换芯片MAX232来进行实现。MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。它的引脚结构图如下所示。图2-12 AT89S52引脚结构示意图MAX232芯片的引脚功能主要有以下三部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+10v和-10v两个电源,提供给RS-232串口电平的需要。14第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。 第三部分是供电。15脚GND、16脚VCC(+5v)。MAX232芯片的主要特点是:(1)符合所有的RS232技术标准。(2)只需要单一 +5V电源供电。(3)片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压V+、V-(4)功耗低,典型供电电流5mA(5)内部集成2个RS-232C驱动器和内部集成2个RS-232C接收器。15下面是连接的串口通信电路和ISP下载接口,分别如图2-13和图2-14所示。图2-13 串口通讯电路图2-14 ISP下载接口根据设计需要,设计了AT89S52单片机最小系统电路图,如下图2-16所示。图2-15 AT89S52单片机最小系统电路图其中RST接的是一个复位电路,用手动按键来实现复位。AT89S52内部没有晶振,需要外加晶振电路,按照程序要求,选用的晶振频率为12MHZ,分别连接18和19号引脚。另外P3.0和P3.1和串口通信电路相连,P1.0和P1.1分别连接右、左伺服电动,P1.4和P2.3分别接的是右胡须和左胡须,P1.2和P3.5分别是左右红外检测器,P1.3和P3.6分别是左右红外发射器,P1.5、P1.6和P1.7分别与ISP下载接口相连,GND接地和VCC接+5V电源。3 软件设计3.1程序流程图本设计采用单片机AT89S52通过程序控制来实现智能车红外线避障、胡须避障和让智能车自动走一个“日”字的效果。下面是红外线避障和胡须避障的程序流程图,如图3-1所示。当小车在前进的时候,左右两面都碰到障碍时,小车后退1.5秒,再向左转两次后继续前进;当左面遇到障碍时,小车后退1.5秒,再向右转一次后继续前行;当右面遇到障碍时,小车后退1.5秒,再向左转一次后继续前行;没遇到障碍时,小车一直向前进。图3-2为智能车走“日”字的程序流程图。利用编程来让小车完成这个线路,开始停3秒后,小车走完个“日”字,然后继续这个循环。开始向前是否碰到障碍左右碰右碰左碰向后1.5秒向后1.5秒向后1.5秒向左向左向左向右返回图3-1避障功能程序流程图向前3秒停3秒左转90度开始右转90度向前3秒向后3秒向前3秒向前3秒向左90度右转90度向后3秒左转90度向后6秒右转90度图3-2 智能车走“日”字程序流程图3.2软件安装本设计使用的编程软件是Keil uVision2,该软件是德国KEIL公司出品的51系列单片机C语言集成开发系统。安装Keil uVision2:(1)执行 Keil uVision2安装程序,选择安装Eval Version版进行安装。(2)在后续出现的窗口中全部选择Nex按钮,将程序默认安装在C:ProgramFilesKeil文件目录下。(3)将光盘“头文件”文件夹中的文件拷贝到C:Program FilesKeilC51INC文件夹里。安装完毕双击Keil uVision IDE 的图标,启动Keil uVision IDE程序,会得到图3-3示的Keil uVision2 IDE的主界面。通过用Project菜单中的New Project命令建立项目文件,过程如下:图3-3 Keil uVision IDE的主界面(1)点击 Project,会出现图3-4所示的菜单画面,然后选择“New Project”,将出现图3-5示对话框。 图3-4 Project菜单画面 图3-5 Create New Project对话框(2)在文件名中输入如“HelloRoBot”,保存在想保存的位置(如D:我的智能车制作与编程程序Chapter 1),可不用加后缀名,点击“保存”,后会出现图3-6示的窗口。(3)这里要求选择芯片的类型,Keil uVision2 IDE几乎支持所有的51 核心单片机,并以列表的形式给出。在Keil uVision2ID提供的数据库(Data base)列表中找到芯片AT89S52,然后点击确定,会出现图3-7示的窗口,询问是否加载8051启动代码,在这里选择“否”,不加载。之后会出现图3-8面,此时即得到了项目文件。图3-6 单片机型号选择窗口 图3-7 是否加载8051 启动代码提示窗口 图3-8 目标工程窗口项目文件创建后,这时只有一个框架,紧接着需要向项目文件中添加程序文件内容。Keil uVision2 支持C 语言程序。可以是已经建立好的程序文件,也可以是新建的程序文件。如果是建立好了的程序文件,则直接用后面的方法添加;如果是新建立的程序文件,则先将程序文件.c存盘后再添加。通过“File-New”操作)为该项目新建一个C语言程序文件,保存后弹出图3-9示的对话窗口,将文件保存在项目文件夹中,在文件类型中填写.C(这里.C 为文件扩展名,表示此文件类型为C 语言源文件)。图3-9 C语言源文件保存对话框添加该文件到目标工程项目了,其具体添加过程如下:(1)单击图 3-8的“+”,将出现图3-10的列表;(2)然后右键点击“Source Group 1”,在出现的菜单下选择“Add File To Group“Source Group 1”, 出现Add Files to Group Source Group1对话框。在该对话框中选择需要添加的程序文件,如刚才建立HelloRoBot.c,单击Add按钮,把所选文件添加到项目文件中。一次可添加多个文件。(3)程序文件添加到项目文件中去后,这时上图中“Source Group 1”的前面将出现一个“+”号;单击它将出现刚才添加的源文件名,如图3-11示(注意:图中显示的文件名是刚才输入的文件名)。 图3-10 添加C语言文件到目标工程 图3-11 添加了C语言文件的目标工程双击源文件即可显示源文件的编辑界面。下面来产生下载需要的可执行文件。要产生可执行的.Hex文件,需要对目标工程“Target1”进行编译设置,右键点击“Target 1”,选择“Option for target Target 1”。点击“output”,选择其中的“Create HEX File”,如图3-13所示,点击确定关闭设置窗口。然后点击Keil uVision IDE 快捷工具栏中的,Keil的C编译器开始根据要生成的目标文件类型对目标工程项目中的C语言源文件进行编译。编译过程中,可以观察到源文件中有没有错误产生,如果没有错误产生,在IDE主窗口的下面出现如图3-12提示信息,表明已成功生成了可执行文件,并存储在C语言源程序存储的目录中,文件名就是HelloRoBot.Hex。图3-12 编译过程的输出提示信息图3-13 设置目标工程的编译输出文件类型程序编译正确后就要下载到单片机中。点击ISP下载软件图标,打开ISP下载软件窗口如图1-14所示,并将通信参数设置成图中所示的参数。第一个为接口类型选择窗口,该窗口的下拉列表中提供了许多接口类型:串口COM1COM16、并口LPT1LPT3以及USB接口等。这里将使用得是并口LPT1。第二个为下载速度选择窗口,该窗口内容与接口类型紧密相连。不同的接口,该窗口就提供不同内容的下载速度。像这里选择LPT1,则提供了五种下载速度:TURBO 模式、FAST模式、NORMAL模式、SLOW模式和TURBO SLOW模式。在这五种模式下,程序下载速度依次减小。这里所使用的是第一个模式TURBO模式,下载速度最快。第三个为单片机型号选择窗口。点击“Flash”,选择要下载的可执行HEX文件HelloRoBot.Hex,选择后点击编程开始下载。如果下载成功,则下面显示“完成次数:x次”,否则显示“失败次数:x次”。如果芯片是第二次下载程序,需要先选中“擦除”复选框。图3-14 ISP软件下载窗口3.3编制Uart.h头文件串口通讯UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种能够把二进制数据按位(bit)传送的通信方式。单片机AT89S52 拥有1个串行通信接口。该串口可在很宽频率范围内以多种模式工作,其主要功能如下:在输出数据时,把数据进行并-串转换,即单片机将8位并行数据送到串口输出;在输入数据时,把数据进行串-并转换,即从串口读入外部串行数据并将其转换为8位并行数据送到单片机。16单片机AT89S52大部分端口都有第2功能,串口就用到了端口的第2功能。端口P3.0(RXD,第10号引脚)用来串口接收,端口P3.1(TXD,第11号引脚)用来串口发送。AT89S52串口支持双全工模式(同时收发),并具有接收缓冲功能,即在接收第2个字符时,将先前接收到的第1个字符保存在缓冲区中,只要CPU在第2个字符接收完成之前读取了第1个字符,数据就不会丢失。AT89S52提供了两个特殊功能寄存器SBUF和SCON供软件访问和控制串口。串口缓冲寄存器SBUF实际上是2个寄存器。写SBUF的操作把待发送的数据送入,读SBUF的操作把接收到的数据取出。17两个操作分别对应于两个不同的寄存器,见图3-15。图3-15 AT89S52串口结构简串口控制寄存器SCON 包含串口的状态位和控制位,可进行位操作。控制位决定串口的工作模式,状态位代表数据发送和接收结束后的状态。可用软件来查询状态位,也可编程使其触发中断。18串口的工作频率,即波特率,可以是固定的,也可以是变化的。如果使用可变的波特率,波特率的时钟信号由定时器1提供,而且必须对其作相应的编程。波特率是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如波特率9600表示每秒钟发送9600个bit。19我使用的是SCON模式1下的8位UART串口通信机制,如表3-1所示。表3-1串口工作模式选择SM0SM1模式描述波特率000移位寄存器1/12fosc0118位UART可变(由定时器1决定)1029位UART1/64(1/32)fosc1139位UART可变(由定时器1决定)在SCON模式1下,波特率按如下公式计算:波特率=(2SMOD/32)*(fosc/12)*1/(2K-初值) (3-1)在SCON模式1下,K=8。SMOD 是电源控制寄存器PCON 的第7 位波特率倍增位。初值是指定时器/计数器初值的计算,即定时/计数器是在计数初值的基础上加法记数的,假设Tn(TLn和THn)中写入的值为TC,在该模式下最大计数值为2n,程序运行的计数值为CCTC=2n-CC每个定时/计数器都有一个16位的寄存器Tn(n=0或1)来控制计数长度,由高8位THn和低8位TLn置初值。定时/计数器有四种工作模式。模式0:定时/计数器按13位自加1计数器工作。这13位由TH的全部8位和TL中的低5位组成,TL中的高3位没有用到。模式1:定时/计数器按16位自加1计数器工作。模式2:定时/计数器被拆成一个8位寄存器TH和一个8位计数器TL,以便实现自动重载。这种模式使用起来非常方便,一旦设置好TMOD和THn,定时器就可以按设定好的周期溢出。模式3:TH0和TL0均作为两个独立的8位计数器工作。定时器1在模式3下不工作。20假设通过P1_0所接的灯每0.4ms闪动一次,即每过0.2ms灭一次,再过0.2ms亮一次。模式2最大计数值为256us(28),满足要求,因此用模式2来显示LED灯闪烁功能,计数的值CC为0.2ms/1us=200。利用公式计算得出TC=256-200=59,换成十六进制为TC=0x38。本设计是在SCON模式1方式下和定时器在工作模式2下进行通讯,设计成一个uart.h 的头文件,以便智能车控制程序可以方便地调用。Uart.h程序如下:#include #include #define XTAL 11059200#define baudrate 9600#define OLEN 8 /串行发送缓冲区大小unsigned char ostart; /发送缓冲区起始索引unsigned char oend; /发送缓冲区结束索引char idata outbufOLEN; /发送缓冲区存储数组#define ILEN 8 /串行接收缓冲区大小unsigned char istart; /接收缓冲区起始索引unsigned char iend; /接收缓冲区结束索引char idata inbufILEN; /接收缓冲存储数组bit bdata sendfull; /发送缓冲区满标志bit bdata sendactive; /发送有效标志/*串行中断服务程序*/static void com_isr(void) interrupt 4 using 1 /串口中断 /-接收数据中断- char c; if(RI) /接收中断 c=SBUF; /读字符 RI=0; /清接收中断请求标志 if(istart+ILEN!=iend) inbufiend+&(ILEN-1)=c; /缓冲区接收数据 /-发送数据中断- if(TI) TI=0; /清发送中断标志 if(ostart!=oend) SBUF=outbufostart+&(OLEN-1);/向发送缓冲区传送字符 sendfull=0; /设置缓冲区满标志位 else sendactive=0; /设置发送无效 /PUTBUF: 写字符到SBUF或发送缓冲区void putbuf(char c) if(!sendfull) /如果缓冲区不满就发送 if(!sendactive) sendactive=1; /直接发送一个字符 SBUF=c; /写到SBUF启动缓冲区 else ES=0; /暂时串行口关闭中断 outbufoend+&(OLEN-1)=c; /向发送缓冲区传送字符 if(oendostart)&(OLEN-1)=0) sendfull=1; /设置缓冲区满标志 ES=1; /打开串行口中断 /putchar:中断控制putchar函数/替换标准库函数putchar程序/printf函数使用putchar输出一个字符char putchar (char c) if (c=n) /增加新的行 while(sendfull); /等待发送缓冲区空 putbuf(0x0D); /对新行在LF前发送CR while(sendfull); putbuf(c); return(c);/_getkey:中断控制_getkey函数/替换标准库函数_getkey程序/getchar和gets函数使用_getkeychar _getkey(void) char c; while(iend=istart) /判断接收缓冲区起始索引是否等于接收缓冲区结束索引 ; ES=0; c=inbufistart+&(ILEN-1); ES=1; return(c);/* 初始化串行口和UART波特率函数*/void com_initialize(void) istart=0; iend=0; ostart=0; oend=0; sendactive=0; sendfull=0; TMOD |=0x20; /设置定时器T/C1工作在方式2,定时1工作于自动重载模式 SCON=0x50; /设置串行口工作方式1:SCON格式 |M0|M1|M2|REN|TB8|RB8|TI|RI TH1=0xfd; /波特率9600 TL1=0xfd; TR1=1; /启动定时器 ES=1; /开串行口中断 void uart_Init() com_initialize(); EA=1; /CPU开总中断上面uart.h 是这样工作的:#define XTAL 11059200#define baudrate 9600声明所使用的晶振频率为11.0592MHz 及串口使用的波特率为9600。#define OLEN 8#define ILEN 8输出和输入的位数均是8位。AT89S52内部存储器由片上ROM和片上RAM组成。片上RAM空间由各种用途的存储器空间组成,包括通用RAM、可位寻址RAM(BDATA区)、寄存器组以及特殊功能寄存器(SFR)。另外,AT89S52有附加的128字节的内部RAM,称为IDAT 区,地址与SFR是重叠的。这个空间通常用于存

温馨提示

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

评论

0/150

提交评论