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

📄 uart.c

📁 在8位单片机实现软件模拟串口发送
💻 C
字号:

#if (RS232_DEBUG == TRUE)
/*========================================================
子程序名称:
子程序功能:
子程序描述:
========================================================*/
void rs232_debug(void)
{
            unsigned char tx_char;
            
            /*
            unsigned char tx_text_char[26];
            tx_text_char[0] = time_hour;
            tx_text_char[1] = time_min;
            tx_text_char[2] = time_sec;
            _asm
            {
                mov a,%batt_voltage+1
                mov %tx_char,a
            }
            tx_text_char[3] = tx_char;
            _asm
            {
                mov a,%batt_voltage
                mov %tx_char,a
            }
            tx_text_char[4] = tx_char;
            
            _asm
            {
                mov a,%motor_current+1
                mov %tx_char,a
            }
            tx_text_char[5] = tx_char;
            _asm
            {
                mov a,%motor_current
                mov %tx_char,a
            }
            tx_text_char[6] = tx_char;
            */
            
            rs232_tx_char(0xd);
            rs232_tx_char('T'); //发送时间
            rs232_tx_char('I');
            rs232_tx_char('M');
            rs232_tx_char('E');
            rs232_tx_char(':');
            rs232_tx_char(ASCII_TAB[(time_hour >> 4)]);
            rs232_tx_char(ASCII_TAB[(time_hour & 0xf)]);
            rs232_tx_char('-');
            rs232_tx_char(ASCII_TAB[(time_min >> 4)]);
            rs232_tx_char(ASCII_TAB[(time_min & 0xf)]);
            rs232_tx_char('-');
            rs232_tx_char(ASCII_TAB[(time_sec >> 4)]);
            rs232_tx_char(ASCII_TAB[(time_sec & 0xf)]);
            rs232_tx_char(0xd);
            
            rs232_tx_char('V'); //发送电压
            rs232_tx_char('O');
            rs232_tx_char('L');
            rs232_tx_char(':');
            _asm
            {
                mov a,%batt_voltage+1
                mov %tx_char,a
            }
            rs232_tx_char(ASCII_TAB[(tx_char >> 4)]);
            rs232_tx_char(ASCII_TAB[(tx_char & 0xf)]);
            _asm
            {
                mov a,%batt_voltage
                mov %tx_char,a
            }
            rs232_tx_char(ASCII_TAB[(tx_char >> 4)]);
            rs232_tx_char(ASCII_TAB[(tx_char & 0xf)]);
            rs232_tx_char(0xd);
            
            rs232_tx_char('C'); //发送电流
            rs232_tx_char('U');
            rs232_tx_char('R');
            rs232_tx_char(':');
            _asm
            {
                mov a,%motor_current+1
                mov %tx_char,a
            }
            rs232_tx_char(ASCII_TAB[(tx_char >> 4)]);
            rs232_tx_char(ASCII_TAB[(tx_char & 0xf)]);
            _asm
            {
                mov a,%motor_current
                mov %tx_char,a
            }
            rs232_tx_char(ASCII_TAB[(tx_char >> 4)]);
            rs232_tx_char(ASCII_TAB[(tx_char & 0xf)]);
            rs232_tx_char(0xd);
            
            rs232_tx_char('T'); //发送温度
            rs232_tx_char('M');
            rs232_tx_char('P');
            rs232_tx_char(':');
            _asm
            {
                mov a,%batt_temperature+1
                mov %tx_char,a
            }
            rs232_tx_char(ASCII_TAB[(tx_char >> 4)]);
            rs232_tx_char(ASCII_TAB[(tx_char & 0xf)]);
            _asm
            {
                mov a,%batt_temperature
                mov %tx_char,a
            }
            rs232_tx_char(ASCII_TAB[(tx_char >> 4)]);
            rs232_tx_char(ASCII_TAB[(tx_char & 0xf)]);
            rs232_tx_char(0xd);
            
}

/*========================================================
子程序名称:
子程序功能:
子程序描述:
========================================================*/
void rs232_tx_char(unsigned char txd_char)
{
    DISI();
    uart_tx_52us_0(); //start bit
    
    if ((txd_char & 0x1) == 0) //D0
    {
        uart_tx_52us_0();
    }
    else
    {
        uart_tx_52us_1();
    }
    
    if ((txd_char & 0x2) == 0) //D1
    {
        uart_tx_52us_0();
    }
    else
    {
        uart_tx_52us_1();
    }
    
    if ((txd_char & 0x4) == 0) //D2
    {
        uart_tx_52us_0();
    }
    else
    {
        uart_tx_52us_1();
    }
    
    if ((txd_char & 0x8) == 0) //D3
    {
        uart_tx_52us_0();
    }
    else
    {
        uart_tx_52us_1();
    }
    
    if ((txd_char & 0x10) == 0) //D4
    {
        uart_tx_52us_0();
    }
    else
    {
        uart_tx_52us_1();
    }
    
    if ((txd_char & 0x20) == 0) //D5
    {
        uart_tx_52us_0();
    }
    else
    {
        uart_tx_52us_1();
    }
    
    if ((txd_char & 0x40) == 0) //D6
    {
        uart_tx_52us_0();
    }
    else
    {
        uart_tx_52us_1();
    }
    
    if ((txd_char & 0x80) == 0) //D7
    {
        uart_tx_52us_0();
    }
    else
    {
        uart_tx_52us_1();
    }
    
    uart_tx_52us_1(); //stop bit
    
    ENI();
}

/*========================================================
子程序名称:
子程序功能:
子程序描述:
========================================================*/
void uart_tx_52us_0(void)
{
    unsigned char temp;
    _asm
    {
        bc 3,7
        bc 3,6
        bc 9,2 //rs232_txd_p
        mov a,@18
        mov %temp,a
uart_tx_52us_0_loop:
        djz %temp
        jmp uart_tx_52us_0_loop
    }
}

/*========================================================
子程序名称:
子程序功能:
子程序描述:
========================================================*/
void uart_tx_52us_1(void)
{
    unsigned char temp;
    _asm
    {
        bc 3,7
        bc 3,6
        bs 9,2 //rs232_txd_p
        mov a,@18
        mov %temp,a
uart_tx_52us_1_loop:
        djz %temp
        jmp uart_tx_52us_1_loop
    }
}
//========================================================
#endif

⌨️ 快捷键说明

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