C51单片机实训论文

2024-07-23

C51单片机实训论文(精选6篇)

C51单片机实训论文 第1篇

南通纺织职业技术学院毕业设计(论文)

基于89C51船舶报警灯柱的设计

董永贤

班 级: 09电信 专 业:电子信息工程技术(智能电子)所 属 系: 机电系 指导老师: 邱宏

完成时间:201

1年10月12日-------2011年11月22日

南通纺织职业技术学院

目录

摘要及关键词---------------------2 第一章:绪论---------------------3 1.1 课题背景----------------3 1.2 主要内容----------------3 第二章:产品的功能需求及方案的确定-------------------4 2.1 产品功能需求分析----4 2.2 课题方案的确定-------5 第三章:硬件电路设计----------6 3.1 主控制电路--------------6 3.2 信号通讯电路-----------7 3.3看门狗电路---------------9 3.4 报警音输出电路------10 3.5 报警灯电路和旋转灯电路-------------------------12 3.6 稳压电源电路---------12 第四章:软件设计--------------13 4.1 软件设计方案---------13 4.2 方案流程图------------14 4.3 主要程序设计---------15 第五章:系统调试与分析------23 5.1 硬件电路调试---------23 5.2 软件调试---------------24 第六章:设计总结--------------25 参考文献--------------------------26 附图:完整电路图---------------27

南通纺织职业技术学院

89C51船舶报警灯柱设计

摘要:文章首先介绍了基于89C51船舶报警灯柱设计的背景及主要内容,设计船舶报警灯柱的目标需求以及方案的确定,随后介绍该设计的硬件和软件的搭建,而硬件电路由89C51的主控制电路,信号通讯电路,报警信号输出电路,稳压电路,报警灯柱电路,旋转灯电路构成;另外软件设计包含了软件设计的方案、方案流程图以及程序的编写。接着对硬件和软件进行调试与分析,从中查找电路的错误,最后是该设计的总结。

关键词:报警灯柱;89C51;

南通纺织职业技术学院

第一章 绪论

1.1课题意义及背景

现代船舶上轮机员的工作岗位一般都是在机舱内,监控、维护船舶主机的运行。机舱内的工作环境十分恶劣,有很强的噪音,在主机等设备的运行过程中由于高温高压下也会产生一些有害气体,这些都对轮机员的人身安全造成了一定的威胁。依据《solas国际海上人命安全公约》及《中国钢制船入海规范条例》相关规定,必须对轮机员的安全进行保护。当船舶进入工作状态,报警灯柱的报警系统进入实时控制,对各项指标进行初始化,主控电路自动将每隔0.5ms对各项指标进行检测,以确保报警的有效,及时发现火灾,CO2,大雾等危情,通过本文所设计的报警控制器输出信号,确保船舶及人员安全。

1.2课题主要内容 本文内容共分六章,第一章为绪论,主要介绍了文章的背景和主要内容。

第二章介绍产品方案设计,主要介绍产品目标需求和产品方案的确定,以便于读者更好的认识安全报警系统的设备组成、主要技术性能等。

第三章介绍系统的硬件电路设计,分别分析了89C51主控制电路,信号通讯电路,报警音输出电路,稳压电路,旋转灯电路,报警灯柱电路的硬件设计方法。

第四章介绍了基于89C51船舶灯柱报警设计及基本编程思想。

第五章介绍了系统的调试分析,主要通过硬件调试和软件调试分别分析了此系统的调试方案。

第六章介绍了本人做此论文的设计总结。

南通纺织职业技术学院

第二章 产品的功能需求及方案的确定

2.1产品功能需求分析

功能一:报警信号比较全面,有报警灯(LED灯板)、旋转灯(发出闪烁流走的光信号)、报警声(用喇叭放大),确保轮机员及时知道故障。

功能二:自动接收故障信号,采用MAX485通讯接受器。例如当外界发生火灾,通过分线箱的连接单片机进行扫描,然后将信号送入声光报警器确认是火警信号后,以MAX485标准信号接受火警信号,转化成TTL电平发送到单片机,经单片机对报警信号解码后,将从单片机P0.5、P2.2口输出火警信号,经喇叭和LED灯输出最终指示对船舶人员予以提示,设定的其他七种报警信号亦是如此。

功能三:声光报警有源触点输出24V,可以直接接报警器的24V声光报警元件。

2.1.1主要技术性能

环境温度:-10~+50℃ 相对湿度:≤RH95%(+40℃时)

碰撞:加速度7g 振动频率:1~35Hz(振幅±0.15~0.35mm)所有设备具有防潮湿、防盐雾、防霉菌的措施 报警输出触点最大容量:AC125V/1A或DC30V/2A 工作电压:DC24V±20% 2.2产品方案的确定

2.2.1产品设计理念

设计在硬件上采用模块化结构,电路方便简洁,易于测试,大大减少了故障的发生率;软件上采用前后台控制,更能反应系统的实时性,也便于软件的结构编写、调试。

南通纺织职业技术学院

外界报警信号报警控制器分线箱声光报警器声光报警器声光报警器声光报警器驾驶室船员居住室机舱

图2.1 系统结构示意图

该模拟电路由报警控制器、分线箱、四个声光报警器、报警复位终端组成。其中报警控制器、分线箱、一个声光报警器安装在驾驶室;两个声光报警器安装在船员居住舱;报警复位终端及一个声光报警器安装在机舱。如系统结构图2.1所示。

报警音电路报警信号信号通讯电路主控电路报警灯电路电源

图2.2 声光报警器控制结构示意图

控制报警器结构分析,当有报警信号时,将信号以MAX485标准转化成TTL电平发送给主控电路,将信号解码后,发送控制指令到报警音和报警灯电路,信号将以光和声音输出,电源分别供给主控电路,报警音、灯电路。

南通纺织职业技术学院

2.2.2方案的确定

系统结构分布在驾驶室、船员居住舱、机舱三个地方。驾驶员在驾驶室启动报警控制器,报警控制器开始工作。当外界发生主机故障、弃船、火灾、二氧化碳、大雾、电话车钟、通用险情时,通过分线箱的连接单片机进行扫描,然后将信号送入声光报警器确认是某一种报警信号,以MAX485标准信号接受报警信号,转化成TTL电平发送到单片机,经单片机对报警信号解码后,将从单片机的P0口或P2.2、P2.5引脚传输到驾驶室、船员居住室、机舱的报警信号终端,当轮机员按下控制器或任一报警终端上的RESET键,系统从设定的安全时间开始重新计时,报警自动撤消。

南通纺织职业技术学院

第三章 硬件电路设计

硬件电路主要由89C51主控制电路,信号通讯电路,报警音输出电路,稳压电路,旋转灯电路,报警灯电路组成。下面将分别对这些电路的设计过程进行阐述。

3.1主控电路

3.1.1 作用

主要作用是接收报警信号,并将信号解码后发送给报警音、灯电路。同时自带复位信号。3.1.2 主控电路

图3.1 主控电路

3.1.3 工作原理

当启动报警控制器后,89C51单片机的P0、P1、P2、P3口都处于高电平状态,其它引脚都处于低电平,即处于不工作状态;当外界有险情时, 89C51单片机开始工作,对分线箱接口的险情信号进行扫描,确定8种险情中的哪一种(即确定报警信号的标志位)后,单片机将接受到的TTL电平从对应的八种报警信号输出引脚之一输出,控制报警灯。单片机引脚的P0.0到P0.6和P2.5引脚是八种报警信号报警灯的输出通道,P2.2引脚是对报警声控制的输出通道,引脚输出状态为“0”时有效,TXD和RXD分别是接受和发送TTL 电平到485通讯端,X1、X2是晶振电路,提供单片机运行的脉冲信号,RESET是单片机防止程序走错

南通纺织职业技术学院

或电源掉电的复位信号,/EA/VP是中断总允许,直接拉高,使其处于“1”状态。3.1.4芯片选型

因设计中设定了八种险情,当外界任意发生某一种险情时,报警控制器通过分线箱传输报警信号,以控制声光报警器,此时单片机就需要8个引脚控制8种险情,并且当单片机扫描外界信号确定是哪一种险情后,它还需一个匹配的信号通讯端将其传输到报警信号终端,还需兼备复位电路,时钟电路,89C51的主要性能特性包括与MCS-51 兼容、4K字节可编程闪烁存储器、使用寿命1000写/擦循环、数据保留时间有10年、全静态工作处于0Hz-24MHz、三级程序存储器锁定、128*8位内部RAM、32可编程I/O线、两个16位定时器/计数器、5个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路。

故选89C51单片机,其也能胜任这些功能。

3.2信号通讯电路

3.2.1 作用

主要作用是将报警信号以MAX485标准转化成TTL电平发送给单片机。

3.2.2 信号通讯电路

图3.2 信号通讯电路 3.2.3 工作原理:

MAX485采用单一电源+5V工作,额定电流为300 μA,采用半双工通讯方式。RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为

南通纺织职业技术学院

MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。3.2.4 MAX485-基本参数:

速率:2.5Mbps;限摆率:NO;低电流关断模式:NO;接收允许控制:YES;静态电流300 ;负载个数:32;

3.3看门狗电路

3.3.1 作用

主要作用是防止程序“跑飞”,如果程序没有按规定好的路径走,将其放到预处理的指定区间,并提供复位信号到主控电路。3.3.2看门狗电路

图3.4 看门狗电路 3.3.3 工作原理

MAX813L片内看门狗定时器用于MPU/MCU的活动。如果在1.6s内WDI端没有收到来自MPU/MCU 的触发信号,并且WDI处于非高阻态,则WDO输出变低。只要复位信号有效或WDI输入高阻,则看门狗定时器功能就被禁止,且保持清零和不计时状态。复位信号的产生会被禁止定时器,可一旦复位信号撤消并且WDI输入端检测到短至50ns的低电平或高电平跳变,定时器将开始1.6s的计时。即WDI端的跳变会清零定时器并启动一次新的计时周期。

一旦电源电压Vcc降至复位门限以下,WDO端也将变低并保持低电平。只要Vcc升至门限以上,WDO就会立刻变高,不存在延时。3.3.4 MAX813L具有以下四种功能: 1)上电,掉电及电压下降时复位信号输出

2)提供一独立的看门狗,如果在1.6S内没有喟狗的话,将会输出一看门狗信号。3)1.25V门限电压检测器,可实现电源故障告警,电池电压过低检测及5V以外

南通纺织职业技术学院 的电源电压。

4)提供手动复位输入,输出低电位有效复位信号。

3.4报警音输出电路

3.4.1 作用

接受单片机的P2.2引脚输出不同频率的方波脉冲信号通过光耦和两级放大,由扬声器输出特定的报警控制信号。3.4.2 电路图

图3.5 报警音输出电路 3.4.3 电路结构及工作原理

当外界没有发生火灾、CO2、大雾、电话车钟报警、主机故障报警、弃船报警、通用报警时,P2.2引脚成高电平状态,即“1”状态,此时没有电流或电压流向报警音输出电路,三极管以及光耦合不能导通,两级三极管截止,不能形成回路,扬声器不能输出;而当外界发生火灾、CO2、大雾、电话车钟报警、主机故障报警、弃船报警、通用报警时,P2.2引脚成低电平状态,即“0”状态,输出不同频率的脉冲信号,三极管以及光耦合导通,经过三极管联级放大,形成回路,最后通过SP1和SP2连接扬声器带动薄膜不同频率的震动发出特定的频率音频信号,扬声器接+24V的电源。

电路的输入部分首先放置一个5.1K的电阻,后接一个三极管(即OC门)控制输入信号的通断,三极管的基极(B极)和发射极(E极)之间的电压为0.7V时,为导通,若>7V,三极管将被击穿。而5.1K的电阻放置在这是对三极管起一个保护、分压的作用,不至于电压过大击穿三极管,E极接地。C极连接一个光合耦,起到电器隔离的作用,并接有上拉电阻,以保护发光二极管达到3mA,南通纺织职业技术学院

通过光电耦后,有三极管两级放大,可对信号进行放大,再输出。IN4007是一个续流二极管,当三极管截止时,继电器线圈内的磁场产生一个反电动势,易损坏三极管,因此在电路中接一个续流二极管V3以达到保护电路的作用。

3.5 报警灯电路

3.5.1 作用

根据主控器的控制指令来控制报警灯电源电路的断开与闭合,使其报警灯亮与熄灭,以供轮机员和驾驶员能及时发现险情,进行控制。

图3.7报警灯电路

3.5.2 结构分析

本电路首先接入一个1K的电阻,起一个分压的作用,因后接一个三极管,此处的三极管称作为OC门,不至于电流过大,而击穿三极管。后有继电器和二极管,来控制开关的开合,一致使报警灯的闪亮。

报警输出模块电路采用了继电器控制开关。由于在本设计中的输出电路与主控制器电路有一定的距离,而且输出24V信号,为避免对主控制器电路的干扰,因此运用继电器的电气隔离功能实现控制信号的输出。

IN4007是一个续流二极管,当三极管截止时,继电器线圈内的磁场产生一个反电动势,易损坏三极管,因此在电路中接一个续流二极管V9以达到保护电路的作用。3.5.3 工作原理

当控制器输出高电平,电流通过电阻对三极管9013产生基极电流,在DC24V电源及三极管集电极接地的作用下,三极管导通,继电器通电,开关吸合打至4、5档,电路接至VDR(即记录报警状态);同理,当控制器输出低电平,三极管不

南通纺织职业技术学院

能导通,处于截至状态,开关回至2、7档,电路断开。在硬件电路中共有四个输出模块电路,除报警输出模块电路还有机舱输出模块电路、居住舱输出模块电路和驾驶室输出模块电路,其电路结构均与报警输出模块电路一致。

3.6 稳压电源电路

3.6.1作用

主要作用是直流+24V电压经稳压电源电路供给主控电路+5V,小于200mA的电源电压,信号通讯电路+5V电压。

3.6.2 电路图

图3.6 稳压电源电路

3.6.3电路原理分析

如图3.6所示三端稳压芯片采用LM7805,为输出正电压的LM7800系列,该系列集成稳压IC型号中78后面的数字即代表该三端稳压电路的输出电压,在本电路中为正5V。LM7805最大输出电流为1.5A。装上足够大的散热片后,耗散功率可达15W。二极管V2和R10分别起到整流和分压的作用,C6为整流滤波电容,C5为抗干扰电容,用于旁路在输入导线过长时引入的高频干扰脉冲;C4、C3构成多级滤波,具有改善输出瞬态特性和防止电路产生自激振荡的作用。

3.6.4元器件选择

本设计电路采用三端稳压芯片LM78系列三端稳压IC来组成稳压电源,所需的外围元件少,电路内部具有过流、过热及调整管的保护电路,使用起来可靠方便,而且价格便宜。

南通纺织职业技术学院

第四章 软件设计

4.1 软件设计方案

KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。

C51 V6版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。因此,C51 V6版本无疑是8051开发用户的最佳选择。

4.1.1程序设计方案 1.主程序流程

如图4.1所示,开机后,对主控芯片进行初始化,例如:堆栈初始化,片内寄存器初始化,参数初始化,另外对端口及外涉元件进行初始化,初始化设置完成后,可以开中断,等待串行口接收数据,数据接收后,确定报警信号是八种报警信号中得哪一种。

2.子程序流程

如图4.2所示,是定时中断程序流程图,定时0.6秒的中断,并初值重装,扫描并确定报警信号,中断返回。

如图4.3所示,是报警灯触点输出流程图,开启中断,扫描报警信号,检测到第一个报警信号,存放于缓冲寄存器,检测到第二个报警信号,也存放于缓冲寄存器,再检测到第三次报警信号,将三次的结果进行比较,看是否相等,若不相等,返回重新扫描,若相等,确定是否与设定好的某一种报警灯触点标志位相同,若不相同,比较下一个,若相同,输出报警灯并中断返回。

如图4.4所示,是报警音标志位流程图,开始并判断预定开始时刻是否等于8,若等于,接收到的数据位0ffH,则没有报警信号,若相等,判断是否与设定好的报警音标志位相等,若相等,输出报警音,若不相等,比较下一个数据,直至8种报警信号比较完,结束。

南通纺织职业技术学院

4.2方案流程图

本电路采用模块化设计,把整个程序分成几个具有明确任务的程序模块,分为编制、调试后再把它们连接在一起,形成一个完成完整的程序。

开始初始化设置参数设置开中断N等待RI接收Y确定报警信号图4.1主程序流程

定时0.6ms中断初值重装重新扫描报警信号中断返回14

4.2定时中断流程

图南通纺织职业技术学院

定时中断 扫描接受第一次信号接受第二次信号接受第三次信号判断信号是否相等YReceive_data&0x04YN无报警信号NReceive_data&0x02YNReceive_data&0x01NReceive_data&0x08NReceive_data&0x10YNYY输出主机故障报警输出order报警输出电话故障报警输出弃船报警输出CO2报警Receive_data&0x20YNReceive_data&0x40YNReceive_data&0x80Y输出火警输出通用报警输出大雾报警中断返回 图4.3报警灯触点输出

南通纺织职业技术学院

开始判断zero=?8YReceive_data==0xff无报警音输出N(receive_data&0x10)zero=?2YN(receive_data&0x40)zero=?0N(receive_data&0x08)zero=?4YN(receive_data&0x20)zero=?1NYY输出CO2报警音输出通用报警音输出弃船报警音输出火警音结束(receive_data&0x80)zero=?3N(receive_data&0x04)zero=?4N(receive_data&0x02)zero=?5N(receive_data&0x01)zero=?6YYYY输出大雾报警音输出主机故障报警音输出order报警音输出电话报警音结束

图4.4报警音输出

4.3 主要程序设计

初始化程序 #include #include sbit phone=P0^0;sbit order=P0^1;sbit mainframe=P0^2;sbit ship=P0^3;sbit co2=P0^4;sbit fire=P0^5;sbit general=P0^6;sbit mist=P2^5;sbit red=P2^0;

南通纺织职业技术学院

sbit yellow=P2^1;sbit green=P2^4;sbit wdr=P1^7;sbit receive=P2^3;sbit speak=P2^2;unsigned char receive_date;unsigned int times=800;unsigned int general_times=800;unsigned int ship_times=800;unsigned int phone_times=800;unsigned int mainframe_times=800;unsigned int fire_times=0;unsigned char general_flag=0;unsigned char flag=0;unsigned char ship_flag=0;unsigned char phone_flag=0;unsigned char mainframe_flag=0;unsigned char fire_flag=0;unsigned char mist_flag=0;unsigned char fire_TH0=0xfa;unsigned char fire_TL0=0x42;unsigned char light=0;unsigned char zero=8;unsigned char receive_date_1=0;unsigned char receive_date_2=0;unsigned char receive_date_3=0;unsigned char receive_times=0;void general_alarm(void);void ship_alarm(void);void co2_alarm(void);void phone_alarm(void);void mainframe_alarm(void);void fire_alarm(void);void mist_alarm(void);void date(void);void led(void);函数名:main

功能: 报警灯触点输出 main(){ TMOD=0x21;TH1=0xE6;TL1=0xE6;TR1=1;

TH0=0x02;

南通纺织职业技术学院

TL0=0x71;

ET0=1;

TR0=1;

EA=1;P0=0x00;yellow=0;green=0;red=0;speak=0;wdr=0;receive=0;SCON=0x50;PCON=0x00;do { while(RI==0);

RI=0;

// receive_date=SBUF;

receive_times++;

if(receive_times==1){receive_date_1=SBUF;} //if(receive_times==2){receive_date_2=SBUF;}//receive_times++;}

if(receive_times==2)

{receive_date_2=SBUF;

receive_times=0;if(receive_date_2==receive_date_1)receive_date=receive_date_2;}

led();

if(light<1)

{if((receive_date&0x04)==0x00)mainframe=1;

if((receive_date&0x02)==0x00)order=1;

if((receive_date&0x01)==0x00)phone=1;

if((receive_date&0x08)==0x00)ship=1;

if((receive_date&0x10)==0x00)co2=1;

if((receive_date&0x20)==0x00)fire=1;

if((receive_date&0x40)==0x00)general=1;

if((receive_date&0x80)==0x00)mist=1;

light++;}

else

{ light++;mainframe=0;order=0;phone=0;general=0;co2=0;fire=0;ship=0;mist=0;if(light>2)light=0;} } while(1);} 函数名:void led(void)功能: 旋转灯

触点输出 void led(void)

南通纺织职业技术学院

{ if((receive_date&0x40)<0x40)green=1;

else green=0;if((receive_date&0x38)<0x38)red=1;

else red=0;if((receive_date&0x07)<0x07)yellow=1;

else yellow=0;if((receive_date&0x80)<0x80)yellow=1;

else red=0;} 函数名:void date(void)功能:报警音标志

void date(void){ unsigned char i=0;zero=8;if(receive_date==0xff){mainframe=0;order=0;phone=0;general=0;co2=0;fire=0;ship=0;yellow=0;red=0;speak=1;}

else

{ if((receive_date&0x10)==0x00)zero=2;

else

{ if((receive_date&0x40)==0x00)zero=0;

else

{ if((receive_date&0x08)==0x00)zero=4;

else

{ if((receive_date&0x20)==0x00)zero=1;

else

{ if((receive_date&0x80)==0x00)zero=3;

else

{ if((receive_date&0x04)==0x00)zero=4;

else

{ if((receive_date&0x02)==0x00)zero=5;

else { if((receive_date&0x01)==0x00)zero=6;

} } } } } } } }} 功能:定时中断服务程序

void timer0(void)interrupt 1 {wdr=~wdr;

TH0=0xfe;

TL0=0x0c;

date();

general_alarm();

fire_alarm();

co2_alarm();

ship_alarm();

mainframe_alarm();

phone_alarm();}

南通纺织职业技术学院

功能:通用报警音

void general_alarm(void){ if(zero==0)

{ if(flag<14)

{if(general_flag==0)speak=~speak;

else speak=0;

if(times==0){flag++;times=800;general_flag=~general_flag;}

else times--;}

else

{ if(flag==14)

{times=11200;

flag=15;}

if(flag==15)

{times--;

speak=~speak;

if(times==0){flag=16;times=3200;}}

if(flag==16)

{speak=0;

times--;

if(times==0){flag=0;times=800;general_flag=0;} } } } else {flag=0;times=800;general_flag=0;}} 功能:弃船报警音

//shuiwu void ship_alarm(void){ if(zero==3)

{TH0=0xfc;

TL0=0x0e;if(ship_flag==0)

{ ship_times--;

speak=~speak;

if(ship_times==0){ship_flag=1;ship_times=1000;}}

if(ship_flag==1)

{ ship_times--;

speak=0;

if(ship_times==0){ship_flag=2;ship_times=500;}} if(ship_flag==2)

{ ship_times--;

speak=~speak;

if(ship_times==0){ship_flag=3;ship_times=800;} }

if(ship_flag==3)

{ship_times--;

speak=0;

if(ship_times==0){ship_flag=0;ship_times=500;}} }

else {ship_flag=0;ship_times=800;}} 功能:co2报警音 void co2_alarm(void){if(zero==2)

南通纺织职业技术学院

{ TH0=0xfe;

TL0=0x0b;

speak=~speak;}} 功能:电话车钟报警音

void phone_alarm(void){ if((zero==6)||(zero==5))

{TH0=0xfc;

TL0=0xbd;

if(phone_flag==0)

{phone_times--;

speak=~speak;

if(phone_times==0){phone_flag=1;phone_times=800;} }

if(phone_flag==1)

{ phone_times--;

speak=0;

if(phone_times==0){phone_flag=0;phone_times=800;} } } else {phone_flag=0;phone_times=800;}} 功能: 主机故障报警音

void mainframe_alarm(void){ if(zero==4)

{if(mainframe_flag==0)

{TH0=0xfe;

TL0=0x0b;

mainframe_times--;

speak=~speak;if(mainframe_times==0){mainframe_flag=1;mainframe_times=800;} }

else

{TH0=0xfd;

TL0=0xd3;

mainframe_times--;

speak=~speak;if(mainframe_times==0){mainframe_flag=0;mainframe_times=800;} } }

else {mainframe_flag=0;mainframe_times=800;}} 功能:火警报警音 void fire_alarm(void){if(zero==1)

{ if(fire_flag==0)

{TH0=fire_TH0;

TL0=fire_TL0;

fire_times++;

speak=~speak;

if(fire_times==3)

{fire_times=0;

fire_TL0++;

if(fire_TL0==0xff){fire_TL0=0x00;fire_TH0++;}} if((fire_TL0==0xad)&&(fire_TH0==0xfd)){fire_flag=1;fire_times=0}} {TH0=fire_TH0;

else

南通纺织职业技术学院

TL0=fire_TL0;

fire_times++;

speak=~speak;

if(fire_times==2)

{fire_times=0;

fire_TL0--;

if(fire_TL0==0x00){fire_TL0=0xff;fire_TH0--;}} if((fire_TL0==0x42)&&(fire_TH0==0xfa)){fire_flag=0;fire_times=0;} } }

else {fire_flag=0;fire_times=0;fire_TL0=0x42;fire_TH0=0xfa;}}

南通纺织职业技术学院

第五章 系统调试分析

5.1硬件调试

5.1.1硬件调试的目的

发现设计的缺陷和安装的错误,并改进与修正,提出改进建议;通过调整电路参数,避免因元器件参数或装配工艺不一致,而造成电路性能的不一致或功能和技术指标达不到设计要求的情况发生,确保产品的各项功能和性能指标均达到设计要求。

5.1.2硬件调试的过程

1、通电前的检查

在电路板通电之前,大概观察下电路板上是否存在问题,例如是否有明显的裂痕,有无短路、开路等现象,再用万用表检查一下电源跟地线之间的电阻值是否够大,以确保通电安全。重点检查如下:

电容的检查:将万用表调至欧姆档,然后用两个表笔分别接电容的两个引脚,如果电容无误,此时万用表的数字会慢慢变大,最后变成无穷大,然后调用万用表的表笔,情况和前面一样。

二极管、三极管、稳压管的检查(如报警信号输出电路中的二极管、三极管,):因为在实际电路中,三极管的偏置电阻或二极管、稳压管的周边电阻一般都比较大,大都在几百几千欧以上,这样在测量时可以用万用表的R*10Ω或R*1Ω档来测量PN结的好坏,在测量时,用R*10Ω档测PN结有较明显的正反特性,表针指示在200Ω左右。

2、通电调试

首先确认各芯片电源引脚的电压是否正常,其次检查各种参考电压是否正常,另外还有各点的工作电压是否正常等。如检查电路中各三极管BE结电压是否在0.7V左右,CE结电压是否在0.3V左右或者更小,如果BE结电压大于0.7V,则可能是BE结开路。

在通电过程中,将信号源加入输入端,然后依次往后测量各点的波形,看是否正常。在系统工作时,检查报警信号指示灯LED灯板的好坏。如果在电路通电过程中发现电路冒烟,有异常气味或有元器件发烫现象,应立即切断电源,检查电路中的二极管、三极管以及集成块等元器件是否接错,排除故障后,方可重新

南通纺织职业技术学院

接通电源进行测试。

5.2软件调试

5.2.1软件调试的目的

软件调试的任务是通过对系统应用的汇编、连接、执行来发现程序中的语法及逻辑错误,并加以纠正。由于大多数程序的运行依赖于硬件,因此,应用程序必须在联机状态下进行仿真调试。

5.2.2软件调试的过程

本软件设计采用模块化结构设计,因此在软件调试时,分别对定时设定值、软件看门狗及报警输出功能模块独立仿真调试。

在联机调试过程中,运用单步运行对程序一步一步地运行,观察程序中每条指令执行的情况,从而确定是硬件错误、数据错误还是程序设计错误。单步调试完成后,还要做连续运行调试,以防止某些错误在单步运行时被覆盖。

经过软、硬件调试后,可确定硬件电路和软件系统基本正确。这时,可将程序固化到EEPROM中,用单片机芯片替换仿真器后,进行系统脱机运行及现场调试。若系统现场运行正常,则调试结束,即可进行产品的安装运行。

南通纺织职业技术学院

第六章 设计总结

在即将预就业之际,我的论文落下了帷幕,期间有同学和老师的帮助,我的论文内容不懂的地方,才能够很顺利的解决。之前进行论文课题的选择,看到各个老师的题目,感觉真正的把我们所学的都能容纳进去。经过一天时间的考虑,我选择了邱宏老师的基于89C51船舶报警灯柱调试与分析,因为我对这方面还比较感兴趣,同时邱老师懂的知识面比较广,知识点讲得细。

在2011年10月,开始了我的论文,当然邱老师给我详细讲了怎么去写论文,把握好格式、前后照应、在结构等有关内容,先是介绍该产品的设计对社会的作用,在那些方面起到很好的效果,背景及意义;后有设计方案,软硬件设计模块,再对设计好的产品进行调试与分析,总结。总体的结构的模块化要明显易懂,具体考虑到让阅读人能明白产品的设计构建、功能。

针对弄好毕业论文里面所存在的各种类型问题,做到了不懂就查、问,把 所有问题都明晰化,易懂化,当然我在此期间也学到了不少东西,硬件电路的搭建,元器件的选择,电路的分析,程序的编写,更好的学会了论文书写的流程,总体来说还是要由思想,层次分明,有计划的行事。

以前我在写东西这方面头脑比较混乱,没有思路,而且当没有思路的时候,耐不住性子,烦躁,现在我知道了该怎么做,该怎么去写,该怎么设计,当然也很感谢同学的帮助和邱老师的衷心教导及建议。认真踏实、坚持不懈、处理事情明晰化、条理化,不懂就问,乐于好学,总结收获是我在本次论文设计当中的最大收益。邱老师的知识面广,谦虚,乐于给我们提很多的建议,帮助我们,教导我们,把我们的事当成自己的事,很有责任心得传授于我。在这里我要向指导老师诚挚的谢意和敬意。

在以后的工作和生活当中,通过这次的毕业设计相信自己能取其长,补其短,改其错,学以致用,搞好工作,向更高更好层次发展。

南通纺织职业技术学院

参考文献

1、《模拟电子技术基础》作者:陈梓城 高等教育出版社 2003年12月

2、《数字电子技术》作者:杨志忠 高等教育出版社 2003年12月

3、《微机控制技术》作者:杨宁 高等教育出版社 2005年11月

4、《单片机原理及应用技术》作者:李全利 高等教育出版社 2004年11月

5、《智能仪器技术及其应用》作者:方彦军 化学工业出版社 2007年9月

6、《智能仪表原理与设计》作者:李昌禧 化学工业出版社 20057、《微机原理及接口技术》作者:张开成 北京大学出版社 20098、《微机计算机控制技术》作者:潘新民,王艳 高等教育出版社 2001

年2月 年4月 年1月

南通纺织职业技术学院

完整附图:

南通纺织职业技术学院

C51单片机实训论文 第2篇

本章学习内容:

单片机基本原理,如何仿真器,如何编程点亮和灭掉一个LED 灯,如何进入KEILC51uV调试环境,如何使用单步,断点,全速,停止的调试方法

单片机现在是越来越普及了,学习单片机的热潮也一阵阵赶来,许多人因为工作需要或者个人兴趣需要学习单片机。可以说,掌握了单片机开发,就多了一个饭碗。

单片机已经有30 多年的历史了,在中国,高校的单片机课程大多数都是51,而51 经过这么多年的发展,也增长了许多的系列,功能上有了许多改进,也扩展出了不少分支。而国内书店的单片机专架上,也大多数都是51 系列。可以预见,51 单片机在市场上只会越来越多,功能只会越来越丰富,在可以预见的数十年内是不可能会消失的。

下面以51 为例来了解一下单片机是什么东西,控制原理又是什么?

在数字电路中,电压信号只有两种情况,高电平和低电平,用数字来记录就是1 和0。单片机内部的CPU,寄存器,总线等等结构都是通过1 和0 两种信号来运作的,数据也是以1 或者0 来保存的。单片机的输入输出管脚,也就是IO 口,也是只输出或识别1 和0 两种信号,也就是高电平和低电平。当单片机输出一个或一组电平信号到IO 口后,外部的设备就可以读到这些信号,并进行相应操作,这就是单片机对外部的控制。当外部一个或一组电平信号送到单片机的IO 口时,单片机也可以读到这些信号,并进行分析操作,这就是单片机对外部设备信号的读取。当然实际的操作中,这些信号可能十分复杂,必须严格地按照规定的时间顺序(时序)输入输出。每种设备也都规定了自己的时序,只要都严格遵守,就可以控制任何设备,做出只要你想象得出的任何事情。

您可能会再问,我如何让单片机去控制和分析外部设备呢?答案是程序,您可以编写相关的程序,并且把他们烧写到单片机内部的程序空间,单片机在上电时,就会一步一步按照您写的程序去执行指令,做您想做的事情。

在51 标准芯片中,有32 个输入输出IO,分为4 组,每组8 个,分别为P0 口,P1 口,P2 口,P3 口。P1 口的8 条脚就用P1.0 至P1.7 表示,其余类似。51 就是用这32 个口来完成所有外部操作的。对于51 的内部结构,如果您已经了解,那是最好;如果不懂,也可以先放下,在完成了本教程开始的几个章节之后,您就会大有兴趣,自己去寻找资料阅读了。当然,如果您希望成为一个优秀的单片机开发程序员,还是必须熟悉单片机的内部结构及工作原理,切不可偷懒!

在这一章,您将用程序去控制一个LED 发光管的亮和灭。你应该知道,LED 发光管在通过一定电流时亮,不通电就灭。为了不让LED 通过太大的电流把它烧坏,我们还要串上限流电阻。51 的IO 是弱上拉的方式,在输出高电平时,只能输出几十微安的电流到地,而在输出低电平时,VCC 电源可以输入几十毫安的电流到IO。一般LED 需要10 毫安左右电流点亮,我们就将LED 接在电源VCC 和IO 口之间,中间串上电阻,当IO 输出低电平时,灯就亮了,反之,灯就灭了。我们在这个程序里要控制的是P1.0。请参考一下我们将要使用的试验板的电路图。

现在可以开始做试验了,我们打开已经建立好的工程和编写好的程序试验。顺便还会学习一下程序调试的技巧。至于如何建立一个新工程,请参考C51 的帮助文件。请双击lessoncode01 目录下的lesson1.uv2,打开后界面如下:

点一下上图第三排第2 或者第3 个按钮(您的编译器按钮位置不一定在那个位置,自己找找),就可以看到编译结果了。上面显示是0errrs,0warnings,这是最佳的编译结果,如果有error,则无法进行下一步仿真,如果有warning,一定要尽量消除,确实无法消除的,也要确认不会对程序造成影响,才进行下一步的仿真。在编译结果中,我们还可以看到有data,xdata,code 等用了多少字节的报告,要注意您的单片机中是否有这么多的资源,如果不够,将来烧片运行时就可能出现问题。比如AT89C51 的程序空间是4K,xdata 如果没有外扩就是0 个,data 是128 个。超出这些范围,程序就不能在AT89c51 中运行。不同的芯片有不同的容量,如SST89E516RD 就有64K 程序,内部768 字节XDATA,还有256 个字节的data。我们的例程中肯定都考虑了这些了,肯定不会超出,将来自己开发时就要注意了。

下面我们故意把第9 行的P10 写成P11,点编译,因为没有预先定义P11,所以就报告错误了,如下图:

双击一下错误报告的那一行,窗口就也会跳到这一行,方便您进行修改。好了,现在请把错误改回去,再编译一次,出现报告正确了以后,下面开始仿真了。点一下第二行第5 个一个放大镜里面一个d 字母的按钮,就可以进入仿真了,仿真器要事先连接好哟。进入仿真后要退出仿真环境也是点这个按钮。注意,等会如果程序在正在全速运行时,仿真环境是不能直接退出的,得先点停止运行后,再点仿真按钮才可以退出。点进入仿真按钮,程序开始装载,PC 自动运行到了main()停下,并指向了main()函数的第一行。

进入仿真窗口后,如果出现的不是前面的源代码窗口,而是夹有反汇编代码的窗口,直接关掉这个窗口就会恢复到代码窗口。下次进入也会直接进入到源代码窗口。

现在先试验单步,点单步(两个单步都可以,一般点单步跨过)。可以看到灯亮了。PC 指针也指向了下一个

程序行。再点一下单步,PC 又走下一步,灯灭了。再点一次,PC 走到挂起的程序行了,继续点仍然在这一行。这句指令其实就是使程序不断地跳到自己这一行,别的什么也不做。一般称作程序挂起。

一般的实际应用中的程序是不会挂起的,一般是在main 函数里做一个大循环,程序如下:

void main(void)// 主程序 { while(1){ P11=0;//亮灯 P10=1;//灭灯 } } 请将main 函数程序改为上面的代码,我们下一步将试验断点的操作。

在第15 行双击一下,可以看到程序行左边出现了一个红方块,这就是设置断点,再双击一次,断点就取消了。如果程序在全速运行的过程中遇到断点,就会自动停下来给你分析。注意在进入仿真后,并且程序是停止状态时,才可以设置或者取消断点。

现在点全速运行,可以看到程序在断点处停了下来,并且由于前一句指令刚刚执行了点灯,所以这时灯是亮着的。

现在在第14 行设置断点,并且取消上一个断点。

现在点全速运行,可以看到程序在断点处停了下来,并且由于刚刚执行了灭灯,灯是灭着的。好,现在试验全速运行和停止。把断点取消,再点全速运行,可以看到灯是亮着的,但是不是很亮,这是由于程序是循环的,亮灭交替进行,亮的时间并不是全部的时间。现在点停止,可以看到程序停止了,重复几次进行全速和停止,可以发现每次停止的地方不一定是同一位置。

演讲稿

尊敬的老师们,同学们下午好:

我是来自10级经济学(2)班的学习委,我叫张盼盼,很荣幸有这次机会和大家一起交流担任学习委员这一职务的经验。

转眼间大学生活已经过了一年多,在这一年多的时间里,我一直担任着学习委员这一职务。回望这一年多,自己走过的路,留下的或深或浅的足迹,不仅充满了欢愉,也充满了淡淡的苦涩。一年多的工作,让我学到了很多很多,下面将自己的工作经验和大家一起分享。

学习委员是班上的一个重要职位,在我当初当上它的时候,我就在想一定不要辜负老师及同学们我的信任和支持,一定要把工作做好。要认真负责,态度踏实,要有一定的组织,领导,执行能力,并且做事情要公平,公正,公开,积极落实学校学院的具体工作。作为一名合格的学习委员,要收集学生对老师的意见和老师的教学动态。在很多情况下,老师无法和那么多学生直接打交道,很多老师也无暇顾及那么多的学生,特别是大家刚进入大学,很多人一时还不适应老师的教学模式。学习委员是老师与学生之间沟通的一个桥梁,学习委员要及时地向老师提出同学们的建议和疑问,熟悉老师对学生的基本要求。再次,学习委员在学习上要做好模范带头作用,要有优异的成绩,当同学们向我提出问题时,基本上给同学一个正确的回复。

总之,在一学年的工作之中,我懂得如何落实各项工作,如何和班委有效地分工合作,如何和同学沟通交流并且提高大家的学习积极性。当然,我的工作还存在着很多不足之处。比日:有的时候得不到同学们的响应,同学们不积极主动支持我的工作;在收集同学们对自己工作意见方面做得不够,有些事情做错了,没有周围同学的提醒,自己也没有发觉等等。最严重的一次是,我没有把英语四六级报名的时间,地点通知到位,导致我们班有4名同学错过报名的时间。这次事使我懂得了做事要脚踏实地,不能马虎。

C51单片机看门狗程序优化设计 第3篇

1 关于看门狗的电路系统分析

在实际工作中, 看门狗的电路系统的应用范围是比较广泛的, 它实现了单片机系统的内部相关环节的稳定运行, 确保了无人监控下的程序的正常运作。看门狗电路系统的正常运行, 离不开看门狗芯片与单片机的I/O引脚环节的正常运作。这就需要我们针对这一环节进行具体分析, I/O引脚环节的稳定性决定了看门狗系统的正常运行, 该环节如果受到内外因素的干扰, 是极易导致程序的不正常发展的, 容易使系统陷入不良的循环中。为此我们要实现看门狗的引脚程序环节的稳定运行, 从而保证单片机的有效复位, 这样保障了程序的顺利执行, 保证单片机的自动复位。

(1) 为了保证看门狗电路系统的稳定运行, 我们要进行看门狗电路设计方式的深化, 它主要包括两种环节, 硬件看门狗设计环节与软件看门狗设计环节。前者的正常运行, 离不开对定时器的有效应用, 从而确保主程序的有效监控, 在主程序的运作过程中, 我们要确保定时器的及时复位, 避免下序环节出现运行故障。

软件看门狗技术模式与硬件看门狗有类似之处, 它通过对软件的利用, 实现程序的稳定运行。比如对51单片机的定时器的应用。它利用内部定位器实现对主程序的实施监控。确保主程序运作过程中的相关变量值的有效判断, 确保该值的准确控制, 在运作过程中, 没有发生变化则就会进行程序的复位。

传统的看门狗电路复位指令是通过主程序的插入来进行的, 其指令模式主要是脉冲式, 进行两条取反指令的运行, 这是为了促进程序跑飞时其中断功能的稳定运行, 促进CPU的正常运作, 保证中断子程序的稳定运行, 确保该看门狗整体系统的正常运作。在此过程中, 如果中断子程序执行喂狗指令, 那么必然会看门狗的定时器的稳定运行, 导致微机系统的运作混乱, 不能实现其正常装套的运转, 从而不利于实际工作程序的顺利开展。

(2) 在喂狗指令的运作过程中, 主程序系统都能得到良好的响应, 促进单片机系统的稳定运行。在此运作过程中, 有一种模式影响单片机的稳定运行, 比如其主程序正常运行, 但是其中断响应功能的缺乏, 是不利于看门狗电路系统的正常运行, 不利于单片机系统的正常工作。比如在系统进行中断子程序环节的运作时, 受到外界因素的干扰。程序出现跑飞现象, 导致中断功能的无法响应。

这种情况是由51单片机的中断系统内部的相关环节导致的, 比如其两个优先级的状态触发器, 进行两级中断响应状态的分别指标。在此过程中, 如果CPU响应出现中断的现象, 就会引发相关环节的优先级状态触发器, 从而导致同级别的所有中断申请的屏蔽, 等到reti指令运作的时候, 此优先级状态触发器才会被CPU硬件清除, 确保下序环节的中断请求的正常相应。当然, 象上述这种情况是比较少见的。大多数情况下, 程序跑飞后都会使pc指针越出有效程序区, 造成“死机”。这时“看门狗”就起作用了。在大多数系统中, 中断子程序执行的时间占总运行时间的百分比都非常小, 而在执行中断程序时, pc指针跑飞越过reti指令, 而主程序又能正常运行的机会就更少。

(3) 在中断子程序的运作过程中, 出现其数据信息的运作比较复杂, 并且进行一系列的函数运作时, 就很可能发生系统失常的现象, 比如在智能流量计过程中的死机现象, 这种死机现象并不是很明显, 其键盘显示操作是正常情况, 但是在设定参数环节, 总流量不发生累计, 导致中断系统的失效, 进而不利于主程序的稳定运”指令直接插在中断子程序中是不合适的, 而单独插在主程序中又显然是不够的。笔者通过仔细推敲后, 将“喂狗”指令分解开来, 取反指令变成置位和清零两种指令, 将置位指令插在主程序中, 而将清零指令插在t0中断子程序中, 这样将两者联系起来, 缺一不可, 无论主程序运行失效, 还是t0中断请求失效, 都不能完成完整的“喂狗”指令, 造成“看门狗”动作, 从而确保了系统安全可靠地工作。

2 关于看门狗电路整体设计思路的分析

为了保证该看门狗电路整体设计的稳定运行, 我们要进行C51单片机内部定时器系统的有效编程, 确保看门狗的电路功能的稳定运行。进行软件环节与硬件环节的有效设置, 确保看门狗的定时器设置程序的稳定运行。在此过程中, 我们要实现对主程序的有效应用, 确保对看门狗的定时器程序的有效设置, 确保其定时器系统的计时环节的稳定运行, 将其计时规定在50ms, 当达到这一标准时, 定时器会发生溢出中断, 从而推动溢出中断服务程序环节的运作, 确保下序环节的稳定运作, 实现看门狗电路系统的正常运行。当num的值等于100时, 说明看门狗定时器已经计时5s, 此时, 单片机I/O端口P1.0输出高电平, 对程序进行复位。在此过程中, 喂狗代码将被穿插于程序中循环体末尾。当循环体结束时, 喂狗代码执行, 关闭定时器1、清空num并重新初始化定时器设置。若循环体进入死循环, 喂狗代码无法执行, num将一直累加至100, 此时程序复位。喂狗代码放置位置可根据num预计数值进行调整:当num门限值较小, 即看门狗计数时间较短时, 喂狗代码可放于程序中各循环体之后或均匀分布于整个主程序中。当num门限值较大, 即看门狗计数时间较长时, 喂狗代码可放于程序主循环体末尾。但是需注意看门狗计数时间必须长于正常工作时间, 以免非正常复位。

结语

在此过程中, 我们要注意对看门狗的定时器复位影响因素的应用, 确保该用户程序的唯一指令的应用, 避免出现看门狗定时器的误复位现象, 避免出现系统的死机现象, 从而保证看门狗系统内部程序的稳定运行, 确保实际工作的正常开展。对没有中断的用户系统, 只需将清零指令也插在主程序中就可以了;对于有多种中断的用户系统, 如果没有中断嵌套, 则清零指令可以插在任一个中断子程序中, 而在主程序中适当加入一些有关中断的冗余指令, 以免因有关中断的特殊功能寄存器数据受到干扰时导致中断功能失效。

参考文献

[1]李烈彪, 李仙.计算机系统的可靠性技术[J].计算机技术与发展, 2007, 17 (11) :142-145.

[2]范立南.单片机原理及应用教程[M].北京:北京大学出版社, 2006.

C51单片机实训论文 第4篇

关键词:C51单片机优化性能项目超市

[中图分类号]G642 文献标识码:A 文章编号:

0.前言

单片机具有实践性强、软硬兼施的鲜明特点,造成“难学、难教”的困境,毕业生难以满足用人单位的需求[1]。针对单片机特别强调动手实践的特点,应该设计覆盖知识点较为齐全的项目案例组成项目超市,为学生提供充足的实践训练的机会。但是,大部分学生所学的C语言只是应付计算机等级考试的技巧,缺乏真正的编程能力,在项目超市的实践训练中举步维艰。因此,要使得实践顺利开展,首先就要加强学生的编程能力。

1.全面采用C51开展教学

目前国内高校的单片机教学基本上为51[2],而各种单片机的原理和学习方法大同小异,因此下面以51为例展开讨论。51的编程语言主要有2种,也就是汇编语言和C语言版本的C51。其中,汇编语言是用文字助记符来表示机器码的语言,具有面向硬件、占用体积小、执行速度快的优势。但是,汇编语言的学习门槛较高,非专业人员不易涉足,学生难以在短时间内熟练掌握[3]。现在,C51的性能、体积已经接近汇编[4],网上的资源日趋丰富。因此,不能拘泥于传统教材,而应该与时俱进、全面采用C51开展教学,从而降低学生的学习难度,提高学习效率。当然,传统的C语言与单片机存在较大脱节的现象[5]。C51面向的是单片机,有其独特之处,因此需要在教学中特别注意优化的问题。

2.对C51内容的优化

C语言的内容很多,如果按照C语言的模式学习C51,会花费太多时间。实际上,单片机设计中只需要其中的一小部分知识,因此需要对内容进行优化。从实际应用来看,C51最关键的内容有如下几点:常量,变量,数组,if,for,while。只要抓住这几点,大部分的C51程序都能迎刃而解。通过内容精简,极大减轻教学负担,使得学生能够更好更快的学习如何围绕硬件进行编程。从时间看,这几点内容所需花费的时间较少,极大缩短了学习周期。从难度看,这几点均为基础内容,有效的降低了C51的进入门槛。至于那些较为复杂的内容,完全可以通过其他技术替代。例如,指针功能强大,但是学生不易理解,使用也容易出错,普遍对其有抵触情绪。此时,改为数组实现就能较好的解决这个难题。

3.对C51运行性能的优化

在计算机中,用户很难感觉出1us和1ms的速度差异。但是,在单片机中,控制时序相差一两个us就有可能造成系统无法正常工作。不少老师沿用面向计算机的方法去教,学生也沿用传统C语言的方法去学,存在很大问题。因此,在教学中需要特别注意性能优化。

3.1 尽量采用char,少用int

C语言最常用的变量类型是int,学生们也习惯了这个用法。但是,51是8位的,使用16位的int性能很低。此时,应该尽量使用char。下面分别编写了两段小代码,其中无符号int和char分别用了ui和uc的宏定义。

代码1:uc i,j; for(i=250;i>0;i--){for(j=250;j>0;j--);}

代码2:ui k; for(k=62500;k>0;k--);

两段代码都实现了62500次的循环,其中后者的写法更为简洁。进入Keil C51,设置单片机为12MHz的AT89S52,编写程序,编译和调试后,发现两段代码初始化的时间都是389us。但是,它们的结束时间并不一样。其中,char代码所消耗的运行时间为126140-389=125,735us,而int代码为500635-389=500,246us,两者相差3.98倍,如图1所示。由此可见,沿用int并不是一个好习惯。

图1两段代码的运行时间比较3.2 尽量采用i--,少用i++

学生们素闻C++的大名,也习惯了i++的写法,对i--不以为然甚至觉得多余。但是,在C51中情況发生了逆转。

代码3:uc i,j; for(i=0;i<250;i++){for(j=0;j<250;j++);}

该代码的运行时间为188,752us,约为i--的1.5倍。代码1和代码3都是char,为什么还会出现如此明显的差距呢?关键就在于51单片机的DJNZ指令能够实现减1并判断是否为0。而i++需要对累加器A预处理,然后通过INC和CJNE两条指令才能完成。对于这个知识点,如果学生基础一般,可以一笔带过;如果学生兴趣浓厚,则可以引导他们深入学习51的内部结构和指令集,使得学生的理解更加透彻。

3.3 尽量采用for,少用while

for和while都是C语言中的经典循环结构。其中,while更加简洁和易用。下面定义了两段功能相同的代码。

代码4:for(i=255;i>0;i--);

代码5:i=255; while(k--);

测试结果显示,while所消耗的时间为for的3倍多。因此,应该引导学生尽量使用for。

以上是典型的性能优化问题,此外还有多用移位少用乘除法、多用if少用switch等。

4.对C51进行面向硬件的优化

单片机的RAM和ROM一般处于几百B、几十KB级别,硬件资源相当有限。因此,教学时必须注意面向硬件的优化。①尽量采用small的内存模式。单片机有small、compact、large共3种内存模式,分别指向片内RAM、片外8位RAM、片外16位RAM,其容量由小到大,其速度由快到慢。②尽量减少变量,尽量采用局部变量以增加内存单元的利用率。③尽量优化代码结构,减少对ROM的占用。例如,从图1的指令可以看出代码1占用8B,代码2占用14B,存在较大差别。④充分利用IO引脚并进行扩展。单片机所有的工作都依赖IO引脚,而引脚的数量非常有限。因此,应该在教学中引导学生多使用573锁存器,164、595串并转换器,138译码器,以及I2C、SPI总线进行扩展。

5.实践与效果

长期以来,钦州学院的单片机课程一直沿用汇编语言开展教学,学生普遍感到难学,效果很不理想。到了2008年广西大学生电子设计竞赛,教师们发现汇编语言的使用比较困难,编写的程序冗长、难以阅读和理解,无法快速解决问题。经过研究,决定全面转入C51,并在此后几年,针对单片机的特点不断研究C51优化的教学。

经过几年的实践研究,学生普遍感到学习门槛降低了,上手更快了,设计系统的性能和实用性都有了较大进步。在此基础上,钦州学院单片机教学团队根据十几年来积累的丰富资源,设计了面向C51的大量案例,建成了覆盖知识点较广、数量较多、种类齐全的省级课题项目超市,使得学生在掌握C51的基础上,获得大量实践训练的机会[6]。近年来,学生的课程设计、毕业设计的水平,在大学生电子竞赛、大学生创新项目中的成绩稳步提高,并在2013年的电子竞赛中取得了全国奖项的零突破。目前,电子信息工程、自动化等专业毕

业生的动手能力不断增强,受到了用人单位的欢迎,就业率稳步提高并保持在92%以上。

6.结束语

不拘泥于传统教材的汇编,摒弃C语言习惯用法,全面采用C51开展教学,精简优化教学内容,在教学过程中注重性能和面向硬件的优化,大大减低学生的进入门槛,减轻了学生的学习负担,使得学生能够快速上手,并掌握实用性较强编程能力。实践表明,基于C51优化的解决方案效果良好。

参考文献:

[1]荆蕾.单片机实践教学方法的研究[J].大学教育,2012,(6):68-69.

[2]许景辉,张成凤,李宗利.“单片机原理及应用”课程改革实践和探索[J].中国电力教育,2013,35:74-75+82.

[3]陈少明.C51开发单片机应用软件初学者必須突破的几个问题[J].廊坊师范学院学报(自然科学版),2010,10(3):26-28.

[4]贺敬凯,刘德新,管明祥.单片机系统设计、仿真与应用[M].西安:西安电子科技大学出版社,2011:30-32.

[5]陈景波,陈飞,李智超.“C语言”课程中融入“单片机”内容的教学研究[J].中国电力教育,2013,29(26):71-72.

[6]包敬海,张大平,陆安山等.浅谈面向应用型人才培养的单片机课程的改革[J].钦州学院学报,2013,28(8):20-23.

基金项目:广西教育厅教改课题,基于项目超市的单片机实训平台的建设,2013JGB258。

89C51单片机时钟程序 第5篇

;给内存RAM空间中40H单元起名SECOND MINUTE EQU 41H

;给内存RAM空间中41H单元起名MINUTE HOUR EQU 42H

;给内存RAM空间中42H单元起名HOUR SECONDGEWEI EQU 43H

;给43H单元起名SECONDGEWEI存秒的个位 SECONDSHIWEI EQU 44H

;给44H单元起名SECONDSHIWEI存秒的十位 MINUTEGEWEI EQU 45H

;给45H单元起名MINUTEGEWEI存分的个位 MINUTESHIWEI EQU 46H

;给46H单元起名MINUTESHIWEI存分的十位 HOURGEWEI EQU 47H

;给47H单元起名HOURGEWEI存小时的个位 HOURSHIWEI EQU 48H

;给48H单元起名HOURSHIWEI存小时的十位 ORG 0000H

;复位时程序从此开始 SJMP START

;跳到START进行初始化 ORG 000BH

;定时器 0中断入口 AJMP TIMER0

;跳转到TIMER0处

ORG 0030H

;初始化程序从30H开始;---------------初始化START------------------------------START:

MOV SECOND, #0

;给秒存储单元SECOND赋初始值0 MOV MINUTE, #0

;给分存储单元MINUTE赋初始值0 MOV HOUR , #12

;给小时存储单元HOUR赋初始值12 MOV DPTR , #TAB

;给数据指针赋值,将DPTR指向TAB数据表头处 MOV 30H, #0

;给30H单元赋初始值0(用于计20次的50ms中断)MOV TH0,#3CH

;给计数容器的高8位TH0赋初始值3CH MOV TL0,#0B0H

;给计数容器的低8位TL0赋初始值B0H MOV TMOD,#00000001B

;C/T位设置为0,M1M0设置位10,即模式1定时 MOV TCON,#00010000B

;TR0设置为1,即启动定时器0开始工作 SETB ET0

;IE中的ET0位设置为1,开定制器中断0 SETB EA

;IE中的EA位设置为1,开总中断;-----------------------主程序MAIN-----------------------------MAIN:CALL KEY

;调按键子程序KEY CALL PROCESS

;调数据处理子程序PROCESS CALL DISPLAY

;调显示子程序DISPLAY SJMP MAIN

;跳转到MAIN标号处;------------------------------按键子程序KEY调时-------------------KEY:MOV P1,#0FEH

;行扫描 LCALL DELAY

;JNB P1.4,HOURJIA

;P1.4引脚如果是低电平就跳到HOURJIA处

JNB P1.5,HOURJIAN

;P1.5引脚如果是低电平就跳到HOURJIAN处 JNB P1.6,MINUTEJIA

;P1.6引脚如果是低电平就跳到MIMUTEJIA处 JNB P1.7,MINUTEJIAN

;P1.7引脚如果是低电平就跳到MIMUTEJIAN处 FANHUI:RET

;子程序返回(如果没有按键按下)

HOURJIA:CALL DELAY

;调延时程序目的是跳过按键抖动期(去抖)JB P1.4,FANHUI

;P1.4如果是高电平就跳到FANHUI处(没键按)JNB P1.4,$

;如果P1.4是低电平就停在当前位置等键释放 MOV R4,HOUR CJNE R4,#23,A1

;判断时数字是否为23 AJMP A2

A1:INC HOUR

;把小时位加1 MOV SECOND, #0

;小时进位,秒归0

RET

A2:MOV HOUR,#0

;小时数为23时加一为0

MOV SECOND, #0

;小时进位,秒归0

RET

;子程序返回

HOURJIAN:CALL DELAY

;调延时程序目的是跳过按键抖动期(去抖)JB P1.5,FANHUI

JNB P1.5,$

MOV R5,HOUR CJNE R5,#0,A3

AJMP A4 A3:DEC HOUR

MOV SECOND, #0

RET A4:MOV HOUR,#23

MOV SECOND, #0 RET

MINUTEJIA:CALL DELAY

JB P1.6,FANHUI

JNB P1.6,$

MOV R6,MINUTE

CJNE R6,#59,A5

AJMP A6 A5:INC MINUTE

MOV SECOND, #0

RET A6:MOV SECOND, #0

MOV MINUTE, #0

MOV R4,HOUR CJNE R4,#23,A10

MOV HOUR,#0

RET A10:INC HOUR

RET

MINUTEJIAN:CALL DELAY

JB P1.7,FANHUI

JNB P1.7,$

MOV R7,MINUTE CJNE R7,#0,A7

AJMP A8 A7:DEC MINUTE

;P1.5如果是高电平就跳到FANHUI处(没键按)

;如果P1.5是低电平就停在当前位置等键释放

;判断时数字是否为23

;把小时位减1

;小时数为0时减一为23

;子程序返回

;调延时程序目的是跳过按键抖动期(去抖)

;P1.6如果是高电平就跳到FANHUI处(没键按)

;如果P1.6是低电平就停在当前位置等键释放

;判断分钟数是否为59

;把分钟位加1

;给秒存储单元SECOND赋初始值0

;分钟数为59则分钟归0

;判断时数字是否为23

;23时增1归0

;分钟数为59 自增1后小时增1

;子程序返回

;调延时程序目的是跳过按键抖动期(去抖)

;P1.7如果是高电平就跳到FANHUI处(没键按)

;如果P1.7是低电平就停在当前位置等键释放

;判断分钟数是否为0

;分钟不为0把分钟位减1

MOV SECOND, #0

RET

A8:MOV MINUTE, #59

;分钟数为0时减一为59 MOV R4,HOUR CJNE R4,#0,A9

;判断时钟数是否为0 MOV HOUR,#23

;时钟数为0减1为23 MOV SECOND, #0 RET

A9:DEC HOUR

;时钟数不为0则减1 MOV SECOND, #0

RET

;子程序返回;-------------------处理子程序PROCESS-----------------------PROCESS:MOV A, SECOND

;把SECOND中的秒值拷贝给A MOV B, #10

;给寄存器B赋值10 DIV AB

;A除以B,结果存入A中,余数存入B中 MOV SECONDSHIWEI , A

;结果即秒的十位数拷贝给SECONDSHIWEI MOV SECONDGEWEI , B

;余数即秒的个位拷贝给SECONDGEWEI MOV A, MINUTE

;把MINUTE中的分值拷贝给A MOV B, #10

;给寄存器B赋值10 DIV AB

;A除以B,结果存入A中,余数存入B中 MOV MINUTESHIWEI , A

;结果即分的十位拷贝给MINUTESHIWEI MOV MINUTEGEWEI , B

;余数即分的个位拷贝给MINUTEGEWEI MOV A, HOUR

;把HOUR中的小时值拷贝给A MOV B, #10

;给寄存器B赋值10 DIV AB

;A除以B,结果存入A中,余数存入B中 MOV HOURSHIWEI , A

;结果即小时的十位拷贝给HOURSHIWEI MOV HOURGEWEI , B

;余数即小时的个位拷贝给HOURGEWEI RET

;子程序结束返回到主程序;-----------------显示子程序DISPLAY--------------DISPLAY:MOV A, HOURSHIWEI

;小时的十位拷贝给A MOVC A, @A+DPTR

;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A

;把显示段码(小时的十位)送到P0 CLR P2.0

;将P2.0置低电平,对应的三极管导通 CALL DELAY

;调延时(让显示小时十位的数码管持续亮一段时间)SETB P2.0

;将P2.0置高电平,对应三极管截止,对应数码管灭 MOV A, HOURGEWEI

;小时的个位拷贝给A MOVC A,@A+DPTR

;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A

;把显示段码(小时的个位)送到P0 CLR P2.1

;将P2.1置低电平,对应的三极管导通

CALL DELAY

;调延时(让显示小时个位的数码管持续亮一段时间)SETB P2.1 MOV P0,#7FH CLR P2.1 CALL DELAY SETB P2.1

;将P2.1置高电平,对应三极管截止,对应数码管灭 MOV A, MINUTESHIWEI

;分钟的十位拷贝给A MOVC A,@A+DPTR

;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A

;把显示段码(分钟的十位)送到P0 CLR P2.2

;将P2.2置低电平,对应的三极管导通 CALL DELAY

;调延时(让显示分钟十位的数码管持续亮一段时间)SETB P2.2

;将P2.2置高电平,对应三极管截止,对应数码管灭 MOV A, MINUTEGEWEI

;分钟的个位拷贝给A MOVC A,@A+DPTR

;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A

;把显示段码(分钟的个位)送到P0 CLR P2.3

;将P2.3置低电平,对应的三极管导通

CALL DELAY

;调延时(让显示分钟个位的数码管持续亮一段时间)SETB P2.3

;将P2.3置高电平,对应三极管截止,对应数码管灭

MOV P0,#7FH CLR P2.3 CALL DELAY SETB P2.3

MOV A, SECONDSHIWEI

;秒的十位拷贝给A MOVC A,@A+DPTR

;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A

;把显示段码(秒钟的十位)送到P0 CLR P2.4

;将P2.4置低电平,对应的三极管导通 CALL DELAY

;调延时(让显示秒钟十位的数码管持续亮一段时间)SETB P2.4

;将P2.4置高电平,对应三极管截止,对应数码管灭 MOV A, SECONDGEWEI

;秒的个位拷贝给A MOVC A,@A+DPTR

;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A

;把显示段码(秒钟的个位)送到P0 CLR P2.5

;将P2.5置低电平,对应的三极管导通

CALL DELAY

;调延时(让显示秒钟个位的数码管持续亮一段时间)SETB P2.5

;将P2.5置高电平,对应三极管截止,对应数码管灭 RET

;显示子程序结束返回主程序;--------------------中断服务子程序----------------------------TIMER0:MOV R3, A

;把A中的数据送入R3保护起来 INC 30H

;30H单元中的数加1 MOV A, 30H

;30H单元中的数据拷贝给A CJNE A,#20,JIXU

;A中的数据与20比较不相等就跳转到JIXU处 MOV 30H,#0

;(如果30H单元计满20了)给30H赋值0 INC SECOND

;把SECOND中的秒钟数加1 MOV A,SECOND

;把SECOND中的数据拷贝给A CJNE A, #60, JIXU

;A中的数据与60比较不相等就跳转到JIXU处 MOV SECOND, #0

;给秒SECOND赋值0 INC MINUTE

;把MINUTE中的分钟数加1 MOV A, MINUTE

;把MINUTE中的数据拷贝给A CJNE A, #60, JIXU

;A中的数据与60比较不相等就跳转到JIXU处 MOV MINUTE, #0

;给分钟MINUTE赋值0 INC HOUR

;把HOUR中的小时数据加1 MOV A, HOUR

;把HOUR中的数据拷贝给A CJNE A, #24, JIXU

;A中的数据与24比较不相等就跳转到JIXU处 MOV HOUR, #0

;给小时HOUR赋值0 JIXU: MOV A,R3

;把刚才送入R3中的数据还给A MOV TH0,#3CH

;给计数容器的高8位TH0赋初始值3CH MOV TL0,#0B0H

;给计数容器的低8位TL0赋初始值B0H RETI

;中断子程序返回主程序;---------------------------延时子程序----------------------------DELAY:MOV R0, #50

;给R0赋值50 D2:MOV R1, #10

;给R1赋值10 D1:DJNZ R1, D1

;R1减1不等于0跳到D1处 DJNZ R0, D2

;R0减1不等于0跳到D2处

RET

;延时子程序结束返回调用该程序的下一条;---------------下面的数据表中存储的是显示段码(共阳)-------------------TAB:DB 0C0H,0F9H,0A4H,0B0H,99H

;从TAB处开始存储0、1、2、3、4

DB 92H ,82H ,0F8H,80H ,90H

;5、6、7、8、9对应的显示段码 END

C51单片机实训论文 第6篇

单片机实训报告

专 目:基于STC89C52的智能小车设计 名:刘

象 号:20110302113 业:电子信息工程技术

指导老师:何

俐 日

期:2013-01-06

信息工程系电信教研室

目录

引言...............................................................................................................................3 一 整体方案设计.........................................................................................................4 1.1整体方案设计的思路............................................4 1.2整体方案的流程图..............................................4 二 智能小车系统概况.................................................................................................4 2.1恒压恒流桥式2A驱动芯片L298N...................................................................4 2.2直流电机简介..................................................5 2.3显示模块的综合概括............................................7 三 模块方案比较与论证:.........................................................................................9 3.1 电机模块的选择..............................................9 3.2 电机驱动模块的选择..........................................9 3.3 控制器模块的选择............................................9 四 系统硬件电路设计...............................................................................................11 4.1 显示模块的设计.............................................11 4.2 直流电机的驱动模块.........................................12 五 软件的简单介绍...................................................................................................14 5.1 KEIL的简介..................................................14 5.2 PROTUES的简介................................................14 5.3 STC_ISP_V483的简介.........................................15 六 结论.......................................................................................................................18 七 致谢.......................................................................................................................18 参考文献.....................................................................................................................19 附录一:实物图.........................................................................................................20 图1实物图.................................................................................................................20 图2实物图.................................................................................................................21 附录二:总程序.........................................................................................................21

第 1 2 页

湖北轻工职业技术学院

引言

随科学技术的进步,智能化和自动化技术越来越普及,也广泛应用于机器人玩具制造领域,使智能机器人越来越多样化。智能机器人是一个多种高新技术的集成体,它融合了机械、电子、传感器、计算机硬件、软件、人工智能等许多学科的知识,涉及到当今许多前沿领域的技术。而随着社会的不断发展,智能设备的不断出现,无线遥控的运用也越来越广泛。无线遥控器由于控制距离远,抗干扰性强,已越来越多的出现在生活的各个方面。本文使用了一款通用的无线遥控电路,基于STC89C52作为控制核心,采用专用编码解码电路,由于其体积小、功能强大,因此可非常方便的移植到遥控机器人、遥控小车上等,并实现远距离控制。在早期,遥控小车并不少见,但大多产品制造简单,实现的功能少,往往只有一些简单的功能,例如左转右转,前进后退等,大多采用红外控制,外加一些复杂的电路组合而成。遥控小车的使用者针对的是小孩子,但笨重的设备和昂贵的价格往往让许多小孩的甜美梦想落空。在现在,用单片机进行无线遥控小车的方案,利用较少的外设实现了基本的功能。其较强的抗干扰性使得该遥控器具有很好的通用性其功能也日趋完善。其中包括防撞防爆系统和基本的方向控制,另外在行进中可以尽享柔美的音乐,看美丽的灯光随音律而闪烁,让孩子玩得更开心!此外,电路的简化,材料的减少使得价格也降低了不少,真的是物美价廉,可以为孩子的童年再添一些笑语。

第 3 1 页

湖北轻工职业技术学院

一 整体方案设计

1.1整体方案设计的思路

利用红外线传感器发射和接收信号模块来控制单片机,让单片机翻译传输指令,从而实现相应的功能。具体的过程如下:四路红外传感器,每一路发射一个信号,检测接收到的信号,若出现高电平,则说明该方向前方有障碍物,则单片机控制电机正转和反转,从而实现绕开障碍物继续前行。同时还增加一个无线发射和无线接收模块控制单片机,让单片机翻译传输指令,从而实现相应的功能。无线发射模块发出指令,无线接收模块接收信号后,传递给单片机,单片机翻译接收到信号后,传输给驱动电路驱动电机旋转,从而实现让小车的前进、后退、左转和右转。1.2整体方案的流程图

基于单片机STC89C52整体设计的智能小车,根据原来设计的思路上画出了相对应的流程路,由于是整体结构图,就只是画出了大致的结构流程,而细节将在后面做出介绍。

图1整体方案的流程图 二 智能小车系统概况

2.1恒压恒流桥式2A驱动芯片L298N L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO

第 4 页

湖北轻工职业技术学院

口提供信号;而且电路简单,使用比较方便。

L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7 V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46 V。输出电流可达2.5A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB连接控制使能端,控制电机的停转。表1是L298N功能逻辑图。In3,In4的逻辑图与表1相同。由表1可知EnA为低电平时,输入电平对电机控制起作用,当EnA为高电平,输入电平为一高一低,电机正或反转。同为低电平电机停止,同为高电平电机刹停。等。

图2单片机利用L298控制电机的原理图

15脚是输出电流反馈引脚,其它与L298相同。在通常使用中这两个引脚也可以直接接地。上图是其与51单片机连接的电路图 2.2直流电机简介 2.2.1直流电机的应用

电动机简称电机,是使机械能与电能相互转换的机械,直流电机把直流电能变为机械能。作为机电执行元部件,直流电机内部有一个闭合的主磁路。主磁通在主磁路中流动,同时与两个电路交联,其中一个电路是用以产生磁通的,称为激磁电路;另一个电路是用来传递功率的,称为功率回路或电驱回路。现行的直流电机都是旋转电驱式,也就是说,激磁绕组及其所包围的铁芯组成的磁极为定子,带换向单元的电驱绕组和电驱铁芯结合构成直流电机的转子。直流电机有以下4方面的优点:

1)调速范围广,且易于平滑调节。

第 5 页

湖北轻工职业技术学院

2)3)4)过载、启动、制动转矩大。易于控制,可靠性高。调速时的能量损耗较小。

所以,在调速要求高的场所,如轧钢机、轮船推进器、电机、电气铁道牵引、高炉送料、造纸、纺织、拖动、吊车、挖掘机械、卷扬机拖动等方面,直流电机均得到广泛的应用。

2.2.2直流电机的基本工作原理

直流电机工作原理:当电刷A,B接在电压为U的直流电源上时,若电刷A是正电位,B是负电位,在N极范围内的导体ab中的电流是从a流向b,在S极范围内的导体cd中的电流是从c流向d。载流导体在磁场中要受到电磁力的作用,因此ab与cd两导体都受到电磁力的作用。根据磁场方向和导体中的电流方向,利用电机左手定则判断,ab边受力的方向是向左的,而cd边则是向右的。由于磁场是均匀的,导体中流过的又是相同的电流,所以ab边和cd边所受电磁力的大小相等。这样,线圈上就受到了电磁力的作用而按逆时针转动。当线圈转到磁极的中性面上时,线圈中的电流等于零,电磁力等于零,但是由于惯性的作用,线圈继续转动。线圈转过半周之后,虽然ab与cd的位置调换了,ab边转到S极范围内,cd边转到N极范围内,但是由于换向片和电刷的作用,转到N极下的cd边中电流方向也变了,是从d流向c,在s极下的ab边中的电流则是从b流向a。因此电磁力的方向仍然不变,线圈仍然受力按逆时针方向转动。可见,分别处在N,S极范围内的导体中电流方向总是不变的,因此线圈两个边的受力方向也不变,这样线圈就可以按照受力方向不停地旋转,通过齿轮或皮带等机构的传动,便可以带动其他机械工作。

从以上分析可以看到,要使线圈按照一定的方向旋转,关键问题是当导体从一个磁极范围转到另一个异性磁极范围时(也就是导体经过中性面后),导体中电流的方向也要同时改变,换向器和电刷就是完成这一任务的装置。在直流电机中,换向器和电刷把输入的直流电变为线圈中的交流电。可见,换向器和电刷是直流电机中不可缺少的关键部件。

当然,在实际的直流电机中,不只有一个线圈,而是有许多线圈牢固地嵌在转子铁芯槽中,当导体中通过电流在磁场中因受力而转动时,就带动整个转子旋转,这就是直流电机的基本工作原理。2.2.3直流电机的参数

转矩-电机得以旋转的力矩,单位为㎏•m或N•m。

转矩系数-电机所产生转矩的比例系数,一般表示每安培电驱电流所产生的转矩大小。

摩擦转矩-电刷、轴承、换向单元等因摩擦而引起的转矩损失。

第 6 页

湖北轻工职业技术学院

启动转矩-电机启动时所产生的旋转力矩。

转速-电机旋转的速度,工程单位为r/min,即转每分。在国际单位制中为rad/s,即弧度每秒。

电枢电阻-电枢内部的电阻,在有刷电机里一般包括电刷与换向器之间的接触电阻,由于电阻中流过电流时会发热,因此总希望电枢电阻尽量小。

电枢电感-因为电枢绕组由金属线圈构成,必然存在电感,从改善电机运行性能的角度来说,电枢电感越小越好。

电气时间常数-电枢电流从零开始达到稳定值的63.2%时所经历的时间。测定电气时间常数时,电机应处于堵转的状态并施加阶跃性质的驱动电压。工程上,常常利用电动机转子的转动惯量J、电枢电阻Ra、电机反电动势系数Ke和转矩系数Kt求出机械时间常数:

Tm(J*Ra)(/Ke*Kt)„1-1 转动惯量-具有质量的物体维持其固有运动状态的一种性质。

反电动势系数-电机旋转时,电枢绕组内部切割磁力线所感应的电动势相对于转速的比例系数,也称发电系数或感应电动势系数。

功率密度-电机每单位质量所能获得的输出功率值。功率密度越大,电机的有效材料的利用率就越高。

转子-rotor;定子-stator;电枢-armature;励磁-excitation。2.3显示模块的综合概括

显示模块包括:LCD1602,温度传感器DS18B20,时钟芯片DS1302三个部分组成。

2.3.1LCD1602的简介

1602B可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4-D7作为四位数据分两次传送。这样的话可以节省MCU的I/O口资源。1602B引脚说明如下:

表2.3 LCD液晶显示器各引脚功能及结构

编号 1 2 3 4 符号 VSS VDD VL RS

引脚说明 电源地 电源正极 对比度调节 数据/命令选择

编号 9 10 11 12

符号 D2 D3 D4 D5

引脚说明 双向数据口 双向数据口 双向数据口 双向数据口

第 7 页

湖北轻工职业技术学院 6 7 8 R/W E D0 D1

读/写选择 模块使能端 双向数据口 双向数据口 14 15 16

D6 D7 BLK BLA

双向数据口 双向数据口 背光源地 背光源正极

注意事项:从该模块的正面看,引脚排列从右向左为:15脚、16脚,然后才是1-14脚(线路板上已经标明): VDD:电源正极,4.5-5.5V,通常使用5V电压;

VL:LCD对比度调节端,电压调节范围为0-5V。接电源的正极时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地;

RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;

R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据; E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。D0-D7:8位数据总线,三态双向。如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4-D7接口传送数据。本充电器就是采用4位数据传送方式;

BLA:LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;

BLK:LED背光地端。

第 8 页

湖北轻工职业技术学院

三 模块方案比较与论证:

3.1 电机模块的选择

方案1:采用步进电机作为该系统的驱动电机。由于其转过的角度可以精确的定位,可以实现小车前进路程和位置的精确定位。虽然采用步进电机有诸多优点,步进电机的输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统。经综合比较考虑,我们放弃了此方案。

方案 2:直流电机:直流电机的控制方法比较简单,只需给电机的两根控制线加上适当的电压即可使电机转动起来,电压越高则电机转速越高。对于直流电机的速度调节,可以采用改变电压的方法,也可采用PWM调速方法。PWM调速就是使加在直流电机两端的电压为方波形式,通过改变方波的占空比实现对电机转速的调节。

基于以上分析,我们选择了方案二,使用直流电机作为电动车的驱动电机。3.2 电机驱动模块的选择

方案 1:采用SM6135W电机遥控驱动模块。SM6135W是专为遥控车设计的大规模集成电路。能实现前进、后退、向右、向左、加速五个功能,但是其采用的是编码输入控制,而不是电平控制,这样在程序中实现比较麻烦,而且该电机模块价格比较高。

方案 2:采用电机驱动芯片L298N。L298N为单块集成电路,高电压,高电流,四通道驱动,可直接的对电机进行控制,无须隔离电路。通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,非常方便,亦能满足直流减速电机的大电流要求。调试时在依照上表,用程序输入对应的码值,能够实现对应的动作。表1是其使能、输入引脚和输出引脚的逻辑关系。

表3.2 L298N的引脚和输出引脚的逻辑关系

EN A(B)

H H H L

IN1(IN3)

H L 同IN2(IN4)

X

IN2(IN4)

L H 同IN2(IN4)

X

电机运行情况

正转 反转 快速停止 停止

基于以上分析,我们选择了方案二,用L298N来作为电机的驱动芯片。3.3 控制器模块的选择

方案1:采用凌阳的SPCE061A小板作为主控制芯片,而且可以采用凌阳的小车模组,可以很快的完成其基本功能,当是用该小板存在一定的局限性,较难

第 9 页

湖北轻工职业技术学院

扩张功能,而且各个模块的拼凑,没有比集成在一块板的稳定性高。

方案2:采用STC89C52作为主控制芯片,该芯片有足够的存储空间,可以方便的在线ISP下载程序,能够满足该系统软件的需要,该芯片提供了两个计数器中断,对于本作品系统已经足够,采用该芯片可以比较灵活的选择各个模块控制芯片,能够准确的计算出时间,有很好的实时性。

基于以上分析,我们选择了方案二,用STC89C52作为电机的主控制芯片。

第 10 页

湖北轻工职业技术学院

四 系统硬件电路设计

系统采用存储空间较大的STC89C52作为主控制芯片,电动车电机驱动芯片采用L298N;并利用直流电机驱动小车,能较有效的控制其在特定位置转弯及行驶出错处理,该系统无论在结构和技术上都具有较好的科学性。4.1 显示模块的设计

4.1.1 显示模块的仿真图

显示模块中主要考虑的是显示什么,综合考虑后,我想到的首先是时间的显示,于是我采用时钟芯片DS1302来实现时间的显示,单纯的显示时间似乎很无趣,于是我加入了温度的显示,温度传感器DS18B20结构完善,连接简单,功能齐全,易于控制。合并以上的思路,我确定出了显示的模块,具体的仿真图如下:

图3 显示模块的电路原理图

4.1.2 显示模块的流程

显示模块是智能小车额外增加的功能,但它仍然是重要的组成部分,显示模块是如何工作的呢?其实,先是由按键控制时钟芯片DS1302,进行时间的调节,在调节的过程中,信号传递给STC89C52,单片机将其翻译后发送信号给时钟芯片DS1302,时钟芯片DS1302会将时间的改变显示在LCD1602上,同样的道理,温度传感器DS18B20也是先将检测到的信号传递给单片机,单片机再传递给LCD1602

第 11 页

湖北轻工职业技术学院

4.2 直流电机的驱动模块

4.2.1 直流电机驱动模块的仿真图

图4 直流电机驱动模块的仿真图

4.2.2 直流电机驱动模块的流程图

电机驱动模块的核心是电机的驱动芯片及电机,电机选择了直流电机,这样可以方便控制,而电机的驱动芯片L298可以同时控制两个直流电机,其中芯片中连接单片机的5引脚和7引脚用于控制直流电机1,而芯片中的10引脚和12引脚用于控制直流电机2.电机1接的是小车的左轮,电机2接的是小车的右轮,当两个电机一起正向转动时,小车前进;当两个电机一起反向转动时,小车后退;当电机1正转,电机2反转时,小车右转;当电机1反转,电机2正转时,小车左转。由于无线模块只能控制锁存的4条线路,不能将功能都进行有效控制,只能控制前进和后退,所以额外采用按键来控制左转和右转。

第 12 页

湖北轻工职业技术学院

图5 直流电机驱动模块的流程图

第 13 页

湖北轻工职业技术学院

五 软件的简单介绍

在这次研究中,主要用到了keil,protues,proter和STC_ISP_V480等软件 5.1 Keil的简介

单片机开发中除必要的硬件外,同样离不开软件,我们写的C语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。5.2 protues的简介

Protues软件是英国Lab center electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Protues软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:(1)原理布图(2)PCB自动或人工布线(3)SPICE电路仿真。

支持当前的主流单片机,如51系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、68000系列等。软件仿真功能如下:1)提供软件调试功能 2)提供丰富的外围接口器件及其仿真RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。这样很接近实际。在训练学生时,可以选择不同的方案,这样更利于培养学生。3)提供丰富的虚拟仪器,利用虚拟仪器在仿真过程中可以测量外围电路的特性,培养学生实际硬件的调试能力。4)具有强大的原理图绘制功能。电路功能仿真特点如下:在PROTUES绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTUES的原理图中看到模拟的实物运行状态和过程。PROTUES 是单片机课堂教学的先进助手。PROTUES不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

第 14 页

湖北轻工职业技术学院

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTUES提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。

随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTUES也能获得愈来愈广泛的应用。

软件缺点:器件库溃乏,库中缺少很多重要芯片,严重影响电路仿真软件出错或乱码,此时仿真效果不及硬件仿真。5.3 STC_ISP_V483的简介

在运行STC_ISP_V483下载软件之前,应该先给出ISP的C程序源代码ISP.C.要注意的是:此程序是在Keil-C中要建立工程文件,包含IAP.C函数,并且在IAP.C和ISP.C中都要保留STC的定义.传入用户代码时,需要与计算机进行通信,一般采用RS232串行通信,数据协议采用简单协议。具体的使用方法:

一、先把学习实验板和计算机连接好(接好串口线和电源)

二、打开STC-ISP v483,在MCU Type栏目下选中单片机,如STC89C52RC:根据您的9针的数据线连接情况选中COM端口,最好把波特率适当下调一些,按图示选中各项:

第 15 页

湖北轻工职业技术学院

图6STC-ISP v483的界面图

三、先确认硬件连接正确,按下图点击“打开文件”并在对话框内找到您要下载的HEX文件:

四、选中两个条件项,这样可以使您在每次编译KEIL时HEX代码能自动加载到STC-ISP,点击“Download/下载”:

五、手动按下电源开关便即可把可执行文件HEX写入到单片机内,下图是正在写入程序截图:

第 16 页

湖北轻工职业技术学院

图7 单片机程序下载截图

第 17 页

湖北轻工职业技术学院

六 结论

根据本次设计要求,我们认真分析了设计课题的需求,还系统学习了51系列单片机的工作原理及其使用方法,并独自设计智能小车的整个项目。

虽然条件艰苦,但经过不懈钻研和努力,购买到了所有所需的元器件,并系统的进行了多项试验,最终做出了整个小车的硬件系统,然后结合课题任务和小车硬件进行了程序的编制,本系统能够基本满足设计要求,能够较快较平稳的是小车沿引导线行驶,但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改进。

通过本次课题设计,不仅是对我们课本所学知识的考查,更是对我的自学能力和收集资料能力以及动手能力的考验。本次毕业设计使我们对一个项目的整体设计有了初步认识,还认识了几种传感器。本次毕业设计使我们意识到了实验的重要性,在硬件制作和软件调试的过程中,出现了很多问题,最终都是通过实验的方法来解决的。还有以前对程序只是一个很模糊的概念,通过这次的课题设计使我对程序完全有了一个新的认识,并能使用Keil软件熟练的进行编程了。通过本次课题设计,极大的锻炼了我们的思考和分析问题的能力,并对单片机有了一个更深的认识。

总之,在课题设计的过程中,无论是对于学习方法还是理论知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。

七 致谢

本设计能够顺利完成,还承蒙何老师以及身边的组队同学的指导和帮助。在设计过程中,何老师给予了悉心的指导,最重要的是给了我们组队解决问题的思路和方法,并且在设计环境和器材方面给予了大力的帮助和支持,在此,我对何老师表示最真挚的感谢!同时感谢所有帮助过我的同学!

第 18 页

湖北轻工职业技术学院

参考文献

[1]康华光.电子技术基础模拟部分[M].(第四版).北京:高等教育出版社,1999.[2]康华光.电子技术基础数字部分[M].(第四版).北京:高等教育出版社,2000.[3]陈大钦.电子技术基础实验[M].(第二版).北京:高等教育出版社,2000.[4]谢自美.电子线路设计•实验•测试[M].(第三版).武汉:华中科技大学出版社,2006.[5]胡乾斌 李光斌 李玲等.单片微型计算机原理与应用[M].(第二版).武汉:华中科技大学出版社,2006.[6]郭天祥.新概念51单片机C语言教程[M].电子工业出版社,2009.[7]谭浩强.C语言设计[M].(第三版).清华大学出版社,2005.[8]崔炳哲.电子控制入门[M].北京:科学出版社,2003.[9]樊昌信 曹丽娜.通信原理[M].(第六版).北京:国防工业出版社,2009.[10]全国大学生电子设计竞赛组委会编.全国大学生电子设计竞赛[M].北京理工大学出版社,1999.[11]郭强.液晶显示应用技术[M].北京:电子工业出版社,2003.[12]郁有文 常健 程继红.传感器原理及工程应用[M].(第二版).武汉:西安电子科技大学出版社,2006.[13]许纪倩.机械工人速成识图[M].(第二版).北京:机械工业出版社,2009.[14]高军.电动智能小车[D].http:/// [15]Zhi-HongJiang.51MCU technology and application development case selection[M].Tsinghua University Press 2008.第 19 页

湖北轻工职业技术学院

附录一:实物图

图1实物图

第 20 页

湖北轻工职业技术学院

图2实物图

附录二:总程序

}

void dianji1(){

for(j=10;j--;j>0)left2=0;#include #define uchar unsigned char #define uint unsigned int uchar num=1,num1=1,m,m1,i,j;sbit zxun=P0^0;sbit yxun=P0^1;sbit left=P1^5;sbit right=P1^6;sbit left1=P3^0;sbit left2=P3^1;sbit left3=P3^2;sbit left4=P3^3;void dianji2(){ for(i=10;i--;i>0){

if(num>=10)

num=0;

else

{

if(num<=m1)

left=1;

else if(num<10)

left=0;

}

}

{

}

}

void run(){ m=2;

m1=2;left1=1;

left3=1;left4=0;

}

void zuo(){

m=0;m1=1;left1=1;left2=0;left3=1;}

left4=0;void you()

第 21 页

if(num1>=10)num1=0;else {

if(num1<=m)

right=1;else if(num1<10)

right=0;

}

湖北轻工职业技术学院

{ m=1;m1=0;left1=1;left2=0;left3=1;left4=0;} void timer0()interrupt 1 { TH0=0XF8;//1ms定时

TL0=0X30;num++;num1++;dianji2();dianji1();} void main(){ TMOD=0X01;TH0= 0XF8;//1ms定时

TL0= 0X30;TR0= 1;ET0= 1;EA = 1;while(1){

switch(P0&0x03){

case 0x00:

// 全部没有压线,直转

run();

break;

case 0x01:

// 右压线,左转

zuo();

break;

case 0x02:

// 左压线,右转

you();

break;} } }

上一篇:小学四年级上册数学同步练习题下一篇:夜之随想作文