《匠人手记》推荐网上购书渠道:
  互动出版网(china-pub)   >>>
  当当网(dangdang)   >>>
  卓越亚马逊网    >>>
  淘宝网(taobao)   >>>
  更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

PIC单片机编程漫谈(三)源程序的编辑
程序匠人 发表于 2006-8-2 0:59:00  阅读全文 | 回复(0) | 引用通告 | 编辑

PIC单片机编程漫谈(三)源程序的编辑 
 
          源程序的编辑?看到这个题目也许大家会发笑,多简单呀,这有什么可说的?其实在源程序的编写方面还是有许多东西值得探讨的,比如怎么才能使程序看上去更简洁呢?还有怎么才能提高程序的可读性呢?如何安排程序的结构才合理呢?……

        我们先来侃侃程序格式的问题吧。

       首先我们来看一段程序:

Tittle  ‘Input.asm’     ;标题

;这是一个简单的输入实验

      include    "....."             ;头文件
     COUNT  EQU  20H ;定义20H寄存器名为COUNT

         ORG    0           ;程序区将从0000H开始装载

GOTO   START

   ORG    4                    ;中断入口

   GOTO   INTEN         ;中断发生时跳转到INTEN

   ORG    10                    ;START将从第10行开始

START

        ……

MAIN

          ……

         GOTO   MAIN

INTEN

           ……

     RETFIE           ;中断返回

END                     ;程序结束伪指令,不能少!

事实上汇编程序并没有固定的格式,但是它的各部分是有一定的位置安排的,习惯上依次为:

①程序标题:用Tittle伪指令定义,可缺省;

②程序注释:请注意必须在程序说明及注释部分的内容前面用“;”号,否则将会出现编译错误。程序说明及注释部分均可缺省;

③调用到的.inc文件:用include伪指令来调用。通常.inc文件是与单片机型号相对应的,包括了一些特殊寄存器的定义等内容。PIC各种型号的.inc文件在MPLAB目录中就能找到,不需要自己编写。如果被调用的.inc文件遗失,编译时将会出现编译错误;

④通用寄存器定义:用EQU伪指令定义,格式为“寄存器名称  EQU  寄存器标号”,寄存器名称要顶格写。这是程序编写人员为所用到的通用寄存器起的名字,对应了一个实际的通用积存器地址;

⑤宏定义:在上面的程序中没有用到宏,缺省;

⑥程序初始化:START部分;

⑦主程序:MAIN部分;

⑧子程序:如本程序的INTSEVER部分。有时候会将子程序放在初始化程序的前面,例如一些查表程序等;

⑨程序结束:END语句,不可缺省。

以上的部分构成了一个完整的PIC汇编程序。在程序编写过程中需要注意的问题我认为有以下几点:

1、编程中首先要避免使用直接地址对寄存器操作。使用直接地址来操作寄存器会使程序的可读性大大的降低,一来容易和数据发生混淆,二来也不容易更改。以上面的程序来说吧,寄存器“COUNT”的直接地址是20H。假如调试过程中我突然发现调用到COUNT的子程序中其它的寄存器都是在BANK1的,我为了调用它需要常常切换BANK极不方便,因此要将它的地址改为90H。那么现在我只要将定义的语句改为“COUNT  EQU  90H ”就可以了,假如我没有这样定义,那么我只能去程序中查找20H然后一一改为90H……

2、注意子程序标号的可读性。虽然这些标号在被编译之后是没有区别的(当然了,地址还是不一样的),只是编程人员用以识别的标记(比如:main通常被使用作为程序的主循环标号,而start则常被用做程序初始化的标号,可以说,标号的命名情况与程序的编译、运行是没有太大的影响的。假如你的main标号被改成loop,编译结果也是一样),但是它们的合理与否将会影响到程序的调试。通常来讲,标号最好是能一目了然,甚至要能概括这段程序处理的内容。比如延时程序用dealy,中断服务用intsever等等。这样一来程序的可读性高了,以后要修改调试起来也很方便。

3、程序结构要合理。这个要说起来就复杂了,以后另起文章讨论吧?
 

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    推荐阅读

    往日酷贴

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]

    [AVR猎手的地盘]

    [中国高校自动化网]

    [SunK]

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    大学生电子网