//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();
}
}
完整资料打包(含仿真):