标签:清除 interrupt creat version 寄存器 char *** data 时钟
/****************************************Copyright (c)****************************************************
**
**
**
**--------------File Info---------------------------------------------------------------------------------
** File name:
** Last modified Date:
** Last Version:
** Descriptions:
**--------------------------------------------------------------------------------------------------------
** Created by: FiYu
** Created date: 2015-7-8
** Version: 1.0
** Descriptions: uart(串口2)
**--------------------------------------------------------------------------------------------------------
** Modified by: FiYu
** Modified date:
** Version:
** Descriptions:
** Rechecked by:
**********************************************************************************************************/
#include "uart.h"
#define BAUD 9600 //波特率
#define TM (65536 - (MAIN_Fosc/4/BAUD))
#define UART_RX_MAX 20
bit busy;
static volatile uint8_t uart_rx_cnt =0;
static uint8_t xdata uart_rx[UART_RX_MAX];
/**********************************************************************************
* 描 述 : UART1中断服务函数
**********************************************************************************/
void Uart1() interrupt 4 using 1
{
ES = 0;
if (RI)
{
RI = 0; //清除RI位
if (uart_rx_cnt < UART_RX_MAX)
{
uart_rx[uart_rx_cnt] = SBUF;
uart_rx_cnt++;
}
else uart_rx_cnt = 0;
}
if (TI)
{
TI = 0; //清除TI位
}
ES = 1;
}
/***************************************************************************
* 描 述 : 串口1初始化函数,波特率9600bps
* 入 参 : 无
* 返回值 : 无
**************************************************************************/
void Uart1_Init(void)
{
SCON = 0x50; //8位数据,可变波特率
AUXR1= AUXR1 & 0x3F;
AUXR |= 0x40; //定时器1时钟1为FOSC,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD = 0x20; //定时器1为模式2(8位自动重载)
TL1 = 0xDC; //设置波特率重装值
TH1 = 0xDC;
ET1 = 0; //禁止定时器1中断
TR1 = 1; //定时器1开始工作
ES = 1; //使能串口中断
}
/*----------------------------
通过串口1发送串口数据
----------------------------*/
void U1SendData(uint8_t ch)
{
SBUF = ch; //写数据到UART数据寄存器
while(TI == 0);
TI = 0;
}
/*----------------------------
通过串口1发送字符串
----------------------------*/
/*
void U1SendString(char *s)
{
while (*s) //检测字符串结束标志
{
U1SendData(*s++); //发送当前字符
}
}
uint8_t uart_chars_available(void)
{
return uart_rx_cnt;
}
*/
/***************************************************************************
* 描 述 : 读取UART1接收缓存区的数据
* 入 参 : 数据存放地址
* 返回值 : 读取的数据长度
**************************************************************************/
uint8_t uart_getdat(uint8_t *buf)
{
uint8_t i = 0;
EA = 0;
if(uart_rx_cnt>UART_RX_MAX) return 0;
for(i=0;i<uart_rx_cnt;i++)*(buf+i) = uart_rx[i];
uart_rx_cnt = 0;
EA = 1;
return i;
}
/*********************************END FILE********************************************/
标签:清除 interrupt creat version 寄存器 char *** data 时钟
原文地址:http://www.cnblogs.com/meilonglove/p/7082210.html