(原创)基于单片机控制的AD592水温监测系统-总体结构及原理
0赞1 交叉开关的设置
C8051中,交叉开关负责SMBUS、SPI、UART、定时器捕捉模块、外部FAC输入、比较器输出、定时器外部输入、SYSCLK以及A/D转换启动输入的引脚分配。必须在访问这些外设的I/O值钱配置和允许交叉开关。未被指定的端口引脚作通用的I/O引脚。
为了确定引脚分配,首先根据所需要的外设来配置交叉开关寄存器,然后从优先权交叉开关译码表的顶部开始向下扫描,知道遇到第一个被允许的外设部件。该设备将适用P0.0,如果需要多个引脚,则可以按顺序从P0.1向后分配。例如,如果SPI是第一个被允许的外设,则SCK,MISO和NSS将分别被分配到P0.0,P0.1,P0.2,P0.3.
在此C8051F020的串口提供标准的异步、全双工通信每个数据字节共使用10位;一个起始位、8个数据位(LBS在先)和一个停止位。数据从TX0引脚发送,在RXO引脚接收。在接收时,8个数据位存入SBUF0,停止位进入RB80。
通过设置交叉开关UART0EN:XBR0.2,允许UARTO和端口输出。
对UART0的控制和访问是通过相关的特殊功能寄存器即串行控制寄存器(SCON0)和串行数据缓冲器(SUBF0)来实现的。一个SUBF0地址可以访问发送寄存器和接收寄存器。读操作将自动访问接收寄存器,而写操作自动访问发送寄存器。
UART0提供四种工作方式(一种同步方式和三种异步方式),通过设置SCON0寄存器中的配置位选择。这四种方式提供不同的波特率和通信协议。
2振荡器的设置
C8051的振荡器还具有灵活和易于使用的特点。系统时钟可以自由地在内部振荡器和外部振荡器之间进行切换,也可以在选择内部振荡器时让外部振荡器保持在允许状态,这样可以避免在系统时钟被切换到外部振荡器的启动延迟,外部振荡器具有很高的可配置性,位系统设置者提供了多种选择。时机信号可以从外部CMOS电平时钟源、晶体或陶瓷谐振器、Rc组合电路或外部电容获得。内部和外部振荡器的工作受两个SFR寄存器即(SCLCN(内部振荡器控制寄存器)和scXCN(外部振荡器控制寄存器)控制。
6.3单片机对传入信息的处理
A 从AD592获取温度值
writeByteToDs18B20(READ_SRAM);
low=readByteFrom Ds18B20z();
high=read Byte From ds18b20();
t=low+high*256;
if((high&0xf8)!=0)
symbol=1;
else symbol=0;
if(symbol) //温度为负
t=-t;
t=t&0x07ff;
t=(t/16.0)*100;
return t;
B 启动AD592的温度转化功能
resetDs18b20();
writebytetods18b20(SKIP_ROM);
writebytetods18b20(CONVERT_T); //启动AD转换
C 读取AD592的序列号,写入SN[]
while(resetDs18b20());
writebytetods18b20(READ_ROM);//读取ROM
for(i=0;i<8;i++)
{
SN[i]=readbytefromDs18b20();
}
D 读取与指定的AD592相匹配的温度值
For(i=0;i<30000;i++);
resetDs18b20();
skipROMCode();
writeBytetods18b20(CONVERT_T);
Delaylus(2);
resetDs18b20(ID);
t=getTempvaue();
return(t);