跪求高手帮忙解决PIC16F876A串口接收问题

[复制链接]
2658|0
 楼主| diudiu22 发表于 2009-3-24 19:55 | 显示全部楼层 |阅读模式
我不明白,关于这个接收中断,设置参考了书本的范例写的寄存器,而且第一次中断也都进去了,接收数据很正常,为啥第二次RCIF&nbsp;那个标志始终不会置1呢??<br /><br />另外想问一下,关于X1226时钟芯片,为什么读到的数总是FF啊?<br /><br />现在把程序贴上来,请大家帮忙看看哪儿有问题,该程序涉及到两个串口的中断,通过串口扩展芯片GM8123,和对PORTB的0,1,2,3脚可以实现串口切换,中断服务部分里含有串口切换部分,来自不同串口的中断处理不同,也贴出来了;另外还涉及到时钟芯片的读写,这个部分没有写好,但是不影响接收中断,在此略去,发送数据部分因为没有问题了,所以也略去<br /><br />现在存在的问题还是,第一次接收中断来临程序很正常,但是第二次中断就跳不进去了,很费解。<br /><br />恳请大家再帮我看看~~~~~~~~万分感谢!!!<br /><br /><br />ERRORLEVEL&nbsp;&nbsp;-302<br />&nbsp;LIST&nbsp;P=16f876A<br />#INCLUDE&ltP16F876A.INC&gt<br />#DEFINE&nbsp;STADD0&nbsp;PORTB,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />#DEFINE&nbsp;STADD1&nbsp;PORTB,1<br />#DEFINE&nbsp;SRADD0&nbsp;PORTB,2<br />#DEFINE&nbsp;SRADD1&nbsp;PORTB,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;GM8123<br />#DEFINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTB,4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;RB4,&nbsp;时钟芯片数据输入输出<br />#DEFINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PORTB,5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;RB5,&nbsp;时钟芯片串行时钟<br />#DEFINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDAIO&nbsp;&nbsp;&nbsp;&nbsp;TRISB,4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;数据线输入输出状态<br />#DEFINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCLIO&nbsp;&nbsp;&nbsp;&nbsp;TRISB,5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;时钟线输入输出状态<br />;--------------------------------------------------------<br />TXBUF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;71H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;SOU&nbsp;发送数据缓冲器<br />RXBUF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;72H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;SOUH接收数据缓冲器<br />BCOUNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;73H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;CNT&nbsp;位计数<br />;AX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;74H<br />AH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;74H<br />AL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;75H<br />BH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;77H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;CCR状态寄存器<br />BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;76H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;写入的字节数&nbsp;<br />CX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;78H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;CCR状态寄存器地址<br />;CX+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;79H<br />DX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7AH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;写入数据的首地址<br />;DX+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7BH<br />;---------------------------------------------------------<br />STATUS&nbsp;EQU&nbsp;&nbsp;03H<br />Z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;02H<br />INTCON&nbsp;EQU&nbsp;&nbsp;0BH<br />PORTA&nbsp;&nbsp;EQU&nbsp;&nbsp;05H<br />PORTB&nbsp;&nbsp;EQU&nbsp;&nbsp;06H&nbsp;<br />PORTC&nbsp;&nbsp;EQU&nbsp;&nbsp;07H<br />TRSIC&nbsp;&nbsp;EQU&nbsp;&nbsp;87H<br />RP0&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;05H<br />PIE1&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;8CH<br />RCSTA&nbsp;&nbsp;EQU&nbsp;&nbsp;18H<br />TXSTA&nbsp;&nbsp;EQU&nbsp;&nbsp;98H<br />SPBRG&nbsp;&nbsp;EQU&nbsp;&nbsp;99H<br />RCREG&nbsp;&nbsp;EQU&nbsp;&nbsp;1AH<br />TXREG&nbsp;&nbsp;EQU&nbsp;&nbsp;19H<br />GIE&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;7<br />PEIE&nbsp;&nbsp;&nbsp;EQU&nbsp;6<br />RCIE&nbsp;&nbsp;&nbsp;EQU&nbsp;5<br />RCIF&nbsp;&nbsp;&nbsp;EQU&nbsp;5<br />;-----------变量寄存器----------<br />W_TEMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;07FH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;现场保护中保存W的地址<br />STATUS_TEMP&nbsp;&nbsp;&nbsp;EQU&nbsp;07EH<br />DQ_DELAY1&nbsp;EQU&nbsp;&nbsp;20H&nbsp;<br />DQ_DELAY2&nbsp;EQU&nbsp;&nbsp;21H&nbsp;<br />SOU&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;7BH<br />TEMP1&nbsp;&nbsp;EQU&nbsp;&nbsp;7CH<br />TEMP2&nbsp;&nbsp;EQU&nbsp;&nbsp;7DH<br />TEMP3&nbsp;&nbsp;EQU&nbsp;&nbsp;0F6H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />TEMP4&nbsp;&nbsp;EQU&nbsp;&nbsp;0F1H<br />TEMP5&nbsp;&nbsp;EQU&nbsp;&nbsp;0F2H<br />CNT&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0F3H<br />X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0F4H<br />Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0F5H<br />SADR&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0F7H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;校验数据块首地址<br />DADR&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0F8H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;接收字节首地址寄存器<br />ERRO&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0F9H<br />CF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0FAH<br />COUNT&nbsp;&nbsp;EQU&nbsp;&nbsp;0FBH<br />COUNT2&nbsp;EQU&nbsp;&nbsp;0FCH<br />COUNT3&nbsp;EQU&nbsp;&nbsp;0FDH<br />COUNT_MS&nbsp;EQU&nbsp;&nbsp;&nbsp;0FEH<br />CS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0FFH<br />N1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;171H<br />N2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;172H<br />VAL_US&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;.249&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;短延时定时参数<br />VAL_MS&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;.200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;长延时定时参数<br />TMR0_VALUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0AH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;寄存器初值为6,预分频比1:4,中断一次时间为4*(256-6)=1000us<br />DQ_DELAY_VALUE1&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;0FAH<br />DQ_DELAY_VALUE2&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;04H<br />M1&nbsp;EQU&nbsp;&nbsp;173H<br />M2&nbsp;EQU&nbsp;&nbsp;174H<br />M3&nbsp;EQU&nbsp;&nbsp;175H<br /><br /><br />;*****************************************************************<br />;******************************程序部分***************************<br />;复位<br />&nbsp;ORG&nbsp;00H<br />&nbsp;NOP<br />&nbsp;GOTO&nbsp;MAIN<br />;-----------------中断向量和中断服务子程序--------------<br />&nbsp;ORG&nbsp;04H&nbsp;<br />&nbsp;GOTO&nbsp;serv<br />&nbsp;;***************************主程序***************************<br />MAIN&nbsp;&nbsp;<br />;--------------初始化寄存器---------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;intX1226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;初始化时钟芯片<br />;------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;gmTTL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;串口切换至02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;INTURRT&nbsp;&nbsp;;初始化接收中断&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(关于接收中断的设置放在后面突出显示部分)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;SETURRT&nbsp;&nbsp;;接收中断相关寄存器设置<br />;-----------------循环等待----------------<br />loop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;writeX1226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;写时钟芯片<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;loop<br /><br />;*******************中断服务子程序*****************<br />serv<br />&nbsp;MOVWF&nbsp;W_TEMP<br />&nbsp;SWAPF&nbsp;STATUS,W<br />&nbsp;CLRF&nbsp;STATUS<br />&nbsp;MOVWF&nbsp;STATUS_TEMP<br />;**********************调查中断源******************<br />&nbsp;BTFSC&nbsp;PIR1,RCIF<br />&nbsp;GOTO&nbsp;&nbsp;URRAT<br />&nbsp;GOTO&nbsp;RETFIE0<br />;***************连续接收多个字节中断处理部分*************<br />;数据存放首地址:DADR<br />;总共发送的字节数:TEMP4<br />;数据从SOU中接收后,依次存放在DADR为首地址的预定义空间里<br />URRAT<br />&nbsp;banksel&nbsp;PIR1<br />&nbsp;BCF&nbsp;PIR1,RCIF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;清中断标志&nbsp;<br />&nbsp;BCF&nbsp;STATUS,RP0&nbsp;&nbsp;<br />&nbsp;MOVF&nbsp;RCREG,W<br />&nbsp;MOVWF&nbsp;INDF<br />&nbsp;INCF&nbsp;FSR,F<br />&nbsp;DECFSZ&nbsp;TEMP4,F<br />&nbsp;GOTO&nbsp;RETFIE0<br />&nbsp;call&nbsp;d01or02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;判断是01串口中断还是02串口中断<br /><br />;******************恢复现场部分***************************<br />RETFIE0<br />&nbsp;SWAPF&nbsp;STATUS_TEMP,W<br />&nbsp;MOVWF&nbsp;STATUS<br />&nbsp;SWAPF&nbsp;W_TEMP,F<br />&nbsp;SWAPF&nbsp;W_TEMP,W<br />&nbsp;RETFIE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中断返回<br />;-------------------------------------------------<br />d01or02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;通过接收后存在61H中;的字节判断中断来至于哪个串口&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;movlw&nbsp;68H<br />&nbsp;&nbsp;subwf&nbsp;61H,W<br />&nbsp;&nbsp;btfsc&nbsp;STATUS,Z<br />&nbsp;&nbsp;goto&nbsp;d01or02_02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;61H=68&nbsp;02<br />&nbsp;&nbsp;goto&nbsp;d01or02_01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;61H=5B&nbsp;01主机<br />&nbsp;&nbsp;<br />d01or02_02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;来至02的中断<br />&nbsp;&nbsp;call&nbsp;readX1226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;读时钟芯片<br />&nbsp;&nbsp;call&nbsp;send02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;发送部分&nbsp;<br /><br />&nbsp;&nbsp;call&nbsp;gm232&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;切换串口至232<br />&nbsp;&nbsp;goto&nbsp;return33<br />d01or02_01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;来至01的中断<br />&nbsp;&nbsp;call&nbsp;getX1226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;读时钟芯片X1226<br />&nbsp;&nbsp;call&nbsp;send01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;发送部分<br />&nbsp;&nbsp;call&nbsp;writeX1226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;写时钟芯片<br />&nbsp;&nbsp;call&nbsp;gmTTL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;切换串口到02<br />return33<br />&nbsp;&nbsp;return<br /><br />;****************************************************************************<br />;----------------子程序-------------------<br />gmTTL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;切换GM8123到子串口02<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BSF&nbsp;STATUS,RP0&nbsp;&nbsp;;选体1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLRF&nbsp;TRISB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;B口所有先设置为输出&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;STATUS,RP0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;0AH<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;PORTB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br />gm232<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;DELAY_MS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;切换GM8123到子串口01<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BSF&nbsp;STATUS,RP0&nbsp;&nbsp;;选体1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLRF&nbsp;TRISB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;B口所有先设置为输出&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BCF&nbsp;STATUS,RP0<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVLW&nbsp;05H<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVWF&nbsp;PORTB<br />&nbsp;&nbsp;&nbsp;&nbsp;return<br />;----------------接收初始化------------------<br />INTURRT<br />&nbsp;&nbsp;BCF&nbsp;STATUS,RP0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;清理数据存储空间<br />&nbsp;&nbsp;MOVLW&nbsp;D'16'<br />&nbsp;&nbsp;MOVWF&nbsp;COUNT<br />&nbsp;&nbsp;MOVLW&nbsp;60H<br />&nbsp;&nbsp;MOVWF&nbsp;FSR<br />NEXT00&nbsp;<br />&nbsp;&nbsp;CLRF&nbsp;INDF<br />&nbsp;&nbsp;INCF&nbsp;FSR,1<br />&nbsp;&nbsp;DECFSZ&nbsp;COUNT,1<br />&nbsp;&nbsp;GOTO&nbsp;NEXT00<br />&nbsp;<br />&nbsp;BSF&nbsp;STATUS,RP0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;选择体1&nbsp;(BANKSEL&nbsp;TRISC)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;BSF&nbsp;TRISC,6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;设RC6为TX&nbsp;、RC7为RX&nbsp;<br />&nbsp;NOP<br />&nbsp;BSF&nbsp;TRISC,7<br />&nbsp;MOVLW&nbsp;19H<br />&nbsp;MOVWF&nbsp;SPBRG<br />&nbsp;;BSF&nbsp;TXSTA,BRGH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;高速模式,波特率为9600<br />&nbsp;;BCF&nbsp;TXSTA,SYNC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;异步模式<br />&nbsp;;BCF&nbsp;TXSTA,TX9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;发送9位数据<br />&nbsp;;BSF&nbsp;TXSTA,TXEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;工作在发送方式<br />&nbsp;&nbsp;MOVLW&nbsp;24H<br />&nbsp;&nbsp;MOVWF&nbsp;TXSTA<br />&nbsp;&nbsp;RETURN<br />;----------------------------------------<br />SETURRT<br />&nbsp;BCF&nbsp;STATUS,RP0<br />&nbsp;BCF&nbsp;RCSTA,FERR<br />;&nbsp;BCF&nbsp;RCSTA,RX9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;接收9位数据<br />&nbsp;BSF&nbsp;RCSTA,CREN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;开始连续接收<br />&nbsp;BSF&nbsp;RCSTA,SPEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;使能串行口<br /><br />&nbsp;BSF&nbsp;INTCON,PEIE<br />&nbsp;;BCF&nbsp;PIR1,RCIF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;清中断标志<br />&nbsp;BSF&nbsp;INTCON,GIE<br />&nbsp;MOVLW&nbsp;D'16'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;接收字节数16<br />&nbsp;MOVWF&nbsp;TEMP4<br />&nbsp;MOVLW&nbsp;60H<br />&nbsp;MOVWF&nbsp;DADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;接收字节存储在60H为首的单元里<br />&nbsp;MOVF&nbsp;DADR,W<br />&nbsp;MOVWF&nbsp;FSR<br />&nbsp;BSF&nbsp;STATUS,RP0<br />&nbsp;BSF&nbsp;PIE1,RCIE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;开串行口接收中断&nbsp;<br />&nbsp;RETURN&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;END<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部