单片机串行口工作方式式()是10位UART,波特率可变的工作方式 A 0 B 1 C 2 D 3

跪求大工12秋《单片机原理及应用》在线作业一、二、三的答案_百度知道
跪求大工12秋《单片机原理及应用》在线作业一、二、三的答案
我有更好的答案
大工12秋《单片机原理及应用》在线作业1单选:DDDCD
CDDAB判断:AABAA
采纳率:100%
大工12秋《单片机原理及应用》在线作业二1.
要想测量INT0引脚上的一个正脉冲宽度,那么特殊功能寄存器TMOD的内容应为()。A. 09HB. 87HC. 00HD. 80H
正确答案: A
MCS-51单片机外部中断0开中断的指令是()。A. SETB ETOB. SETB EXOC. CLR ETOD. SETB ET1
正确答案: B
启动定时器1开始定时的指令是()。A. CLR TR0B. CLR TR1C. SETB TR0D. SETB TR1
正确答案: D
当外部中断0发出中断请求后,中断响应的条件是()。A. SETB ET0B. SETB EX0C. MOV IE,#81HD. MOV IE,#61H
正确答案: C
当CPU响应外部中断0 INT0的中断请求后,程序计数器PC的内容是()。A. 0003HB. 000BHC. 0013HD. 001BH
正确答案: A
MCS-51单片机定时器T1的溢出标志TF1,若计满数产生溢出时,如不用中断方式而用查询方式,则应()。A. 由硬件清零B. 由软件清零C. 由软件置位D. 可不处理
正确答案: B
要使MCS-51能够响应定时器T1中断、串行接口中断,它的中断允许寄存器IE的内容应是()。A. 98HB. 84HC. 42HD. 22H
正确答案: A
在中断服务程序中,至少应有一条()。A. 传送指令B. 转移指令C. 加法指令D. 中断返回指令
正确答案: D
当定时器T0发出中断请求后,中断响应的条件是()。A. SETB ET0B. SETB EX0C. MOV IE,#82HD. MOV IE,#61H
正确答案: C
得分:610.
MCS-51单片机定时器溢出标志是()。A. TR1和TR0B. IE1和IE0C. IT1和IT0D. TF1和TF0
正确答案: D
得分:6大工12秋《单片机原理及应用》在线作业二试卷总分:100
测试时间:--
试卷得分:100 单选题 判断题
二、判断题(共 10 道试题,共 40 分。)
得分:40V 1.
MCS-51单片机对最高优先权的中断响应是无条件的。A. 错误B. 正确正确答案:A
MCS-51单片机只有一个中断优先级。A. 错误B. 正确正确答案:A
MCS-51单片机的CPU开中断的指令是SETB EA。A. 错误B. 正确正确答案:B
定时器中断T0可以被外部中断0中断。A. 错误B. 正确正确答案:A
MCS-51定时器T0的溢出标志TF0,若计满数产生溢出时,其值为1。A. 错误B. 正确正确答案:B
MCS-51定时器/计数器0的入口地址是001BH。A. 错误B. 正确正确答案:A
特殊功能寄存器TCON和定时器/计数器的控制无关。A. 错误B. 正确正确答案:A
MCS-51单片机的5个中断源优先级相同。A. 错误B. 正确正确答案:A
MCS-51单片机TMOD中的GATE=1时,表示由两个信号控制定时器的启停。A. 错误B. 正确正确答案:B
得分:410.
MCS-51单片机的定时器T1有2种工作模式。A. 错误B. 正确正确答案:A
得分:4大工12秋《单片机原理及应用》在线作业三1.
MCS-51外扩ROM、RAM和I/O口时,它的数据总线是()。A. P0B. P1C. P2D. P3
正确答案: A
当使用快速外部设备时,最好使用的输入/输出方式是()。A. DMAB. 无条件传递C. 中断D. 条件传送
正确答案: A
MCS-51的串行口工作方式中最适合多机通信的是()。A. 方式0B. 方式1C. 方式2D. 方式3
正确答案: D
某种存储器芯片是8KB*4/片,那么它的地址线根线是()。A. 11根B. 12根C. 13根D. 14根
正确答案: C
下面哪一种传送方式适用于处理外部事件()。A. DMAB. 无条件传递C. 中断D. 条件传递
正确答案: C
MCS-51的并行I/O口读-改-写操作,是针对该口的()。A. 引脚B. 片选信号C. 地址线D. 内部锁存器
正确答案: D
80C51单片机串行口用工作方式0时,()。A. 数据从RDX串行输入,从TXD串行输出B. 数据从RDX串行输出,从TXD串行输入C. 数据从RDX串行输入或输出,同步信号从TXD输出D. 数据从TXD串行输入或输出,同步信号从RXD输出
正确答案: C
控制串行口工作方式的寄存器是()。A. TCONB. PCONC. SCOND. TMOD
正确答案: C
用MCS-51采用10位异步通信方式时应工作在()。A. 方式0B. 方式1C. 方式2D. 方式3
正确答案: B
得分:610.
MCS-51单片机串行数据缓冲器SBUF的主要作用是()。A. 存放运算中间结果B. 暂存数据和地址C. 存放待调试的程序D. 存放待发送或已接收到的数据
正确答案: D
得分:6大工12秋《单片机原理及应用》在线作业三试卷总分:100
测试时间:--
试卷得分:100 单选题 判断题
二、判断题(共 10 道试题,共 40 分。)
得分:40V 1.
MCS-51单片机使用的是独立编址方式,即I/O与外部数据存储器RAM是独立编址的。A. 错误B. 正确正确答案:A
在单片机应用系统中,外部设备与外部数据存储器传送数据时,应使用MOV指令。A. 错误B. 正确正确答案:A
为提高单片机对外设的工作效率,通常采用异步传送I/O数据的方式。A. 错误B. 正确正确答案:A
片内RAM与外部设备统一编址时,需要有专门的输入/输出指令。A. 错误B. 正确正确答案:A
8155芯片内具有256B的静态RAM,2个8位和1个6位的可编程并行I/O口,1个14位的定时器等常用部件及地址锁存器。A. 错误B. 正确正确答案:B
EPROM的地址线为11条时,能访问的存储空间有4KB。A. 错误B. 正确正确答案:A
MCS-51中,为实现P0口线的数据和低位地址复用,应使用地址锁存器。A. 错误B. 正确正确答案:B
8155H、8255A都可以与MCS-51单片机直接相连。A. 错误B. 正确正确答案:B
8279是用于键盘和显示器的专用接口芯片。A. 错误B. 正确正确答案:B
得分:410.
串行口工作方式1的波特率是可变的,可通过定时/计数器T1的溢出率设定。A. 错误B. 正确
为您推荐:
其他类似问题
您可能关注的内容
单片机原理及应用的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51单片机在片设备与中断(4)
> 51单片机在片设备与中断(4)
51单片机在片设备与中断(4)
填空1、在串行通信中,有数据传送方向为( 单工 )、( 半双工)和( 全双工)三种方式。本文引用地址:2、要串口为10位UART,工作方式应选为( 方式1)。3、用串口扩并口时,串行接口工作方式应选为方式( 0)。4、计算机的数据传送有两种方式,即( 并行数据传送)和( 串行数据传送)方式,其中具有远距离成本低特点的是( 串行数据传送)方式。5、串行通信按同步方式可分为( 异步通信 )和( 同步通信 )。6、异步串行数据通信的帧格式由( 起始 )位、( 数据 )位、( 奇偶校验 )位和( 停止)位组成。7、MCS-51有5个中断源,2个中断优先级,优先级由软件填写特殊功能寄存器(IP)加以选择。8、外中断请求标志位是( IE0)和( IE1)。9、( RETI)指令以及任何访问( IE)和( IP)寄存器的指令执行过后,CPU不能马上响应中断。10、8051单片机响应中断后,产生长调用指令LCALL,执行该指令的过程包括:首先把( PC )的内容压入堆栈,以进行断点保护,然后把长调用指令的16位地址送( PC),使程序执行转向( 程序存储器)中的中断地址区。选择1、串行通信的传送速率单位波特的含义是( B )A、 字符/秒B、 位/秒C、 帧/秒D、 帧/分2、帧格式为1个起始位、8个数据位和1个停止位的异步串行通信方式是( B )A、 方式0B、 方式1C、 方式2D、 方式33、通过串行口发送或接收数据时,在程序中应使用( A )A、 MOV指令B、 MOVX指令C、 MOVC指令D、 SWAP指令4、在下列所列特点中,不属于串行工作方式2的是( C )A、 11位帧格式B、 有第9数据位C、 使用一种固定的波特率D、 使用两种固定的波特率5、在中断服务程序中,至少应有一条( D )。A、 传送指令B、 转移指令C、 加法指令D、 中断返回指令6、要使MCS-51能够响应定时器T1中断,串行接口中断,它的中断允许寄存器IE的内容应是( A ) 。A、 98HB、 84HC、 42HD、 22H7、当CPU响应串行接口中断时,程序应转到( C ) 。A、 0003HB、 0013HC、 0023HD、 0033H8、若MCS-51中断源都编程为同级,当它们同时申请中断时,CPU首先响应( B ) 。A、 INT1B、 INT0C、 T1D、 T0判断1、串行口方式1的波特率是可变的,通过定时器/计数器T1的溢出设定。2、要进行多机通信,MCS-51串行接口应工作在方式1。3、MCS-51的串行接口是全双工的。4、CPU响应串行口中断后,必须在中断服务程序中,用软件清除相应的中断标志位,以撤消中断请求。5、8051单片机对最高优先权的中断响应是无条件的。6、中断初始化时,对中断控制器的状态设置,只可使用位操作指令,而不能使用字节操作指令。7、MCS&51单片机系统复位后,TCON和SCON中的各位中断请求标志均为0。
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一串口编程(UART0)之中断方式
---------------------------------------------------------
:tiger-johnWebSite
:blog.csdn.net/tigerjb
Update-Time : 2011年1月23日星期日
Tiger声明:本人鄙视直接复制本人文章而不加出处的个人或团体,但不排斥别人转载tiger-john的文章,只是请您注明出处并和本人联系或留言给我。3Q
---------------------------------------------------------
三. 中断方式的串口编程
1.用中断方式编写串口程序由那几部分组成
2.硬件上的支持
1&UART0 发送FIFO缓冲区
A. UART0含有1个16字节的发送FIFO缓冲区
B. U0THR是UART0发送FIFO的最高字节
C. UART的发送FIFO是一直使能的
2&UART0接收FIFO缓冲区
A. UART0含有一个16字节的接收FIFO缓冲区。
B. 软件设置接收FIFO缓冲区的触发字节。
3& 中断接口:UART0的中断接口包含中断使能寄存器(U0IER)和中断标识寄存器(U0IIR)。
l U0IIR:提供状态码用于指示一个挂起中断的中断源和优先级。
l U0IER可以控制UART0的4个中断源。
4& UART0有4个中断源:
A. RLS(接收线状态)中断:
(1) 优先级最高
(2) 它在以下条件发生时产生错误
l 帧错误(FE)
l 溢出错误(OE)
l 奇偶错误(PE)
l 间隔中断(BI)
? 可以通过查看U0LSR[4:1]中的值看到产生该中断的错误条件
? 读取U0LSR寄存器时清除该中断。
B. RDA(接收数据可用)中断:
(1)与CTI中断并列第二优先级。
(2)在以下情况触发中断:
l 当接收的有效数据到达接收FIFO设置寄存器(U0FCR)中设置的触发点时,RDA被激活。当接收FIFO中的有效数据少于触发点时,RDA复位。
l 中断过程:
1& 移位寄存器(U0RSR)从RxD引脚接收串行数据后,送入接收FIFO中
2& 当接收FIFO中的有效数据数量达到预定的触发点时,置位RDA中断。
3& 从U0RBR寄存器中读取FIFO中最早到达的数据,当FIFO中的有效数据小于触发点时,清零RDA中断。
C. CTI(字符超时指示)中断
(1) 优先级为2.
(2) 在以下情况发生中断:
l 当接收FIFO中的有效数据少于预定的触发点数量时,如果在一定时间内仍没有接收到新的数据,那将触发该中断。
(3) 上面的时间指的是:3.5~4.5个字节所需要的时间。
(4) 对接收FIFO的任何操作都会清零该中断标志。
(5) 中断过程:
l 移位寄存器(U0RSR)从RxD0引脚接收串行数据后,送入接收FIFO中。
l 当接收FIFO中的有效数据少于触发个数,但如果长时间没有数据到达,则触发CTI中断。
l 从U0RBR中读取接收FIFO中的数据,或者有新的数据送入接收FIFO,都将清零CTI中断。
? 3.5~4.5个字节的时间:指在串口当前的波特率下,发送3.5~4.5个字节所需要的时间。
? 当接收FIFO中存放多个数据,从U0RBR读取数据,但是没有读完所有数据,那么在经过3.5~4.5个字节的时间后触发CTI中断。
D. THRE(发送)中断
(1) 优先级为第三级优先级。
(2) 当FIFO为空并且在以下情况触发中断:
l 系统启动时,虽然发送FIFO为空,但不会产生THRE中断。
l 在上一次发生THRE中断后,向发送FIFO中写入1个字节数据,将在一个字节加上一个停止位后发生THRE中断
(because:如果发送移位寄存器为空,那么写入发送FIFO的数据将直接进入发送移位寄存器。此时发送FIFO仍然为空,如果立即产生THRE中断,就会影响紧接着写入发送FIFO的数据。
所以在发送完该一个字节以及一个停止位后,才产生THRE中断。
l 如果在发送FIFO中有过两个字节以上的数据,但是现在发送FIFO为空时,将立即触发THRE中断。
l 当THRE中断为当前有效的最高优先级中断时,往U0THR写数或者对U0IIR的读操作,将使THRE中断复位
我们来看看这些中断源与存储器之间的关系:
? 由上图可知:UART0有4个中断源:分别是RLS(线状态)中断,RDA(接收数据)中断,CTI(字符超时)中断,THRE(发送数据)中断。
? 4个中断源的优先级如下图所示:
3.串口中断接收初始化
1&串口中断接收初始化流程
l 设置I/O引脚连接到UART0
l 置位除数锁存位,配置UART0帧数据格式
l 根据波特率计算分频值
l 设置波特率
l 清除除数锁存位,并设置工作模式
l 使能FIFO,并设置触发点
l 允许RBR中断
注:我们可以发现与轮训方式相比,中断方式只是增加了使能FIFO,并设置中断触发点和允许RBR中断两步。
2&中断串口初始化需要配置的寄存器
(与轮循方式配置方法相同的寄存器在此处不在涉及)
l U0FCR(FIFO控制寄存器):U0FCR控制UART0 Rx和Tx FIFO的操作。
l U0IER(中断使能寄存器):U0IER用于使能4个UART0中断源。
3&具体寄存器的配置
A作用:控制UART0 Rx和Tx的操作。
B长度:8位寄存器。
C:每一位的含义:
l 第0位:表示FIFO使能
置1:表示使能对UART0 Rx和Tx 的FIFO以及U0FCR[7:1]的访问。
置0:表示不能使用Rx和Tx的FIFO以及步能对U0FCR[7:1]的访问。
注:该位的任何变化都将使UART0 FIFO清空。
l 第1位:表示Rx FIFO的复位。
置1:会清零UART0 RxFIFO中的所有字节并复位指针逻辑。该位自动清零。
l 第2位:表示Tx FIFO的复位。
置1:会清零UART0 TxFIFO中的所有字节并复位指针逻辑。改位自动清零。
l 第[5:3]位:保留位,用户不能对其进行操作。从保留位读出的值未被定义。
l 第[7:6]位:表示Rx 触发选择
00:触发点为0(默认为1字节)
01:触发点为1(默认为4字节)
10:触发点为2(默认为8字节)
11: 触发点为3(默认为14字节)
注:这两个位决定在激活中断之前,接收UART0 FIFO必须写入个字符。
(2) U0IER(中断使能寄存器)
A 作用:U0IER用于使能4个UART0中断源
B 长度:8位寄存器
C每一位的含义:
l 第0位:表示RBR中断使能
置1:使能RDA中断
置0:禁止RDA中断
注:U0IEER 第零位使能UART0接收数据可用中断。它还控制(CTI)字符接收超时中断。
l 第1位:表示THRE中断使能
置1:使能THRE中断
置0:禁止THRE中断
l 第2位:表示Rx线状态中断使能
置1:使能Rx线状态中断
置0:禁止RX线状态中断
注:U0IER第二位使能UART0 Rx线状态中断。该中断的状态可从U0LSR[4:1]读出
l 第[7:3]位:是保留位
注:用户不能向其写入1.
4&串口初始化程序:
***********************************************************
* 作者: tiger-john
* 时间: 2011年1月18日
* 名称: UART0_Init
* 功能: UART0初始化 通讯波特率115200,8位数据位, 1位停止位,无奇偶校验
接收FIFO触发点为8字节,使能RDR(接收数据)中断
* 入口参数: bps
串口波特率
* 出口参数: 无
****************************************************************************/
UART0_Init(uint32 bps)
PINSEL0 = (PINSEL0 & ~(0xf) | 0x05) ; //设置UART0的引脚
U0LCR = 0x83; //置为除数锁存位,进行配置
Fdiv = (Fpclk&&4)/
U0DLM = Fdiv&&8;
U0DLL = Fdiv%256;
U0LCR = 0x03; //清除除数锁存位,并设置工作模式
U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节
U0IER = 0x01; // 允许RBR中断,即接收中断
5. 中断初始化
先来看一下UART0和VIC之间的关系:
1&中断初始化流程:
l 选择中断为向量中断或快速中断
l 分配中断通道
l 设置UART0向量地址
l 使能UART0中断
2&关于ARM中断编程方法和寄存器的使用在此不做涉及(如果想知道的话,可以看这篇文章
3&中断初始化程序:
/**********************************************************
* 作者: tiger-john
* 时间: 2011年1月18日
Interrupt_Init
初始化串口中断,给串口中断选择为向量中断, 分配向量通道号1给串口
* 入口参数:
* 出口参数: 无
**********************************************************/
void Interrupt_Init (void)
VICIntSelect = 0x; // 设置所有通道为IRQ中断
VICVectCntl1 = (0x20 | 6); // UART0中断通道分配到IRQ slot 1
VICVectAddr1 = (uint32)UART0_E // 设置UART0向量地址
VICIntEnable = 1 && 6; //使能串口中断
6. 用中断编写接收函数
1& 中断服务函数流程
l 清除串口中断标识寄存器(U0IIR)
l 清除中断标志
l 读取接收FIFO中的数据
2& 中断函数服务函数中需要配置的寄存器
(1) U0IIR中断标识寄存器。
l 第0位:表示中断挂起
置1:表示没有挂起的中断
置0:表示至少有一个中断挂起
l 第[3:1]位:中断标识,这三位表示了对应UART0 Rx FIFO的中断。
001:表示发送中断(THRE)
010: 表示接收数据可用中断(RDA)
011: 表示接收线状态中断(RLS)
110: 表示字符超时中断(CTI)
l 第[7:4]:是保留位
1. U0IIR提供的状态码可用于指示一个挂起中断的中断源和优先级。
2. 在访问U0IIR过程中,中断被冻结
3. 如果在访问U0IIR时,产生了中断,该中断被记录。在下次访问U0IIR时可以读出,避免中断的丢失。
3& 中断服务函数程序:
/****************************************************** * * 名 称:IRQ_UART0()
* 功 能:串口UART0中断接收8个字节的数据
* 入口参数:无
* 出口参数:无
**********************************************************/
uint8 rcv_buf[8]; // UART0数据接收缓冲区
void __irq IRQ_UART0(void)
{ uint8 i;
data = U0IIR; //清除中断表示寄存器标志
VICVectAddr = 0; //清除中断
for(i=0; i&8; i++)
rcv_buf[i] = U0RBR; // 读取FIFO的数据
7. 看一个总程序:
/****************************************Copyright (c)**************************************************
西安邮电学院
graduate school
XNMS实验室
Author:冀博
http://blog.csdn.net/tigerjb
**--------------File Info-------------------------------------------------------------------------------
** File name:
UART0_while
** Last modified Date:
** Last Version:
** Descriptions:
通过上位机给串口发送8字节数据,ARM2200接收到串口数据后,把数据又发送回上位机
**------------------------------------------------------------------------------------------------------*/
/**********************************************************************************
** Modified by:
TIGER0-JOHN
** Modified date:
** Version:
** Descriptions:
在用中断的时候在Startup.S文件中的InitStack子程序中,修改设置
系统模式堆栈处的代码为"MSR CPSR_c,#0x5f"
测试成功 ,在上面上发送16进制数时,每个之间用空格隔开
********************************************************************************/
#include "config.h"
uint8 recver_buffer[8];
uint8 rcv_
/**********************************************************
UART0_Init()
UART0初始化(通讯波特率位数据位,
1位停止位,无奇偶校验)
* 入口参数: bps
串口波特率
* 出口参数: 无
**********************************************************/
UART0_Init(uint32 bps)
PINSEL0 = 0x;
//设置串口引脚
U0LCR = 0x83;
//置为除数锁存位,进行配置
Fdiv = (Fpclk && 4) /
// 设置波特率
U0DLM = Fdiv && 8;
U0DLL = Fdiv & 0
U0LCR = 0x03;
//清除除数锁存位,并设置工作模式模式
U0FCR = 0x81;
// 使能FIFO,并设置触发点为8字节
U0IER = 0x01;
// 允许RBR中断,即接收中断
/*********************************************************
能: 串口UART0中断接收8个字节的数据
* 入口参数: 无
* 出口参数: 无
**********************************************************/
__irq IRQ_UART0(void)
if( 0x04 == (U0IIR&0x0F) )
rcv_new = 1; // 设置接收到新的数据标志,并清除中断标志位
for(i=0; i&8; i++)
recver_buffer[i] = U0RBR;
// 读取FIFO的数据
VICVectAddr = 0;
//清除中断
/**********************************************************
Interrupt_Init
初始化串口中断,给串口中断选择为向量中断,
分配向量通道号1给串口
* 入口参数:
* 出口参数:
**********************************************************/
void Interrupt_Init (void)
VICIntSelect = 0x;
// 设置所有通道为IRQ中断
VICVectCntl0 = 0x26;
// UART0中断通道分配到IRQ slot 0,即优先级最高
VICVectAddr0 = (int)IRQ_UART0;
// 设置UART0向量地址
VICIntEnable = 0x;
// 使能UART0中断
/**********************************************************
UART0_SendByte
向串口发送字节数据,并等待发送完毕。
* 入口参数:
要发送的数据
* 出口参数:
**********************************************************/
UART0_SendByte(uint8 data)
while(0 == (U0LSR & 0x40));
/**********************************************************
UART0_SendBuf()
通过串口发送一帧数据
* 入口参数: *buffer
存放一帧数据
* 出口参数: 无
**********************************************************/
void UART0_SendBuf(uint8 *buffer)
for(pbuffer = buffer,i = 0;i & 8; i++)
UART0_SendByte(*(pbuffer++));
/**********************************************************
main()函数
上位机接收的数据开头两个字符为0x10,0x11,
则原样输出,否次输出0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27
* 入口参数: *buffer
存放一帧数据
* 出口参数: 无
**********************************************************/
int main (void)
uint8 send_buffer[8] ={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27};
//定义发送帧缓冲区
UART0_Init(115200);
Interrupt_Init();
if(1 == rcv_new)
// 是否已经接收到8 Bytes的数据
rcv_new = 0;
// 清除标志
if(0x10 ==recver_buffer[0] && 0x11 == recver_buffer[1])
UART0_SendBuf(send_buffer);
UART0_SendBuf(recver_buffer);
/*********************************************************************************************************
End Of File
********************************************************************************************************/
四.用中断编写发送函数
1.中断初始化
同上和用中断接收函数时的中断初始化是一样的
2.串口初始化
1&串口初始化流程:
l 设置I/O引脚连接到UART0
l 置位除数锁存位,配置UART0帧格式
l 根据波特率计算分频值
l 设置波特率
l 清除除数锁存位,并设置工作模式
l 使能FIFO,并使TxFIFO复位
l 使能THRE中断
2&串口初始化函数:
/**********************************************************
* 名称: UART0_Init
* 功能: UART0初始化 通讯波特率115200,8位数据位,1位停止位,无奇偶校验
* 使能TxFIFO,和THRE中断
* 入口参数: bps
串口波特率
* 出口参数: 无
**********************************************************/
UART0_Init(uint32 bps)
PINSEL0 = (PINSEL0 & ~(0xf) | 0x05) ; //设置UART0的引脚
U0LCR = 0x83; //置位除数锁存位,配置UART0帧格式
Fdiv = (Fpclk&&4)/ //根据波特率计算分频值
U0DLM = Fdiv&&8; //设置波特率
U0DLL = Fdiv%256;
U0LCR = 0x03; // 清除除数锁存位,并设置工作模式
U0FCR = 0x05; // 使能TxFIFO,并使TxFIFO复位
U0IER = 0x02; // 使能THRE中断
3中断服务函数:
1&中断服务函数流程:
l 清除串口中断标识寄存器
l 清除中断控制标识寄存器
2&中断发送服务函数程序:
/**********************************************************
* 名 称: UART0_Exception
* 功 能: 串口发送中断
* 入口参数: 无
* 出口参数: data 发送的数据
**********************************************************/
void __irq IRQ_UART0(void)
data = U0IIR;
//清除中断表示寄存器标志
VICVectAddr = 0;
//清除中断
4. 用串口中断发送函数的总程序:
/****************************************Copyright (c)**************************************************
西安邮电学院
graduate school
XNMS实验室
Author:冀博
http://blog.csdn.net/tigerjb
**--------------File Info-------------------------------------------------------------------------------
** File name:
UART0_while
** Last modified Date:
** Last Version:
** Descriptions:
通过上位机给串口发送8字节数据,ARM2200接收到串口数据后,用中断方式把数据又发送回上位机
**------------------------------------------------------------------------------------------------------*/
/**********************************************************************************
** Modified by:
TIGER0-JOHN
** Modified date:
** Version:
** Descriptions:
在用中断的时候在Startup.S文件中的InitStack子程序中,修改设置
系统模式堆栈处的代码为"MSR CPSR_c,#0x5f"
测试成功 ,在上面上发送16进制数时,每个之间用空格隔开
********************************************************************************/
#include "config.h"
uint8 recver_buffer[8];
uint8 rcv_
/****************************************************************************
UART0_Init
UART0初始化 通讯波特率位数据位,1位停止位,无奇偶校验
使能TxFIFO,和THRE中断
* 入口参数:
串口波特率
* 出口参数:
****************************************************************************/
UART0_Init(uint32 bps)
PINSEL0 = (PINSEL0 & ~(0xf) | 0x05) ;
//设置UART0的引脚
U0LCR = 0x83;
//置位除数锁存位,配置UART0帧格式
Fdiv = (Fpclk&&4)/
//根据波特率计算分频值
U0DLM = Fdiv&&8;
//设置波特率
U0DLL = Fdiv%256;
U0LCR = 0x03;
清除除数锁存位,并设置工作模式
U0FCR = 0x05;
// 使能TxFIFO,并使TxFIFO复位
U0IER = 0x02;
// 使能THRE中断
/****************************************************************************
UART0_Exception
串口发送中断
* 入口参数:
* 出口参数:
发送的数据
****************************************************************************/
__irq IRQ_UART0(void)
data = U0IIR;
//清除中断表示寄存器标志
VICVectAddr = 0;
//清除中断
/**********************************************************
Interrupt_Init
初始化串口中断,给串口中断选择为向量中断,
分配向量通道号1给串口
* 入口参数:
* 出口参数:
**********************************************************/
void Interrupt_Init (void)
VICIntSelect = 0x;
// 设置所有通道为IRQ中断
VICVectCntl0 = 0x26;
// UART0中断通道分配到IRQ slot 0,即优先级最高
VICVectAddr0 = (int)IRQ_UART0;
// 设置UART0向量地址
VICIntEnable = 0x;
// 使能UART0中断
/**********************************************************
UART0_RcvByte
用查询方式接收一字节的数据
* 入口参数:
* 出口参数:
要接收的数据
**********************************************************/
UART0_RcvByte(void)
uint8 rcv_
while((U0LSR&0X01)==0);
//等待数据到达
rcv_data = U0RBR;
//从U0RBR中读出接收到的数据
//返回接收到的数据
/**********************************************************
UART0_RecBuf()
接收串口发送过来的帧数据,
* 入口参数: *buffer
存放一帧数据
* 出口参数: 无
**********************************************************/
void UART0_RecBuf (uint8 *buffer)
for(pbuffer = buffer, i = 0;i & 8; i++)
*(pbuffer++) = UART0_RcvByte();
/**********************************************************
main()函数
上位机接收的数据开头两个字符为0x10,0x11,
则原样输出,否次输出0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27
* 入口参数: *buffer
存放一帧数据
* 出口参数: 无
**********************************************************/
int main (void)
uint8 send_buffer[8] ={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27};
//定义发送帧缓冲区
UART0_Init(115200);
Interrupt_Init();
UART0_RecBuf(recver_buffer);
//接收8字节数据
if(0x10 ==recver_buffer[0] && 0x11 == recver_buffer[1])
for(i = 0;i & 8 ;i++)
U0THR = send_buffer[i];
//用中断发送每次8字节
for(i = 0;i & 8;i++)
//用中断发送每次8字节
U0THR = recver_buffer[i];
/*********************************************************************************************************
End Of File
********************************************************************************************************/
浏览: 926569 次
来自: 上海
怎么去掉小图标
多谢,eclipse问题解决了
lz,这是真的么。挺有意思啊,写的
无语,走就走,还留这么多废话,
之前Eclipse代码提示的时候慢的要死,一点就死机了,只能重 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 波特率的单位是什么 的文章

 

随机推荐