单片机通用模拟串口C程序
发布时间:2008/8/28 0:00:00 访问次数:738
//----------------------------------------------------------------------
// 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,与硬件有关
//--------------------------------------
//----------------------------------------------------------------------
// 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,与硬件有关
//--------------------------------------
上一篇:嵌入式安全系统的发展趋势
上一篇:单片机应用领域
热门点击
- 单片机与RS232串口通信C51程序
- 一种基于单片机实现OLED显示的设计
- PIC单片机红外遥控编码与解码的问题
- 51单片机与VB串行通信的实现
- 基于MSP430F149的温度采集报警系统的
- 基于控制专用单片机的无刷直流电机控制器
- 单片机通信协议处理
- C8051F12X存储大量常量代码的编译技巧
- 单片机通用模拟串口C程序
- MCU的分类
推荐技术资料
- 硬盘式MP3播放器终级改
- 一次偶然的机会我结识了NE0 2511,那是一个远方的... [详细]