
 
 
 
 
//10M晶振 波特率9600 BRG8位波特率发生器 异步模式
 #include "p18f458.h"
 #include "mydelay.h"
#pragma config OSC=HS,WDT=OFF,LVP=OFF,DEBUG=ON
void PIC18F_High_isr(void);/*中断服务函数声明*/
 void PIC18F_Low_isr(void);
 void usart_tx(unsigned char ch);
 unsigned char usart_rx();
#pragma code high_vector_section=0x8
 void high_vector (void)
 {
     _asm goto PIC18F_High_isr _endasm
 }
#pragma code low_vector_section=0x18
 void low_vector (void)
 {
     _asm goto PIC18F_Low_isr _endasm
 }
#pragma code
#pragma interrupt PIC18F_High_isr
 void PIC18F_High_isr (void)
 {
   PORTB=RCREG;
   usart_tx(RCREG+1);
 }
#pragma interruptlow PIC18F_Low_isr
 void PIC18F_Low_isr (void)
 {
     PORTBbits.RB4=~PORTBbits.RB4;
     INTCON3bits.INT2IF=0;/*清除中断标志*/
 }
void usart_tx(unsigned char ch)
 {
   while (!TXSTAbits.TRMT);
   TXREG=ch;
   while(!PIR1bits.TXIF);
 }
 unsigned char usart_rx()
 {
   while(!PIR1bits.RCIF);
   return RCREG;
 }
 void printstr(const rom char *str)
 {
   while(*str)
   {
     if(*str=='\n')//回车
     {
       usart_tx(0x0d);
       usart_tx(0x0a);
     }
        
     usart_tx(*str);
     str++;
   }
 }
 void main()
 {
   char k;
   //ADCON1=0b00001111;/*设置所有双用口为普通数字口*/
   //CMCON=0b00000111;/*关闭所有比较器*/
   //INTCON2bits.RBPU=0;/*开启B口弱上拉*/
   TRISB=0x00; //B口输出
   PORTB=0xff;
  
   RCSTAbits.SPEN=1;//使能串口
   TXSTAbits.SYNC=0;//设置为异步模式
   TXSTAbits.BRGH=1;//高速模式
   SPBRG=64;//波特率9600   10000000/9600/16-1
   RCSTAbits.CREN=1;//使能接收
   TXSTAbits.TXEN=1;//发送使能
  
   IPR1bits.RCIP=1;//高优先级
   PIE1bits.RCIE=1;//串口中断使能
   INTCONbits.PEIE=1;//外设中断使能
   INTCONbits.GIE=1;//开启中断
  
   while(1)
   {
     //if(PIR1bits.RCIF==1)
       //PORTB=RCREG;
     printstr("asdfg");
     for(k=0;k<10;k++)
       delay();
   }
  
 }



















