📄 uart.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 + -