📄 usart.txt
字号:
#include "p18f4520.h"
unsigned k;
unsigned aa;
void usart_init(void);
void InterruptHandlerHigh(void);
//高优先级中断向量
#pragma code InterruptVectorHigh=0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //跳到中断程
_endasm
}
//高优先级中断服务程序
#pragma code
#pragma interrupt InterruptHandlerHigh
void tx_isr();
void rc_isr();
unsigned txbuff[6]={0x00,0x01,0x02,0x03,0x04,0x05};
unsigned Rcbuff;
void main(void)
{
usart_init(); //串口初始化。
for(;;)
{
}//enf for
}//end main
void InterruptHandlerHigh ()
{
INTCONbits.PEIE=1; //外设中断允许位重新打开,发送玩一次会自动清0
RCSTAbits.CREN=1; //设定TXSTA寄存器,时能接收
while(PIR1bits.RCIF==1) //若接收中断标志不为1,则为误操作,返回
{
Rcbuff=RCREG; //将接收到的数据放入发送寄存器,并启动发送
if(Rcbuff==0xee)
{
tx_isr();
} //end if
}
}
void usart_init(void)
{
TRISC=0X80; //设定RC7为输入,RC6为输出。
TRISB=0;//设定RB1为输入,RB2为输出
SPBRG=255; //40MHZ,9600BPS.
TXSTAbits.BRGH=1; //高波特率
TXSTAbits.SYNC=0; //异步工作方式
TXSTAbits.TXEN=1; //设定TXSTA寄存器,时能发送
RCSTAbits.CREN=1; //设定TXSTA寄存器,时能接收
RCSTAbits.SPEN=1; //使能串口
RCSTAbits.CREN=0;//禁止接收器
PIE1bits.TXIE=1; //允许EUSART发送中断
PIE1bits.RCIE=1; //允许EUSART接收中断
INTCONbits.GIE=1; //允许所有未屏蔽的中断
INTCONbits.PEIE=1; //允许所有的外设中断
IPR1bits.RCIP=1;
}
void tx_isr()
{
for (k=0;k<6;k++)
{
TXSTAbits.TXEN=1; //发送允许位重新打开 ,发送玩一次会自动清0
INTCONbits.PEIE=1; //外设中断允许位重新打开,发送玩一次会自动清0
TXREG = txbuff[k];
while (PIR1bits.TXIF==0)
{} //等待中断,在此为查询方式。
while (TXSTAbits.TRMT==0)
{} //判断是否TSR发送完毕,未完等待。
}//end for
}
void rc_isr()
{
INTCONbits.PEIE=1; //外设中断允许位重新打开,发送玩一次会自动清0
RCSTAbits.CREN=1; //设定TXSTA寄存器,时能接收
Rcbuff=RCREG;
while(PIR1bits.RCIF==1)
{}
if(Rcbuff==0xee)
{
aa=0x55;
tx_isr();
} //end if
}
void usart_isr()
{
if(PIR1bits.RCIF&&PIE1bits.RCIE==1)
aa=0x11;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -