一、 如何提高C语言编程代码的效率邓宏杰指出,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。他强调:“如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的时候,使用编译效率最高的语句。”他指出,各家的C编译器都会有一定的差异,故编译效率也会有所不同,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长5-20%。他说:“对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求你对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但由于不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的 *** 作上。所以如果对这些特性不了解,那么调试起来问题就会很多,反而导致执行效率低于汇编语言。”二、 如何减少程序中的bug?对于如何减少程序的bug,邓宏杰给出了一些建议,他指出系统运行中应考虑的超范围管理参数有:1.物理参数。这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参数和处理结束的结果参数。合理设定这些边界,将超出边界的参数都视为非正常激励或非正常回应进行出错处理。2.资源参数。这些参数主要是系统中的电路、器件、功能单元的资源,如记忆体容量、存储单元长度、堆叠深度。在程式设计中,对资源参数不允许超范围使用。3.应用参数。这些应用参数常表现为一些单片机、功能单元的应用条件。如E2PROM的擦写次数与资料存储时间等应用参数界限。4.过程参数。指系统运行中的有序变化的参数。三、如何解决单片机的抗干扰性问题邓宏杰指出:防止干扰最有效的方法是去除干扰源、隔断干扰路径,但往往很难做到,所以只能看单片机抗干扰能力够不够强了。单片机干扰最常见的现象就是复位;至于程序跑飞,其实也可以用软件陷阱和看门狗将程序拉回到复位状态;所以单片机软件抗干 扰最重要的是处理好复位状态一般单片机都会有一些标志寄存器,可以用来判断复位原因;另外你也可以自己在RAM中埋一些标志。在每次程序复位时,通过判断这些标志,可以判断出不同的复位原因;还可以根据不同的标志直接跳到相应的程序。这样可以使程序运行有连续性,用户在使用时也不会察觉到程序被重新复位过。四、 如何测试单片机系统的可靠性有读者希望了解用用什么方法来测试单片机系统的可靠性,邓宏杰指出:“当一个单片机系统设计完成,对于不同的单片机系统产品会有不同的测试项目和方法,但是有一些是必须测试的:1.测试单片机软件功能的完善性。这是针对所有单片机系统功能的测试,测试软件是否写的正确完整。2.上电、掉电测试。在使用中用户必然会遇到上电和掉电的情况,可以进行多次开关电源,测试单片机系统的可靠性。3.老化测试。测试长时间工作情况下,单片机系统的可靠性。必要的话可以放置在高温,高压以及强电磁干扰的环境下测试。4、ESD和EFT等测试。可以使用各种干扰模拟器来测试单片机系统的可靠性。例如使用静电模拟器测试单片机系统的抗静电ESD能力;使用突波杂讯模拟器进行快速脉冲抗干扰EFT测试等等。邓宏杰强调:“还可以模拟人为使用中,可能发生的破坏情况。例如用人体或者衣服织物故意摩擦单片机系统的接触端口,由此测试抗静电的能力。用大功率电钻靠近单片机系统工作,由此测试抗电磁干扰能力等。”%D%A您已经评价过!%D%A好:1%D%A您已经评价过!%D%A不好:0%D%A您已经评价过!%D%A原创:0%D%A您已经评价过!%D%A非原创:0%D%Ao歩|詸 、%D%A回答采纳率:381%%D¢010-02-20 14:31%D%A<!-- %D%A收藏%D%A收藏%D%A 分享到:%D%A<!-- %D%A<!-- %D%A<!-- %D%A其他答案(3)%D%A<!--%D%A找本书看看吧 边看书 边做实验效果挺好
试试下列程序,这时用中断发送的。
#include<reg51h>
#define uchar unsigned char
uchar txt[] = "hello";
uchar i = 0;
void main(void)
{
PCON = 0X00;
SCON = 0X50;
TMOD = 0X20;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
EA = 1;
ES = 1;
TI = 1;
while(1) {
if(i == 6) {
i = 0;
TI = 1;
}
}
}
void uart() interrupt 4
{
if(RI == 1) RI = 0;
if(TI == 1) {SBUF = txt[i++]; TI = 0;}
}
本程序,可以用串口助手接收。收到的是:hellohellohellohellohello
具体如下:
1、如果加入D抖动的特别厉害,试试只用PI控制。
2、还有PID参数都是一步一步调出来的,我建议你做个上位机,就是个简单的VB串口程序,用来设置PID参数
3、然后在单片机这边弄个串口接收程序,这里就是个简单的串口程序,人人都会,把接收到的PID存储在缓冲区里。
4、然后单片机程序直接调用。单片机带EEPROM的话,当接收到改变的PID参数时,存储这些参数。去STC官网下你的单片机资料,上面有EEPROM测试程序,直接套用。
摘 要:介绍了单片机实现多路灯光自动控制系统的软、硬件设计。
关键词:单片机 自动控制 可控硅 抗干扰
利用单片机丰富的软硬件资源实现对各种广告牌多路灯光自动控制,与传统的电子线路控制器相比,具有可编程、体积小、控制灵活、 *** 作方便、控制时间可变可调等优点。
我们为呼市邮政局设计并安装了上述单片机多路灯光自动控制系统。下面就该系统的软、硬件设计作介绍。
1 系统结构及工作原理
系统整体结构如图1。
图1 系统结构
8031单片机是该系统的核心部件,其主要功能:(1)灯光控制的软件编程;(2)干扰信号的处理及复位;(3)光强及时间定时的检测及控制。
单片机的控制程序通过对光强或时间的检测,自动开启(夜间)或关闭(白天)灯光系统,每1路灯光设备与8031内存控制位相对应,单片机通过P30(RXD)和P31(TXD)多功能口,利用串行通信方式0实现不同控制代码的输出,从而完成了多路灯光设备各种变化的自动循环显示。
2 8031单片机控制系统功能分析
2.1 光强或时间定时的检测及控制
如图2所示,当8031单片机P14的控制开关拨到+5V时,系统的开启或关闭由光强控制。这时,当光线较强时(白天),光耦二极管电阻变小,三极管Q1导通,P17为低电平;当光线暗时(夜间)光耦二极管变大,三极管Q1截止,P17为高电平。8031单片机控制程序每隔一定时间(约5ms)采样P17端的状态,然后根据其高低电平选择开启或关闭相应的灯光控制代码发送。图2中与光耦二极管并联的可调电位器可以调整三极管Q1的截止导通状态,从而实现对光控的微调。
图2 光耦电路
当P14拨至接地状态时,8031单片机程序进入时间控制子程序,8031单片机把内部定时器0设置成日历时钟计数(其初值可以用按钮设置),当程序查询到表格内的开启或关闭初值(表格的初值可通过按钮及数码管显示来输入或修改)与单片机时钟当前值相同时,则自动发送相应的开启或关闭输出控制代码。
2.2 双向可控硅控制电路
由于负载一般为大功率器件(电压从几百伏至上千伏,电流从几安培至几十安培),因此,8031单片机工作部分与可控硅触发部分采用MOC3021双向可控硅输出型光电耦合器,图3为1路可控硅触发控制电路。
图3 可控硅触发电路
可控硅TR的门极触发电流为50mA,触发电压为2V,则最小触发电压为:
VT=R1,IGT+VGT+VTM=300×005+2+3=20V
对应的最小控制角α为:
其中:IGT为可控硅TR的最小触发电流,VGT为可控硅TR的最小触发电压,VTM为MOC3021输出压降(3V),Vp为交流工作电压的峰值。
在使用中发现,当感性负载时,有时会引起可控硅误触发。经分析发现,当感性负载时,由于电压上升率dv/dt较大,在阻断状态下,可控硅的PN结相当于1个电容,当突然受到正向电压、充电电流过门极PN结时,起到了触发电流的作用,造成MOC3021的输出回路可控硅误导通。为此,我们对上述电路进行了修正,如图4所示。在输出回路中加入R2和C1组成RC回路,降低dv/dt。按照MOC3021的技术指标,允许最大的电压上升率dv/dt=10V/s,结温上升时dυ/dt下降,在极端的工作条件下,dv/dt=08V/s。
图4 修改后的触发电路
R2、R1之和与最小触发电压与可控硅门极电流的关系为:
C1取02μF。
同理,在TR输出端加上RC滤波网络,从而使TR输出电压上升率下降。
2.3 单片机工作回路的干扰及解决措施
由图1可知,光耦电路利用MOC4021将输入弱信号与输出强信号进行隔离,但在实际运行时,单片机系统仍有较强的干扰信号存在,常常出现死机或程序飞跑现象。分析认为,由于输出的大电流及电压均工作在开关状态,输出高次谐波通过电源回路对8031单片机产生了较大的影响,因此,我们设计了电源滤波电路及硬件复位电路,对电路的干扰进行了有效的控制。其中,硬件复位电路如图5所示。图5中74LS123为双路可再触发单稳态多谐振荡器,通过外接阻容参数,可产生不同宽度的正负脉冲,其真值表如表1。
图5 复位电路
表1 74LS123真值表
输 入 输 出
delete A B Q Q
L X X L H
X H X L H
X X L L H
H L ^
H I H
L H
由表1及图5电路可知:由于1脚A接地,2脚B接8031单片机P10,正常运行时,循环程序不断从P10发送代码信号,使2脚不断有上升沿出现,因此,13脚保持高电平,则5脚输出低电平,保持8031RESET脚低电平的需要。当程序飞跑或死机时,2脚电位不再变化,使5脚产生一高电平脉冲,促使8031复位,重新启动。
3 系统结构特点及应用范围
该系统软硬件均采用模块化结构,1块控制板能控制16路输出,输出信号通过8031串行口RXD及TXD端经74LS164串入并出移位寄存器输出,因此,软件输出代码高达上千路信号,硬件控制板根据需要可以任意扩充,只要电源变压功率相应增大即可。该系统可广泛应用于霓红灯,多路塑料管灯及多路色灯的控制。
另外,系统具有与微机串行口RS-232的通信接口,必要时可以与微机连接,这样,多路灯光控制参数及时间控制参数在微机上可随时修改,使控制变得更加灵活。
作者单位:呼和浩特内蒙古大学电子工程系(010021)
参考文献
1 余永权单片机应用系统的功率接口技术北京:北京航空航天大学出版社,1992;104~108
2 李树华IBM-PC微机与发光管显示屏的连网通讯内蒙古大学学报(自然科学版),1993;(4):441~443
3 Xicor IncNew Product and Applications Information for Design engineers.EDN,1994;39(25):159~160
用单片机开发神经网络应用主要考虑三个方向:
1)网络本身,神网本质上是一组矩阵,矩阵在单片机中的表现可以通过数组来实现;
2)输入输出,神网的应用就是把输入阵列与网络本身的矩阵点乘叉乘后算术求和,产生输出矩阵,把输入输出的算法做到单片机里也不是难事;
3)训练,神网的权值矩阵都是训练出来的,采用诸如前向或反向的算法,可以做离线也可以做在线,如果做离线就没有必要把算法实现在单片机内,PC上就可以做,然后导入矩阵即可;如果做在线则是相对较难的技术,需要在单片机上实现,对于单片机本身的资源要求也较高。
简单说,1)是基础,也最容易;1)+2)就已经是神经网络的应用了,也容易实现;1)+2)+Matlab神经网络离线训练是易于实现,且富有d性的应用方式;1)+2)+在线训练基本上就是具备自己学习能力的机器人,这是学术界一直探索的方向。
希望能给你一些启发,研究神网对我来说已经是五六年前的过去了,还是很怀念那时候的激情,个人认为这将是二十一世纪后期最有影响力的技术之一。
以上就是关于单片机开发板用了网上的程序,就出问题了,程序已经提示下载成功,可是板子上面还是那样,是什么全部的内容,包括:单片机开发板用了网上的程序,就出问题了,程序已经提示下载成功,可是板子上面还是那样,是什么、简单51单片机串口程序、单片机如何写PID程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)