📄 编辑
字号:
/**************************************
**工程名称:雪深探测
**编译器类型及版本:ICCAVR 6.31A
**日期:2006.2.13
**创建人:覃道堂
**所属公司:北京华创升达
**************************************/
#include <iom16v.h>
#include <macros.h>
#include "init.h"
#include "Uart.h"
#include "crc.h"
#include "Eeprom.h"
#include "DS18B20.H"
//============================================================
//定义串口缓冲,同时声明数据Buffer
unsigned char SendData[100];
unsigned char SendBuf[100];
unsigned char ReceiveBuf[150];
//============================================================
//申明外部温度变量
extern float temperature;
//============================================================
//定义EE缓冲变量
unsigned char EEBuffer[100];
char JS=0,JC=0,JSM=0,mcount=0;
unsigned int TIMEL,TIMEH,TIMEHH=0;//超声波检测时间的低位字节和高位字节
long int LENGTH,jydata=0;
/**************************************
**芯片类型:ATmega16
**时钟频率:8M
**硬件接口说明:无
**函数功能说明:接收从串口接收到的数据
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:字符型JSM
**调用的函数说明:无
**修改人:
**修改日期:
**修改说明:
**************************************/
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
JSM=UDR;
}
/**************************************
**芯片类型:ATmega16
**时钟频率:4M
**硬件接口说明:无
**函数功能说明:利用定时器0使检测标志5HZ变化一次
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:无
**调用的函数说明:无
**修改人:
**修改日期:
**修改说明:
**************************************/
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0x3D;//reload counter value
mcount++;
if(mcount==8)
{mcount=0;
JC=0xFF;}
}
/**************************************
**芯片类型:ATmega16
**时钟频率:4M
**硬件接口说明:无
**函数功能说明:利用外部中断0来检测超声波传感器回波
收到回波后将计数器的值保存,并置位回波标志
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:TIMEL、TIMEH、JS
**调用的函数说明:无
**修改人:
**修改日期:
**修改说明:
**************************************/
#pragma interrupt_handler int0_isr:02
void int0_isr(void)
{
TCCR1B =0x00;
TIMEL =TCNT1L;
TIMEH =TCNT1H;
JS =0xFF;
}
/**************************************
**芯片类型:ATmega16
**时钟频率:8M
**硬件接口说明:无
**函数功能说明:检测函数,向超声波传感器发送检测脉冲同时启动定时器1进行计时
**函数输入参数及说明:无
**函数返回值:LENGTH
**在本函数以外定义的变量:TIMEL、TIMEH、LENGTH、JS
**调用的函数说明:无
**修改人:
**修改日期:
**修改说明:
**************************************/
float measure(void)
{unsigned char i;
TCNT1H=0x00;
TCNT1L=0x00;
LENGTH=0x00;
PORTD=0x68;
TCCR1B = 0x02; //clk I/O/8(来自预分频器) 0.125us(微秒)
for(i=0;i<50;i++);
PORTD=0x60;
while(JS==0x00);
//LENGTH=(TIMEH*16*16+(TIMEL>>4)*16+(TIMEL&0x0F));
LENGTH=((TIMEH<<8)|TIMEL);
JS=0x00;
return(LENGTH);
}
/**************************************
**芯片类型:ATmega16
**时钟频率:8M
**硬件接口说明:无
**函数功能说明:主函数,首先等待接收命令,接收到23H则进行数据检测,数据处理,
**函数输入参数及说明:jydata,JSM
**函数返回值:无
**在本函数以外定义的变量:无
**调用的函数说明:SHUJU();DATATEND()
**修改人:
**修改日期:
**修改说明:
**************************************/
void main(void)
{
unsigned char l,i,k;
float t;
init_devices();
ext_init();
_CLI();//读温度时关闭中断
Uart_PutChar(0x01);
Uart_PutChar(0x02);
l=Read_Temperature();
t=temperature;
Read_EEPROM(EEBuffer,10,10);
Uart_PutChar(EEBuffer[0]);
Uart_PutChar(EEBuffer[1]);
for(i=0;i<10;i++)
{
EEBuffer[i]=0x0a;
}
EEBuffer[1]=0x0b;
Write_EEPROM(EEBuffer,10,10);
for(i=0;i<10;i++)
EEBuffer[i]=0;
Read_EEPROM(EEBuffer,10,10);
_SEI(); //开中断;//读温度时关闭中断
//Uart_PutChar(EEBuffer[0]);
//Uart_PutChar(EEBuffer[1]);
t=measure();
_CLI();
Uart_PutChar(0x03);
Uart_PutChar(0x04);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -