F320的ADC及UART报告.docx
- 文档编号:26843687
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:33
- 大小:1.48MB
F320的ADC及UART报告.docx
《F320的ADC及UART报告.docx》由会员分享,可在线阅读,更多相关《F320的ADC及UART报告.docx(33页珍藏版)》请在冰豆网上搜索。
F320的ADC及UART报告
测控软件报告
F320ADC及UART的应用
目录
F320的ADC和温度传感器应用1
一、实验目的及所需仪器1
二、实验原理及实验方法分析1
1、ADC工作原理1
2、温度传感器工作原理3
3、实验方法分析:
4
三、软件的设计4
1、软件结构的伪代码描述4
2、芯片配置的流程描述4
四、设计的代码11
五、设计结果13
六、设计中的注意事项14
F320UART报告15
一、实验目的及所需仪器15
二、实验原理及思路分析15
1、UART0实验原理:
15
2、实验思路:
16
三、配置及程序的设计16
1、配置设置流程16
2、程序代码设计21
3、在KEIL中设置:
22
四、设计运行结果23
五、设计中遇到的问题及解决方法24
收获与心得24
F320的ADC和温度传感器应用
——ADC采样温度传感器,并将结果输出到PC
一、实验目的及所需仪器
实验目的:
C8051F320的ADC和温度传感器应用展示——ADC采样温度传感器采集的外界温度值,并将结果输出到PC;加深对ADC采样、写Busy触发、温度传感器编程控制的理解。
所需仪器:
C8051F320DK套件、PC
二、实验原理及实验方法分析
原理分析:
由于该案例的主体部分主要涉及对ADC、温度传感器的操控,故下面就这两部分的原理进行描述。
1、ADC工作原理
(1)ADC概述
C8051F320的ADC0子系统集成了两个17通道模拟多路选择器(合称AMUX0)和一个200ksps的10位逐次逼近寄存器型ADC,ADC中集成了跟踪保持电路和可编程窗口检测器。
ADC0可以工作在单端方式或差分方式,可以被配置为用于测量P1.0~P3.0、温度传感器输出或VDD(相对于P1.0~P3.0、VREF或GND)。
只有当ADC控制寄存器(ADC0CN)中的AD0EN位被置‘1’时ADC0子系统才被使能。
当AD0EN位为‘0’时,ADC0子系统处于低功耗关断方式。
(2)ADC模拟多路选择器
模拟多路选择器(AMUX0)选择去ADC的正输入和负输入,P1.0~P3.0、片内温度传感器输出和正电源(VDD)中的任何一个都可以被选择为正输入;P1.0~P3.0、VREF和GND中的任何一个都可以被选择为负输入。
当GND被选择为负输入时,ADC0工作在单端方式;在所有其它时间,ADC0工作在差分方式。
ADC0的输入通道由寄存器AMX0P和AMX0N选择。
每次转换结束后,寄存器ADC0H和ADC0L中保存ADC转换结果的高字节和低字节。
转换数据在寄存器对ADC0H:
ADC0L中的存储方式可以是左对齐或右对齐,由AD0LJST位(ADC0CN.0)的设置决定。
当工作在单端方式时,转化码为10位无符号整数,所测量的输入范围为0~VREF*1023/1024。
当工作在差分方式时,转化码为10位有符号整数(2的补码),所测量的输入范围为-VREF~VREF*511/512。
(3)ADC工作方式
ADC0的最高转换速度为200ksps。
ADC0的转换时钟由系统时钟分频得到,分频系数由ADC0CF寄存器的AD0SC位决定(转换时钟为系统时钟/(AD0SC+1),0≤AD0SC≤31)。
有6种A/D转换启动方式,由ADC0CN中的ADC0转换启动方式位(AD0CM2-0)的状态决定采用哪一种方式。
转换触发源有:
1.写‘1’到ADC0CN的AD0BUSY位;
2.定时器0溢出(即定时的连续转换);
3.定时器2溢出;
4.定时器1溢出;
5.CNVSTR输入信号(P0.6)的上升沿;
6.定时器3溢出。
向AD0BUSY写‘1’方式提供了用软件控制ADC0转换的能力。
AD0BUSY位在转换期间被置‘1’,转换结束后复‘0’
寄存器ADC0CN中的AD0TM位控制ADC0的跟踪保持方式。
在缺省状态,ADC0输入被连续跟踪(转换期间除外)。
当AD0TM位被置‘1’时,ADC0工作在低功耗跟踪保持方式。
在该方式,每次转换前有3个SAR时钟的跟踪时间
当ADC输入配置发生改变时(即AMUX0的选择发生变化),在进行一次精确的转换之前需要有一个最小的跟踪时间。
该跟踪时间由AMUX0的电阻、ADC0采样电容、外部信号源阻抗及所要求的转换精度决定
(4)ADC可编程窗口检测器
ADC可编程窗口检测器不停地将ADC0输出与用户编程的极限值进行比较,并在检测到越限条件时通知系统控制器。
这在一个中断驱动的系统中尤其有效,既可以节省代码空间和CPU带宽又能提供快速响应时间
2、温度传感器工作原理
温度传感器的典型传输函数示于图5.2。
当温度传感器被寄存器AMX0P中的AMX0P4-0位选中时,输出电压(VTEMP)为ADC的正输入。
注意:
影响ADC测量精度的参数,尤其是基准电压值,也同样会影响温度测量的精度。
由于对ADC及温度传感器均集成在芯片C8051F320内部,故硬件的电路部分无需过多考虑,根据ADC的工作方式及温度传感器的输出函数,在软件编程时控制中断的产生即可完成对温度的采样和输出。
3、实验方法分析:
根据对C8051F320的说明书以及原理图的阅读可以知道,320DK上10位的ADC可以采集温度传感器随温度变化的数据,并通过串口将结果输出到PC机上显示出来。
通过查阅ADC及温度传感器的芯片资料和使用说明,我们可以选择写Busy触发中断来控制采样温度的输出及显示,在实验过程中使温度传感器所处的外界温度变化,从而PC机上显示的数据也将改变,以此验证实验的正确性。
三、软件的设计
1、软件结构的伪代码描述
我们在设计程序时常常会编写简单的程序来使某发光二级管闪烁,以此对程序是否运行作粗略的判断,所以下面的程序中,我们对与P2.2口连接的发光二级管进行取反控制,使其闪烁。
接下来的思路是选择ADC的启动方式,我们选择的是写‘1’到ADC0CN的AD0BUSY位,在配置时,使ADC工作在单端方式,转换结果存储到ADC0L和ADCOH中,根据温度传感器的典型传输函数V=2.86t+776及典型电压值Vr=2.44V,计算出此时的温度值,最后用printf函数显示出转换结果。
2、芯片配置的流程描述
1.关闭看门狗
2、对PortI/O进行配置
将I/O口设置为推挽模式
3.配置晶振(内部晶振24MHZ)
4.配置timer1—波特率设置为9600Hz
选择正确的定时器
5.配置UART0
F320只有一个串口,默认原有设置即可。
6.配置ADC
7.配置参考电压
3、配置完成后的Config文件
#include"C8051F320.h"
//Peripheralspecificinitializationfunctions,
//CalledfromtheInit_Device()function
voidPCA_Init()
{
PCA0MD&=~0x40;
PCA0MD=0x00;
}
voidTimer_Init()
{
TCON=0x40;
TMOD=0x20;
TH1=0x98;
}
voidADC_Init()
{
AMX0P=0x1E;
AMX0N=0x1F;
ADC0CF=0xB8;
ADC0CN=0x80;
}
voidVoltage_Reference_Init()
{
REF0CN=0x07;
}
voidPort_IO_Init()
{
//P0.0-Unassigned,Open-Drain,Digital
//P0.1-Unassigned,Open-Drain,Digital
//P0.2-Unassigned,Open-Drain,Digital
//P0.3-Unassigned,Open-Drain,Digital
//P0.4-TX0(UART0),Push-Pull,Digital
//P0.5-RX0(UART0),Open-Drain,Digital
//P0.6-Unassigned,Open-Drain,Digital
//P0.7-Unassigned,Open-Drain,Digital
//P1.0-Unassigned,Open-Drain,Digital
//P1.1-Unassigned,Open-Drain,Digital
//P1.2-Unassigned,Open-Drain,Digital
//P1.3-Unassigned,Open-Drain,Digital
//P1.4-Unassigned,Open-Drain,Digital
//P1.5-Unassigned,Open-Drain,Digital
//P1.6-Unassigned,Open-Drain,Digital
//P1.7-Unassigned,Open-Drain,Digital
//P2.0-Unassigned,Open-Drain,Digital
//P2.1-Unassigned,Open-Drain,Digital
//P2.2-Unassigned,Push-Pull,Digital
//P2.3-Unassigned,Push-Pull,Digital
P0MDOUT=0x10;
P2MDOUT=0x0C;
XBR0=0x01;
XBR1=0x40;
}
voidOscillator_Init()
{
inti=0;
CLKMUL=0x80;
for(i=0;i<20;i++);//Wait5usforinitialization
CLKMUL|=0xC0;
while((CLKMUL&0x20)==0);
CLKSEL=0x02;
}
//Initializationfunctionfordevice,
//CallInit_Device()fromyourmainprogram
voidInit_Device(void)
{
PCA_Init();
Timer_Init();
ADC_Init();
Voltage_Reference_Init();
Port_IO_Init();
Oscillator_Init();
}
四、设计的代码
1、主函数:
(含详细注释)
2、整体程序
五、设计结果
用串口线将开发板与PC机连接,其运行的结果可以通过串口助手显示出来。
若使单片机所在的外界温度上升,单片机内集成的传感器感受到温度的变化,PC机上显示的温度值也随着逐渐上升,从而验证了实验的正确性和可靠性。
可以观察到温度的变化
从372到374
六、设计中的注意事项
1.对设计中的容易混淆、容易产生误会以及编码方式、构思方式等进行总结。
2.根据320的使用说明书,只能选择Timer0而不能是其他的定时器进行配置。
3.晶振要先配置,否则后面配置会出现错误。
4.I/O口必须配置为推挽模式,容易忘记对交叉开关的使能。
5.对温度传感器的说明部分,忽略对参考电压典型值V的查阅导致根据典型传输函数计算出的温度值不正确。
6.在定义变量的类型时,选择字符型、整型或浮点型要仔细考虑,做到既节约空间,又不会溢出;若程序编译正确而运行结果不对时,有可能是溢出造成的,这样的错误难以找到。
7.阅读说明书的时间远远超过动手编写程序的时间,理解说明书至关重要。
8.这篇报告时在离实验完差不多半个月才完成的,老师实验课上讲的很多东西都忘记了,但自己动手操作过的某些知识还是记忆犹新,所以“纸上得来终觉浅,绝知此事要躬行”。
F320UART报告
一、实验目的及所需仪器
实验目的:
在keil环境下构造一个单片机串口操作的程序,该程序不停的向串口发送一个字符串。
通过PC接收并显示该信息。
所需仪器及软件:
F320开发板套件,keil,config2,PC超级终端或串口助理
二、实验原理及思路分析
1、UART0实验原理:
UART0是一个异步.全双工串口,它提供标准8051串行口的方式1和方式3。
UART0具有增强的波特率发生器电路,有多个时钟源可用于产生标准波特率。
接收数据缓冲机制允许UART0在软件尚未读取前一个数据字节的情况下开始接收第二个输入数据字节。
UART0有两个相关的特殊功能寄存器:
串行控制寄存器(SCON0)和串行数据缓冲器(SBUF0)。
用同一个SBUF0地址可以访问发送寄存器和接收寄存器。
写SBUF0时自动访问发送寄存器;读SBUF0时自动访问接收寄存器,不可能从发送数据寄存器中读数据。
如果UART0中断被允许,则每次发送完成(SCON0中的TI0位被置‘1’)或接收到数据字节(SCON0中的RI0位被置‘1’)时将产生中断。
当CPU转向中断服务程序时硬件不清除UART0中断标志。
中断标志必须用软件清除,这就允许软件查询UART0中断的原因(发送完成或接收完成)。
工作方式:
UART0提供标准的异步/全双工通信,其工作方式(8位或9位)通过S0MODE位(SCON0.7)来选择。
典型的UART连接方式如图3所示。
图3UART连接示意图
在8位UART方式,每个数据字节共使用10位:
一个起始位、8个数据位(LSB在先)和一个停止位。
数据从TX0引脚发送,在RX0引脚接收。
在接收时,8个数据位存入SBUF0,停止位进入RB80(SCON0.2)。
当软件向SBUF0寄存器写入一个字节时开始数据发送。
在发送结束时(停止位开始)发送中断标志TI0(SCON0.1)被置‘1’。
在接收允许位REN0(SCON0.4)被置‘1’后,数据接收可以在任何时刻开始。
收到停止位后,如果满足下述条件,则数据字节将被装入到接收寄存器SBUF0:
RI0必须为逻辑‘0’;如果MCE0为逻辑‘1’,则停止位必须为‘1’。
在发生接收数据溢出的情况下,先接收到的8位数据被锁存到SBUF,而后面的溢出数据被丢弃。
如果这些条件满足,则8位数据被存入SBUF0,停止位被存入RB80,RI0标志被置位。
如果这些条件不满足,则不装入SBUF0和RB80,RI0标志也不会被置‘1’。
如果中断被允许,在TI0或RI0置位时将产生一个中断
2、实验思路:
为实现F320串口通信的要求,应当按照以下几个步骤来进行。
1、打开configwizard,建立一个F020的配置项目。
对下面的几个地方进行配置
2、在Keil下建立一个名为Uart0的项目,存放在名为Uart0的文件夹里;
3、将配置好的Config文件复制到keil中,并编写主函数代码
4、调试并运行程序
三、配置及程序的设计
1、配置设置流程
在Config2中选择F320,然后对F320进行配置
A)
在菜单的Peripherals->Resetsources对话框中关闭看门狗
B)在菜单的Peripherals->Oscillators对话框选择晶振。
C)设置推挽模式:
在Peripheral->PortI/O对话框中允许交叉开关和串口,并将Tx引脚设置为推挽模式。
C)在菜单的Peripherals->Oscillators对话框选择晶振。
E)在Peripherals->Timers中选择定时器1并将频率调整为9600Hz
F)在Peripherals->Interrupts中选用定时器1
配置完成后的Config文件如下:
/////////////////////////////////////
//GeneratedInitializationFile//
/////////////////////////////////////
#include"C8051F320.h"
//Peripheralspecificinitializationfunctions,
//CalledfromtheInit_Device()function
voidPCA_Init()
{
PCA0MD&=~0x40;
PCA0MD=0x00;
}
voidTimer_Init()
{
TCON=0x40;
TMOD=0x20;
TH1=0x98;
}
voidPort_IO_Init()
{
//P0.0-Unassigned,Open-Drain,Digital
//P0.1-Unassigned,Open-Drain,Digital
//P0.2-Unassigned,Open-Drain,Digital
//P0.3-Unassigned,Open-Drain,Digital
//P0.4-TX0(UART0),Push-Pull,Digital
//P0.5-RX0(UART0),Open-Drain,Digital
//P0.6-Unassigned,Open-Drain,Digital
//P0.7-Unassigned,Open-Drain,Digital
//P1.0-Unassigned,Open-Drain,Digital
//P1.1-Unassigned,Open-Drain,Digital
//P1.2-Unassigned,Open-Drain,Digital
//P1.3-Unassigned,Open-Drain,Digital
//P1.4-Unassigned,Open-Drain,Digital
//P1.5-Unassigned,Open-Drain,Digital
//P1.6-Unassigned,Open-Drain,Digital
//P1.7-Unassigned,Open-Drain,Digital
//P2.0-Unassigned,Open-Drain,Digital
//P2.1-Unassigned,Open-Drain,Digital
//P2.2-Unassigned,Open-Drain,Digital
//P2.3-Unassigned,Open-Drain,Digital
P0MDOUT=0x10;
XBR0=0x01;
XBR1=0x40;
}
voidOscillator_Init()
{
inti=0;
CLKMUL=0x80;
for(i=0;i<20;i++);//Wait5usforinitialization
CLKMUL|=0xC0;
while((CLKMUL&0x20)==0);
CLKSEL=0x02;
}
voidInterrupts_Init()
{
IE=0x88;
}
//Initializationfunctionfordevice,
//CallInit_Device()fromyourmainprogram
voidInit_Device(void)
{
PCA_Init();
Timer_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
2、程序代码设计
在keil中新建项目并命名为UART。
选择F320
添加发送消息的主函数如下:
i的作用:
作为一个打印的标记。
标志出打印的次数,也可说明F320在不断的发送消息。
将C文件添加到项目中,调试无误后下载到F320中,将F320与计算机相连,可以接收到发出的消息。
3、在KEIL中设置:
Debug中:
Utilities中:
四、设计运行结果
已经显示了信息
通过i的标记可以看出
在循环发出消息
五、设计中遇到的问题及解决方法
1.I/O口必须配置为推挽模式,容易忘记对交叉开关的使能。
2.晶振要先配置,否则后面配置会出现错误。
3.在定义变量的类型时,选择字符型、整型或浮点型要仔细考虑,做到既节约空间,又不会溢出;若程序编译正确而运行结果不对时,有可能是溢出造成的,这样的错误难以找到。
4.阅读说明书的时间远远超过动手编写程序的时间,理解说明书至关重要。
5.在windosXP系统中可以用超级终端接收信息,而在我使用的windos7中没有超级终端,可以使用stc公司的串口助手完成接收信息的步骤。
6.这篇报告时在离实验完差不多半个月才完成的,老师实验课上讲的很多东西都忘记了,但自己动手操作过的某些知识还是记忆犹新,所以“纸上得来终觉浅,绝知此事要躬行”。
收获与心得
测控软件技术基础的这次实验主要在C8051F020和C8051F320开发板上完成,实验过程中我理解了接口的基本概念,学习了常见外设的应用,提高了单片机软件的应用和开发能力。
掌握C8051F系列单片机应用开发的流程,以及基本学会构建诸如灯闪、ADC、Uart、Timer等及其中断的使用。
通过课堂的学习和自己学习例程,我做出了UART和ADC两个实验。
在实践的过程中,对Config软件有了更好的掌握,并且对C语言的知识有了更好的理解。
在这次学习的过程中与荣霞同学一组使用F320等器材,我们一起研究,她为我讲解了一些我不太清楚的问题。
对我后面自己写程序有所帮助。
在这学期学习测控软件技术基础的过程中,我感受到了C语言是编程的基础,它的使用方法和思维方式和其他语言如汇编语言是互通的,理解和掌握C语言,对今后自己的编程能力有很大的影响。
在学习的过程中,老师一直培养我的编程逻辑思维方式,交给我如何自己看例程学习的良好方法,都会让我在今后的学习生活中有所收益。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- F320 ADC UART 报告