单片机的AD中断功能是不是开启后就会不停的转换,不能定周期的转换这样单片还能干别的吗

单片机的AD中断功能是不是开启后就会不停的转换,不能定周期的转换这样单片还能干别的吗,第1张

这个你要看手册才行,看看你的单片机有没有连续转换功能

有的单片机是转换成功一次后就停止比如SH88FXX,ATmega16系列,有的单片机是可以设置连续转换和单次转换的,比如STM32,也就是说,几乎所有的单片机都可以实现单次转换后就停止

你想定周期转换,就把单片机AD转换设置成单次转换模式,或者采用只能单次转换的单片机,然后用定时器来帮忙,比如,设置定时器,每1秒钟转换一次

另外,再说明一下,AD转换的过程中是非常短暂的,你只要用定周期办法,或者如果有DMA功能,都不会影响你做别的事情

AD中断,一般都是AD转换完成后即引发中断,AD查询,就是你要人为的去等待AD转换结束,前者比后者能多多少少节省时间,提高性能就好比你早晨起床,有两种办法,一是定个闹钟,让闹钟叫醒你,这就好比中断方式,二是,你睡一会儿起来看一下时间,这就好比查询功能,采用后者肯定你睡不好觉

不过,就我接触的单片机而言,他们的AD转换都非常快,大约1个毫秒不到就完成了,所以AD中断与查询区别不是很大

AD0809的采集程序

//---A/D转换---

//-----头文件引用------

#include <Reg51h>

#include <absacch>

#include <intrinsh>

typedef unsigned char BYTE; /自定义字节类型/

#define Set_Bit(BIT) (BIT = 1) /定义置1函数/

#define Clear_Bit(BIT) (BIT = 0) /定义清0函数/

//

void Write_Hd7279(BYTE,BYTE); /定义HD7279写函数/

BYTE Read_Hd7279(BYTE); /定义HD7279读函数/

void Send_Byte(BYTE); /定义HD7279发送字节函数/

BYTE Receive_Byte(void); /定义HD7279接收字节函数/

void Short_Delay(void); /定义短延时函数/

void Long_Delay(void); /定义长延时函数/

void Mcu_Init(void); /定义MCU初始化函数/

void Delay_200_mS(void); /定义200ms延时函数/

sbit Hd7279_Clk=P1^6; /定义HD7279时钟硬件连接/

sbit Hd7279_Data=P1^5; /定义HD7279数据硬件连接/

sbit cs=P1^7;

void Short_Delay(void) /短延时函数/

{

BYTE i;

for(i=0;i<0x08;i++);

}

//

void Long_Delay(void) /长延时函数/

{

BYTE i;

for(i=0;i<0x30;i++);

}

//

void Write_Hd7279(BYTE Command,BYTE Data) /HD7279写函数/

{

Send_Byte(Command);

Send_Byte(Data);

}

//

void Send_Byte(BYTE Data_Out) /HD7279发送字节函数/

{

BYTE i;

cs=0;

Long_Delay();

for(i=0;i<8;i++)

{

if(Data_Out&0x80) Set_Bit(Hd7279_Data);

else Clear_Bit(Hd7279_Data);

Set_Bit(Hd7279_Clk);

Short_Delay();

Clear_Bit(Hd7279_Clk);

Short_Delay();

Data_Out=Data_Out<<1;

}

Clear_Bit(Hd7279_Data);

}

//-----宏声明-----

#define A_DPORT XBYTE[0xFef3]//0809通道0地址

#define uchar unsigned char

//-----变量定义-----

bit bdata bz=0;//定义标志

uchar val;

//-----初始化-----

void first(void)

{

P1=0xff;

P2=0xff;

P3=0xff;

P0=0xff;

Send_Byte(0xa4);

IT1=1;

EX1=1;

EA=1; //INT0 允许

}

//-----中断-----

void int_0(void) interrupt 2

{

val=A_DPORT; //读 A_D 数据

bz=1; //置读数标志

}

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

main()

{

first(); //初始化

while(1)

{

A_DPORT=val; //启动 A_D

while(bz==0); //等待 A_D 转换结束

// val=~A_DPORT;

//P1=val; //数据输出

Write_Hd7279(0xc8,val&0x0f);

Write_Hd7279(0xc9,val>>4);

Write_Hd7279(0x92,0x00);

Write_Hd7279(0x93,0x00);

Write_Hd7279(0x94,0x00);

Write_Hd7279(0x95,0x00);

Write_Hd7279(0xce,0x0d);

Write_Hd7279(0xcf,0);

bz=0; //清读数标志

}

}

这就是C的程序

>

数据库应用系统的开发是一项软件工程。一般可分为以下几个阶段:

1规划

2需求分析

3概念模型设计

4 逻辑设计

5物理设计

6程序编制及调试

7运行及维护。

这些阶段的划分目前尚无统一的标准,各阶段间相互联接,而且常常需要回溯修正。

数据库应用系统的开发过程中,每个阶段的工作成果就是写出相应的文档。每个阶段都是在上一阶段工作成果的基础上继续进行,整个开发工程是有依据、有组织、有计划、有条不紊地展开工作。

1规划

规划的主要任务就是作必要性及可行性分析。

在收集整理有关资料的基础上,要确定将建立的数据库应用系统与周边的关系,要对应用系统定位,其规模的大小、所处的地位、应起的作用均须作全面的分析和论证。

明确应用系统的基本功能,划分数据库支持的范围。分析数据来源、数据采集的方式和范围,研究数据结构的特点,估算数据量的大小,确立数据处理的基本要求和业务的规范标准。

规划人力资源调配。对参与研制和以后维护系统运作的管理人员、技术人员的技术业务水平提出要求,对最终用户、 *** 作员的素质作出评估。

拟 定设备配置方案。论证计算机、网络和其他设备在时间、空间两方面的处理能力,要有足够的内外存容量,系统的响应速度、网络传输和输入输出能力应 满足应用需求并留有余量。要选择合适的OS,DBMS和其它软件。设备配置方案要在使用要求、系统性能、购置成本和维护代价各方面综合权衡。

对系统的开发、运行、维护的成本作出估算。预测系统效益的期望值。

拟定开发进度计划,还要对现行工作模式如何向新系统过渡作出具体安排。

规划阶段的工作成果是写出详尽的可行性分析报告和数据库应用系统规划书。内容应包括:系统的定位及其功能、数据资源及数据处理能力、人力资源调配、设备配置方案、开发成本估算、开发进度计划等。

可行性分析报告和数据库应用系统规划书经审定立项后,成为后续开发工作的总纲。

2需求分析

需求分析大致可分成三步来完成。

(1) 需求信息的收集, 需求信息的收集一般以机构设置和业务活动为主干线,从高层中层到低层逐步展开

(2) 需求信息的分析整理, 对收集到的信息要做分析整理工作。数据流图(DFD, data flow diagram)是业务流程及业务中数据联系的形式描述。图41是一个简单的DFD 示例。

数据字典(DD, data dictionary)详细描述系统中的全部数据。

数据字典包含以下几个部分。

· 数据项:是数据的原子单位。

· 数据组项:由若干数据项组成。

· 数据流:表示某一数据加工过程的输入/输出数据。

· 数据存储:是处理过程中要存取的数据。

· 数据加工过程 数据加工过程的描述包括:数据加工过程名、说明、输入、输出、加工处理工作摘要、加工处理频度、加工处理的数据量、响应时间要求等。

数据流图既是需求分析的工具,也是需求分析的成果之一。数据字典是进行数据收集和数据分析的主要成果。

(3) 需求信息的评审 开发过程中的每一个阶段都要经过评审,确认任务是否全部完成,避免或纠正工作中出现的错误和疏漏。聘请项目外的专家参与评审,可保证评审的质量和客观性。

评审可能导致开发过程回溯,甚至会反复多次。但是,一定要使全部的预期目标都达到才能让需求分析阶段的工作暂告一个段落

需求分析阶段的工作成果是写出一份既切合实际又具有预见的需求说明书,并且附以一整套详尽的数据流图和数据字典。

3概念模型设计

概念模型不依赖于具体的计算机系统,他是纯粹反映信息需求的概念结构。

建模是在需求分析结果的基础上展开,常常要对数据进行抽象处理。常用的数据抽象方法是‘聚集’和‘概括’。

ER方法是设计概念模型时常用的方法。用设计好的ER图再附以相应的说明书可作为阶段成果

概念模型设计可分三步完成。

(1) 设计局部概念模型

① 确定局部概念模型的范围

② 定义实体

③ 定义联系

④ 确定属性

⑤ 逐一画出所有的局部ER图,并附以相应的说明文件

(2) 设计全局概念模型

建立全局ER图的步骤如下:

① 确定公共实体类型

② 合并局部ER图

③ 消除不一致因素

④ 优化全局ER图

⑤ 画出全局ER图,并附以相应的说明文件。

(3) 概念模型的评审

概念模型的评审分两部分进行

第一部分是用户评审。

第二部分是开发人员评审。

4逻辑设计

逻辑设计阶段的主要目标是把概念模型转换为具体计算机上DBMS所支持的结构数据模型。

逻辑设计的输入要素包括:概念模式、用户需求、约束条件、选用的DBMS的特性。

逻辑设计的输出信息包括:DBMS可处理的模式和子模式、应用程序设计指南、物理设计指南。

(1) 设计模式与子模式

关系数据库的模式设计可分四步完成。

① 建立初始关系模式

② 规范化处理

③ 模式评价

④ 修正模式

经过多次的模式评价和模式修正,确定最终的模式和子模式。

写出逻辑数据库结构说明书。

(2) 编写应用程序设计指南

根据设计好的模式和应用需求,规划应用程序的架构,设计应用程序的草图,指定每个应用程序的数据存取功能和数据处理功能梗概,提供程序上的逻辑接口。

编写出应用程序设计指南。

(3) 编写物理设计指南。

根据设计好的模式和应用需求,整理出物理设计阶段所需的一些重要数据和文档。例如,数据库的数据容量、各个关系(文件)的数据容量、应用处理频率、 *** 作顺序、响应速度、各个应用的LRA和TV、程序访问路径建议,等等。这些数据和要求将直接用于物理数据库的设计。

编写出物理设计指南。

5物理设计

物理设计是对给定的逻辑数据模型配置一个最适合应用环境的物理结构。

物理设计的输入要素包括:模式和子模式、物理设计指南、硬件特性、OS和DBMS的约束、运行要求等。

物理设计的输出信息主要是物理数据库结构说明书。其内容包括物理数据库结构、存储记录格式、存储记录位置分配及访问方法等。

物理设计的步骤如下:

(1) 存储记录结构

设计综合分析数据存储要求和应用需求,设计存储记录格式。

(2) 存储空间分配

存储空间分配有两个原则:

①存取频度高的数据尽量安排在快速、随机设备上,存取频度低的数据则安排在速度较慢的设备上。

②相互依赖性强的数据尽量存储在同一台设备上,且尽量安排在邻近的存储空间上。

从提高系统性能方面考虑,应将设计好的存储记录作为一个整体合理地分配物理存储区域。尽可能充分利用物理顺序特点,把不同类型的存储记录指派到不同的物理群中。

(3) 访问方法的设计

一个访问方法包括存储结构和检索机构两部分。存储结构限定了访问存储记录时可以使用的访问路径;检索机构定义了每个应用实际使用的访问路径。

(4) 物理设计的性能评价

① 查询响应时间

从查询开始到有结果显示之间所经历的时间称为查询响应时间。查询响应时间可进一步细分为服务时间、等待时间和延迟时间。

在物理设计过程中,要对系统的性能进行评价。性能评价包括时间、空间、效率、开销等各个方面。

⊙ CPU服务时间和I/O服务时间的长短取决于应用程序设计。

⊙ CPU队列等待时间和I/O队列等待时间的长短受计算机系统作业的影响。

⊙ 设计者可以有限度地控制分布式数据库系统的通信延迟时间。

② 存储空间

存储空间存放程序和数据。程序包括运行的应用程序、DBMS子程序、OS子程序等。数据包括用户工作区、DBMS工作区、OS工作区、索引缓冲区、数据缓冲区等。

存储空间分为主存空间和辅存空间。设计者只能有限度地控制主存空间,例如可指定缓冲区的分配等。但设计者能够有效地控制辅存空间。

③ 开销与效率

设计中还要考虑以下各种开销,开销增大,系统效率将下降。

⊙ 事务开销指从事务开始到事务结束所耗用的时间。更新事务要修改索引、重写物理块、进行写校验等 *** 作,增加了额外的开销。更新频度应列为设计的考虑因素。

⊙ 报告生成开销指从数据输入到有结果输出这段时间。报告生成占用CPU及I/O的服务时间较长。设计中要进行筛选,除去不必要的报告生成。

⊙ 对数据库的重组也是一项大的开销。设计中应考虑数据量和处理频度这两个因数,做到避免或尽量减少重组数据库。

在物理设计阶段,设计、评价、修改这个过程可能要反复多次,最终得到较为完善的物理数据库结构说明书。

建立数据库时,DBA依据物理数据库结构说明书,使用DBMS提供的工具可以进行数据库配置。

在数据库运行时,DBA监察数据库的各项性能,根据依据物理数据库结构说明书的准则,及时进行修正和优化 *** 作,保证数据库系统能够保持高效率地运行。

6程序编制及调试

在逻辑数据库结构确定以后,应用程序设计的编制就可以和物理设计并行地展开

程序模块代码通常先在模拟的环境下通过初步调试,然后再进行联合调试。联合调试的工作主要有以下几点:

(1) 建立数据库结构

根据逻辑设计和物理设计的结果,用DBMS提供的数据语言(DDL)编写出数据库的源模式,经编译得到目标模式,执行目标模式即可建立实际的数据库结构。

(2) 调试运行

数据库结构建立后,装入试验数据,使数据库进入调试运行阶段。运行应用程序,测试

(3) 装入实际的初始数据

在数据库正式投入运行之前,还要做好以下几项工作:

(1) 制定数据库重新组织的可行方案。

(2) 制定故障恢复规范

(3) 制定系统的安全规范

7运行和维护

数据库正式投入运行后,运行维护阶段的主要工作是:

(1) 维护数据库的安全性与完整性。

按照制定的安全规范和故障恢复规范,在系统的安全出现问题时,及时调整授权和更改密码。及时发现系统运行时出现的错误,迅速修改,确保系统正常运行。把数据库的备份和转储作为日常的工作,一旦发生故障,立即使用数据库的最新备份予以恢复。

(2) 监察系统的性能。

运 用DBMS提供的性能监察与分析工具,不断地监控着系统的运行情况。当数据库的存储空间或响应时间等性能下降时,立即进行分析研究找出原因,并 及时采取措施改进。例如,可通修改某些参数、整理碎片、调整存储结构或重新组织数据库等方法,使数据库系统保持高效率地正常运作。

(3) 扩充系统的功能

在维持原有系统功能和性能的基础上,适应环境和需求的变化,采纳用户的合理意见,对原有系统进行扩充,增加新的功能。

#include "stc2052h"

#include "mainh"

void ADC_init(void);

void del(INT8U x);

void uart_init(void);

void PutHex(INT8U cp,INT8U len);

void ADC_SPI_Routine(void);

void Putstr(char cs);

/用的是5406,12M晶体,波特率不能太大,用2400,

实验过程是 在P16脚 接25v电压,开AD 读到最终值是80H,7FH 左右/

void main()

{

EA=0;

P1M0=0x40;

P1M1=0x00; //表示第P16作为AD输入

EA=1;

uart_init();

ADC_init();

while(1){

del(100);

uart_s_buf[0] = ADC_DATA;

uart_s_buf[1]=0x23;

PutHex(uart_s_buf,2);

del(1000);

}

}

void ADC_init(void)

{

ADC_CONTR |= 0x06;

ADC_CONTR |= 0x80;//开启ADC电源

del(1);

ADC_CONTR |= 0x08; //启动AD

AUXR |= 0x10;

EADC_SPI = 1;

}

void del(INT8U yj)

{

INT8U yj2=5000;

while(yj!=0)

{

while(yj2!=0)

{

yj2--;

}

yj2=1000;

yj--;

}

}

void uart_init(void)

{

SCON = 0x50;

//SCON: mode 1,8-bit UART, enable rcvr

AUXR = 0x80; // 作在1T模式

// PCON = 0x80; // 加速

TMOD = 0x20; // TMOD: timer 1,mode 2,8-bit reload TL0 NO USED

TH1 = SYS_TDATA; / 2400 Bds at 111184MHz /

TL1 = SYS_TDATA; / 2400 Bds at 111184MHz /

// ES = 1; / Enable serial interrupt/

TR1 = 1;

/ Timer 1 run /

}

void PutHex(INT8U cp,INT8U len)

{

ES=0;

TI = 0;

while(len--)

{

SBUF=cp;

cp++;

while(TI==0); //等待发送结束,死循环,如果TI==0,则死循环,如果TI==1,则执行下条。 同while(TI==0){;};

TI=0;

}

ES=0;

}

void Putstr(char cs)

{

TI=0;

while(cs) / 例如 :指向数组的指针,例如

int b[10];

int a = b;

a就是b[0]的地址a就是b[0]的内容

a+1就是b[1]的地址依此类推

又如char a = "hank";

那么通过a就能得到整个字符串"hank"

a是h

(a+1)是a 所以发送完k后 就是(cs==0)0了,那就跳出循环 /

{

SBUF=cs;

cs++;

while(TI==0);

TI=0;

}

}

void ADC_SPI_Routine(void) interrupt 5

{

EADC_SPI = 0;

ADC_CONTR |= 0x08; //ADC_START启动

ADC_CONTR &= 0xef; //ADC_FLAG清零

EADC_SPI = 1;

}

以上就是关于单片机的AD中断功能是不是开启后就会不停的转换,不能定周期的转换这样单片还能干别的吗全部的内容,包括:单片机的AD中断功能是不是开启后就会不停的转换,不能定周期的转换这样单片还能干别的吗、单片机AD采集的C程序、使用AD0.NET开发数据库应用程序的开发流程,一般流程主要分为哪几个步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9780514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存