-
对不起,实在看不清楚。
-
希望如此!
-
终于有了。
-
AD采集采用了8次采集滑动滤波,数据稳定可靠!最多可以到16次!
-
+12V 就是蓄电池的输入端!
-
软件模拟串口,9600很可靠。
-
//********************************
#include "Use.h"
#include "Ver.H"
#include
#define JL_OUT GPIO1 //低电压电位保护
#define JH_OUT GPIO2 //高电压电位保护
#define MAX_REF (5000) //5.00v
#define MAX_UK (10) //变比系数10最大测量范围
/*-----------------------------------------------------------
//ADCON0 ADFM VCFG - - CHS1 CHS0 GO/DONE ADON 00-- 0000 58,83
ADFM: A/D 结果格式选择位
1 = 右对齐
0 = 左对齐
//ch=输入的ADC的通道 B0000_1111
--------------------------------------------------------------*/
void ADC_Init(unsigned char ch){
ANSEL =B0111_0000 | ch; //使用内部特殊RC=500K
CMCON0 =B0000_0111; //Cout在内部,V-=Cin-
TRISIO =B0000_1000 | ch; //必须采用或处理
if(ch & B0000_1000) TRISIO |=B0001_0000; //CH4=ENABLED
}
//-----------------------------------------------------------
//ADC采集开始
unsigned int ADC(unsigned char channel){ //AD转换.
const unsigned char ADCNok[]={
B1000_0001,B1000_0101,B1000_1001,B1000_1101,
};
while(GODONE); //等待转换完成.查询方式.
ADCON0=ADCNok[channel];
GODONE=1; //开启转换过程.
while(GODONE); //等待转换完成.查询方式.
return (ADRESH Mp1.UH){
JH_OUT=1;
}else{
if( Current_U
-
#include "Use.h"
#include "Ver.H"
/**************************************************************
UART接收程序在这里完成P0.4接收!
协议:
正常使用后,GPIO3=RXD;GPIO5=TXD!!GPIO4=0 进入下载模式!
波特率:9600 8 n 1
**************************************************************/
#define Uart_IN_IO GPIO3 //GPIO3=接收!
#define MAX_RS232_CNT 20 //通讯的字节数
//**************************************************************
unsigned char Get_Uart_Rece_Dat (void ){
unsigned char i,bt;
//************************************************************
bt=8;
i=0;
BPS_Delay();
while(bt--){
i>>=1;
if(Uart_IN_IO) i |=0x80;
//*************************************************************
//延时等待下一个位
BPS_Delay();
}
//************************************************************
//等待结束位 (1)
//BPS_Delay();
return i;
}
//-----------------------------------------------------------------------
static char getBuf[MAX_RS232_CNT],cnt=0; //接收缓存!
static unsigned char fFlag=0;
//********************************************************************
void Uart_Rece (void ){
//***********************************************************
//产生中断,开始接收!查询!
getBuf[cnt]=Get_Uart_Rece_Dat();
fFlag=5;
if(++cnt >=sizeof(getBuf)) cnt=0;
}
//********************************************************************
void SendBack(void){
unsigned char i;
if(fFlag==0) return;
if(fFlag--==1){
//**************************************
//数据校验!
if(getBuf[0]=='U'){
if(cnt>1){ //查询参数
Mp1.Uo=atoi(&getBuf[2]);
WriteToEexx();
}
i=sprintf(getBuf,"Uo=%d mV\r\n",Mp1.Uo);
}
if(getBuf[0]=='L'){
if(cnt>1){ //查询参数
Mp1.UL=atoi(&getBuf[2]);
WriteToEexx();
}
i=sprintf(getBuf,"UL=%d mV\r\n",Mp1.UL);
}
if(getBuf[0]=='H'){
if(cnt>1){ //查询参数
Mp1.UH=atoi(&getBuf[2]);
WriteToEexx();
}
i=sprintf(getBuf,"UH=%d mV\r\n",Mp1.UH);
}
//----------------------------------
if(getBuf[0]=='W'){
i=sprintf(getBuf,"U=%d mV \r\n",Current_U);
}
//----------------------------------
if(getBuf[0]==0 || getBuf[0]=='0'){
while(1); //等待看门狗复位MCU ,重新开始!
}
SendOut(getBuf,i);//数据回发,检验是否正确!
memset(getBuf,0,MAX_RS232_CNT);
cnt=0;
}
}
-
不知道实际使用会差多远?
-
#define SHT75_SCK GPIO1 //定义通讯时钟端口
#define SHT75_SDA GPIO0 //定义通讯数据端口
#define NOP_1uS() NOP()
//*********************第二部分DHT90设置 START****************************************
#define noACK 0 //用于判断是否结束通讯
#define ACK 1 //结束数据传输
//adr command r/w
#define STATUS_REG_W 0x06 //000 0011 0
#define STATUS_REG_R 0x07 //000 0011 1
#define MEASURE_TEMP 0x03 //000 0001 1
#define MEASURE_HUMI 0x05 //000 0010 1
#define RESET 0x1e //000 1111 0
#define TEMP 0
#define HUMI 1
/****************定义函数****************/
void SHT75_transstart(void); //启动传输函数
void SHT75_connectionreset(void); //连接复位函数
char SHT75_write_byte(unsigned char value);//DHT90写函数
char SHT75_read_byte(unsigned char ack); //DHT90读函数
char SHT75_measure(unsigned char *p_value,unsigned char mode);//测量温湿度函数
//void calc_dht90(float *p_humidity ,float *p_temperature);//温湿度补偿
/*--------------------------------------
;模块名称:SHT75_transstart();
;功 能:启动传输函数
;占用资源:--
;参数说明:--
;创建日期:2008.08.15
;版 本:FV1.0(函数版本Function Version)
;修改日期:--
;修改说明:--
;-------------------------------------*/
void SHT75_transstart(void){
// generates a transmission start
// _____ ________
// SHT75_SDA: |_______|
// ___ ___
// SHT75_SCK : ___| |___| |______
SHT75_SDA=1;
SHT75_SCK=0; //Initial state
NOP_1uS();
SHT75_SCK=1;
NOP_1uS();
SHT75_SDA=0;
NOP_1uS();
SHT75_SCK=0;
NOP_1uS();NOP_1uS();NOP_1uS();
SHT75_SCK=1;
NOP_1uS();
SHT75_SDA=1;
NOP_1uS();
SHT75_SCK=0;
}
/*--------------------------------------
;模块名称:SHT75_connectionreset();
;功 能:连接复位函数
;占用资源:--
;参数说明:--
;创建日期:2008.08.15
;版 本:FV1.0(函数版本Function Version)
;修改日期:--
;修改说明:--
;-------------------------------------*/
void SHT75_connectionreset(void){
// communication reset: SHT75_SDA-line=1 and at least 9 SHT75_SCK cycles followed by transstart
// _____________________________________________________ ________
// SHT75_SDA: |_______|
// _ _ _ _ _ _ _ _ _ ___ ___
// SHT75_SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___| |______
unsigned char i;
SHT75_SDA=1;
SHT75_SCK=0; //Initial state
for(i=0;i
-
做的好,有以太网口就好。
-
即便是C的,也懒得看。自己的库也很丰富。
-
眼大5子 发表于 2014-2-7 14:49
串口数据比较频繁能用不?波特率调高可以吗
数据看你的RAM有多少,40个我测试没有问题。波特率不宜再高了。偏差大了。!
-
眼大5子 发表于 2014-2-7 14:49
串口数据比较频繁能用不?波特率调高可以吗
数据看你的RAM有多少,40个我测试没有问题。波特率不宜再高了。偏差大了。!
-
采用单工工作,很好用。T0的定时器就不会白工作了。
-
//------------------------------------------------------------
#define F_osc (4000000) //工作频率 4MHz
//------------------------------------------------------------
#define BPS (9600) //9600
//************************************************************
//TUS=27 9600
//UDS= 4800
#define TUS (18) //27模拟仿真很好!!微调时间 15~35 2013-5-2测试Ok 9600
//*************************************************************
//t1 自动重装波特率计算公式 CCLK/(256-TH1)32
//*************************************************************
#define TtK -(F_osc/4/BPS-TUS) //化简后的结果!
-
#define BPS_Delay() { TMR0=TtK;T0IF=0;while(!T0IF);}
#include "Use.h"
#include "Ver.H"
/********************************************************************************
正常使用后,GPIO3=RXD;GPIO5=TXD!!GPIO4=0 进入下载模式!
波特率:9600 8 n 1
********************************************************************************/
#define UART_SEND_Pin GPIO4 //GPIO4=TXD
//********************************************************************************
//*********************************************************************************
//发送一串数据
//*********************************************************************************
void SendOut(unsigned char *p,unsigned char Long){
unsigned char i,Dat;
while(Long--){
i=8; //9600 8.n 1 P d8 S
Dat=*p++;
UART_SEND_Pin=0; //开始位
BPS_Delay();
while(i--){
UART_SEND_Pin=(bit)(Dat & 0x01);
Dat>>=1;
BPS_Delay();
}
UART_SEND_Pin=1;
BPS_Delay();
}
}
-
好东西。
-
可以合作!