snifer

(原创)基于单片机控制的AD592水温监测系统-总体结构及原理

0
阅读(22818) 评论(4)

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);

  1. 有些收获

  2. 呵呵,目前用在了一个鱼塘的项目中了。yeah

  3. 不错^_^