由于使用检测方式仅适合于数据量少的设备中使用,当需要发送或者接收大量数据时应该采用串口中断接收或发送的方式。
/*============================================================
LPC21XX 串口使用接收发送中断
==============================================================
本例程的CCLK=60M.
晶振采用12M
倍频系数为:5
分频系数为:2
以上设置在Startup.s中设置
*/
#include
#include "Config.H"
#define UART_BAUD(baud) (unsigned int)(Fpclk/(baud * 16))
uint8 buffer[100];
uint8 SendLen;//发送数据长度
uint8 SendCount;//数据发送计数
uint8 SendData[256];
void Init_Uart0(unsigned int Baud)
{
/* initialize the serial interface */
PINSEL0 = 0x00000005; /* Enable RxD0 and TxD0 */
U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
U0DLM=(unsigned char)(Baud>>8);
U0DLL = (unsigned char)Baud;
U0LCR = 0x03; /* DLAB = 0 */
}
void delay (unsigned int i)
{ /* Delay function */
unsigned int n;
while(i>1)
{
for(n=65535;n>1;n--);
i--;
}
}
//发送普通二进制数据
void Sent_Byte(uint8 *da,uint8 len)
{
uint8 i;
for(i=0;i
关键字:LPC21XX 串口 接收 发送中断 MDK
引用地址:LPC21XX 串口的接收和发送中断(MDK)
SendData[i]=da[i];
SendLen=len;
U0THR = SendData[0];
SendCount=1;
}
// 发送字符
void Sent_Str(unsigned char const *str)
{
uint8 i=0;
while(1)
{
SendData[i]=*str;
if( *str == '/0' ) break;
str++;
i++;
}
SendLen=i;
U0THR = SendData[0];
SendCount=1;
}
//串口中断
void __irq uart_int()
{
uint8 i;
if((U0IIR&0x0f)==0x02) //发送中断
{
if(SendCount!=SendLen)
{
U0THR = SendData[SendCount];
SendCount++;
}
}
// 接收中断
else if(((U0IIR & 0x0F) == 0x0C)||((U0IIR & 0x0F) == 0x04))
{ // 如果中断是由FIFO数据达到触发点引起的
for (i=0; i<14; i++)
{
buffer[i] = U0RBR;
}
Sent_Byte(buffer,8);
}
/*
else if ((U0IIR & 0x0F) == 0x0C)
{ // 如果中断是由FIFO超时引起的
buffer[0] = U0RBR;
} */
VICVectAddr = 0; // 清中断标志,不是外部中断不必复位EXTINT
}
int main(void)
{
Init_Uart0(UART_BAUD(115200));
U0FCR = 0xc1; // 开启UART FIFO模式 1个字符触发0x01,4-0x41,8-0x81,14-0xc1
U0IER = 0x03; // 使能RBR中断,禁止THRE Rx线状态中断(DLAB=0时)
VICIntSelect = 0; // 选择所有中断为IRQ中断
VICVectCntl0 = 0x20 | 0x06; // slot0 对应中断源为UART
VICVectAddr0 = (uint32)uart_int; // slot0 中断服务程序
VICIntEnable = 1 << 0x06; // 使能UART中断源
Sent_Str("http://blog.csdn.net/cy757//n") ;
for(;;)
{
delay(200);
}
}
上一篇:Stm32串口发送字节数据
下一篇:LPC17XX 串口接收发送中断(含RS485)最全面驱动程序
推荐阅读最新更新时间:2024-03-16 14:57
AVR学习笔记--红外遥控接收器使用
目前大多使用的是一体化红外接收头,它将红外接收二极管、放大、解调、整形等电路做在一起,只有三个引脚.分别是+5V电源、地、信号输出。所以只需要关心接收头的输出编码格式。 指令格式:前导码 + 地址码 + 地址码反码 + 数据 + 数据码反码 指令编码:脉宽调制编码 识别算法:每两次信号的下降沿表示1位数据,根据两次下降沿之间的间隔时间,就可以判断出是前导码,还是数据1或数据0。 A、前导码: 9ms B、数据 1 :2.25ms C、数据 0 :1.12ms 注意: 虽然0和1的占用时间长度不同,但因为同时其反码的存在,所以整条指令的总长度是
[单片机]
STC15F104W 使用 315/433 MHz 超再生模块发送/接收数据
一、原理图 实验所用到的 315/433 MHz 超再生模块 发送端原理图 接收端原理图 二、发送端代码 使用 NEC 协议发送数据 #include reg51.h #include intrins.h #define FOSC 6000000L //IRC频率 sfr P3M1 = 0xB1; sfr P3M0 = 0xB2; sbit SEND = P3 ^ 4; //数据发送引脚 sbit btn = P3 ^ 2; //发送按键 #ifndef uchar #define uchar unsigned char #endif #ifndef uint #def
[单片机]
STM32串口环形缓冲区
1:概述 1.1:本篇实现串口驱动,实现printf函数的重定向,实现串口的中断接受和发送,效仿modbus协议中的3.5T超时机制,判断是否接受完毕; 1.2:如果串口仅仅是实现一个控制台,打印一些debug数据,使用printf函数(串口发送数据忙等待),如果是需要用串口进行外设设备的控制,比如串口GPRS模块,需使用串口中断进行控制,因为受限于串口的传输速率,如果使用忙等待发送数据,会阻塞主程序中的其它任务; 1.3:使用sysclk作为超时定时器,sysclk的中断优先级需高于串口中断; 1.4:除过使用3.5T超时时间判断接受数据是否完成外,还可使用ASCLL码的形式,利用字符操作库函数,自定义串口通信协
[单片机]
关于串口的时序
1、波特率,其值表示串口通信的时钟频率,比如,4800,表示1秒有4800个脉冲,即每秒发送4800位数据。 2、数据流结构:起始位+数据位+校验位+停止位。 其中: 起始位,为一位逻辑0; 数据位,可设为5-8位,由低位开始逐位发送; 奇偶校验位,为一位,可以省略; 停止位,可以选择1,1.5或2位,为逻辑1; 空闲时间为逻辑1。 3、奇偶校验 奇偶校验分为偶校验和奇校验。偶校验时,当数据位 1 的个数为奇数,校验位设为1,当数据位 1 的个数为偶数时,校验位设为0,这样为使数据位加上校验位所有的 1 的个数为偶数。而奇校验,设定校验位,使得数据位加上校验位 1 的总数
[单片机]
Proteus C51仿真学习板5——串口中断
古代传递信息的方式有烽火台、飞鸽传书、800里加急……甚至小时候还玩过“传声筒” 他们都有自己的传递媒介:狼烟、鸽子、马儿、绳子。那么在单片机里面通信用一个IO是否可以呢? 那肯定是可以的。如果发送1bit数据是我发1,你收1或我发0,你收0;如果是发送8bit数据则是10101010,发送端一个个发送,接收端一个个接收。 还是传声筒举例: 男孩:喂喂,我是小明,你在不,Over; 女孩:嗯嗯,我在的,有什么事吗?Over。 从对话中可以很好得到: “喂喂”是起始,“我是小明”是告诉对方我是谁,“你在不”是数据,“Over”是结束; “嗯嗯”是起始,“我在的”是告诉对方我是谁,“我在的,有什么事吗”是数据,“Over
[单片机]
stm32串口点灯
串口程序: hal.h #ifndef HAL_H #define HAL_H //输出宏定义 //清零 #define LED1_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_8) //置一 #define LED1_ON GPIO_SetBits(GPIOA, GPIO_Pin_8) #define LED2_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_7) #define LED2_ON GPIO_SetBits(GPIOA, GPIO_Pin_7) #define LED3_OFF GPIO_ResetBits(GPIOC, GPIO_Pin_7) #defin
[单片机]
基于计算机串口的红外虚拟逻辑分析仪
引言 红外通信技术是一种点对点的数据传输协议,是传统设备之间连接线缆的替代技术,是目前国际上普通采用的一种近程无线传输技术,常用于智能小区控制系统和电话教学交互式远程控制系统中,但是目前的家电(如空调、录像机、VCD机等)有各种不同的品牌和型号,其红外遥控编码及发送格式不尽相同。为了能够用一台通用控制器对多种不同型号的家电进行控制,本文利用功能强大的单片机和编程软件VB设计了一种基于计算机串口的通用型智能红外逻辑分析仪,它可对各种电器的红外遥控器所发射的控制信号进行识别、存贮和再现。还可通过红外硬件接口识别出红外信号并送入单片机处理,然后利用VB开发的虚拟软件在电脑屏幕上实时显示采集到的红外信号波形,便于设计人员对各种调制方式的红外
[测试测量]
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
11月23日历史上的今天
厂商技术中心