当前位置:文档之家› 软件UART示例

软件UART示例

软件UART示例
软件UART示例

CYGNAL 应用笔记

AN015 软件UART示例

相关器件

本应用笔记适用于下列器件

C8051F000C8051F001C8051F002C8051F005C8051F006C8051F010C8051F011 C8051F012C8051F015C8051F016C8051F017C8051F220C8051F221C8051F226 C8051F230C8051F231C8051F236

引言

本应用笔记讨论基于C8051Fxxx系列器件的软件UART实现方法本文给出两个完整的例子

一个用PCA为波特率发生器的C语言程序和一个用定时器0为波特率发生器的汇编语言程序关键特性

这两个软件设计示例在节省硬件资源和CPU带宽的前提下几乎完全模拟硬件UART的功能下面是两个例子中都可以找到的关键特性

一个与硬件UART相似的接口有用户级发送和接收中断

中断或查询方式访问支持

全双工通信使用18.432MHz时钟源时最大波特率可达57.6 kbps

基于状态的中断驱动实现方案需要的CPU开销最小

最少的硬件资源占用

- C语言示例程序使用两个PCA模块

- 汇编语言示例程序使用定时器0工作于方式3

实现选择

在实现一个软件UART SW UART时最重要的是在硬件占用和速度/效率之间权衡使用较多硬件的设计可能消耗较小的CPU带宽并允许较高的位速率这种权衡将在下面讨论

波特率源

在传输每一位时都必须产生一个中断在全双工115.2 kbps的速率下每4.3微秒产生一个中断产生这些中断波特率源的方法不同则实现时的CPU开销会有很大的差异可能的选择包括8位定时器16位定时器及可编程计数器阵列PCA注意对于全双工操作需要两

个波特率源发送和接收各一个

使用8位定时器的方案允许将一个16位硬件定时器用于产生发送和接收波特率定时器0工CYGNAL Integrated Products, Inc.沈阳新华龙电子有限公司

4301 Westbank Drive 沈阳市和平区青年大街284号58号信箱Suite B-100 Copyright ?2001Cygnal Integrated Products, Inc.电话0242393036623940230

Austin, TX 78746 版权所有电邮longhua@https://www.doczj.com/doc/fe5560744.html,

https://www.doczj.com/doc/fe5560744.html,网址https://www.doczj.com/doc/fe5560744.html,

AN015 软件UART示例

作于方式3时具有这种能力注意当定时器0工作于方式3时定时器1的功能将减少但是定时器1仍可用作硬件UART HW UART的波特率发生器使用8位定时器节省硬件资源但是会有CPU软件开销和延迟时间的问题这些问题在例2中讨论

上述方法的一个替代方案是使用16位自动重装载定时器在这种情况下两个16位硬件定时器被SW UART占用一个用于发送一个用于接收任何可用的定时器都能满足要求但定时器2和定时器3的自动重装载能力可以减少软件开销并可消除任何中断延迟问题此外16位定时器还可支持更宽的波特率范围

可编程计数器阵列PCA也为SW UART提供了一个很好的解决方案所提供的C语言示例能说明这一点PCA包含一个专用的16位计数器/定时器和五个16位的捕捉/比较模块每个模块都可以被设置为在PCA计数器与相对应的比较模块的内容一致时触发一个中断由于PCA计数器在产生中断时并不停止运行所以该方案可以避免中断延迟累加的问题PCA实现方案不适用于C8051F2xx器件

其它考虑

上述的每种定时器源都可以用SYSCLK或一个外部信号作为时钟在所提供的例子中波特率源用SYSCLK作为时钟而SYSCLK源自外部的18.432MHz晶体任何波特率/晶体频率组合都是允许的但软件开销限制了波特率与SYSCLK的最大比值

起始位检测也是SW UART接收器的一个重要问题C8051F00x和C8051F01x器件提供了很多外部中断源其中有几个可被配置用于检测下降沿本文的两个示例程序都使用外部中断检测起始位

例1可编程计数器阵列实现

例1使用两个PCA模块产生接收和发送波特率分别为模块0和1这两个模块被配置为软件定时器方式用于产生波特率中断对PCA的介绍见AN007

程序结构

在软件定时器方式当PCA计数器与某个比较模块中的值一致时PCA可产生一个中断由于PCA计数器不会中断运行比较模块可在每个位时间被更新以精确产生下一个位时间另外PCA还提供一个在起始位检测中很有用的捕捉功能

PCA模块可通过交叉开关与外部信号连接这些信号对模块n称为CEXn可用于触发PCA 计数器捕捉在SW UART接收器中用到这一特性起始位识别是用模块0实现的模块0被配置为在RX引脚出现一个下降沿时捕捉PCA计数器的内容该功能有两个优点1起始位检测容易实现2由于捕捉是在检测到下降沿后立即完成的所以位采样时间不受中断响应延迟的影

实现

例1中的发送和接收操作是在PCA中断服务程序的两个独立的状态机中实现的这两个状态2AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015

软件UART 示例

机示于图1

图1. 发送和接收状态机

状态10: 发送停止位- 指示发送完成- 触发用户级中断如果被允许- 重新置发送器为等待状态

- 触发用户级中断

如果被允许- 重新置发送器为等待状态状态0: 检测到起始位- 装载波特率源3/2位时间状态9: 捕捉停止位- 指示接收完成- 触发用户级中断如果被允许- 重新置接收器为等待状态

状态0: 检测到起始位- 装载波特率源

3/2位时间- 触发用户级中断

如果被允许- 重新置接收器为等待状态

发 送 状 态 机

接 收 状 态 机

接收状态机

当SW UART 被初始化时PCA 模块0被配置为下降沿捕捉方式它的输入CEX0通过交叉开关接到一个通用I/O 引脚P0.2, SW_RX 在状态机处于状态0时如果在SW_RX 引脚检测到下降沿则会产生一个中断由于模块工作在捕捉方式PCA 计数器的内容被装入到模块0

捕捉寄存器注意该值与中断响应延迟无关在检测到起始位后模块0被切换到软件定时器方式并且3/2个位时间被加到模块0捕捉寄存器中额外的1/2位时间只在检测到起始位之后使用其

作用是使采样发生在下一个位周期的中间见图

2当PCA 计数器计到模块0捕捉寄存器中的数值时产生第一个位采样中断此处为LSB

图2. SW UART 位时序

D1D0D2D3D4D5D6D7

MARK SPACE

3/2位时间

1个位时间

位时间起始位

停止位

?2001Cygnal Integrated Products, Inc.

AN015-1.0 MAR01 3

AN015

软件UART 示例

状态1-8在模块匹配中断发生时执行在每个状态数据位被从SW_RX 采样并移入到变量RXSHIFT PCA 模块0的内容在每个状态都被更新以提供下一个位时间中断一个位时间被加到比较寄存器状态变量也被加1

状态9捕捉停止位

设置SRI

最后使接收器返回到等待状态

图3. 例1的用户级查询方式接口

3) 如果需要用户级中断支持

发送状态机

用户可以通过强制PCA 模块1产生中断设置CCF1=1

来启动一次发送在状态

0TX 引脚被强制为低电平以产生起始条件此时读PCA 计数器的值并将该值加上一个位时间后装入到模块1捕捉寄存器注意从产生起始位到读出PCA 计数值之间要经过几个系统时钟周期这是例1中唯一的中断延迟影响位时间的地方这个影响是可以忽略的最坏的情况是大约1/16位时间这是在18.432MHz 系统时钟频率57.6 kbps 波特率的情况下 状态1-9在发生模块匹配中断时执行在每个状态TDR 的LSB 被移出而一个代表停止位的1被移入TDR 的MSB 一个位时间被加到模块1捕捉寄存器以产生下一个位时间经过9次移位后数据字节+停止位被发送出去最后发送结束标志STI 被置位发送忙标志STXBSY 清除T 状态变量被复位X

被程序接口

持查询和中断驱动接口SW UART 支查询支持是通过禁止用户级中断S S=0E 来实现的可以通过查询发送和接收标志分别为TI 和SRI S 看传输是否结束例1的初始化和查询方式的编程过程如图3所示

初始化程序SW_UART_INIT 配置SW UART 中用到的PCA 中断和状态变

4 AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015

软件UART 示例

量SW_UART_ENABLE 程序允许SW UART SREN 位必须被置1以允许接收

注意

TIME_CO N U T 常数是用软件由BAUD_RATE 和SYSCLK 常数计算而得

为了使用中断方式

设置SES=1中断方式的编程过程如图4所示

图4. 例1的用户级中断方式接口

如果用户级中断支持被允许SES=1则每当一次发送或接收过程结束就会产生一个IE7中断与硬件UART 一样用户软件必须通过检查发送/接收结束标志来确定中断源如果发送和接收同时完成户软件将只收到一个中断I 7中断服务程序必须能处理这种情况E 有

两种处理方式1在一次中断服务程序执行中

同时处理发送和接收

或2

理一个STI 或SRI 并强制产生一个中断使中断服务程序被重新调用以服务另一个中断议采用第二种方案以使中断服务程序的执行时间最短

用处建程序中提供了SW UART 与HW UART 接口的测试代码跳线连接方式如图5所示

图5. 例1的测试配置

测试代码配置并允许HW UART 使其工作

于方式1并使用定时器1作为波特率发生器测试代码还完成对定时器1的设置通过改变BAUD_RATE 和SYSCLK 常数可以测试不同的波特率和晶体硬件和软件UART 的波特率计数值用软件从这些常数计算而得测试程序在两个方向上各发送15个字符

为了测试查询方式下的SW UART 给下行加上注释符

?2001Cygnal Integrated Products, Inc.

AN015-1.0 MAR01 5

AN015 软件UART示例

INTERRUPT_TEST();

;

去掉下行的注释符

POLLED_TEST();

将上面的步骤反过来可测试中断方式下的SW UART去掉下行的注释符

INTERRUPT_TEST();

给下行加上注释符

POLLED_TEST();

;

例2中执行时间最长的状态需要113个系统时钟周期TX 状态 1-9对于18.432MHz的晶体SW UART发送或接收操作在最坏的情况下需要6μs/位113*T SYSCLK在57.6 kbps的波特率下发送或接收占大约35%的CPU带宽全双工时占70%对于例1的软件用Keil编译器

编译时全双工的软件开销可用下式估算

全双工软件开销%BAUD_RATE/81000

按照上述方程高于80 kbps的波特率不能支持全双工操作只有在SW UART正进行传输过程时才会有软件开销的限制源程序清单从第10页开始

例28位定时器实现

在例1中SW UART使用定时器0工作于方式3在该方式下定时器0被分成两个8位定时器一个用于发送一个用于接收TL0用作接收定时器TH0用作发送定时器在定时器0工作于方式3时定时器1不能设置TF1标志不能产生中断也不能用外部信号作为时钟但是如果被配置为方式2自动重装载的8位定时器定时器1仍可用作HW UART

的波特率发生器在定时器0工作于方式3时可以通过工作方式设置来禁止/允许定时器1定时器1在方式3时被禁止在其它方式被允许

用定时器1作为HW UART的波特率源大概是对硬件资源的最有效利用缺点是软件开销增加相对于16为定时器方案定时器0的方式3没有自动重装载能力手动装载定时器需要在

每次执行中断服务程序ISR时进行16位的数据传送另外中断延迟会影响位时间精度可以将定时器的预装值加上一个校正常数以补偿典型中断延迟但是无法考虑中断延迟之间的差别较低的波特率可能需要用大于8位长度的定时器对位时间计时在SYSCLK为18.432MHz 且定时器0工作于SYSCLK/1方式的情况下低于72kbps的波特率需要大于256的定时器计数值可选方案包括

1使用定时器0工作在SYSCLK/12方式这样可以用8位长度得到较低的波特率但要得到标准波特率/SYSCLK的组合将更加困难

2使用定时器0工作在SYSCLK/1方式但要在定时器ISR中手动操作高位定时器字节注6AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015 软件UART示例

意不管波特率为何对每次发送和接收使用该方法时每隔256个SYSCLK将产生一个中断每次低8位溢出时产生一个中断例2的软件是选项2的实例

程序结构

例2中的发送和接收操作是在定时器0和定时器1中断服务程序的两个独立的状态机中实现的见第3页的图1定时器0的中断服务程序管理接收状态机定时器1的中断服务程序管理发送状态机/INT0的中断服务程序启动接收状态机但在接收状态不为0时被禁止SW UART 接收器用外部中断源/INT0捕捉起始位/INT0被配置为低有效边沿敏感输入在等待一个起始位时/INT0被允许但在传输过程中/INT0被禁止/INT0通过交叉开关连到通用I/O引脚AN001有关于交叉开关配置的详细信息

由于在中断服务程序中所有的定时器装载都是手动完成所以必须对中断延迟进行补偿从每个定时器预装值中减去一个溢出常数以补偿这个中断延迟和程序从定时器溢出执行到重装定时器初值需要的时间这些常数与SYSCLK频率或波特率无关但是没有考虑到中断延迟的变化

实现

注对于本例的讨论假设波特率低到用8位定时器不能满足要求直接地址字节BCRHI和BCTHI分别用于手动管理发送和接收定时器的高字节

发送状态机

当SW UART被初始化并被允许时TX中断被挂起但仍被禁止用户通过允许发送中断来启动传送过程注意定时器0的高字节TH0产生TX中断

在状态0TX引脚被强制为低电平以产生起始条件定时器被装入一个位时间以产生下一个中断

; 将高字节装入BCTHI

mov BCTHI, #HIGH(TX_BT)

; 将低字节装入TH0

mov TH0, #-LOW(TX_BT)

注意BCTHI的装入值是无符号位时间高字节而TH0的装入值是位时间低字节的负数这是因为定时器0与所有硬件定时器一样是一个加1计数器而BCTHI向下计数TH0在从0xFF 计到0x00时发生溢出并产生一个中断BCTHI在每次中断时减1当减到0时指示一个位时间

对于状态1-9每当BCTHI达到0时一个状态被执行在每个状态发送数据寄存器TDR 的LSB被移出到TX引脚TX定时器被装入一个位时间值一个1被移入TDR的MSB以代表状态9的停止位在传输完成后TDR中应保持0xFF经过9次移位后数据字节+停止位被发送出去最后发送结束标志STI被置位发送忙标志STXBSY被清除TX状态变量被复位

?2001Cygnal Integrated Products, Inc.AN015-1.0 MAR017

AN015

软件UART 示例

接收状态机

在状态0/INT0用作RX 输入被

配置为下降沿有效

高优先级一个/INT0意味着检测到一个起始条件/INT0的中断服务程序用3/2位时间装载RX 定时器

TL0 + BCRHI BCRHI 在每次TL0溢出时减1

持图6.例2的用户级查询方式接口

状态1-8在BCRHI

达到0时执行在每个状态SW_RX 引脚被采样并被移入变量RXSHIFT 的LSB RX 定时器被重新装载以产生下一个采样时间状态9捕捉停止位但没有提供帧错误检测未检测停止位极性如果用户级中断被允许该状态允许并触发IE7中断

程序接口

例2支持查询和中断驱动接口查询方式的初始化过程和程序流程示于图6在该例中TIME_COUNT 常数必须明确定义

图7给出了中断方式下IE7中断服务程序的流程注意接收操作首先被服务因为它对延迟最敏感 为了处理发送和接收同时完成的情况本例的程序服务一个功能后又重新自触发去服务另一个功能 本例的程序中提供了测试代码为了测试查询方式的代码在主程序中去掉下行的注释符

ajmp PolledRX_PolledTX

给下行加上注释符 ; ajmp

InterruptRX_InterruptTX

为了运行中断方式的测试代码将上面的步骤反过来

给下行加上注释符

; ajmp

PolledRX_PolledTX

8 AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015

软件UART 示例

去掉下行的注释符

图7.例2的用户级中断接口

ajmp PolledRX_PolledTX

在SW_GPIO_TX 和SW_GPIO_RX 之间加一个跨接片即可快速而轻松对SW UART 进行评估注意这种评估方法只对中断方式的测试代码有用

在SYSCLK 为18.432MHz 时例2中给出的软件工作在全双工方式时最大波特率可达到57.6kbps 源码清单从第21页开始

?2001Cygnal Integrated Products, Inc.

AN015-1.0 MAR01 9

AN015 软件UART示例

//-------------------------------------------------------------------- //

// Copyright 2001 Cygnal Integrated Products, Inc.

//

// 文件名: AN015_1.c

// 目标器件: C8051F00x, C8051F01x

03/10/01

// 编写日期 :

JS

// 作者 :

//

// 软件UART程序使用PCA作为波特率发生器

// PCA模块0用作接收波特率源和起始位检测器为了检测起始位模块0被配置为

// 负沿捕捉方式对于所有其它的SW_UART操作模块0被配置为软件定时器模块

// 匹配中断用于产生波特率模块1用软件定时器方式产生发送波特率

// 程序假设一个外部晶体连接在XTAL1和XTAL2引脚之间

//外部晶体的频率应在SYSCLK常数中定义

//

// 初始化过程:

// 1) 根据外部晶体频率定义SYSCLK

// 2) 定义BAUD_RATE

// 3) 调用SW_UART_INIT()

// 4) 置位SREN以允许软件UART接收器

// 5) 置位SES只在需要用户级中断支持时

// 6) 调用SW_UART_ENABLE()

//

// 发送:

// 1) 查询STXBSY看是否为0

// 2) 写数据到TDR

// 3) 置位CCF1以启动发送

// 4) 发送完成时置位STI如果用户级中断被允许产生一个IE7中断

//

// 接收:

// 1) 如果是在查询方式查询SRI如果是在中断方式在IE7中断服务程序中查询SRI

// 2) 从RDR读数据

//

// 包含了查询和中断方式的测试代码测试代码假设HW_UART和SW_UART引脚在外部相连: // P0.0 (HW_UART TX) -> P0.3 (SW_UART RX)

// P0.1 (HW_UART RX) -> P0.2 (SW_UART TX)

//

// 为了使用查询方式的测试代码将位于主程序底端的对INTERRUPT_TEST()的调用行

// 前面加上注释符并去掉调用POLLED_TEST()的程序行前面的注释符为了测试中断方式// 在POLLED_TEST()调用行前面加上注释符并去掉调用INTERRUPT_TEST()的程序行

// 前面的注释符

//

// 测试程序配置硬件UART用定时器1作为波特率源定时器1的预装值用SYSCLK和

// BAUD_RATE常数自动计算

//

//-------------------------------------------------------------------- // 包含文件

10AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015 软件UART示例

//--------------------------------------------------------------------

SFR声明

//

#include

//-------------------------------------------------------------------- // 全局常量

//--------------------------------------------------------------------

用户定义的SW_UART波特率

#define BAUD_RATE

57600 //

系统时钟取自外部18.432MHz晶体

#define SYSCLK

18432000 //

#define TIME_COUNT SYSCLK/BAUD_RATE/4 // 对应一个位时间的PCA计数值

配置为对SYSCLK/4计数)

(PCA

//

TIME_COUNT*3/2 // 3/2位时间用于接收到一个起始

#define TH_TIME_COUNT

//位后在起始位边沿之后RX应在一个

// 位时间内保持低电平第一个位采样

// 在下一个位时间的中间开始

// 用于产生HW_UART波特率

#define HW_TIME_COUNT

SYSCLK/BAUD_RATE/16

// 的定时计数值从前面定义

// 的SYSCLK和BAUD_RATE

// 自动计算

//-------------------------------------------------------------------- //全局变量

//--------------------------------------------------------------------

SW_UART接受完成标志

bit SRI; //

发送完成标志

SW_UART

bit STI; //

发送忙标志

SW_UART

bit STXBSY; //

接收允许

SW_UART

bit SREN; //

用户级中断支持允许

bit SES; //

SW_UART

接收引脚

SW_UART

=

P0^2; //

sbit SW_RX

SW_UART

发送引脚

=

P0^3; //

sbit SW_TX

SW_UART

发送数据寄存器

char TDR; //

接收数据寄存器(锁存器) char RDR; //

SW_UART

// 测试变量

char k,

测试下标

m; //

SW_UART

测试接收缓冲区

SW_BUF[20]; //

char idata

HW传送结束标志(15个字符发送完) bit HW_DONE; //

SW传送结束标志(15个字符发送完) bit SW_DONE; //

//-------------------------------------------------------------------- // 函数原型

//-------------------------------------------------------------------- ?2001Cygnal Integrated Products, Inc.AN015-1.0 MAR0111

AN015 软件UART示例

SW_UART初始化程序

void SW_UART_INIT(); //

允许程序

SW_UART

void SW_UART_ENABLE(); //

中断服务程序

SW_UART

void PCA_ISR(); //

中断方式测试程序

SW_UART

void INTERRUPT_TEST(void); //

查询方式测试程序

SW_UART

void POLLED_TEST(void); //

测试中断服务程序

void USER_ISR(void); //

SW_UART

初始化程序

void HWU_INIT(void); //

HW_UART

HW_UART中断服务程序

void HW_UART_ISR(void); //

//-------------------------------------------------------------------- // 主程序

//-------------------------------------------------------------------- // - 禁止看门狗定时器

// - 配置外部晶体稳定后将SYSCLK切换到外部晶体

// - 配置交叉开关和端口

// - 初始化并允许SW_UART

// - 调用测试程序

//

void MAIN (void){

延时计数器

int

delay; //

0x66; //

允许外部晶体

=

OSCXCN

WDTCN = 0xDE; // 禁止看门狗定时器

WDTCN = 0xAD;

// Port Setup

0x0C;

HW_UART连到P0.0和P0.1;

//

XBR0

=

CEX0连到P0.2.

//

XBR2 = 0x40; // 允许交叉开关允许上拉

(HW

P0.0

TX)和P0.3 (SW TX) 0x09; //

PRT0CF

=

// 配置为推挽输出

查询XTLVLD之前延时>1 ms

delay=256; //

while(delay--);

等待外部晶体起振

0x80)); //

&

while

(!(OSCXCN

0x0C; //

切换到外部振荡器

=

OSCICN

禁止内部振荡器允许丢失时钟检测器0x88; //

=

OSCICN

等待外部晶体起振

0x80)); //

while

&

(!(OSCXCN

0x08; //

切换到外部振荡器

=

OSCICN

调用查询方式SW_UART测试程序

//

POLLED_TEST(); //

调用中断方式SW_UART测试程序

INTERRUPT_TEST(); //

//

原地循环

while(1);

}

//-------------------------------------------------------------------- 12AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015 软件UART示例

// 函数

//-------------------------------------------------------------------- //--------------------------------------------------------------------

// INTERRUPT_TEST: SW_UART中断方式测试

// 测试代码用SW_UART中断方式向HW_UART发送15个字符并从HW_UART接收15个字符

// (在中断方式)

// - 初始划并允许SW_UART & HW_UART

// - 清0所有测试变量和计数器

// - 从HW向SW_UART传送15个字符同时从SW到HW_UART传送15个字符

//

void INTERRUPT_TEST(void){

初始化SW_UART

SW_UART_INIT(); //

允许SW_UART

SW_UART_ENABLE(); //

允许SW_UART接收器

//

SREN

1;

=

允许用户级中断支持

1; //

SES

=

配置HW_UART用于测试程序

HWU_INIT(); //

//

清0用户中断服务程序计数器

k=m=0;

清0传输完成标志

HW_DONE=0; //

SW_DONE=0; //

0x10; //

允许HW_UART中断

|=

IE

指示发送完成以启动下一次传输 //

STI=1;

EIE2 |= 0x20; // 通过允许并强制一个IE7中断

0x80; //

启动软件发送SW_TX

PRT1IF

|=

TI = 1; // 通过强制TX中断启动一次

// HW_UART发送

等待传输结束

//

while(!(HW_DONE&SW_DONE));

}

//-------------------------------------------------------------------- // POLLED_TEST: SW_UART查询方式测试

// 测试代码用SW_UART中断方式向HW_UART发送15个字符并从HW_UART接收15个字符

// - 初始划并允许SW_UART & HW_UART

// - 清0所有测试变量和计数器

// - 从HW_UART发送15个字符由SW_UART接收

// - 从SW_UART发送15个字符由HW_UART接收

//

void POLLED_TEST(void){

初始化SW_UART

SW_UART_INIT(); //

SW_UART_ENABLE(); //

允许SW_UART

允许SW_UART接收器

//

SREN

1;

=

禁止用户级中断支持

//

SES=0;

HWU_INIT(); //配置HW_UART用于测试程序

?2001Cygnal Integrated Products, Inc.AN015-1.0 MAR0113

AN015 软件UART示例

//

清0测试计数器变量

k=m=0;

清0传送完成标志

HW_DONE=0; //

SW_DONE=0; //

0x10; //

允许HW_UART中断

|=

IE

1; //

通过强制TX中断

TI

=

启动一次HW_UART发送

//

用SW_UART接收15个字符用HW_UART发送

//

while(SREN){ // 在SW_UART被允许时运行

如果接收完成:

//

(SRI){

if

0; //

清除接收标志

=

SRI

RDR; //

读接收缓冲器

=

SW_BUF[k++]

如果已收到15个字符:

(k==15){ //

if

//

0;

禁止SW_UART接收器

=

SREN

} // 指示已收到15个字符

}

}

//用SW_UART发送个字符用HW_UART接收

查询忙标志

while(STXBSY); //

STXBSY = 1; // 申请SW_UART发送器

TDR=m++; //

装发送数据

通过强制PCA模块1中断来

CCF1=1; //

// 启动第一次SW_UART发送

while(!SW_DONE){

SW_UART发送

//

// HW_UART接收

如果发送完成:

//

if

(STI){

清除发送标志

0; //

=

STI

发送15个字符

if

(m<16){ //

STXBSY = 1; // 申请SW_UART发送器

TDR = m++; // 发送变量增1

强制模块1中断以启动发送

//

CCF1

1;

=

}

else // 如果这是第十五个字符

表示这是发送的最后一个字符

SW_DONE=1; //

}

}

}

//-------------------------------------------------------------------- // HWU_INIT: HW_UART初始化子程序

// 初始化HW_UART用于SW_UART测试

// - HW_UART工作于方式1

// - 定时器1用作波特率源以SYSCLK为时钟

//

void HWU_INIT(void) {

SMOD=1(HW_UART使用定时器1 PCON |= 0x80; //

// 溢出不分频)

14AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015 软件UART示例

//

0x20;

配置定时器1为HW_UART所用=

TMOD

0x10; //

定时器1用SYSCLK作时钟|=

CKCON

-HW_TIME_COUNT; //

定时器1初始值

=

TH1

定时器1重载值

-HW_TIME_COUNT; //

=

TL1

启动定时器1

1; //

=

TR1

清除HW_UART接收和发送完成标志

RI=0; //

TI=0; //

//

配置HW_UART为方式1允许接收=

SCON

0x50;

}

//-------------------------------------------------------------------- // SW_UART_INIT: SW_UART初始化子程序

// 初始化SW_UART

// - 配置PCA: 模块0为负沿捕捉方式模块1为软件定时器方式

// PCA时基 = SYSCLK/4禁止PCA中断禁止PCA计数器

// - 清除被挂起的PCA模块0和模块1中断

// - 复位TX和RX状态变量

//

void SW_UART_INIT(void){

模块0为负沿捕捉方式

//

0x10;

PCA0CPM0

=

// 禁止模块0中断

模块1为软件定时器方式

//

0x48;

PCA0CPM1

=

// 禁止模块1中断

PCA0CN

PCA保持禁止状态

0; //

=

PCA时基 = SYSCLK/4

0x02; //

=

PCA0MD

// 禁止PCA计数器中断

//

清除被挂起的PCA模块0和模块1 0;

=

CCF0

0;

捕捉/比较中断

//

=

CCF1

0; //

清除接收完成标志

=

SRI

清除发送完成标志

0; //

=

STI

TX线初始化为高电平

1; //

=

SW_TX

清除SW_UART忙标志

0; //

STXBSY

=

}

//-------------------------------------------------------------------- // SW_UART_ENABLE: SW_UART允许子程序

// 允许SW_UART

// - 允许PCA模块0中断

// - 允许PCA模块1中断

// - 启动PCA计数器

//

void SW_UART_ENABLE(void){

0x01; //

允许PCA模块0接收中断

|=

PCA0CPM0

允许PCA模块1发送中断

0x01; //

|=

PCA0CPM1

?2001Cygnal Integrated Products, Inc.AN015-1.0 MAR0115

AN015 软件UART示例

启动PCA计数器

1; //

=

CR

EIE1 |= 0x08; // 允许PCA中断

全局中断允许

EA

1; //

=

}

//-------------------------------------------------------------------- // 中断服务程序

//-------------------------------------------------------------------- //

// PCA_ISR: PCA中断服务程序

// 该ISR由发送和接收函数触发每个发送和接收位都触发

// - 检查模块0中断标志(CCF0)如果置位服务接收状态

// - 检查模块1中断标志(CCF1)如果置位服务发送状态

//

void PCA_ISR(void) interrupt 9 {

static char SUTXST = 0; // SW_UART TX状态变量

static char SURXST = 0; // SW_UART RX状态变量

static unsigned char RXSHIFT; // SW_UART RX移位寄存器

临时存储变量

//

PCA_TEMP;

int

unsigned

// 用于处理PCA模快高和低字节

//

首先检查接收中断变量如果CCF0置位则对其服务

(CCF0){

if

//

清除中断标志

=

0;

CCF0

(SURXST){

switch

// 状态0:收到起始位

// 在该状态是SW_TX上的负边沿触发的中断表示检测到起始位

// 同时PCA0CP0寄存器捕捉到PCA0的值

检查接收允许和起始位是否正确

-

//

将PCA模块0切换到软件定时器方式

-

//

加3/2位时间到模块0捕捉寄存器以采样LSB

-

//

RX状态变量加1

-

//

0:

case

//检查接收允许和起始位是否正确

&

~SW_RX){

if

(SREN

将模块0内容读到

<<

8); //

(PCA0CPH0

=

PCA_TEMP

PCA_TEMP

PCA0CPL0; //

|=

PCA_TEMP

加3/2位时间到PCA_TEMP

//

PCA_TEMP

TH_TIME_COUNT;

+=

用新值恢复PCA0CPL0和PCA0CPH0

PCA_TEMP; //

=

PCA0CPL0

>>

(PCA_TEMP

8);

=

PCA0CPH0

//

0x49;

将模块0切换到软件定时器方式

=

PCA0CPM0

// 允许中断

更新RX状态变量

//

SURXST++;

16AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015 软件UART示例

}

break;

// 状态1-8: 收到数据位

-

采样SW_RX引脚

//

-

将新数据位移入RXSHIFT

//

加1个位时间到模块0捕捉寄存器

-

//

RX状态变量增1

//

-

1:

case

2:

case

3:

case

4:

case

5:

case

6:

case

7:

case

8:

case

1;

右移一位

>>

//

RXSHIFT

=

RXSHIFT

SW_RX=1

If

(SW_RX) //

if

将'1'移入RXSHIFT的msb

//

RXSHIFT

0x80;

|=

<<

将模块0内容读到PCA_TEMP

8);//

(PCA0CPH0

PCA_TEMP

=

PCA0CPL0; //

PCA_TEMP

|=

TIME_COUNT;

加一个位时间到PCA_TEMP

//

+=

PCA_TEMP

用新值恢复PCA0CPL0和PCA0CPH0

PCA_TEMP; //

=

PCA0CPL0

8);

>>

=

(PCA_TEMP

PCA0CPH0

更新RX状态变量

SURXST++;

//

break;

// 状态9: 已收到8个数据位捕捉停止位

//

将RXSHIFT传送到RDR

-

置位SRI (表示接收完成)

//

-

为下一次传输准备模块0

-

//

-

复位RX状态变量

//

触发IE7如果用户级中断支持被允许

-

//

9:

case

将接收到的数据传送到接收寄存器

RDR

RXSHIFT; //

=

置1接收完成标志

1; //

=

SRI

//

切换模块0到负沿捕捉方式

=

0x11;

PCA0CPM0

// 允许中断以检测起始位

SURXST

0; //

复位RX状态变量

=

//如果用户级中断支持被允许

(SES){

if

0x20; // 允许IE7.

EIE2

|=

触发IE7.

0x80; //

|=

PRT1IF

?2001Cygnal Integrated Products, Inc.AN015-1.0 MAR0117

AN015

软件UART 示例

}

break; } }

// 检查发送中断如果CCF1置位则对其服务 else if (CCF1){ CCF1 = 0; // 清除中断标志 switch (SUTXST){

// 状态0: 发送过程已启动

// 在此用户已将发送字节装入到TDR 强制模块1中断以启动发送 // - 发送起始位(使SW_TX 变低) // - 读PCA0为第一位加一个位时间存到模块1捕捉寄存器 // - TX 状态变量增1 case 0:

SW_TX = 0; // 使TX 引脚变低作为起始位

PCA_TEMP = PCA0L; // 将PCA 计数器的值读到PCA_TEMP PCA_TEMP |= (PCA0H << 8);

PCA_TEMP += TIME_COUNT; // 加一个位时间

PCA0CPL1 = PCA_TEMP; // 将更新后的匹配值存到 PCA0CPH1 = (PCA_TEMP >> 8);// 模块1捕捉比较寄存器

PCA0CPM1 |= 0x48; // 允许模块1软件定时器

SUTXST++; // 更新TX 状态变量 break;

// 状态1-9: 发送位 // - 将TDR 的LSB 输出到TX // - 将TDR 右移一位 // - 将一个'1'移入TDR 的MSB 作为状态9的停止位 // - 加一个位时间到模块1捕捉寄存器 case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:

SW_TX = (TDR & 0x01); // 将TDR 的LSB 输出到SW_TX 引脚 TDR >>= 1; // TDR 右移一位 TDR |= 0x80; // 将一个'1'移入TDR 的MSB // 作为状态9的停止位

18 AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

AN015 软件UART示例

将模块1内容读到PCA_TEMP

<<

8);//

(PCA0CPH1

=

PCA_TEMP

PCA0CPL1;

PCA_TEMP

|=

加一个位时间到PCA_TEMP

//

PCA_TEMP

TIME_COUNT;

+=

PCA_TEMP; //

用新值恢复PCA0CPL1

=

PCA0CPL1

8);//

>>

和PCA0CPH1

PCA0CPH1

=

(PCA_TEMP

SUTXST++; // 更新TX状态变量

break;

// 状态10: 最后一位已发送完发送停止位并结束传输过程

发送停止位

//

-

置1发送结束标志清除忙标志

-

//

复位TX状态

-

//

为下一次传输准备模块1

-

//

-

触发IE7如果用户级中断支持被允许

//

10:

case

表示发送完成

1; //

STI

=

复位TX状态

0; //

=

SUTXST

SW_TX应保持高电平

1; //

=

SW_TX

禁止模块1软件定时器

//

PCA0CPM1

0x01;

=

// 保持中断为允许状态以备下一次传输

//如果用户级中断支持被允许:

(SES){

if

允许IE7

//

0x20;

EIE2

|=

触发IE7

0x80; //

PRT1IF

|=

}

TX空闲

SW_UART

STXBSY

=

0; //

break;

}

}

}

//-------------------------------------------------------------------- // USER_ISR: 用户SW_UART中断服务程序(IE7 ISR)

// 如果中断测试方式被允许该ISR将发送15个字符并接收15个字符

// 每次SW_UART发送或接收完成都要触发该例程

// - 检查接收完成指示标志并服务

// - 检查发送完成指示标志并服务

// - 检查ISR执行期间是否有发送和接收过程完成如有再触发一次中断

//

void USER_ISR(void) interrupt 19 { // IE7中断服务程序

清除IE7中断标志

~(0x80); //

&=

PRT1IF

//

如果接收完成:

(SRI){

if

?2001Cygnal Integrated Products, Inc.AN015-1.0 MAR0119

AN015 软件UART示例

0; //

清除接收标志

=

SRI

RDR; //

读接收缓冲器

=

SW_BUF[k++]

如果已收到15个字符:

(k==16){ //

if

禁止SW_UART接收器

SREN=0; //

} // 表示收到15个字符

}

如果发送完成:

else

(STI){ //

if

清楚发送标志

0; //

STI

=

if (m<15){ // 如果已发送的字符不足15个: STXBSY = 1; // 申请SW_UART发送器

TDR = m++; // 变量加1发送

CCF1 = 1; // 强制模块1中断以启动发送

}

else

SW_DONE=1; // 表示已发送完最后一个字符

}

//

如果SRI或STI置位再次触发(STI|SRI)

if

0x80; //

中断服务

|=

PRT1IF

}

//-------------------------------------------------------------------- // HW_UART_ISR: 硬件UART中断服务程序

// 发送字符1-15并接收15个字符

// - 检查接收中断并服务

// - 检查发送中断并服务

//

void HW_UART_ISR(void) interrupt 4 {

发送数据变量

//

i=0;

static

char

接收数据索引

//

j=0;

static

char

static idata char HW_BUF[20]; // 接收数据缓冲区

如果接收完成:

(RI){ //

if

清除接收标志

RI=0; //

//

SBUF;

读接收缓冲区

=

HW_BUF[j++]

如果已收到15个字符:

if

(j==15) //

禁止HW_UART接收器

REN=0;

//

}

else if (TI){ // 如果发送完成:

清除发送标志

0; //

=

TI

如果还有要发送的字符:

//

(i<15)

if

变量加1发送

SBUF=i++;

//

如果已发送完15个字符

else //

20AN015-1.0 MAR01 ?2001Cygnal Integrated Products, Inc.

cc2530串口UART0通信实验(20200627130016)

/********************* 头文件*************************************************/ #include #include /********************* 宏定义*************************************************/ #define uint unsigned int #define uchar unsigned char // --------------- LED 控制端口------------------------------- // #define GLED P1_0〃绿色LED定义 #define RLED P1_1〃红色LED定义 // --------------- 按键输入端口------------------------------- // #define KEY1 P0_0 /********************* 全局变量**********************************************/ unsigned char Uart0_Rx; unsigned char Text_Data[]=" 海舟物联网教育!\r\n"; /********************* 函数声明***********************************************/ void Delay(uint); void Init_LED(void); void Init_Uart0(void); void Init_Sysclk(void); void Uart0_TX_Data(unsigned char *Data,int len); /****************************************************************************** * 函数名称: void Delay(uint n) * 函数功能: 软件延时函数 * 入口参数: * 出口参数: * 备注: ******************************************************************************/ void Delay(uint n) { uint i; for(i=0;i

UART异步串口

MSP430程序库<二>UART异步串口 串行通信接口是处理器与其他设备进行数据通信最常用的方式之一。我的这个程序库是针对MSP430f14系列和MSP430f16系列的,我常用的单片机是这两款:msp430f149,ms p430f169。这两款单片机中均有两个增强型串行通信接口,都可以进行同步或是异步通信,甚至169的模块USART0还能进行进行I2C协议通信。在这里,我们只讨论异步串行通信。 硬件介绍: MSP单片机的USART模块可以配置成SPI(同步通信)模式或UART(异步通信)模式,这里只讨论UART方式。UART数据传输格式如下: 起始位,数据位由高到低7/8位,地址位0/1位,奇偶校验位奇偶或无,停止位1/2位。数据位位数、地址位、奇偶校验位、停止位均可由单片机内部寄存器控制;这两款单片机都有两个USART模块,有两套独立的寄存器组;以下寄存器命中出现x代表0或是1,0代表对应0模块的寄存器,1代表对应1模块的寄存器;其中,与串口模式设置相关的控制位都位于UxCTL寄存器,与接收相关的控制位都位于UxRCTL寄存器,与发送相关的控制位都位于UxTCTL寄存器;波特率设置用UxBR0、UxBR1、UxMCT L三个寄存器;接收与发送有独立的缓存UxRXBUF、UxTXBUF,并具有独立的移位寄存器和独立的中断;中断允许控制位位于IE1/2寄存器,中断标志位位于IFG1/2寄存器。 波特率设置:430的波特率设置用三个寄存器实现, UxBR0:波特率发生器分频系数低8位。 UxBR1:波特率发生器分频系数高8位。 UxMCTL:波特率发生器分频系数的小数部分实现。 设置波特率时,首先要选择合适的时钟源:USART模块可以设置的时钟源有UCLK引脚、ACLK、SMCLK;对于较低的波特率(9600以下),可选ACLK作为时钟源,这样,在LPM3(低功耗3)模式下,串口仍能正常发送接收数据;另外,由于串口接收过程有一个三取二判决逻辑,这至少需要三个时钟周期,因此分频系数必须大于3;波特率高于9600时,将不能使用ACLK作为时钟源,要调为频率较高的SMCLK作为时钟源;另外还可以外部输入UCLK时钟。分频系数计算公式如下:

软件工程案例分析

一、 阅读下列系统需求陈述,回答问题1、问题2、问题3和问题4。 某银行准备开发一个网上信用卡管理系统CCMS,该系统的基本功能为: (1)信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS登录。如果信用卡申请被银行接受,客户会收到银行的确认函,并告知用户信用卡的有效期及信贷限额;否则银行会发送一封拒绝函给该客户。客户收到确认函后,需再次登录CCMS ,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功地激活。 (2)月报表生成。在每个月第一天的零点,CCMS为每个信用卡客户创建一份月报表,对该客户上月的信用卡交易情况及交易额进行统计。信用卡客户可以登录CCMS查看月报表,也可以要求CCMS提供打印出的月报表。 (3)信用卡客户信息管理。信用卡客户的个人信息可以在 CCMS中进行在线的管理。每个信用卡客户可以在线查询其个人信息。 (4)信用卡交易记录。信用卡客户使用信息卡进行的每一笔交易都会记录在CCMS中。 (5)交易信息查询。信用卡客户可以登录CCMS查询并核实其信用卡交易记录及交易额。在系统的需求分析阶段,使用用例对系统需求建模。表1—1和表1—2给出了其中两个用例的概要描述。 [问题1]) 将表1—1和表1—2中的(1)~(10)填充完整。 [问题2] 除了表1—1和表1—2给出的用例外,从上述系统陈述中还可以获取哪些由信用卡客户发起的用例?(给出用例名称即可)

[问题3] 用400字以内文字,简要说明用例获取的基本步骤。 [问题4] 用例除了使用表1—1和表1—2所示的形式描述外,还可以使用UML的用例图来表示。分别用50字以内文字,解释UML用例图中扩展用例和抽象用例的内涵。 二、 阅读以下关于工作流系统性能分析的叙述,回答问题1、问题2和问题3。 某企业正在创建一个工作流管理系统,目前正处于过程定义阶段,即创建工作流模型阶段。对于这些工作流模型,除了要考虑工作流的正确性外,工作流的性能也是十分重要的。工作流性能主要反映工作流定量方面的特性,例如,任务的完成时间、单位时间内处理的任务数量、资源的利用率以及在预定的标准时间内完成任务的百分比等等。 图2—1所示的是一个简单的工作流模型(其中单位时间为1小时),它表示这样一个执行过程:每小时将会有20个任务达到c1,这20个任务首先经过处理taskl,再经过处理task2,最终将结果传递到c3。处理taskl和处理task2相互独立。 图2-1 假设性能评价模型符合M/M/1排队模型,在计算性能指标的过程中可以使用下列公式进行计 算:,其中ρ表示资源利用率,表示单位时间内到达的任务数,表示该资源单位时间内能够完成的任务数。 [问题1] 计算图2—1所示的工作流模型的下列性能指标: (1)每个资源的利用率; (2)每个处理中的平均任务数L; (3)平均系统时间S; (4)每个处理的平均等待时间W。 [问题2]

软件开发过程详解

软件开发过程详解 软件开发过程即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。 生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件开发过程覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。 1.需求分析 1.1 需求分析的特点和任务 需求分析是软件开发的第一步。获取需求的一个必不可少的结果是对项目中描述的客户需求的普遍理解。一旦理解了需求,分析者、开发者和客户就能探索出描述这些需求的多种解决方案。参与需求获取者只有在他们理解了问题之后才能开始设计系统,否则,对需求定义的任何改进,设计上都必须大量的返工。把需求获取集中在用户任务上—而不是集中在用户接口上—有助于防止开发组由于草率处理设计问题而造成的失误。有几种原因使需求分析变得困难:(1)客户说不清楚需求;(2)需求自身经常变动;(3)分析人员或客户理解有误。 需求获取、分析、编写需求规格说明和验证并不遵循线性的顺序,这些活动是相互隔开、增量和反复的。当你和客户合作时,你就将会问一些问题,并且取得他们所提供的信息(需求获取)。同时,你将处理这些信息以理解它们,并把它们分成不同的类别,还要把客户需求同可能的软件需求相联系(分析)。然后,你可以使客户信息结构化,并编写成文档和示意图(说明)。下一步,就可以让客户代表评审文档并纠正存在的错误(验证)。这四个过程贯穿着需求分析的整个阶段。需求获取可能是软件开发中最困难、最关键、最易出错及最需要交流的方面。需求获取只有通过有效的客户—开发者的合作才能成功。分析者必须建立一个对问题进行彻底探讨的环境,而这些问题与产品有关。为了方便清晰地进行交流,就要列出重要的小组,而不是假想所有的参与者都持有相同的看法。对需求问题的全面考察需要一种技术,利用这种技术不但考虑了问题的功能需求方面,还可讨论项目的非功能需求。确定用户已经理解:对于某些功能的讨论并不意味着即将在产品中实现它。对于想到的需求必须集中处理并设定优先级,以避免一个不能带来任何益处的无限大的项目。 1.2.需求分析的一般方法

UART串口通信设计实例

2.5 UART串口通信设计实例(1) 接下来用刚才采用的方法设计一个典型实例。在一般的嵌入式开发和FPGA设计中,串口UART是使用非常频繁的一种调试手段。下面我们将使用Verilog RTL编程设计一个串口收发模块。这个实例虽然简单,但是在后续的调试开发中,串口使用的次数比较多,这里阐明它的设计方案,不仅仅是为了讲解RTL编程,而且为了后续使用兼容ARM9内核实现嵌入式开发。 串口在一般的台式机上都会有。随着笔记本电脑的使用,一般会采用USB转串口的方案虚拟一个串口供笔记本使用。图2-7为UART串口的结构图。串口具有9个引脚,但是真正连接入FPGA开发板的一般只有两个引脚。这两个引脚是:发送引脚TxD和接收引脚RxD。由于是串行发送数据,因此如果开发板发送数据的话,则要通过TxD线1 bit接着1 bit 发送。在接收时,同样通过RxD引脚1 bit接着1 bit接收。 再看看串口发送/接收的数据格式(见图2-8)。在TxD或RxD这样的单线上,是从一个周期的低电平开始,以一个周期的高电平结束的。它中间包含8个周期的数据位和一个周期针对8位数据的奇偶校验位。每次传送一字节数据,它包含的8位是由低位开始传送,最后一位传送的是第7位。

这个设计有两个目的:一是从串口中接收数据,发送到输出端口。接收的时候是串行的,也就是一个接一个的;但是发送到输出端口时,我们希望是8位放在一起,成为并行状态(见图2-10)。我们知道,串口中出现信号,是没有先兆的。如果出现了串行数据,则如何通知到输出端口呢?我们引入“接收有效”端口。“接收有效”端口在一般情况下都是低电平,一旦有数据到来时,它就变成高电平。下一个模块在得知“接收有效”信号为高电平时,它就明白:新到了一个字节的数据,放在“接收字节”端口里面。

嵌入式Linux应用软件开发流程

从软件工程的角度来说,嵌入式应用软件也有一定的生命周期,如要进行需求分析、系统设计、代码编写、调试和维护等工作,软件工程的许多理论对它也是适用的。 但和其他通用软件相比,它的开发有许多独特之处: ·在需求分析时,必须考虑硬件性能的影响,具体功能必须考虑由何种硬件实现。 ·在系统设计阶段,重点考虑的是任务的划分及其接口,而不是模块的划分。模块划分则放在了任务的设计阶段。 ·在调试时采用交叉调试方式。 ·软件调试完毕固化到嵌入式系统中后,它的后期维护工作较少。 下面主要介绍分析和设计阶段的步骤与原则: 1、需求分析 对需求加以分析产生需求说明,需求说明过程给出系统功能需求,它包括:·系统所有实现的功能 ·系统的输入、输出 ·系统的外部接口需求(如用户界面) ·它的性能以及诸如文件/数据库安全等其他要求 在实时系统中,常用状态变迁图来描述系统。在设计状态图时,应对系统运行过程进行详细考虑,尽量在状态图中列出所有系统状态,包括许多用户无需知道的内部状态,对许多异常也应有相应处理。 此外,应清楚地说明人机接口,即操作员与系统间地相互作用。对于比较复杂地系统,形成一本操作手册是必要的,为用户提供使用该系统的操作步骤。为使系统说明更清楚,可以将状态变迁图与操作手册脚本结合起来。

在对需求进行分析,了解系统所要实现的功能的基础上,系统开发选用何种硬件、软件平台就可以确定了。 对于硬件平台,要考虑的是微处理器的处理速度、内存空间的大小、外部扩展设备是否满足功能要求等。如微处理器对外部事件的响应速度是否满足系统的实时性要求,它的稳定性如何,内存空间是否满足操作系统及应用软件的运行要求,对于要求网络功能的系统,是否扩展有以太网接口等。 对于软件平台而言,操作系统是否支持实时性及支持的程度、对多任务的管理能力是否支持前面选中的微处理器、网络功能是否满足系统要求以及开发环境是否完善等都是必须考虑的。 当然,不管选用何种软硬件平台,成本因素都是要考虑的,嵌入式Linux 正是在这方面具有突出的优势。 2、任务和模块划分 在进行需求分析和明确系统功能后,就可以对系统进行任务划分。任务是代码运行的一个映象,是无限循环的一段代码。从系统的角度来看,任务是嵌入式系统中竞争系统资源的最小运行单元,任务可以使用或等待CPU、I/O设备和内存空间等系统资源。 在设计一个较为复杂的多任务应用系统时,进行合理的任务划分对系统的运行效率、实时性和吞吐量影响都极大。任务分解过细会不断地在各任务之间切换,而任务之间的通信量也会很大,这样将会大大地增加系统的开销,影响系统的效率。而任务分解过粗、不够彻底又会造成原本可以并行的操作只能按顺序串行执行,从而影响系统的吞吐量。为了达到系统效率和吞吐量之间的平衡折中,在划分任务时应在数据流图的基础上,遵循下列步骤和原则:

本科毕业论文格式(软件工程-样例).

中文题目:物流管理系统 外文题目:LOGISTICS MANAGEMENT SYSTEM 毕业设计(论文)共××页(其中:外文文献及译文××页)图纸共 0张完成日期20××年×月答辩日期20××年×月

摘要 本物流管理系统应用于物流公司管理物流信息,主要使用了JSP、Struts、JDBC技术。控制层由Action控制流程,并调用业务层的相应方法进行不同的业务处理管理员端主要包括货物信息管理、物流信息管理、车辆信息管理、企业信息管理、客户订单管理、客户信息管理以及个人管理,管理员能对客户和货物、物流、车辆等进行增、删、查、改的操作,还能修改自己的基本信息并且在订单签订时操作员能自动提取目前登陆的用户名。客户端能查看货物车辆物流公司概况等基本信息,以及根据物流编号对物流信息进行查询,修改个人信息等操作。能更高效的提高物流公司的管理。 关键词:物流;JSP;Struts;管理

ABSTRACT The logistics management system used in logistics company management logistics information, The main use the JSP, Struts, JDBC technology. the administrator mainly includes cargo information management, logistics information management, vehicle information management, enterprise information management, management of customer orders, customer information management, and personal management, the administrator can to client and goods, logistics, vehicles and so on them, delete, check, change of operation, also can modify your basic information and signed in order when the operator can automatically extracted at present on the user name. The client can check goods vehicle logistics company profile and other basic information, and according to the logistics Numbers in logistics information query, modify the personal information and other operational. Can more efficient logistics to improve the management of the company. Keywords: logistics, JSP, Struts, management,

软件开发过程概述

第1章软件开发过程概述 1.1 软件开发过程概述 1.1.1 软件的概念 软件(Software)简单的说就是那些在计算机中能看的着,但摸不着的东西,概念性的说软件也称为“软设备”,广义地说软件是指系统中的程序以及开发、使用程序所需要的所有文档的集合软件分为系统软件和应用软件。 软件并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。 软件被应用于世界的各个领域,对人们的生活和工作都产生了深远的影响。 1. 系统软件 系统软件是负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。 一般来讲,系统软件包括操作系统和一系列基本的工具(比如编译器,数据库管理,存储器格式化,文件系统管理,用户身份验证,驱动管理,网络连接等方面的工具)。 2. 应用软件 应用软件是为了某种特定的用途而被开发的软件。它可以是一个特定的程序,比如一个图像浏览器。也可以是一组功能联系紧密,可以互相协作的程序的集合,比如微软的Office软件。也可以是一个由众多独立程序组成的庞大的软件系统,比如数据库管理系统。较常见的有:文字处理软件如WPS、Word等;信息管理软件;辅助设计软件如AutoCAD ;实时控制软件;教育与娱乐软件。 1.1.2 编程与软件开发 软件开发的内容是:需求、设计、编程和测试。 (1)需求:不仅仅是用户需求,应该是开发中遇到的所有的需求。比如,你首先要知道做这个项目是为了解决什么问题;测试案例中应该输入什么数据......为了清楚地知道这些需求,你经常要和客户、项目经理等交流。 (2)设计:编码前,肯定有个计划告诉你要做什么,结构是怎样等等。你一定要按照这个来做,否则可能会一团糟。 (3)编程:如果在项目截止日,你的程序不能跑起来或达不到客户的要求,你就拿不到钱。

Verilog程序6、UART(串口通信)

这个程序没有仿真、没有测试。。 1 UART功能设计 1.1 UART的工作原理 异步通信时,UART发送/接收数据的传输格式如图1所示,一个字符单位由开始位、数据位、停止位组成。 异步通信的一帧传输经历以下步骤: (1)无传输。发送方连续发送信号,处于信息“1”状态。 (2)起始传输。发送方在任何时刻将传号变成空号,即“1”跳变到“O”,并持续1位时间表明发送方开始传输数据。而同时,接收方收到空号后,开始与发送方同步,并期望收到随后的数据。 (3)奇偶传输。数据传输之后是可供选择的奇偶位发送或接收。 (4)停止传输。最后是发送或接收的停止位,其状态恒为“1”。 其程序的结构框图如下: 该程序的效果是串口接受到从计算机发送过来的数据后,又把数据发回给计算机,串口通信是串行的。 其uart.v为顶层文件,包含其他模块,speed_select.v文件的作用为为uart_rx.v和uart_tx.v 设置波特率。

uart.v(顶层文件) `timescale 1ns / 1ps ///////////////////////////////////////////////////////////////////// ///////////// // Company: // Engineer: // // Create Date: 16:08:27 11/12/2010 // Design Name: // Module Name: uart // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ///////////////////////////////////////////////////////////////////// ///////////// module uart(clk,rst_n,rs232_rx,rs232_tx); input clk,rst_n,rs232_rx; output rs232_tx; wire bps_start1,bps_start2,clk_bps1,clk_bps2,rx_int; wire [7:0] rx_data; //发送模块的时钟 speed_select speed_tx ( .clk(clk), .rst_n(rst_n), .bps_start(bps_start2), .clk_bps(clk_bps1) ); //接受模块的时钟 speed_select speed_rx ( .clk(clk), .rst_n(rst_n), .bps_start(bps_start2), .clk_bps(clk_bps2)

高级软件工程师简历范文范例

xxx专业个人简历 姓名:*** 性别:男 出生日期:1977-01-24 籍贯:河北 目前城市:上海市工作年限:五年以上 目前年薪:10-15万人民币联系电话: E-mail :(邮件&MSN) 请换成自己的真实信箱! 应聘方向 求职行业:计算机软件 应聘职位:高级软件工程师,系统架构设计师,项目经理 求职地点:上海市薪资要求:面议 工作经历 2008/03—现在***公司 所属行业:计算机软件 PC部(东南亚项目)高级软件工程师 主要职责: 1. 新加坡大东方保险GEL项目的开发维护。 2. 主要负责项目财务模块收付费部分。 2007/01—2008/02 **物流系统有限公司 所属行业:计算机服务(系统、数据服务,维修) 电子支付部门高级软件工程师 主要职责: 1. 负责上海电子口岸数据处理系统平台端的维护和版本升级。 2. 负责基于平台的业务开发,(银行担保业务、国检项目)。 2005/10—2006/10 **科技 所属行业:计算机软件 技术部高级软件工程师 主要职责: 1. 对公司销售软件“逍遥行”的维护和版本升级。 2. 负责开发运行在PDA上的销售软件简化版和客户增值模块的开发。2003/10—2005/08 **信通 所属行业:计算机软件 上海金融高级软件工程师 主要职责: 1. 银行管理软件的开发,主要为信贷管理,财务管理,人力资源管理

等银行相关系统。 2. 负责重要模块的需求调研,分析设计以及编码测试。 2002/10—2003/10 **软件公司 所属行业:计算机软件 政府事业部软件工程师 主要职责: 电子政务的开发实施,开发多个项目。(闸北区政府OA系统,卢湾区五 里桥街道oa等) 项目经验 2008/04—至今新加坡GEL项目 项目描述:新加坡GEL项目,是新加坡大东方保险公司的寿险产品项目。 项目已成功上线。架构为STRUTS+业务接口+HIBERNATE+PLSQL, 数据库使用ORACLE。业务主要用PLSQL实现。 责任描述:我负责项目后期财务模块(收付费部分)的维护实施和新需 求的开发。包括defect的修改,plsql的优化,java代码的重构。 2007/11—2008/02 海关进出口检验检疫项目 项目描述:“国检”项目是实现国检收费电子化,通过大通关电子支付 平台,将检验检疫机构、进出口企业及其代理和银行连接在一起,实现 报检企业以电子方式向检验检疫机构缴纳检验检疫规费。架构为 SPRING+IBATIS,数据库使用ORACLE。服务器WEBSPHERE和 WEBLOGIC,开发工具ECLIPSE。 责任描述:负责国检端的设计开发,并负责国检端和平台端的联调。开 发安全角色模块和消息传递。 2007/01—2007/10 大通关电子支付平台维护和升级 项目描述:上海口岸电子支付平台("大通关"电子支付平台)是上海海关的 税费处理系统。作为中间业务平台,已为上海10家银行提供服务。平 台的升级主要包括技术的升级(web logic、web sphere MQ、开源软件和 公共包message framework等) 责任描述:负责message framework的重构优化,负责平台端的单元测 试,负责消息处理系统Gateway的配置测试。负责平台端担保业务的开 发,以及消息处理系统Gateway的配置测试。 2005/10—2006/10 &**软件PDA版本开发和原产品维护 项目描述:负责**软件PDA版的开发,依然采用WEB浏览方式,是公司 原有销售软件产品的简化版。数据库MYSQL,服务器为TOMCAT。客户 增值系统的开发包括数据导入,统计图标,搜索功能,邮件等功能。 责任描述:负责PDA产品公共模块的设计与开发:审批,共享,报价。

dsp实验-UART串口通信实验

实验八、UART串口通信实验 一、实验目的 1. 了解RS232通信接口的基本原理; 2. 熟悉通信接口芯片(TL16C550C)在DSP I/O空间寄存器的地址映射 及工作原理; 3.了解异步通信中串口模式选择、设置数据传输格式、设置波特率、建立连接、传输数据和断开连接等功能。 二、实验设备 1. 集成开发环境CCS 2. 实验开发板TMS320VC5402DSK、RS232接口电缆线及附件 3.程序“串口调试程序v2.2.exe” 三、实验内容及步骤 实验操作流程参照前面实验。 1 在汇编环境调试Uart:(实现字符或文件的发送和回发功能) a. 实验代码main.s54、uartasm.cmd和uart_init.s54、dsp_init.s54 以及uartasm.h54,c5402_dsk.gel(说明同前)。 b. 串口调试程序“串口调试程序v2.2.exe” , 汇编调试中Build option设置情况与CODEC实验中的汇编调试设置及出错情况相同。 c. 程序文件介绍: 1)“uart.h54”定义了一些寄存器的地址以及函数类型。 2)“dsp_init.s54”与dsp工作有关的寄存器ST1、PMST、IMR、IFR和SWWSR,并且清除INTM位以及设定时钟模式。 3)“uart_init.s54”先检测UART模块是否工作正常,然后设定UART模块的寄存器,如CNTL1、CNTL2、LCR、MSB&LSB(设定波特率)、FCR、IER 等。 4)“main.s54”主程序查看标志位,检测是否UART存在有效接收数据。若有,则执行一定的处理,包括亮LED以及将接收的数据从UART回发。 d. 执行程序时,只要发送数据时,可在串口调试程序的接收窗口立即看到回发的数据。 e. 程序中UART工作参数设置如下: 1)波特率9600(或更低)、无数据校验、字符长度8比特、停止位1、

UART实验程序解析

//UART实验程序解析 //头文件 #include #include #include "inc/hw_ints.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/interrupt.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "driverlib/rom.h" #include "driverlib/pin_map.h" //串口接收中断服务程序 void UARTIntHandler(void) { ui32 ulStatus; //获取中断状态 ulStatus = ROM_UARTIntStatus(UART0_BASE, true); //清除中断标志 ROM_UARTIntClear(UART0_BASE, ulStatus); //直到串口FIFO中没有数据时才退出循环 while(ROM_UARTCharsAvail(UART0_BASE)) { //读串口接收的字符并回发 ROM_UARTCharPutNonBlocking(UART0_BASE,

ROM_UARTCharGetNonBlocking(UART0_BASE)); } } //串口发送函数 void UARTSend(const ui8 *pucBuffer, ui32 ulCount) { while(ulCount--) { //将要发送的字符写进UART ROM_UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++); } } int main(void) { //使能FPU FPUEnable(); FPULazyStackingEnable(); //设置时钟直接使用外部晶振 ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); //使能用到的外设 ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); //配置PA0和PA1为串口0引脚 ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

UART串行口简介

UART异步串行口 UART异步串行口简介 数据通信的基本方式可分为并行通信与串行通信两种: 并行通信:是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求通讯速率较高的应用场合。 串行通信:是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。 UART 异步串行口的传输格式 异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然 而在同一个字符中的两个相邻位代码间的时间间隔是固定的。 通信协议(通信规程):是指通信双方约定的一些规则。在使用异步串口传送一个 字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。通讯时序图如下: 开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为 起始位,然后出现在通信线上的是字符的二进制编码数据。 每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇 数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。 最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位 的时间宽度。 至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。 每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特 率为110,150,300,600,1200,2400,4800,9600 ,19200,38400,115200等。 S3C2410的异步串行口 1

verilog编写的uart程序

// UART_FPGA.v 顶层模块,实现由ARM控制FPGA读取串口数据,经过ARM返回给FPGA串口发送出去; `timescale 1ns/1ns module UART_FPGA( //EMIF PIN input wire [10:0] EADDR_pin /* synthesis syn_noclockbuf = 1 */, inout wire [15:0] EDATA_pin , input wire EnOE_pin /* synthesis syn_noclockbuf = 1 */, input wire EnWE_pin /* synthesis syn_noclockbuf = 1 */, input wire EnGCS1_pin /* synthesis syn_noclockbuf = 1 */, output wire EINT2_pin , //LED_run output wire LED_run_pin , //UART output wire UART_TXD0 , input wire UART_RXD0 /* synthesis syn_noclockbuf = 1 */, //test signal output wire TXD_test, output wire RXD_test, output reg TXD_start, output wire EINT2_test, output wire TXD_over_test, output wire uart_send_WR, //FPGA SYSTEM PIN input wire nRESET_pin /* synthesis syn_noclockbuf = 1 */, input wire CLK_50M_pin ); wire [15:0] write_data;

软件工程课程设计方案报告范例

西安科技大学 软件工程课程设计报告 题目:图书馆管理系统 班级:软件工程** 学号: ********** 姓名: ******* 2013年1月

目录 1绪论 (1) 2 可行性研究报告 (1) 3 需求规格说明书 (4) 4 总体设计说明书 (7) 5 数据库设计说明书 (8) 6 详细设计说明书 (9) 7 系统实现 (11) 8测试分析报告 (23) 参考文献

1.绪论 1.1 选题目的及意义 随着计算机技术的快速发展,人们对用计算机代替手工管理信息的需求越来越强烈,越来越多的计算机软件如雨后春笋般的应用于人们生产生活的各个领域,为人们提供各种各样的便利。本图书馆管理系统应用软件可以有效地解决高等院校、中小学图书馆由于藏书量增大而带来的管理问题,图书馆管理员可以更好地管理学校图书馆藏书信息,学生可以更方便地享受借书还书的服务,为更有效地学习知识提供有利的保证。 对于我来说,选择这个题目作为课程设计的题目有以下两个原因:一是因为自从上大学以来,每当在图书馆借书的时候,我都会留心观察一下图书馆管理员的那台计算机上显示的内容,久而久之,就对本系统的基本流程越来越了解,做好一个软件的前提是必须对这个软件的功能和原理非常熟悉,相比别的题目,我对这个题目更加了解;二是本学期通过学习Java程序设计和Oracle数据库课程,我觉得这个题目虽然没有那么难(涉及算法的内容很少),但也不是轻而易举就能完成的,所以我想挑战一下自己,看看自己的实现能力到底怎么样,因此决定用面向对象方法学的思想,前台用Java程序设计语言编写界面,访问Oracle数据库中的数据,完成本系统。 1.2 系统概述 本系统通过JDBC-ODBC桥实现前后台数据的联系,基本上实现了一个图书馆管理系统所具备的基本功能,本系统把使用者分为三类:超级管理员、普通管理员、读者,对三种用户分别设计了各自的主界面,以便更好的实现信息的隐藏性,超级管理员可以进行这个系统所有操作;管理员只能执行超级管理员的基本功能,查看自己的信息;读者只能查看自己的信息,对自己当前借书进行挂失和续借两种操作,查询图书馆的藏书。 2.可行性研究报告 2.1 编写目的 本报告编写目的在于研究图书馆管理系统应用软件是否可行,指出本软件开发所使用的方法和手段,并对该软件前景进行分析。 本报告的预期读者是:高等院校、中小学图书馆管理人员、程序设计人员、以及对图书馆管理系统感兴趣的爱好者。 2.2 相关背景 工程名称:图书馆管理应用软件 工程产品名称:高校图书馆管理系统应用软件 工程的组织者:西安科技大学计算机学院软件工程系 产品用户:高校图书馆、中小学图书馆; 产品的生产者:西安科技大学计算机学院软件工程062班袁震; 产品设计者:西安科技大学计算机学院软件工程062班袁震; 2.3 可行性研究的前提 本图书管理系统在功能上要求完成以下基本功能: a).读者、管理员登陆;

SPI、I2C、UART三种串行总线的原理、区别及应用

简单描述: SPI 和I2C这两种通信方式都是短距离的,芯片和芯片之间或者其他元器件如传感器和芯片之间的通信。SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些很薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C 是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存这两种线属于低速传输; 而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。这样的通信可以做长距离的。UART和,UART就是我们指的串口,速度比上面三者快,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡; SmBus有点类似于USB设备跟计算机那样的短距离通信。 简单的狭义的说SPI和I2C是做在电路板上的。而UART和SMBUS是在机器外面连接两个机器的。 详细描述: 1、UART(TX,RX)就是两线,一根发送一根接收,可以全双工通信,线数也比较少。数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。在多机通信上面用的最多。 2、SPI(CLK,I/O,O,CS)接口和上面UART相比,多了一条同步时钟线,上面UART 的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。 3、I2C(SCL,SDA)接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。一般单片机系统里主要用来和24C02等小容易存储器连接。 SPI:高速同步串行口。3~4线接口,收发独立、可同步进行 UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢 SPI:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口 Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了

软件工程文档模板范例

目录 三、需求规格说明书 (2) 四、概要设计说明书 (12) 五、详细设计说明书 (15)

3软件需求说明书软件需求说明书的编制是为了使用户的软件开发者双方对该软件的起初规定有一个共同的理解,使之成为整个开发工作的基础。编制软件需求说明书的内容要求如下: 3.1引言 3.1.1 编写的目的 3.1.2 背景 3.1.3 定义 3.1.1 参考资料 3.2任务概述 3.2.1目标 3.2.2用户的点 3.2.3假定与约束 3.3需求规定 3.3.1对功能的规定 3.3.2对性能的规定

3.3.2.1 精度 3.3.2 .2 时间特性要求 3.3.2 .3 灵活性 3.3.3 输入输出要求 3.3.4 数据管理能力的要求 3.3.5 故障处理要求 3.3.6 其它的专门的要求 3.4 运行环境规定 3.4.1 设备 3.4.2 支持软件 3.4.3 接口 3.4.4 控制 4数据需求说明书数据要求说明书的编制目的是为了向整个开发时期提供关于处理数据的描述和数据采集要求的技术信息。编制数据要求说明书的内容要求如下: 4.1引言

4.1. 1 编写目的 4.1. 2 背景 4.1. 3 定义 4.1. 4 参考资料 4.2 数据的逻辑描述 4.2. 1 静态数据 4.2. 2 动态输入数据 4.2. 3 动态输出数据 4.2. 4 内部生成数据 4.2. 5 数据约定 4.3 数据的采集 4.3. 1 要求和范围 4.3. 2 输入的承担者 4.3. 3 处理 4.3. 4 影响 5概要设计说明书概要设计说明书可称作系统设计说明书,这里说的系统是指程序系统,编制的目的是说明对程序的系统的设计考虑,包括

相关主题
文本预览
相关文档 最新文档