登录
首页 单片机论坛
回帖 发帖
正文

主题:[原创]PIC经典程序范例

点击:33239 回复:228

程序内容包括如下:
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
06-12-20 14:44
上菜了
[replyview]
附件:
[本地下载]
同时欢迎加入深圳PIC联盟QQ群:33085752
也欢迎各路高手指教一二,谢谢大家!
[/replyview]
06-12-20 14:52
kk
06-12-20 15:41
dd
06-12-20 15:41
看看```
06-12-20 15:56
嘻嘻```有帮助``在支持  ````
06-12-20 15:57
kankan
06-12-20 16:10
i see thanks!
06-12-20 16:13

kankan
06-12-20 16:54
xuexue
06-12-21 20:00

上一页下一页

工控新闻

更多新闻资讯