51 UART配置流程

17 篇文章 1 订阅
9 篇文章 4 订阅

Step1: 设置TXD、RXD pin的输入输出属性,根据各芯片定义设置

例:P2CR &= 0xFB;//P2^1:UART_TXD, P2^2:UART_RXD


Step2: 设置UART工作方式

设置SCON寄存器。例,SH88F02设置为工作方式1,SCON = 0x40;

在SH88F02应用中发现,必须先配置SCON在配置定时器,如果顺序颠倒UART不工作。

正常顺序见最后例程。

设置PCON的bit7可以设置波特率加不加倍。


Step3: 选择产生波特率的定时器

例,SH88F02选择定时器2为波特率发生器。

T2CON = 0x30;     //(TCLK=1, RCLK=1)


Step4: 设置产生波特率定时器的工作方式及定时器重载值

一般产生波特率的定时器都工作在重载方式下。在这步就根据各芯片设置对应的定时器工作,设置完毕后注意要启动定时器:TRx = 1;

例, SH88F02定时器2设置如下:

	T2CON = 0x30;		//UART波特率由定时器2产生
	T2MOD = 0x00;		//定时器2时钟源为系统时钟
	RCAP2L = 0xD8;		//波特率为9600
	RCAP2H = 0xFF;
	TL2 = 0xD8;
	TH2 = 0xFF;
	
	TR2 = 1;

Step5: 启动UART

向SBUF中写入数据即启动了UART的发送。

REN = 1; // 允许接收

REN设置后,接收数据线RXD上侦测到低电平的起始信号即会开始接收数据。


TI = 1; //特别强调一下

其中TI = 1的设置与printf的使用有关。在实际测试中,如果在初始化中没有这句,用printf()语句不能正常输出,但是给SBUF赋值还是能正常输出的


Step6: 中断设置:

EADC = 1;

EA  = 1;

设置后当发送数据完毕,或接收数据完毕即会进入中断

void interruptUART() interrupt 4  using	3
{
	if(TI)
		TI = 0;
	if(RI)
	{
		RI = 0;
		rDataUart = SBUF;
		uartReadFlag =1;
	}
} 



例,SH88F02 UART配置工作例程:

void Init_Port()
{
	P0CR &= 0xDC;	//P0^5为ADC input 
	P1CR &= 0x00;	//P1端口配置为输入模式
	P2CR &= 0xFB;	//P2^1:UART_TXD, P2^2:UART_RXD
}
 
  
void Init_Uart()            //串口通信初始化  
{	
	SCON=0x40;                  //串口通信工作方式1
	
	T2CON = 0x30;		//UART波特率由定时器2产生
	T2MOD = 0x00;		//定时器2时钟源为系统时钟
	RCAP2L = 0xD8;		//波特率为9600
	RCAP2H = 0xFF;
	TL2 = 0xD8;
	TH2 = 0xFF;
	
	TR2 = 1;

	TI = 1;				//很重要
	REN=1;              //允许接收      
}


void main(void)  
{  
	Init_System(); 
        while(1)  
       { 
            if(uartReadFlag)
		{
			uartReadFlag = 0;
//			printf("Get the valule is: %d \r\n", rDataUart);
			SBUF = rDataUart;
		}
            }
}


bit uartReadFlag = 0;			//UART读到值标志
unsigned int rDataUart = 0;		//UART接收buffer

void interruptUART() interrupt 4  using	3
{
	if(TI)
		TI = 0;
	if(RI)
	{
		RI = 0;
		rDataUart = SBUF;
		uartReadFlag =1;
	}
} 


上述配置后,用printf即可与串口助手通信。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值