单片机通用模拟串口C程序
扫描二维码
随时随地手机看文章
//---------------------------------------------------------------------- // uart.c // 通用模拟串口程序 // 资源需求:一个硬件计数器,两个i/o口 // 硬件计数器的计数时间设定为三倍波特率 // 定义的两个i/o口,用于发送和接收,分别用在receive()和transmit(char)中 // 设立了专门的接收缓冲区,用于存储接收数据 // 注意:必需根据波特率来设定定时器; // 每次通信开始必须调用初始化函数init_uart() //---------------------------------------------------------------------------------------------------------------- //----------------------------------管脚定义、库函数声明------------------------------------------------- #include <reg51.h> #include <stdio.h> //端口定义 sbit rxd3=p1^0; sbit txd3=p1^1; //-----------------------------------------------变量声明----------------------------------------------------- #define in_buf_size 10 //输入缓冲区长度定义 #define true 1 #define false 0 static unsigned char inbuf[in_buf_size]; //输入缓冲区 static unsigned char qin = 0; static unsigned char qout = 0; static char flag_rx_waiting_for_stop_bit; static char flag_rx_off; static char rx_mask; static char flag_rx_ready; static char flag_tx_ready; static char timer_rx_ctr; static char timer_tx_ctr; static char bits_left_in_rx; static char bits_left_in_tx; static char rx_num_of_bits; static char tx_num_of_bits; static char internal_rx_buffer; static char internal_tx_buffer; static char user_tx_buffer; //----------------------------------与硬件有关的函数声明------------------------------------------------ bit get_rx_pin_status(); //1.返回接收管脚返回的值(0或1) void set_tx_pin_high(void); //2. 发送管脚置高,输出1 void set_tx_pin_low(); //3.发送管脚置低,输出0 void timer_set(); //4. 设置定时器的值为波特率的三倍 void set_timer_interrupt(); //5. 使能定时器中断 void idle(); //6.等待端口输入时,执行,根据具体应用进行修改 //-----------------------------------声明与硬件无关的函数------------------------------------------- void flush_input_buffer( void ); // 清空接收缓存区 char kbhit( void ); // 判断数据是否正常接收 char get_char( void ); // 从接收缓存区读出一个数据 void turn_rx_on( void ); // 启动接收函数 void turn_rx_off( void ); // 结束接收函数 extern void put_char( char ); // 向发送端发送一个数据. void timer_isr(void); //中断处理函数 //------------------------------------------------------------------------------------------------------- // 函数名称:set_tx_pin_high // 功能说明: 置串口发送端口为高,与硬件有关 //-------------------------------------------------------------------------------------------------------- void set_tx_pin_high( void) { txd3=1; } //------------------------------------------------------------------------------------------------------- // 函数名称: set_tx_pin_low // 功能说明: 置串口发送端口为低,与硬件有关 //-------------------------------------------------------------------------------------------------------- void set_tx_pin_low( void) { txd3=0; } //------------------------------------------------------------------------------------------------------- // 函数名称:get_rx_pin_status // 功能说明: 返回接收端口的状态,高为1,低为0,与硬件有关 //--------------------------------------