📄 main._c
字号:
/**************************************
**工程名称:雪深探测
**编译器类型及版本:ICCAVR 6.31A
**日期:2006.2.13
**创建人:覃道堂
**所属公司:北京华创升达
**************************************/
#include <iom16v.h>
#include <macros.h>
#include "init.h"
#include "Uart.h"
#include "crc.h"
#include "Eeprom16.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];
extern a;
//AT91S_PMC pAic1;
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
**调用的函数说明:无
**修改人:
**修改日期:
**修改说明:
**************************************/
long int measure(void)
{unsigned char i;
DDRA|=0x20;
DDRD|=0x80;
TCNT1H=0x00;
TCNT1L=0x00;
LENGTH=0x00;
PORTA&=0xdf;
TCCR1B = 0x02; //clk I/O/8(来自预分频器) 0.125us(微秒)
for(i=0;i<50;i++);
PORTD&=0x7f;
PORTD|=0x80;
//for(i=0;i<50;i++);
//PORTA&=0xdf;
while(JS==0x00);
//LENGTH=(TIMEH*16*16+(TIMEL>>4)*16+(TIMEL&0x0F));
LENGTH=((TIMEH<<8)|TIMEL);
JS=0x00;
PORTA|=0x20;
return(LENGTH);
}
void EN_init(void)
{
_asm("sei");
}
/**************************************
**芯片类型:ATmega16
**时钟频率:8M
**硬件接口说明:无
**函数功能说明:主函数,首先等待接收命令,接收到23H则进行数据检测,数据处理,
**函数输入参数及说明:jydata,JSM
**函数返回值:无
**在本函数以外定义的变量:无
**调用的函数说明:SHUJU();DATATEND()
**修改人:
**修改日期:
**修改说明:
**************************************/
void main(void)
{
unsigned char l=0,i;
float t;
long int h;
//a.k=0;
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(); //开中断
PORTA=0x00;
DDRA=0x20;
i=0;
PORTD=0x00;
DDRD=0x80;
i=0;
i=0;
i=0;
i=0;
PORTD=0x00;
i=0;
PORTA=0x20;
//Uart_PutChar(EEBuffer[0]);
//Uart_PutChar(EEBuffer[1]);
//SEI();
while(1)
h=measure();
Uart_PutChar(0x03);
Uart_PutChar(0x04);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -