⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 LED控制
💻 C
字号:
#include <pic.h>
#include "..\inc\include.h"

#define		MAX_ADDR	210  		//定义最大的需发送数据次数
#define		TXD			RC6

extern	void  Delay10us(uchar t);

void UART_Init(void)
{
	//Fosc = 4MHz
	SPEN = 1;	//Serial Port Enable	
	SYNC = 0;	//0:Asynchronous mode; 1:Synchronous mode
	BRGH = 1;	//0:Low speed,Baud Rate = FOSC/(64*(SPBRG + 1)); 1:High speed,Baud Rate = FOSC/(16*(SPBRG + 1))
	
	//SPBRG= 12;	//4MHz:19200bps
	//TX9  = 0;	//0:8-bit transmission; 1:9-bit
	//SPBRG= 0;	//4MHz:250kbps
	SPBRG= 1;	//8MHz:250kbps
	TX9  = 1;	//0:8-bit transmission; 1:9-bit
	
	RX9  = 0;	//0:8-bit reception; 1:9-bit
	CREN = 0;	//continuous receive disable
	ADDEN= 0;	//Address Detect disable

	//TRISC6 = 0; // RC6/TxD output

	TXEN = 1;	//Transmit enable
}

void UART_SendByte(unsigned char TxBuf)
{
	//SPBRG= 12;	//4MHz:19200bps
	//TX9  = 0;	//0:8-bit transmission; 1:9-bit
	
	if(TRMT){	//1:TSR(Transmit Shift Register) empty
		;	
	}
	if(TXIF){	//1:Transmit Buffer empty
		TXREG =	TxBuf;
	}
	while(!TRMT);	//wait
	
	//SPBRG= 0;	//4MHz:250kbps
	//TX9  = 1;	//0:8-bit transmission; 1:9-bit
}

void DMX512_SendData(uchar TxBuf)
{
    uchar i;
    
	SPEN = 0;
	TXD = 0;   			// Break
	Delay10us(10);		// Delay 100us instead 88us
	TXD = 1;			// Mark-after-break
    Delay10us(1);
	
	SPEN = 1;			//Serial Port Enable, 	
	TX9D = 1;  			// the tenth bit or the first stop bit
	for(i = 0; i<MAX_ADDR; i++){
		while(!TXIF);	//Transmit Buffer full, wait
		//if(TXIF){		//TXIF=1:Transmit Buffer empty
			TXREG =	TxBuf;
		//}
 		while(!TRMT);	//wait
	}
	SPEN = 0;			// 必须关闭串口配置,用以切换到GPIO模式	
    TXD = 1;   			// 置数据空闲位
}

⌨️ 快捷键说明

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