1:波特率可以到9600.
2:数据接,发很可靠。
3:接收采用中断方式,实时性较高。
********************************************************************************/
#define UART_SEND_Pin GPIO4 //GPIO4=TXD
//********************************************************************************
void BPS_Delay(void){
TMR2IF=0;
TMR2ON=1;
while(!TMR2IF);
TMR2ON=0;
PR2=TtK;
}
//*********************************************************************************
//发送一串数据
//*********************************************************************************
void SendOut(unsigned char *p,unsigned char Long){
unsigned char i,Dat;
while(Long--){
i=8; //1200 8.n 1 P d8 S
UART_SEND_Pin=0; //开始位
PR2=TtK;
BPS_Delay();
Dat=*p++;
while(i--){
UART_SEND_Pin=(bit)(Dat & 0x01);
Dat>>=1;
BPS_Delay();
}
UART_SEND_Pin=1;
BPS_Delay();
}
}
#define Uart_IN_IO GPIO3 //GPIO3=接收!
void Uart_Rece (void ){
unsigned char i,j;
unsigned char Buf[8]; //接收缓存!
unsigned char bt;
//***********************************************************
//产生中断,开始接收!查询!
while(!Uart_IN_IO);
//************************************************************
for(j=0;j<sizeof(Buf);j++){
//***********************************************************
//产生中断,开始接收!查询!
i=TtK/2;
i +=TtK;
//***********************************************************
PR2=i;
BPS_Delay();
//************************************************************
bt=8;i=0;
while(bt--){
i>>=1;
if(Uart_IN_IO) i |=0x80;
//*************************************************************
//延时等待下一个位
BPS_Delay();
}
//************************************************************
//等待结束位 (1)
BPS_Delay();
Buf[j]=i;
//数据处理 。。。。
}
//**********************************************************************************
void Exit_int_config(void){
INTCON |=B0000_1000; //GPIE=1
IOC =B0000_1000; //RXD 脚启动电平中断
}
//***********************************************************************************
//中断入口总程序
void interrupt ISR(void){ //中断服务总程序.
if(GPIE && GPIF){
GPIF=0; //清除标志
//****************************************
Uart_Rece ();
}
//-------------------------------------------------------------
}
//------------------------------------------------------------
#define F_osc (4000000) //工作频率 4MHz
//------------------------------------------------------------
#define BPS (9600) //9600
#define TUS (20) //微调时间 15~35 2013-5-2测试Ok 9600
//*************************************************************
//t1 自动重装波特率计算公式 CCLK/(256-TH1)32
//*************************************************************
#define TtK (F_osc/4/BPS-TUS) //化简后的结果!(15开始没有乱码到160很好)
从多个文件中COPY出来,顺续有点乱。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>