博文

我的单片机编程思路(2006-05-11 18:09:00)

摘要:我曾经做过两年的单片机产品,在对单片机编程的过程中逐渐形成了一个大体固定的整体框架,也可以说是编程思路。现提出来供大家参考。    首先,对外围芯片进行分类,属同一功能或同一芯片的程序采用模块化的形式,用固定的几个函数实现,一般不同芯片之间的函数功能尽量不重叠,也不要使用一个函数覆盖几个芯片,以便于后期的调试,如果涉及到芯片之间通讯的,可以单独列出,使用专门的函数进行处理;    其次,将单片机中需要完成的工作按轻重缓急进行分类,一般我会设置两个定时中断,其中一个定时时间大致在20mS左右,用来处理一些按钮防抖处理、时间日期计算、对输入处理后产生对应标志位、器件刷新等一些实时性要求不是很高,但必须有时间要求的事物处理,另外设立一个定时中断大概在1mS以下,主要用来实现时钟基准和做一些实时性要求很高的操作,一般需要将实时性要求较高的定时中断设置为高优先级,否则不能实现正常运行,如果还有串行中断需要处理,则需要严格控制实时中断中的代码长度,以免耽误串行中断的处理,还有就是如果使用软件实现串口及无线通讯软解码的场合,也要合理分配各部分的代码长度;    最后,将普通的事件检测和处理以及响应放在主程序体中实现,该部分一般只需要几个并行的函数就可以了,主程序体可以以简单的几行代码实现。    本人采用以上结构开发了若干个单片机产品,包括包含无线软解码的无线防盗报警主机、RS485中继器(一拖100)、带中文显示的报警接收机等,都实现了稳定有效的运行。    希望本人的一些体会会能给大家有所帮助! ......

阅读全文(5438) | 评论:4

比较典型的PID处理程序(2006-05-05 16:10:00)

摘要: 比较典型的PID处理程序 [日期:2005-2-1] 来源:21ICbbs 作者:lookuper [字体:大中小]/*====================================================================================================这是一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。=====================================================================================================*/#include#include/*====================================================================================================PID FunctionThe PID (比例、积分、微分) function is used in mainlycontrol applications. PIDCalc performs one iteration of the PIDalgorithm.While the PID function works, main is just a dummy program showinga typical usage.=====================......

阅读全文(5581) | 评论:2

增量式PID控制算法程序(2006-05-05 16:09:00)

摘要:;********增量式PID控制算法程序***********;T、TD、TI、KP依次从30H,33H,36H,39H开始。;A,B,C的值依次存在BLOCK1,BLOCK2,BLOCK3的地址里; 这里R(k)给的是定值;ORG 0000HBLOCK1 EQU 43H ;A,B ,CBLOCK2 EQU 46HBLOCK3 EQU 49HUK EQU 4CH ;存结果UKRK EQU 50HEK EQU 53H ;存放偏差值E(k)的始址EK1 EQU 56H ;存放E(k-1)的始址EK2 EQU 59H ;存放E(k-2)的始址CK EQU 5CH ;采样数据始址BUFF EQU 60H ;暂存区BUFF1 EQU 63HBUFF2 EQU 66HREC EQU 69HTEST:MOV RK,#01H ;常数Rk的BCD码浮点数MOV RK+1,#12H ;1.25MOV RK+2,#50HMOV 3CH,#01H ;常数1的BCD码浮点数MOV 3DH,#10HMOV 3EH,#00HMOV 40H,#01H ;常数2的BCD码浮点数MOV 41H,#20HMOV 42H,#00HMOV 30H,#01H ;T的BCD 码浮点数MOV 31H,#23H ;2.34MOV 32H,#40HMOV 33H,#01H ;Td的BCD码浮点数MOV 34H,#35H ;3.54MOV 35H,#40HMOV 36H,#01H ;Ti的BCD码浮点数MOV 37H,#11H ;1.12MOV 38H,#20HMOV 39H,#01H ;Kp的BCD码浮点数MOV 3AH,#12H ;1.25MOV 3BH,#50HMOV R0,#RK ;指向BCD码浮点操作数LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#3CHLCALL BTOFMOV R0,#40HLCALL BTOFMOV R0,#39HLCALL BTOFMOV R0,#36H ;指向BCD码浮点操作数TiLCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#33H ;指向BCD码浮点操作数TdLCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#30H ;指向BCD码浮点操作数TLCALL BTOF ;将其转换成二进制浮点操作数MOV R1, #BUFF1 ;保......

阅读全文(6668) | 评论:2

积分分离PID控制算法程序 c51(2006-05-05 16:06:00)

摘要:;**********P10,积分分离PID控制算法程序 ********;T、TD、TI、KP依次从30H,33H,36H,39H开始。;A,B,C,A',的值依次存在BLOCK1,BLOCK2,BLOCK3 BLOCK4 的地址里;这里B'与C值相同; 这里R(k)给的是定值ORG 0000HE EQU 20H ; 一阈值GK EQU 23H ;G(k)GK1 EQU 26H ;G(k-1)FK EQU 29H ;F(k)FK1 EQU 2CH ;F(k-1)BLOCK1 EQU 50H ;ABLOCK2 EQU 53H ;BBLOCK3 EQU 56H ;CBLOCK4 EQU 5AH ;A'UK EQU 5DH ;存放结果BUFF EQU 43H ;暂存区BUFF1 EQU 46HBUFF2 EQU 49HBUFFR0 EQU 4CHREC EQU 63H ;采样次数RK EQU 66H ;R(k)CK EQU 69H ;采样数据始址EK EQU 6CH ;存放偏差值E(k)的始址EK1 EQU 70H ;存放E(k-1)的始址TEST: MOV RK,#01H ;常数Rk 1.25的BCD码浮点数MOV RK+1,#12HMOV RK+2,#50H; MOV E,#7EH ;设定一阈值0.001的BCD码浮点数; MOV E+1,#10H; MOV E+2,#00HMOV E,#00H ;阈值为0.3MOV E+1,#30HMOV E+2,#00HMOV 3CH,#01H ;常数1的BCD码浮点数MOV 3DH,#10HMOV 3EH,#00HMOV 40H,#01H ;常数2的BCD码浮点数MOV 41H,#20HMOV 42H,#00HMOV 30H,#01H ;T 2.34的BCD 码浮点数MOV 31H,#23HMOV 32H,#40HMOV 33H,#01H ;Td 3.54的BCD码浮点数MOV 34H,#35HMOV 35H,#40HMOV 36H,#01H ;Ti 1.12的BCD码浮点数MOV 37H,#11HMOV 38H,#20HMOV 39H,#01H ;Kp 1.25的BCD码浮点数MOV 3AH,#12HMOV 3BH,#50HMOV R0,#E ; 将其转换成二进制浮点操作数LCALL BTOFMOV R0,#RKLCALL ......

阅读全文(7362) | 评论:0

标准的PID处理例程 c(2006-05-05 16:04:00)

摘要: 标准的PID处理例程 /*====================================================================================================    这是从网上找来的一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。=====================================================================================================*/#include <string.h>#include <stdio.h>/*====================================================================================================    PID Function        The PID (比例、积分、微分) function is used in mainly    control applications. PIDCalc performs one iteration of the PID    algorithm.    While the PID function works, main is just a dummy program showing    a typical usage.=====================================......

阅读全文(4136) | 评论:0

PID控制C源程序(2006-05-05 15:59:00)

摘要: PID控制C源程序   BC31 TC30 编译过,可运行。      #include <stdio.h>  #include<math.h>    struct _pid {   int pv; /*integer that contains the process value*/   int sp; /*integer that contains the set point*/   float integral;   float pgain;   float igain;   float dgain;   int deadband;   int last_error;  };    struct _pid warm,*pid;  int process_point, set_point,dead_band;   float p_gain, i_gain, d_gain, integral_val,new_integ;;         /*------------------------------------------------------------------------   pid_init     DESCRIPTION This function initializes the pointers in the _pid structure   to the process variable and the setpoint. *pv and *sp are   integer pointers.   ------------------------------------------------------------------------*/   void pid_init(struct _pid *warm, int process_point, int set_point)  {    struct _pid *pid;       pid = warm;    pid->pv = process_point;    pid->sp = set_point;   }       /*---------------------------------------------------......

阅读全文(8443) | 评论:4

PID算法  C51(2006-05-05 15:57:00)

摘要: 典型的PID处理程序(C51)(可改为061的) --  作者:mojixing--  发布时间:2004-8-25 17:06:00--  什么是PID算法啊? --  作者:robot4359--  发布时间:2004-8-25 17:30:00--   PID是比例、积分、微分三个词语的英文缩写,PID运算用于自动控制中。 当设定值和实际值不一样时,对误差进行PID运算,运算结果输入到执行器。 这里给的是数字PID运算。 详细的东西可以看一下自动化仪表中的控制器部分 --  作者:powerint--  发布时间:2004-8-30 21:08:00--   ;//**************************************************************************************************************;//功    能: 电机控制的PID(积分分离)  PID(void)    执行时间少于70uS/932-12MHz;//设 计 者: 牟联树;//日    期: 2003.12.28;//版 本 号: 1.0;//申    明: ;//**************************************************************************************************************$NOMOD51    OCRAH  equ 0EFh    OCRAL  equ 0EEh    OCRBH  equ 0FBh&n......

阅读全文(9764) | 评论:2

大学生毕业如何投简历(2006-05-05 14:04:00)

摘要:  对于大学生就业难的问题,这里就不说了 对于简历制作,相关面试技巧等,以后再说吧. 单说如何投简历: 先介绍一下自己,我是一应届大学生,毕业的大学名字不必打出了,就是面试人员口中的 一般本科(其实一般来说,面试官眼中的有名字的大学也不多的,以我所在的湖南为例,他们只承认湖大和中南.其余的10余所对他们而言都叫一个名字,一般本科).本人论学习没有拿过一次奖学金;论实践只是在大一做过一天家教;论社团经历,都没有加入过传说中的人才摇篮学生会;论政治面貌,团员一个;论获讲经历,一个优秀大学生应该拿到的任何奖励都于我无缘,奖学金,优秀班干部,优秀学生干部,优秀共青团员,三好学生;论证书,除了一个四级以外再无其他.... 也许你会说我是一个垃圾大学的垃圾大学生,但就是我,在杭州人才市场投递的第一份简历,就得到了面试的机会,而且最后顺利的通过成为了那家企业今年研发部门招收的5名应届生中的一名.企业为台资企业,上市公司,试用期三个月工资2000,包吃住.呵呵,当然说不上好,但在竞争如此激烈的今天,已本人的硬件条件来说也是相当满意了^ 如果你是一个正在找工作的应届大学生,你可以接着看了,如果你是一个拍砖的,现在就可以拍了,不必再看 先说招聘公司是怎么收简历,比如我加的这家公司,今年2月份他在杭州,上海两地的招聘会上派出了招聘人员,参加了数场招聘会,而进一步对简历作出筛选,通知面试,去过杭州招聘会的人一定知道在那里投简历是一个体力活,人山人海已经不够形容了,而公司收到的简历那么多,你又怎么能获得面试机会呢?仅仅靠一份体面的简历就够了么? 在我投放简历的时候,发现很多公司会在你投放简历的第一时间对你的简历做初步的打分.标识.那么他们在那么短的时间内,连你的简历都看不完,如何划分的呢? 其实就是你投放简历的时候给他们的印象了^呵呵,再说一次,我总共投放的5份简历中得到了4次面试机会,这对于一个本身硬件不是很齐全的一般本科生来说已经是很难得了^ 好了,上面说的是投放简历的重要性,现在该进入相关技巧性的东西了. 1 关于工作经验. 在招聘会上,一般都是通过公司的现场招牌广告来决定自己是否符合条件,这里着重说工作经验的问题,比如学土木的,一般人家说要一年工作经验的,意味着应届生可能有戏,而3年以上工作经验的,最好就不用浪费体力,时间了.而营销类的不在以上范围......

阅读全文(9194) | 评论:9

11种经典软件滤波的原理和实现(2006-05-05 12:16:00)

摘要: 1、限幅滤波法(又称程序判断滤波法)    A、方法:        根据经验判断,确定两次采样允许的最大偏差值(设为A)        每次检测到新值时判断:        如果本次值与上次值之差<=A,则本次值有效        如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值    B、优点:        能有效克服因偶然因素引起的脉冲干扰    C、缺点        无法抑制那种周期性的干扰        平滑度差    2、中位值滤波法    A、方法:        连续采样N次(N取奇数)        把N次采样值按大小排列        取中间值为本次有效值    B、优点:        能有效克服因偶然因素引起的波动干扰        对温度、液位的变化缓慢的被测参数有良好的滤波效果    C、缺点:        对流量、速度等快速变化的参数不宜3、算术平均滤波法    A、方法:        连续取N个采样值进行算术平均运算        N值较大时:信号平滑度较高,但灵敏度较低        N值较小时:信号平滑度较低,但灵敏度较高&nbs......

阅读全文(8985) | 评论:0

恋爱短信息集(2006-05-04 23:20:00)

摘要:  ★爱上你我劫数难逃,为你坐爱情的牢,一辈子让情锁在我胸口绕;爱上你我劫数难逃,心为你整个碎掉,还不断迷恋着你的好。   ★本人姓我!名爱你!字想你!大名叫懂你!芳名叫疼你!乳名叫念你!书名叫梦你!外号叫追你!你可以叫我吻你。自:Club.ChinaRen.com  ★诚征女友:性格跟你一样,相貌和你雷同,外型与你如出一辙,可爱与你不相上下,给我感觉和你分毫不差!   ★当风不再追云,当冰不再化水,当火不再炽热,当石不再坚硬,当世上没有爱情,我才能停止爱你……   ★都说流星有求必应,我愿在星空下等待,等到一颗星被我感动,载着我的思念和祝福,落在你熟睡的枕边。   ★佛说:前世的五百次回眸,才换来今生的擦肩而过。如果真的是,我愿用一万次去换与你的相遇,并告诉你:“好想好好爱你。”   ★刮风了,那是我对你的动心;下雨了,那是因为我对你的爱感动了天;打雷了,那是我在喊“我爱你”。   ★刚见到你好开心,再见到你好舒心,想你想得好伤心,追你追得好用心,请你成全我的心!   ★好想把你藏在胸前的口袋,把你暖暖的融化,你就再也离不开,从此不让别人想,只准和我一个人相爱。   ★好想好想和你在一起,和你一起看日出日落,和你一起看天上的星星,和你一起收集浪漫的气息!   ★好想牵着你的手,幸福道路一起走;好想搂着你的腰,从此快乐又逍遥;好想亲亲你的脸,我们相伴到永远!   ★好想依偎在你怀里,感觉你的温暖;好想有你宽厚的肩膀,感觉你的关怀;好想有你温柔的话语,感觉你的柔情;好想有你轻轻的吻,感觉你的蜜意;好想有你最深情的拥抱,感觉你对我的爱!   ★好想做你的手机,被你揣在怀里,捧在手里,看在眼里,记在心里。最重要的还经常吻着你!   ★假如你是我梦中那只收桅待泊的船,我愿是那静静的湾,荡着轻柔的浪,舒展着迷人的滩。   ★假如我变成黄土,黄土也爱着你;假如黄土上长满青草,青草也爱着你;假如青草上挂满露珠,露珠也爱着你。   ★假如我是清风你是玫瑰,我要悄悄抚摸你透散着芬芳的发丝;假如我是一只蜘蛛,而你是美丽的蝴蝶,我要用心编织的情网,紧紧抱住你飞翔的翅膀;假如我是麋鹿你是清泉,我要用火热的唇狂饮你的甜吻。   ★玫瑰开在九月里,我的心中只有你,好想和你在一起,没有什么送给你,只有一句我爱你!   ★蓝蓝的天空白云飘,白云下面我傻跑,背着LOVE行囊把你追,直到天荒地老,灵魂......

阅读全文(13570) | 评论:1