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