<br />//void InitUART1(void); // 申明UART1初始化程序 <br />void Configure_UART (void)<br />{<br /><br /> asm volatile ( "MOV #OSCCON,w1
"<br /> "MOV #0x46,w2
"<br /> "MOV #0x57,w3
"<br /> "MOV.b w2,[w1]
"<br /> "MOV.b w3,[w1]
"<br /> "BCLR OSCCON,#6");<br /> // configure input funcitions<br /> <br /> // assign u1rx to pin rp2<br /> RPINR18bits.U1RXR = 2;<br /> // assign u1tx to pin rp3<br /> RPOR1bits.RP3R = 3;<br /> <br /><br /> asm volatile ( "MOV #OSCCON,w1
"<br /> "MOV #0x46,w2
"<br /> "MOV #0x57,w3
"<br /> "MOV.b w2,[w1]
"<br /> "MOV.b w3,[w1]
"<br /> "BSET OSCCON, #6" );<br /><br /> AD1PCFG = 0XFFFF; // 模拟通道全部配置为I/O通道 <br /> TRISBbits.TRISB2 = INPUT; // UART - U1RX<br /> TRISBbits.TRISB3 = OUTPUT; // UART - U1TX<br /><br />}<br /><br />void Uart_Init()<br />{ <br /> U1MODE=0x8800; <br /> U1STA=0x8000; <br /> U1BRG=51; //19200<br /> IFS0bits.U1TXIF=0; <br /> IFS0bits.U1RXIF=0;<br /> IEC0bits.U1TXIE=1; //UART1 发送器中断允许位<br /> IEC0bits.U1RXIE=1; //UART1 接收器中断允许位<br /> IPC2bits.U1RXIP=2; //中断优先级高于定时器优先级<br /> IPC3bits.U1TXIP=2;<br /> <br />}<br /><br />void Timer1Init()<br /><br />void delay()<br />{<br /> unsigned int k=0;<br /> while(k<10000)<br /> k++; <br />}<br /><br />/*********************************<br />//__attribute__((__interrupt__))_U1RXInterrupt()<br />//串口1接收中断服务子程序 <br />**********************************/<br />void __attribute__((__interrupt__))_U1RXInterrupt()<br />{<br /> IFS0bits.U1RXIF=0;<br /> <br /> if(U1STAbits.OERR) <br /> {<br /> U1STAbits.OERR=0; <br /> }<br /> else<br /> {<br /> if(U1_receive_count<700)<br /> {<br /> U1_receive[U1_receive_count]=U1RXREG;<br /> <br /> U1_receive_count++;<br /> }<br /> else<br /> { <br /> U1_receive_count=0;<br /> } <br /> <br /> }<br />}<br />/**********************************<br />//__attribute__((__interrupt__))_U1TXInterrupt()<br />//发送中断服务子程序 <br />*********************************/<br /><br />void __attribute__((__interrupt__))_U1TXInterrupt()<br />{<br /> IFS0bits.U1TXIF=0;<br /> <br /> while(U1_send_count<=6)//<br /> { <br /> delay();<br /> U1TXREG =U1_receive[U1_send_count] ;// while(!U1STAbits.TRMT); <br /> U1_send_count++;<br /> } <br /> if(U1_send_count>6)//send_count <br /> { <br /> U1STAbits.UTXEN=0;<br /> U1_send_count=0;<br /> return;<br /> } <br /><br />}<br /><br /> <br /><br />int main(void)<br />{<br /> Configure_UART(); // 设置RP2,RP3为UART1通讯口 Uart_Init();<br /> TRISAbits.TRISA0 = 0; <br /> TRISBbits.TRISB12 = 0; <br /> TRISBbits.TRISB13 = 0; <br /> LATAbits.LATA0 = 1; <br /> LATBbits.LATB12 = 1;<br /> LATBbits.LATB13 = 1;<br /> while(1)<br /> { <br /> if((U1_receive_count%2) ==0)<br /> {<br /> LATBbits.LATB13 = !LATBbits.LATB13 ; // LED D3 <br /> } <br /><br /> LATAbits.LATA0 = !LATAbits.LATA0 ; // LED D1<br /> delay();<br /> delay();<br /> U1STAbits.UTXEN = 1; <br /> delay();<br /> }<br />}接收可以正常 但是发送引脚没有输出! |
|