|
soft_uart.c
soft_uart.h
- #ifndef __SOFT_UART_H__
- #define __SOFT_UART_H__
- /*軟件實(shí)現(xiàn)UART******************************************
- 波特率 :4800/9600/14400/19200
- 停止位 :1bit
- 奇偶校驗(yàn) :無
- 注意 :定時(shí)器的優(yōu)先級盡量設(shè)高!!!
- 使用前定義一定時(shí)器名為Soft_Uart_Time,并將步進(jìn)設(shè)置為1us。
- 調(diào)用Soft_Uart_Init()進(jìn)行初始化。
- 調(diào)用Soft_Uart_Drive()在提供時(shí)基的定時(shí)器中斷。
- ********************************************************/
- extern void Soft_Uart_Time(unsigned char isr_time_us);
- //設(shè)置用于模擬的IO口
- #define SOFT_UART_TX P50
- #define SOFT_UART_RX P51
- //TX設(shè)置為推挽輸出,RX設(shè)置為輸入上拉
- #define SOFT_UART_IO_INIT() {P50 = 1;P5IO |= 0X01;P51 = 1;P5IO &= ~0X02;P5PU |= 0X02;}
- //設(shè)置發(fā)送區(qū)、接收區(qū)大小
- #define SOFT_UART_TX_MAX_BYTE 15
- #define SOFT_UART_RX_MAX_BYTE 15
- //設(shè)置通信波特率
- #define SOFT_UART_BAUD_RATE BAUD_RATE_9600
- //以下部分無需修改==================================================================================================================
- #define BAUD_RATE_4800 4800
- #define BAUD_RATE_9600 9600
- #define BAUD_RATE_14400 14400
- #define BAUD_RATE_19200 19200
- #if(SOFT_UART_BAUD_RATE == BAUD_RATE_4800)
- #define SOFT_UART_TIME_ISR 52
- #define SET_BIT_TIME_COUNT 4
- #define SET_1_2BIT_TIME_COUNT 2
- #elif(SOFT_UART_BAUD_RATE == BAUD_RATE_9600)
- #define SOFT_UART_TIME_ISR 26
- #define SET_BIT_TIME_COUNT 4
- #define SET_1_2BIT_TIME_COUNT 2
- #elif(SOFT_UART_BAUD_RATE == BAUD_RATE_14400)
- #define SOFT_UART_TIME_ISR 23
- #define SET_BIT_TIME_COUNT 3
- #define SET_1_2BIT_TIME_COUNT 2
- #elif(SOFT_UART_BAUD_RATE == BAUD_RATE_19200)
- #define SOFT_UART_TIME_ISR 26
- #define SET_BIT_TIME_COUNT 2
- #define SET_1_2BIT_TIME_COUNT 1
- #endif
- enum SORT_TX_STATE{
- SOFT_TX_DATA_COPY_OK, //拷貝數(shù)據(jù)成功
- SOFT_TX_DATA_COPY_ERR, //拷貝發(fā)送的字節(jié)數(shù)超過最大設(shè)置
- SOFT_TX_BUSY, //當(dāng)前有未發(fā)送的數(shù)據(jù)
- };
- enum SOFT_RX_PHASE{
- SOFT_RX_PHASE_WAIT_START,//等待接收
- SOFT_RX_PHASE_DECODING, //接收中
- SOFT_RX_PHASE_RECV_STOP, //接收停止信號
- };
- enum SOFT_TX_PHASE{
- SOFT_TX_PHASE_WAIT_WORK, //等待發(fā)送
- SOFT_TX_PHASE_START_SINGLE, //發(fā)送起始信號
- SOFT_TX_PHASE_SEND, //發(fā)送數(shù)據(jù)
- SOFT_TX_PHASE_STOP_SINGLE, //發(fā)送停止信號
- SOFT_TX_PHASE_FINISH, //發(fā)送SOFT_UART_TX_MAX_BYTE字節(jié)完成
- };
- enum SOFT_RX_STATE_CODE{
- SOFT_RX_DECODING,//接收中
- SOFT_RX_RECV_OK //接收SOFT_UART_RX_MAX_BYTE字節(jié),1幀數(shù)據(jù)
- };
- void Soft_Uart_Io_Init(void);
- void Soft_Uart_Time_Init(void);
- void Soft_Uart_Init(void);
- unsigned char Soft_Uart_Tx_Nbyte(unsigned char *str,unsigned char n_byte);
- void Soft_Uart_Drive(void);
- #endif
復(fù)制代碼
|
評分
-
查看全部評分
|