为了能让小资源的芯片用,这里没写全双工,采用的是半双工方式
只支持 8bit 数据 1bit 停止位模式,可支持MSB/LSB两种
io配置这一块没有仔细去分析,所以现在支持的是双线,到时候可以改成单线串口,
不支持多个io口,只支持一个io口用,后续会升级
水平有限,写的不好请多多包涵,如有更好的思路或者更优代码,请分享
下面是h文件
//0是双线 1是单线
#define UART_LINE_MODE (0)
//单线
#if (1 == UART_LINE_MODE)
#define SET_TX_MODE() IOSTA |= 0x01
#define SET_RX_MODE() IOSTA &= ~0x01
#define IO_TXD_SET_HIGH() PORTAbits.PA1 = 1
#define IO_TXD_SET_LOW() PORTAbits.PA1 = 0
#define IO_RXD_READ() PORTAbits.PA1
#else
//双线
#define IO_TXD_CFG() IOSTA |= 0x01
#define IO_RXD_CFG() IOSTA &= ~0x02;
#define IO_TXD_SET_HIGH() PORTAbits.PA1 = 1
#define IO_TXD_SET_LOW() PORTAbits.PA1 = 0
#define IO_RXD_READ() PORTAbits.PA2
#endif
#define ON_UART_TIMER() PORTCbits.PC0
#define OFF_UART_TIMER() PORTCbits.PC0
#define ON_UART_IO_INTE() PORTBbits.PB0
#define OFF_UART_IO_INTE() PORTCbits.PC0
/*
为了能让小资源的芯片用,这里没写全双工,采用的是半双工方式
只支持 8bit 数据 1bit 停止位模式,可支持MSB/LSB两种
io配置这一块没有仔细去分析,所以现在支持的是双线,到时候可以改成单线串口,
不支持多个io口,只支持一个io口用,后续会升级
*/
#define IIC_BUFF_SIZE 10
typedef struct {
u8 flag_operate : 4;
u8 status :4 ;
u8 buff_len;
u8 number;
u8 buff[IIC_BUFF_SIZE];
}g_soft_uart_typedef;
typedef struct {
u8 mode : 1; //LSB/MSB
u8 bit_cnt :4 ;
u8 level;
u8 temp;
}s_soft_uart_typedef;
enum{
UART_NO_OPERAT = 0,
UART_WRITE,
UART_READ,
};
extern g_soft_uart_typedef g_soft_uart;
void soft_uart_init(void);
void soft_uart_send_buff(u8* buff,u8 len);
void