使用串口UART0接收上位机发送的数据

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(2==set.stopb) bak |= 0x04; //判断是否为2位停止位
if(0!=set.parity) {set.parity = set.parity-1; bak |= 0x08;}
bak |= set.parity<<4;//设置奇偶校验
U0LCR = bak;
return(1);
uint8 parity;//奇偶校验位,0为无校验,1奇数校验,2为偶数校验
} UARTMODE;
uint8 rcv_buf;// UART0数据接收缓冲区
volatile uint8 rcv_new;//接收新数据标志
/****************************************************************************
*入口参数:baud波特率
* set模式设置(UARTMODE数据结构)
*出口参数:返回值为1时表示初化成功,为0表除参数出错
****************************************************************************/
uint8 UART0_Init(uint32 baud, UARTMODE set)
#define KEY2 1<<19 //P0.19叫接Key2
#define LED1 1<<22//P1.22脚控制核心板上的LED1
/*定义串口模式设置数据结构*/
typedef struct UartMode
{ uint8 datab; //字长度,5/6/7/8
uint8 stopb; //停止位,1/2
U0IER = 0x01; //允许RBR中断,即接收中断
/*设置中断允许*/
VICIntSelect = 0x00000000; //设置所有通道为IRQ中断
VICVectCntl0 = 0x26; // UART0中断通道分配到IRQ slot 0,即优先级最高
VICVectAddr0 = (int)IRQ_UART0; //设置UART0向量地址
/****************************************************************************
*文件名:main.C
*功能:使用串口UART0接收上位机发送的数据,并将数据原封不动地发送回上位机。
*说明:通讯波特率115200,8位数据位,1位停止位,无奇偶校验。
if( set.parity>4 ) return(0);
/*设置串口波特率*/
U0LCR = 0x80; // DLAB位置1
bak = (Fpclk>>4)/baud;
U0DLM = bak>>8;
U0DLL = bak&0xff;
/*设置串口模式*/
bak = set.datab-5; //设置字长度
CursorRst();//光标复位
for(i=0;i<50;i++)
{
disp[i]=0;
}
}
if((IO0PIN & (KEY2)) == 0)
{
sprintf(disp, "所测电压:%d mv\n\r", ReadADC());//将要输出到LCD显示的内容输出到缓存里
for(i=0;i<20;i++)
** End Of File
********************************************************************************************************/
****************************************************************************/
#include "config.h"
#include "stdio.h"
#define BEEP 1<<7//P0.7脚控制蜂鸣器
#define KEY1 1<<18 //P0.18叫接Key1
{
SendByte(disp[i]); //将接收到的数据发送回主机
if(ReadADC()>2000)
{ IO0CLR = BEEP;
Delay(1);
IO0SET = BEEP;
Delay(1);
if((IO1SET & LED1)==0)
{
IO1SET = LED1;
}
else
{
IO1CLR = LED1;
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
}
}
}
for(i=0;i<50;i++)
{
disp[i]=0;
}
}
}
return(0);
}
/*********************************************************************************************************
int main(void)
{
int i;
UARTMODE uart0_set;
chardisp[50] ;
PINSEL0 = 0;
IO0DIR = BEEP; //BEEP脚设置为输出,KEY1设置为输入。
IO0SET = BEEP; //BEEP=1,关闭蜂鸣器
PINSEL2 &=(~(1<<3));//使能P1.16~P1.25为GPIO
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
Βιβλιοθήκη Baidu** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:main.c
** Last modified Date: 2004-09-16
** Last Version:1.0
** Descriptions:The main() function example template
**
**------------------------------------------------------------------------------------------------------
{
U0THR = data;//发送数据
while( (U0LSR&0x20)==0 );//等待数据发送
}
/****************************************************************************
*名称:UART0_Init()
*功能:初始化串口0。设置其工作模式及波特率。
*名称:IRQ_UART0()
*功能:串口UART0接收中断。
*入口参数:无
*出口参数:无
****************************************************************************/
void __irq IRQ_UART0(void)
{
if( 0x04==(U0IIR&0x0F) )
*名称:SendByte()
*功能:向串口UART0发送字节数据。
*入口参数:data要发送的数据
*出口参数:无
****************************************************************************/
void SendByte(uint8 data)
uart0_set.datab = 8; // 8位数据位
uart0_set.stopb = 1; // 1位停止位
uart0_set.parity = 0; //无奇偶校验
UART0_Init(115200, uart0_set); //初始化串口模式
U0FCR = 0x00; //禁止接收FIFO
{
rcv_new = 1; //设置接收到新的数据标志
}
rcv_buf= U0RBR; //读取FIFO的数据,并清除中断标志
VICVectAddr = 0x00;//中断处理结束
}
/****************************************************************************
VICIntEnable = 0x00000040; //使能UART0中断
while(1) //等待中断
{
if((IO0PIN & (KEY1)) == 0)
{
sprintf(disp, "所测电压:%d mv", ReadADC());//将要输出到LCD显示的内容输出到缓存里
LcdPuts(disp);//输出disp缓冲区里的内容到液晶
** Created by:Chenmingji
** Created date:2004-09-16
** Version:1.0
** Descriptions:The original version
**
**------------------------------------------------------------------------------------------------------
{ uint32 bak;
/*参数过滤*/
if( (0==baud)||(baud>115200) ) return(0);
if( (set.datab<5)||(set.datab>8) ) return(0);
if( (0==set.stopb)||(set.stopb>2) ) return(0);
IO1DIR = LED1;//LED1设置为输出
IO1SET = LED1;//熄灭LED1
PINSEL0 = 0x00000005; //设置I/O连接到UART0
PINSEL1 = 0x00000000;
ADC_Init();//初始化ADC接口
LcdInit();// LCD初始化
rcv_new = 0;
}
/****************************************************************************
*名称:main()
*功能:初始化串口,并等待接收到串口数据。
*说明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。
****************************************************************************/
相关文档
最新文档