uart1.c

来自「智能水表程序 来着互联网」· C语言 代码 · 共 81 行

C
81
字号
//-----------------------------------------------------------------------------
// uart1.c
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <reg52.h>
#include "cpu/cpu.h"
#include "misc/general.h"
//-----------------------------------------------------------------------------
// Constants Define
//-----------------------------------------------------------------------------
#define UART1_BAUD        9600             		 // 12T
//-----------------------------------------------------------------------------
// Function Prototype
//-----------------------------------------------------------------------------
void Uart1_Send_Byte    ( char c );
char Uart1_Receive_Byte ( void );
//-----------------------------------------------------------------------------
// Uart1 Send Byte Routine
//-----------------------------------------------------------------------------
void Uart1_Send_Byte ( char c )
{
	char i;

	TR2 = OFF;			TF2 = CLEAR;
	RCAP2L = 0xD0;  	RCAP2H = 0xFF;
	TL2 = 	0xD0;		TH2 = 	0xFF;	
	Uart1_Txd = HIGH;
	TR2 = ON;
	while ( !TF2 );		TF2 = CLEAR;
	while ( !TF2 );		TF2 = CLEAR;
	Uart1_Txd = LOW;	
	while ( !TF2 );		TF2 = CLEAR;
	while ( !TF2 );		TF2 = CLEAR;
	for ( i = 8; i > 0; i-- )
	{
		Uart1_Txd = c & LSB;
		c >>= 1;
		while ( !TF2 );		TF2 = CLEAR;
		while ( !TF2 );		TF2 = CLEAR;	
	}
	Uart1_Txd = HIGH;	
	while ( !TF2 );		TF2 = CLEAR;
	while ( !TF2 );		TF2 = CLEAR;	
	TR2 = OFF;
}
//-----------------------------------------------------------------------------
// Uart1 Receive Byte Routine
//-----------------------------------------------------------------------------
char Uart1_Receive_Byte ( void )
{
	char i, j, c, mask;
	bit pick;

	i = 0x14;	j = 0xFF;	pick = 1;	c = 0;	mask = 1;
	do {
		Clear_Dog;	
		do {
			if ( Uart1_Rxd == LOW ) pick = 0;
		} while ( --j && pick );
	} while ( --i && pick );

	TR2 = OFF;			TF2 = CLEAR;
	RCAP2L = 0xD0;  	RCAP2H = 0xFF;
	TL2 = 	0xD0;		TH2 = 	0xFF;	
	TR2 = ON;
//	while ( !TF2 );		TF2 = CLEAR;
	for ( i = 8; i > 0; i-- )
	{
		while ( !TF2 );		TF2 = CLEAR;
		while ( !TF2 );		TF2 = CLEAR;
		if ( Uart1_Rxd == HIGH ) c |= mask;
		mask <<= 1;
	}
	while ( !TF2 );		TF2 = CLEAR;
//	while ( !TF2 );		TF2 = CLEAR;
	TR2 = OFF;
	return c;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?