标题: [原创]PIC经典程序范例
dpj
论坛元老
Rank: 8Rank: 8



UID 688
精华 0
积分 6693
帖子 2227
阅读权限 90
注册 2008-4-20
状态 离线
发表于 2008-4-21 23:14  资料  短消息  加为好友 

[原创]PIC经典程序范例

[原创]PIC经典程序范例程序内容包括如下: RT1602C驱动 UART串口输出,波特率为19200 按键扫描:   键1控制LCD的显示状态,接收状态或是发送状态   键2循环控制UART将要输出的子串口 AD转换功能 UART串口接收中断 TIME1定时器中断 具体请参考硬件连接图,(注意按键部分的硬件设计有些问题,请自行修改,但不影响软件功能)    你可以学到:  1.良好的程序书写习惯   2. 多任务程序设计基础  3. 模块化程序设计   同时,欢迎各路高手指教,谢谢!    非常抱歉的告诉大家,我的2007年度巨献中可能有一个宏BUG,该BUG是非常难以发现的, 但却存在BUG产生的可能: 在中断进入和退出的压栈和出栈的宏定义原来是这样定义的: ;-------Push special register---------  PUSH_REG MACRO          MOVWF   WBUF          MOVF    STATUS, W          MOVWF   STATUSBUF           MOVF    PCLATH, W          MOVWF   PCLATHBUF          MOVF    FSR, W          MOVWF   FSRBUF                   ENDM ;-------pop special register----------          POP_REG  MACRO          MOVF    FSRBUF, W          MOVWF   FSR          MOVF    PCLATHBUF, W          MOVWF   PCLATH          MOVF    STATUSBUF, W          MOVWF   STATUS          MOVF    WBUF, W          ENDM ;-------MACRO FOR interrupt push and pop special register end-------          好象在较早的PIC资料上也是这样建议的,但是这样存在一个BUG, 如果主程序刚好做完处理,对标志位Z进行判断前进入中断,那么中断后 的出栈Z位就可能已经被修改了,由语句MOVF  WBUF,W影响了,为了不影响 出栈后的Z位,只能采用麻烦一点的方式来传送WBUF了,出栈宏如下定义: ;-------Push special register---------  PUSH_REG MACRO          MOVWF   WBUF          MOVF    STATUS, W          MOVWF   STATUSBUF           MOVF    PCLATH, W          MOVWF   PCLATHBUF          MOVF    FSR, W          MOVWF   FSRBUF                   ENDM ;-------pop special register----------          POP_REG  MACRO          MOVF    FSRBUF, W          MOVWF   FSR          MOVF    PCLATHBUF, W          MOVWF   PCLATH          MOVF    STATUSBUF, W          MOVWF   STATUS          SWAPF   WBUF, D          SWAPF   WBUF, W          ENDM        这样处理,应该没有问题了的,各位高手可以发表点建议,谢谢!   [此贴子已经被作者于2007-7-16 11:41:24编辑过]

顶部
[广告]
 


Google

当前时区 GMT+8, 现在时间是 2008-7-6 06:29

By Discuz! 5.5.0 © 2007-2008
Processed in 0.065023 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - Autooo! Inc. - Archiver - 繁体中文