STC89C52MCU--内外部资源2
来源:互联网 发布:php商城开发教程 编辑:程序博客网 时间:2024/06/06 00:45
A/D和D/A工作原理
A/D转换原理及指标
1. 采样保持 2.量化 3.编码
1.采样定理 fs >= 2*fimax, 一般情况下需要(3~5)fimax;
2.在用数字表示采样电压时,必须把它化成最小单位数量的整数倍,这个转化过程 就成为量化
3.量化的数值用二进制代码表示,成为编码。
直接A/D转换器:把输入电压直接转换成输出的数字量而不需要经过中间变量。常用的电路有 并行比较型和反馈比较型两类。
A/D转换器指标
1. 分辨率 2.转换误差3.转换精度4.转换时间
ADC0804为逐次比较型A/D转换芯片,转换精度为8位,转换时间100um,输入电压范围0~5V,芯片内部含有三态输出的数据锁存器可以直接和数据总线相连。
常见的D/A转换器有权电阻网络,倒T型电阻网络的D/A转换器
D/A转换器参数指标
1.分辨率 2.转换误差3.建立时间4.转换速率5.温度系数
DAC0832是非常普遍的8位D/A转换器,转换时间是1us,工作电压是+5~15V,基准电压是+10V。它主要由两个八位寄存器和一个八位D/A转换器组成。使用两个寄存器(输入寄存器和DAC寄存器)的好处是可以进行两级缓冲操作,是该操作具有更大的灵活性,其转换原理和T型解码网络一样,由于其片内由数据寄存器,故可以直接和单片机接口。DAC0832以电流形式输出,当需要转换成为电压时候,外界运算放大器。此芯片数据输入可采用双缓冲、单缓冲和直通方,此开发板设置数据读取方式为直通方式。
运放选择常见的单运放就可以,例如TL061,OP07.依照此开发板的电源可用情况,运放的输入电源可以从Max232电源芯片上面获取。
串行口通信原理及操作流程
串行通信:异步串行通信和同步串行通信,通信制式可以分为:单工,半双工和全双工。
异步通信是指发送和接收设备使用各自的时钟控制数据的发送和接收;异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符与字符之间不一定有“”位间隔“的整数倍关系,但同一字符内的各位之间的距离为“位间隔“的整数倍。
异步通信一帧字符由四部分组成:起始位、数据位、奇偶校验位和停止位。有的字符信息也带有空闲信息位形式,即在字符之间有空闲位。
同步串行通信:建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离为”位间隔“的整数倍并且同时传输的字符之间没有空闲位,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过外同步和字同步两种方式。
串行通信的错误校验
1.奇偶校验 2.代码和校验3.循环冗余校验
MAX232: TTL与RS-232负逻辑电平的转换,此芯片包含两路接收器和驱动器的IC芯片,它的内部也有一个电压变换器,可以直接把输入的+5V电压转换成RS-232输出电平需要的+010V电压。所以采用此芯片,只需要单一的5V电源就可以了。
波特率与定时器的关系
硬件知识:传输距离和传输速率反比关系;
单片机的串行通信口可以设定4中工作方式,其中只有1和3工作方式可以改变波特率,由定时器T1的溢出率决定;相反工作方式0和2波特率是一定的,不能进行修改!
方式0: baud rate = fosc/12
方式1: baud rate = (2^SMOD )/32 *(T1溢出率)
方式2: baud rate = (2^SMOD )/64 * fosc
方式1: baud rate = 2^SMOD /32 *(T1溢出率)
fosc: 处理器晶振频率
PD -- 掉电模式设定
PD = 0, 正常工作状态; PD= 1,Power Down模式,外部晶振,CPU,定时器,串行口全部停止工作,只有外部中断工作,此时可以通过硬件复位、低电平或者下降沿信号触发中断进行唤醒。
IDL -- 空闲模式设定
IDL= 1, 除了CPU不工作外其他都工作,可由任意中断或者硬件复位唤醒
T1溢出率就是T1的溢出频率,只需要计算出定时器T1每次溢出一次所需要的时间T,则 1/T就是溢出率。如果定时器工作在1方式下,则每次中断装填数据会导致误差越来越大,所以我们选择定时器2工作方式,即自动装填八位定时器。
51单片机串行口主要由两个独立里的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器)和发送控制器、接受控制器、输入移位寄存器以及若干门电路组成。51单片机可以通过特殊功能寄存器SBUF对串行接收或者发送的寄存器进行访问,两个寄存器共用一个地址99H, 但在物理上是两个独立的寄存器,有指令决定访问哪一个寄存器。串行接收器具有双缓冲结构,即在从接收寄存器读出一个已经收到的字符之前,就可以开始接收第二个字节。如果第二个字节接收完毕,第一个字节还没有读出来,则将丢失其中一个字节。
REN: 串行中断允许位
TI: 发送中断允许位
RI:接收中断允许位
二者均由硬件置位,需要在中断服务程序内清零。
SM2:多机通信控制位
SM2主要工作在2和3方式,当接收机的SM2=1时,可以利用收到的RB8来控制是否激活RI(RB8 = 0时候,不激活RI,丢弃接收到的信息;RB8 =1时候,接收到的数据进入SBUF内,并激活RI,而在中断服务程序内将数据从SBUF内读走)。当SM2=0时候,不论接收到的RB8的值,均可以使收到的数据进入SBUF,并激活RI。在方式零的时候,SM2必须是0,在方式1的时候,若SM2 = 1, 则有接受到有效停止位时,RI才置位。
TB8和RB8:分别为方式2、3中的第九位数据,可用来作为奇偶校验位或者地址帧/数据帧的标志位。方式0/1中,TB8没用,RB8在方式1时,若SM2 = 0,则RB8接收到停止位。
方式0: 主要用于扩展并行输入输出,数据由RXD(P3.0)引脚输入或者输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据,低位在前,高位在后,波特率固定为fsoc/12;
方式1:1位起始位、8位数据位、1位结束位
方式2,3: 1位起始位、9位数据位、1位结束位;方式2波特率固定为晶振的1/32 或者 1/64,方式3的波特率由T1的溢出率决定;二者差别仅在于波特率的选取不一样,在两种方式下,接收到的停止位与SBUF,RB8及RI都无关。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag, a ,i;
uchar code table[] ="I get ";
void main()
{
TMOD = 0x20;
TH1 = 0xfd;
TH2 = 0xfd;
TR1 =1; //时钟T1启动位
REN = 1; //允许串行接收位
SM0 = 0; //工作方式选取串口工作方式1
SM1 = 1;
EA = 1; //全局中断允许位
ES = 1; //串口中断允许位
while(1)
{
if(flag ==1)
{
ES =0;
for(i=0;i<6;i++)
{
SBUF = table[i];
while(!TI); //数据发送完毕后,硬件置位
TI = 0;
}
SBUF =a;
while(!TI);
TI =0;
ES =1;
flag =0;
}
}
}
void UART_ipt() interrupt 4
{
RI =0;
a = SBUF;
flag =1;
}
- STC89C52MCU--内外部资源2
- STC89C52MCU--内外部资源1
- STC89C52MCU--内外部资源3
- STC89C52MCU--基础知识2
- 内外部存储大小
- 内外部参数
- 内部类 外部类
- 创建内外部文件
- jquery内外部插入
- SpringMVC 内外部视图
- SpringMVC 内外部视图
- 内部类、外部类
- 外部学习资源备注
- Unity3D加载外部资源
- spring加载外部资源
- 加载外部资源
- Tomcat访问外部资源
- 外部资源编码设置
- JAVA-RabbitMQ使用示例
- tf.Graph
- Virtual Friends<并查集+map求解>
- spring hibernate 整合 属性详解
- centos 7.x mysql 5.7 开启慢查询
- STC89C52MCU--内外部资源2
- 关于如何在gitter聊天软件中发送图片
- Windows & RabbitMQ:集群(clustering) & 高可用(HA)
- RedHat下忘记Mysql的root密码
- 如何用快启动pe修复win10系统引导? 神器
- jQuery——样式与动画
- 2017腾讯编程题----素数对
- 狗和猫有相同的情绪反应吗?
- DBCP连接池