能写出查询方式UART0接收和发送数据的C语言程序

能写出查询方式UART0接收和发送数据的C语言程序,第1张

#include<pic.h>//包含单片机内部资源预定义

#ifndef uchar

#define uchar unsigned char

#define uint unsigned int

#endif

//__CONFIG(0x2129)

bit rec_flag //串口中断标志位,有串口中断,置1

uchar uartdata //串口数据保存到此位置中

void Uart_char(uchar dat)//串口发送一个数信返据

/*************************************************************

函数原型:void main(void)

功能:等待串口发送中断到来握陵,将接收到的设计再通过串口发回

*************************************************************/

void main(void)

{

TRISB1=1

TRISB2=1

SPBRG=0X19 //设置波特率为9600BPS

TXSTA=0X24 //使能串口发送,选择高速波特率

RCSTA=0X90 //使能串口工作,连续接收

RCIE=0X1 //使能接收中断

GIE=0X1 //开放全局中断

PEIE=0X1 //使能外部中断

//INTCON=0X00

/* while(1) //查询模式下

{

RCIE=1

while(RCIF==0)

RCIE=0

Send_char(RCREG)

}

*/

while(1) //中断模式下,等待中断的到来

{

if(rec_flag==1) //如果接收中断到来

{

rec_flag=0//接收标志清零

Uart_char(uartdata)//将接收来的数据发送到串口

}

}

}

/**********************************************

函数原型:void Uart_char(uchar dat)

功能:将dat数据通过串口传送出去

**********************************************/

void Uart_char(uchar dat)

{

TXREG=dat //将dat数据存入TXREG

// TXEN=1 //启动发送,TSR开始移滑皮饥位 *** 作。

while (TRMT==0) //判断是否TSR发送完毕,未完等待。

// TXEN=0 //关发送功能,防止TXREG空时,TXIF产生置位

}

/**********************************************

函数原型:void interrupt usart(void)

功能:串口接收到数据,接受发来的数据将接

收到数据标志位rec_flag置1

**********************************************/

void interrupt usart(void)

{

if(RCIF) //判断是否为串口接收中断

{

rec_flag = 1

//RCIF=0

uartdata = RCREG// 接收数据并存储

//TXREG=recdata //把接收到的数据发送回去

}

}

这段程序应该对你有用

恩!码悔旅这个查询方式前坦:

void UART::Uart_Putc(unsigned char c)

{

switch(CurUart)

{

case 0: ///串口0

while( !( (rUTRSTAT0) &(1 <<2) ) )///查询迟凳rUTRSTAT0状态

rUTXH0 = c

break

case 1:

break

case 2:

break

}

}

1、查询方式:

#include<reg51.h>

main()

{

unsigned char dat

TMOD=0x20

TH1=TL1=0xfd

SCON=0x50

TR1=1

while(1)

{

if(RI)//接收

{

RI=0

dat=SBUF

}

SBUF=dat/稿基/发送

while(!TI)

TI=0

}

}

2、察厅中断败敬隐方式:

#include<reg51.h>

unsigned char dat

bit flag

void uart_isr() interrupt 4

{

if(RI)//接收

{

RI=0

dat=SBUF

flag=1

}

if(TI)TI=0

}

main()

{

TMOD=0x20

TH1=TL1=0xfd

SCON=0x50

TR1=1

EA=1

ES=1

flag=0

while(1)

{

if(flag)

{

SBUF=dat

flag=0

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12510098.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存