void usart_int(void)
{
GIE=1;
PEIE=1;
RCIE=1;
TRISB1=1; //输入
TRISB2=1;
SPBRG=25; //4MHz 波特率9600kbs
RCSTA=0b10010000;
//接收状态控制寄存器
//SPEN=1 使能串行端口 RX9=0 第九位接收使能弃用 SREN=0 单字节接收使能,异步模式忽略 CREN=1 异步模式允许连续接收 ADEN=0 地址检测在9位情况下使用 FERR OERR RX9D为标志位
TXSTA=0b00000100;
//发送状态控制寄存器
//CSRC=0 同步模式有效 TX9=0 第九位传输弃用 TXEN=1 使能发送 SYNC=0 异步模式 - BRGH=1 快速 TMRT=0 发送移位寄存器状态位,仅读,1代表空 TX9D=0 要发送的第九位
}
void usart_tx(char temp)
{
while(!TRMT); //检测TSR寄存器是否为空
TXEN=1; //启动发送,会产生中断
TXREG=temp; //将待发数据给发送寄存器
while(!TRMT); //等待发关完一字节数据
TXEN=0; //关闭发送使能
}
main(void)
{
Sen[0]='0';
Rec[0]='0';
usart_int();//receive everytime
LCD_init();
Display_char(8,1,"Sen:");
Display_char(8,3,"Rec:");
while(1)
{
if(INC)
{
delay(1000);
if(INC)
{
while(INC);
Sen[0]='A';
usart_tx(Sen[0]);
}
}
Display_char(40,1,&Sen);
Display_char(40,3,&Rec);
}
}
void interrupt Timer(void)
{
if(RCIE&&RCIF)
{
Rec[0]=RCREG;
}
}
请问这样写USART控制程序有什么问题?这个程序未能调试成功,不知道问题出在哪儿。我用的是PIC16F628A单片机!请各位高手神人指教
|