PIC24菜鸟毕业留念---GPS串口2接收中断服务程序

[复制链接]
4515|7
 楼主| hotpower 发表于 2007-12-20 02:49 | 显示全部楼层 |阅读模式
/*------------------------------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPS串口2接收中断服务程序(接收GPS数据)<br />菜农HotPower之PIC24菜鸟毕业留念&nbsp;&nbsp;&nbsp;&nbsp;2007.12.20&nbsp;&nbsp;&nbsp;2:40&nbsp;于菜地留念&nbsp;&nbsp;&nbsp;<br />-------------------------------------------------------------------------*/<br />void&nbsp;__attribute__((interrupt,&nbsp;no_auto_psv))&nbsp;_U2RXInterrupt(&nbsp;void&nbsp;)<br />{<br />static&nbsp;unsigned&nbsp;char&nbsp;cData&nbsp;=&nbsp;0,&nbsp;cPosition;<br />unsigned&nbsp;char&nbsp;ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(IFS1bits.U2RXIF)//确实是GPS串口2接收中断<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(IEC1bits.U2RXIE)//GPS串口2接收中断已被允许<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;=&nbsp;U2RXREG;//读取串口GPS数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ch&nbsp;==&nbsp;'$')//是GPS引导字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cData&nbsp;=&nbsp;ch;//记录引导字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cPosition&nbsp;=&nbsp;GPSRxWriteCount;//引导字符位置记录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPSRxBuffers[GPSRxWriteCount&nbsp;++]&nbsp;=&nbsp;ch;//存入数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(cData&nbsp;==&nbsp;'$')//收到引导字符&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ch&nbsp;&gt=&nbsp;'&nbsp;')//可能是有效数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPSRxBuffers[GPSRxWriteCount&nbsp;++]&nbsp;=&nbsp;ch;//存入数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(ch&nbsp;==&nbsp;'*')//GPS校验引导字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPSRxBuffers[GPSRxWriteCount&nbsp;++]&nbsp;=&nbsp;ch;//存入数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;((ch&nbsp;==&nbsp;'\r')&nbsp;&&&nbsp;(GPSRxBuffers[GPSRxWriteCount&nbsp;-&nbsp;3]&nbsp;==&nbsp;'*'))//回车字符校验<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPSRxBuffers[GPSRxWriteCount&nbsp;++]&nbsp;=&nbsp;ch;//存入数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((ch&nbsp;==&nbsp;'\n')&nbsp;&&&nbsp;(GPSRxBuffers[GPSRxWriteCount&nbsp;-&nbsp;1]&nbsp;==&nbsp;'\r'))//换行字符校验<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//只取GPRMC语句<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(GPSGPRMCTest((char&nbsp;*)&GPSRxBuffers[cPosition&nbsp;+&nbsp;1]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPSRxBuffers[GPSRxWriteCount&nbsp;++]&nbsp;=&nbsp;ch;//存入数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPSbits.RXFlag&nbsp;=&nbsp;1;//激活GPS接收成功解码程序(在“零耗时键盘OS”的空闲任务内细加工处理)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cData&nbsp;=&nbsp;0;//结束或出错<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cData&nbsp;=&nbsp;0;//出错&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFS1bits.U2RXIF&nbsp;=&nbsp;0;//清除RX2中断标志<br />}<br /><br /><br />/*------------------------------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;GPS串口2初始化程序<br />-------------------------------------------------------------------------*/<br />void&nbsp;Uart2Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_TX2&nbsp;=&nbsp;PORTOUTMODE;//设置TX2为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_RX2&nbsp;=&nbsp;PORTINPUTMODE;//设置RX2为输入IO<br />&nbsp;&nbsp;&nbsp;&nbsp;U2MODE&nbsp;=&nbsp;0;<br />//&nbsp;&nbsp;&nbsp;&nbsp;U2MODEbits.STSEL&nbsp;=&nbsp;0;//&nbsp;1-stop&nbsp;bit<br />//&nbsp;&nbsp;&nbsp;&nbsp;U2MODEbits.PDSEL&nbsp;=&nbsp;0;//&nbsp;No&nbsp;Parity,&nbsp;8-data&nbsp;bits<br />//&nbsp;&nbsp;&nbsp;&nbsp;U2MODEbits.ABAUD&nbsp;=&nbsp;0;//&nbsp;Autobaud&nbsp;Disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;U2STA&nbsp;=&nbsp;0;<br />//&nbsp;&nbsp;&nbsp;&nbsp;U2STAbits.UTXISEL0&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Interrupt&nbsp;after&nbsp;one&nbsp;Tx&nbsp;character&nbsp;is&nbsp;transmitted<br />//&nbsp;&nbsp;&nbsp;&nbsp;U2STAbits.UTXISEL1&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;U2STAbits.URXISEL&nbsp;&nbsp;=&nbsp;3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Interrupt&nbsp;after&nbsp;one&nbsp;RX&nbsp;character&nbsp;is&nbsp;received<br />&nbsp;&nbsp;&nbsp;&nbsp;U2BRG&nbsp;=&nbsp;BRGVAL2;//BAUD&nbsp;Rate&nbsp;Setting&nbsp;for&nbsp;19200<br />&nbsp;&nbsp;&nbsp;&nbsp;U2MODEbits.WAKE&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1;//启动位时唤醒使能位<br />&nbsp;&nbsp;&nbsp;&nbsp;U2MODEbits.UARTEN&nbsp;&nbsp;&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enable&nbsp;UART<br />&nbsp;&nbsp;&nbsp;&nbsp;U2STAbits.UTXEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Enable&nbsp;UART&nbsp;Tx<br />/*------------------------------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;定义GPS串口2中断优先级位1111)<br />-------------------------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;IPC7bits.U2RXIP0&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IPC7bits.U2RXIP1&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IPC7bits.U2RXIP2&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IEC1bits.U2RXIE&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IFS1bits.U2RXIF&nbsp;=&nbsp;0;//清除RX1中断标志<br />&nbsp;&nbsp;&nbsp;&nbsp;IEC1bits.U2TXIE&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IFS1bits.U2TXIF&nbsp;=&nbsp;0;//清除TX1中断标志<br />}<br />
兰天白云 发表于 2007-12-20 08:15 | 显示全部楼层

好文

严重怀疑hotpower菜地方位,最有可能在美国
yewuyi 发表于 2007-12-20 08:47 | 显示全部楼层

~~,hotpower又在自娱自乐了~~

  
wolfererer 发表于 2007-12-20 08:56 | 显示全部楼层

收藏了

你得说&nbsp;谢谢&nbsp;不是?<br /><br />谢谢
 楼主| hotpower 发表于 2007-12-20 13:11 | 显示全部楼层

哈哈~~~明天下午俺参加STM32的西安会,俺的方位在那里???

  
 楼主| hotpower 发表于 2007-12-20 22:30 | 显示全部楼层

回2楼:俺工作的座位 东经10856.9696,北纬3413.1132

  
huangqi412 发表于 2007-12-22 14:19 | 显示全部楼层

hotpower小心被导弹定位,嘿嘿

  
 楼主| hotpower 发表于 2007-12-24 00:44 | 显示全部楼层

哈哈~~~垃圾贴呀~~~

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21617

帖子

508

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