戚心空间 https://passport2.21ic.com/?14797 [收藏] [复制] [RSS]

日志

致单片机初编程学者

已有 1085 次阅读2005-7-20 10:49 |个人分类:技术手记|系统分类:单片机

在坛子里呆了近5、6年了,蒙各位大虾关照,获益不少。最近公司招了几个应届毕业生,打算培养成程序员,看了他们刚写的程序,感想颇多。回想几年前自己刚涉及单片机领域,也和他们一样,从编程角度来说,不知如何下手,心中所有无非就是从书本上检来的几个程序片断,有幸碰到几个经验丰富的师兄给予指点,至今印象尤深。谈点个人感受,希望对刚出校或刚涉及的朋友有所帮助。同时拜托各位大虾不要啪的太厉害
    个人觉得,从编程角度来讲,养成一个良好的编程习惯尤为重要。特别是asm编程,由于其可读性差,而考虑到开发效率,诼行诼断写注释也不是可取之去。为了提高编程效率,尤其是从后期维护、完善工作等角度来考虑,一个好的文件头是程序成功的基石。文件头的要求可根据各自的工作习惯、需求来定,但有几点必须考虑:程序主替款架、功能,程序修改记录等,尤其修改记录尤为重要,因为程序修改过程中容易顾此失彼,有一个详细的修改记录,就是以后追查bug的保证。

       下面贴两个个人所做项目的文件头,仅供参考:
;====================================================
;SUMMARY:
;本程序为68HC08JL3开发,配接09NV遥控器
;掉电记忆功能
;支持TCL挂壁式分体机/落地式分体机
;导风电机控制:挂壁式分体机为步进电机/落地式分体机为同步电机
;室内电机控制:PG电机/抽头电机选择
;显示模式控制:3LED/3LED+2个8选择
;多款机型跳线:步进角度预留,PG风速预留
;====================================================
;INFORMATION:
;COPYRIGHT:     K&LWEI ELECTRONIC TECHNOLOGICAL CO.,LTD
;MICROCOMPUTER: MOTOROLA 68HC08JL3
;TIME:          2003-8-1
;DESIGNER:      XIAOCAN
;EXAMINATIONER: PANMEIHONG
;====================================================
;signal deal:
;蜂鸣器发声 PWM方式:(空闲时buzzer.ptd置为低电平,保护三极管)
;       TIME_INT FREQUENCY==250uS
;       OVERFLOW FREQUENCY==125uS
;       占空比   50%
;PG驱动 PWM方式:(溢出中断不切换电平)
;       高位在中断中计数,TCH1L=低位计数+TCNTL
;红外接收/过零检测/风机反馈均采用查询方式
;       增强抗干扰能力
;93C46采用机型校验码$10
;====================================================
;                                68HC08JL3
;                        ------------------------
;        遥控接收 rader | 1 /IRQ         /RST 28 | RESET
; ?                    |                        |
;   run||164位选(个位)| 2 PTA0         PTA5 27 | 过零检测zero||内风机高
;                       |                        |
;                       | 3 VSS          PTD4 26 | 蜂鸣器BUZZER
;                       |                        |      显示跳线
;                       | 4 OSC1         PTD5 25 | 内风机驱动ifan||内风机中
;                       |                        |
;                       | 5 OSC2         PTD2 24 | 步进rock4
;                       |                        |      PG/抽头跳线 jfan
;      tim||led显示扩展 | 6 PTA1         PTA4 23 | 内风机反馈fback||内风机低
;                       |                        |
;?                     | 7 VDD          PTD3 22 | 步进rock3/按键 key
;                       |                        |     (无步进则加下拉电阻)
;         sleep||164clk | 8 PTA2         PTB0 21 | 外风机驱动ofan
;                       |                        |
;  164/93C46数据线 data | 9 PTA3         PTB1 20 | 四通阀s4
;                     ?|                        |      冷暖跳线jhotcol
;       IPT 热敏线  AD2 | 10 PTB7        PTD1 19 | 步进rock2||室外保护
;                       |                        |
;        RT 热敏线  AD1 | 11 PTB6        PTB2 18 | 电加热heater
;                       |                        |      辅电跳线jheat
;       OPT 热敏线  AD3 | 12 PTB5        PTB3 17 | 压机press
;                       |                        |
;       164位选(十位) | 13 PTD7        PTD0 16 | 步进rock1||风摆
;                       |                        |      机体跳线jsort
;              93C46 cs | 14 PTD6        PTB4 15 | 93C46 sk
;       缩时跳线 jtim    ------------------------       A/D阻值跳线选择
;
;I/O口方案:
;内风机3,步进/按键(风摆,室外保护)4,蜂鸣器1,压机1,四通阀1,电加热1
;外风机1,遥控1,热敏线3,93C46 3,显示 5 (数据线共用)
;跳线方案:
;1-------       分体jsort/冷暖jhotcol/电加热jheat
;1-------       PG jfan/数码管jdisk/缩时jtim
;机体选择:     PTD0
;机型选择:     PTB4 A/D阻值跳线选择(输入时SK为高阻态)
;显示方案选择:
;显示方案1:    位选十位/位选个位/led扩展/164 clk/164 data(与93C46数据线共用)
;显示方案2:    led0/pta1/tim||led1/pta2/sleep||led2/pta0/run
*===================================================
;软件评估:     
;RECODE:
;8.14   AD跳线读取之后必须关闭AD通道,保证93C46准确读取
;       热敏线首次采样之前,外设输出和显示屏蔽
;       当I/O置PWM模式时,I/O口电平不受指令控制
;8.15   记忆模式与遥控操作模式一致时不再重新初试化,(记忆radsave6,但关机清)
;       初试化时LED记忆原有模式--置高LED
;8.19   Output compare or PWM
;       BUZZER: clear output on compare,and disable TOV on low of soundon
;       INFAN:  set output on compare,and disable TOV on zero_clos
;       内风机导通时间2ms,防止风机过热,及过零抖动
;8.20   步进停摆时,四象全零,防止步进发热
;8.25   可控硅触发最大时间应在过零之后2ms,同时保证导通时间>1ms
;       自检和有93C46但不选择情况下上电防止maindog溢出
;       微风档由jfan判断,抽头无微风档
*===================================================
;tcl03-02x   二次送样
;8.26   显示闪烁:设定温度发生变化时闪烁|定时记忆位为0时闪烁
;       单冷机型应急无2次按键转制冷操作
;tcl03-03x
;8.29   防冻结保护判断条件--压机开5MIN
;       单冷机型无设定温度显示,自动模式选择送风
;       制冷除湿模式切换不必重新进行模式初始
*===================================================
;93C46   参数设定:
*---------------------------------------------------------------------------
;序号    参数名称                数值    写入值          备注
;$00-$04:  工作状态记忆位                 0
;$05     制热风速设定-高         1200     120            风速/10
;$06     制热风速设定-低         1000     100            风速/10
;$07     制冷风速设定-高         1200     120            风速/10
;$08     制冷风速设定-低         1000     100            风速/10
;$09     风摆全开时角度A         120      120
;$0a     风摆初始角度B           85       85
;$0b     风摆限制角度D           30       30
;$0c     进入防冻结保护温度值    0度      67             A/D值
;$0d     除霜初始设定时间        6min     6
;$0e     除霜最大修补正值        6min     6
;$0f     除霜进入OPT温差·IPT    8度      8
;$10     除霜进入OPT温度E        -8度     51             A/D值
;$11     校验标志位              16       16
*===================================================
;附:写入值必须转换成16进制
*===================================================
;(无93C46或不选择93C46的情况下)硬件机型选择:
;0      47K             23E,25F
;1      30K             32E,35E,32F,35F
;2      19.5K           预留
;3      12.8K           预留
;4      10K             预留
;5      7.5K            预留
;6      5.6K            预留
;7      4.7K            预留
;8      3.3K            预留
;9      2.7K            预留
;====================================================
;以上电阻均为金膜电阻
*===================================================


 


 


;summary:
;本程序为intel80c196开发,扩展wsi psd320
;eeprom 24c16,差分mc3486/7,reset max705,communication max491,lcd 1602
;支持485半双工通讯,带16x2 lcd显示
;70L/12L兼容控制,3个等待控制
;======================================================
;information:
;copyright:     nengchuang science and technology co.ltd
;microcomputer: intel 80c196;wsi psd302
;time:          2004-5-4
;designer:      xiaocan
;examinationer:
;version:       v1.0
;======================================================
;通讯模块:所用命令字为3、4、5、11、12、16、20、28、36、37
;初始化eeprom24c16模块seteep:
;                流程:先将数据送入首址为100h的临时缓冲区--psd302::rs0(e000h)--eeprom
;                将要操作的数据先放入psd302 ram--rso,再写ram区数据到eeprom
;写ram缓冲区数据入eeprom模块weep:
;                write-operate-code: 1010xxx0  waite dumn=0  (x:no attention)
;                read--operate-code: 1010xxx1  waite dumn=0
;读eeprom数据入ram缓冲模块reep:
;                gx: ram buffer start-address  bl: read-byte length
;读eeprom中控制板的工作参并初始化控制板子程序
;                波特率设置(fch:fcl==11059200==00a8 c000h)  5ms|| /16/190h(原为200)
;                其他方式:波特率=xtal1频率/16(b+1)
;参数修改处理子程序
;      tansition ascii code to hex code
;      dirr0+7||8   10||11   13||14   20||21    23||24    26||27    29
;            year   month     day      hour     minute    second   qx-d
;总线周期为晶振两分频 11059200/2        ;t=0.18084us
;setcos  由显示日历时钟到显示其它参数的处理子程序。
;      parameter  4620h==46h--f功能标志   20h--空格标志(无显示)
;      25h--2ch   eh\fl\fh\gl\gh\hl\hh\ail 为显示数据修改缓冲(存放ascii码)
;keykd   显示参数处理子程序。
;      lcd1602-function set 001 dl n f 00   dl=1 8bit data-bus (0:4bit data-bus)
;显示板与转接板地址处理:显示板:高四位为0,d3=1
;      转接板:高四位为8、4、2、1,d3=0
;      显示板位选顺序:port  204 16 35
;      显示板段码顺序:01234567---egdafbc.
;      转接板1的led的行地址:a7=1,y2||;读附加板1的yx的行输出的地址 :a7=1,y3
;                        互换,adledh1==y3;adzjb1h1==y2
;**************************************************************
;程序编写
;5.8   集中取表:led显示为该取表信息和故障信息位
;                点亮该取表位led,同时保持故障位显示
;                是否已挂表由遥信命令返回,但同步刷新ramqb,保证取表后led熄灭
;                ramled显示: 0点亮;故障信息:1正常
;5.19  待机模式:检测到变位,led循环取反(ramled),每0.5s定时清ramled,保证
;                变位恢复后,led恢复
;                变位延时报警:warndlt ,如warndlt 时间内,没有收到后台确认命令 ,
;                则报警处理    warndlt caculate: 100ms scan 每次按变位数累加
;5.20            ;通讯返回格式     0         1   2         3  4     5---     lrc
                 ;              address   program-flag       0      data     lrc
;5.23            通讯模块,未进发送中断,不开 ENABLE-RX
;**************************************************************
;程序修改:
;5.31  增加左右面挂表统计
;6.7   1、屏蔽位无响应
;      2、LCD故障显示按门顺序
;6.8   通讯时头码初始化标志修改,未完成为1
;      返回头码中去掉开入量标志
;6.10  如有命令未处理标志,且该命令为控制命令,则必须重发该命令
;      命令处理模块改为20MS时钟级
;      修改11号命令
;6.11  远程参数修改  keykc有待修改
;6.14  KEYKC模块修改,从第二位开始判断
;6.15  为区分核对表位模式和待机模式,核对表位下蜂鸣器短鸣一声,指示灯点亮而不闪烁
;      检查灯和核对表位完成发长声
;      修改取表命令处理模块,检查灯/取消、检查开关/取消 LCD显示
;6.16  屏蔽键盘错标志
;6.21  非法操作首先显示最低位地址,当该故障排除后显示次地址
;6.23  3号命令修改
;6.24  修改库位数统计,RAMYZ为门处理,RAMGZ1依照转接板顺序
;6.25  库位数统计----按YXSTORY来处理(RAMYZ为非及时信息)
;6.28  写参数修改标志
;      HDBW虚拟跳跃
;============================================
;7.12  70L/12L兼容处理
;7.14  1、核对表位数码管提示显示“-”
;      2、添加核对表位操作正在进行标志
;7.15  修改发声记数
;7.16  挂表过程中同时有变位(0--1//1--0)发生时容错处理
;7.19  预留参数修改
;      检查LED时,LED禁止复位
;7.20  挂表发单声
;      修改LCD状态显示
;7.21  通讯数据容错处理
;      手动发送 ----赋值SBUF,手动激活发送--TI=1
;7.26  单双面屏蔽处理
;7.29  核对表位时故障自动记录(不记录常亮故障)
;      通讯期间实时时钟调整
;8.2   放表等待时间初始化:F-TIM=20,初始化密码:FFH
;      默认取表初始值===2S===20
;      增加LED老化功能
;8.3   LED复位显示时下行处理
;8.4   取表模式修改==区分正常取表和带非法报警情况下报警
;========================================
;8.18  LED老化取消时LCD显示复位.24小时处理
;      虚拟取表数
;========================================
;05.2.22   参数范围限制
;          re_baudn波特率修正 19200/9600/2400/1200
;          KCOM4单双面,KCOM5左面行3/4,
;          KCOM6右面行3/4,KCOM11地址1-127(0)
;05.4.24   dbit4.4=上次挂表无效
;======================================================
;在不能变的ram参数中,必须是rambz3为第一个。
;======================================================
;*********   子程序目录:   *****************
;1.test     校验工作参数子程序。                             ok
;2.progrm   主程序。                                         ok
;3.setcos   由显示日历时钟到显示其它参数的处理子程序。       ok
;4.inttm1   定时器1的中断服务子程序。                        ok
;5.comtx    串行口的发送(中断)子程序。                       ok
;6.comrx    串行口的接收(中断)子程序。                       ok
;8.diryk    遥控或定值设置时lcd显示下传和接收转接板的地址-点号-h/t(值)子程序。   ok
;9.nt5ms    5ms中断子程序:显示数码管。                       ok
;10.wram    写数据入eeprom时先写入ram缓冲的子程序。          ok
;11.reep    读eeprom数据入ram缓冲的子程序。                  ok
;12.weep    写ram缓冲区数据入eeprom的子程序。                ok
;13.keykd   显示参数处理子程序。                             ok
;14.seteep  初始化并写入eeprom子程序。 parameter             ok
;15.setram  读eeprom中控制板的工作参并初始化控制板子程序     ok
;16.keyke   修改参数时的移位子程序。                         ok
;17.setdir  设置lcd子程序。                                  ok
;18.dirlcd  显示ram缓冲区中参数的子程序。                    ok
;09.dirlod  装载显示参数子程序。                             ok
;20.keycn   键盘扫描及处理子程序。                           ok
;21.keykc   参数修改处理子程序。                             ok
;22.dircn   显示参数刷新子程序。                             ok
;23.dircn1  刷新显示(调)参数子程序。                         ok
;24.mainp   命令处理子程序                                   ok
;25.readyx  读遥信:电表挂位的状态 和刷新库位数.              ok
;---------------------------------------------------------------
;testrm     检查psd ram 是否读写正常
;======================================================
;**********************mjbj-主程序   ********************
;intel196ram :20--1ffh
;占用地址:20h--
;堆栈初始指针:fch
;中断频率 2.5ms
;**********************************************************************
;psd302系列有16k bit 位的sram===2k x 8
;ram剩余:e285h--e7cch (e285h为tcom通讯发送字节最大增量
;**********************************************************************


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)