pic24hj的晶振配置与串口通信中的问题

[复制链接]
 楼主| tanker110 发表于 2008-8-26 11:25 | 显示全部楼层 |阅读模式
请教:pic24hj的晶振配置与串口通信中的问题;<br /><br />本人用以下程序&nbsp;进行pc和24hj256gp210的芯片进行通信,<br />24h要求对晶振进行设置.<br />发送与接受的数据个数一致,但是不正确.<br />本人觉的可能是波特率的问题,但是不清楚具体问题在哪里.<br />不知道晶振设置的问题还是串口的问题.<br />24第一次用&nbsp;,流程不是很&nbsp;清楚。<br />有哪为兄台能指教几招。非常感激。<br /><br />过程如下:<br />&nbsp;&nbsp;晶振:7.3728m,想要得到9600的波特率.<br />进行ppl,分频,倍频,<br />&nbsp;&nbsp;N1=2,N2=2,M=40;<br /><br />得到器件工作频率FCY=(7.3728*M)/(N1*N2)/2=5*7.3728m.<br /><br />BRGX=FCY/(16*9600)-1=239.<br /><br /><br /><br />程序如下:<br />#include&nbsp;&quot;p24hxxxx.h&quot;<br /><br /><br />#define&nbsp;UART_RX_INT_EN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xFFFF&nbsp;&nbsp;/*Receive&nbsp;interrupt&nbsp;enabled*/<br />#define&nbsp;UART_RX_INT_PR6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xFFFE&nbsp;&nbsp;/*Priority&nbsp;RX&nbsp;interrupt&nbsp;6*/<br />#define&nbsp;UART_TX_INT_DIS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xFF7F&nbsp;&nbsp;/*transmit&nbsp;interrupt&nbsp;disabled*/<br />#define&nbsp;UART_TX_INT_PR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xFFAF&nbsp;&nbsp;/*Priority&nbsp;TX&nbsp;interrupt&nbsp;2*/<br /><br />void&nbsp;ConfigIntUART1(unsigned&nbsp;int&nbsp;config)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IFS0bits.U1RXIF&nbsp;=&nbsp;0;/*&nbsp;clear&nbsp;IF&nbsp;flags&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;IFS0bits.U1TXIF&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />IPC2bits.U1RXIP&nbsp;=&nbsp;0x0007&nbsp;&&nbsp;config;/*&nbsp;set&nbsp;priority&nbsp;*/<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;IEC0bits.U1RXIE&nbsp;=&nbsp;(0x0008&nbsp;&&nbsp;config)&nbsp;&gt&gt&nbsp;3;/*&nbsp;enable/disable&nbsp;interrupt&nbsp;*/<br />&nbsp;&nbsp;&nbsp;IEC0bits.U1TXIE&nbsp;=&nbsp;(0x0080&nbsp;&&nbsp;config)&nbsp;&gt&gt&nbsp;7;<br />}<br /><br />void&nbsp;WriteUART1(unsigned&nbsp;int&nbsp;data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTGbits.RG3=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(U1STAbits.UTXBF);&nbsp;&nbsp;/*&nbsp;wait&nbsp;if&nbsp;the&nbsp;buffer&nbsp;is&nbsp;full&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U1TXREG&nbsp;=&nbsp;data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;transfer&nbsp;data&nbsp;byte&nbsp;to&nbsp;TX&nbsp;reg&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />}<br /><br />void&nbsp;main(void)<br />{<br />OSCCON=0x30AB;<br />CLKDIV=0x0300;<br />PLLFBD=0x0026;<br /><br />InitUrat();<br />while(1)<br />{<br />WriteUART1(0xFA);<br />asm(&quot;nop&quot;);<br />WriteUART1(0x03);<br />asm(&quot;nop&quot;);<br />};<br /><br />}<br /><br /><br />void&nbsp;CloseUART1(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U1MODEbits.UARTEN&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IEC0bits.U1RXIE&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;IEC0bits.U1TXIE&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IFS0bits.U1RXIF&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;IFS0bits.U1TXIF&nbsp;=&nbsp;0;<br />}<br /><br />void&nbsp;InitUrat(void)<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CloseUART1();/*&nbsp;Turn&nbsp;off&nbsp;UART1module&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ConfigIntUART1(UART_RX_INT_EN&nbsp;&&nbsp;UART_RX_INT_PR6&nbsp;&<br />&nbsp;&nbsp;&nbsp;&nbsp;UART_TX_INT_DIS&nbsp;&&nbsp;UART_TX_INT_PR2);/*&nbsp;Configure&nbsp;uart1&nbsp;receive&nbsp;and&nbsp;transmit&nbsp;interrupt&nbsp;*/<br />U1BRG=239;<br />U1MODE=0x8080;<br />U1STA=0xE75F;<br />}
 楼主| tanker110 发表于 2008-8-27 11:10 | 显示全部楼层

我发现问题了 ,已经可以用 。大家分享

我发现问题了&nbsp;,已经可以用&nbsp;。大家分享。<br />希望对其他朋友有帮助。<br />U1STA=0xE75F;<br />有些问题。<br />改为U1STA=0xA75F;<br />影响效果的是U1STA中的&nbsp;UTXINV的配置,应该置0.就可以正常发送接受了。<br />不过&nbsp;让我困惑的是我&nbsp;在U1MODE中已经将IRDA的功能给禁止了。到这里还会影响我的工作频率,让我不解。不管怎么样,能解决问题就好。有高手知道的,指点下也行。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

14

帖子

0

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