发表于:2006/12/20 14:44:00
#0楼
程序内容包括如下:
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
这样处理,应该没有问题了的,各位高手可以发表点建议,谢谢!
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编辑过]
14PIN的单片MCU多核心时代已来临, 想在低容量的MCU系统跑多任务吗,欢迎登陆"http://gongkong.gkbk.com"我的博客 查看详情,谢谢!