📄 demo2.c
字号:
//*************************************************************************
// DEMO2.C
// V1.00
// This is another Demo Program - this one runs completely by itself - but
//
// Connections as Follows:
// RA4 - Perastaltic Pump Reverse
// RA5 - Perastaltic Pump Foward
//
// Display is a Dumb Terminal on the RS-232 Interface
//
//
// Author: Michael Pearce
// Chemistry Department, University of Canterbury
//
// Started: 14 May 1999
//
//*************************************************************************
// V1.00 - 19 May 1999
// Start of the Program - bulk stolen from DEMO1.C
//*************************************************************************
//#define PIC_CLK 8
#include <pic.h>
#include <stdio.h>
//unsigned char delayus_variable;
//-- Define 1-wire Bus info
#define D_PIN_PORT PORTB
#define D_PIN_NUM 2
#define D_TRIS_PORT TRISB
#define BITNUM(adr, bit) ((unsigned)(&adr)*8+(bit))
//#include "always.h"
#define XTAL_FREQ 10MHZ
#include "delay.h"
#include "delay.c"
#include "serial_s.c" //-- Software serial routines - not the best
#include "1wire002.c"
//********** PORT DEFINES ***************
static bit PPFWD @ BITNUM(PORTA, 4); //- Pump Foward
static bit PPREV @ BITNUM(PORTA, 3); //- Pump Reverse
static bit VALVE1 @ BITNUM(PORTB, 7);
static bit VALVE2 @ BITNUM(PORTB, 6);
//*********** CONTROLS *************
#define FOWARD 1
#define REVERSE 2
#define STOP 0
#define V_OFF 1
#define V_ON 0
//*********** TERMINAL CONTROLS **************
#define CLS 0x1A //-- Clear Screen (SUB)
#define BEEP 0x07 //-- Terminal Beep
#define BACKSPACE 0x08
void RunPump(char Mode);
void Pause(char Sec,char Dot);
void Pumps(void),Temperature(void),Valve(void);
void ReadTemperature(void);
signed char DATA1[2];
char DotCnt=0,valve=1;
void main(void)
{
PORTA=0x00;
PORTB=0xFF; //-- RXD/TXD Pins High initially!!!
TRISA=0x00;
TRISB=0x01; //-- all but RXD as output
Pause(2,1); //-- Long delay to let things settle
D_Reset(); //-- Reset the 1-wire bus
putch(CLS);
while(1)
{
putch(BEEP);
puts("Pump:Running");
RunPump(FOWARD);
Pause(5,1);
RunPump(STOP);
puts("Stopped");
puts("\n\rSelecting Relay #");
Valve();
putch(valve+'0');
valve++;
puts("\n\rDelay");
Pause(6,2);
puts("\n\rTemperature: ");
Temperature();
puts("\n\n\r");
}
}
void Temperature(void)
{
char str[5]=" ";
// puts("\n\rReading Temperature.");
ReadTemperature();
//-- convert the temperature
DATA1[0]=DATA1[0]>>1; //-- Remove the 1/2 degree bit
DATA1[0] &=0x7F;
if(DATA1[0]>120)DATA1[0]=0; //--- Negative Temperatures Ignored!!!
if(DATA1[0]>=100)
{
str[0]=DATA1[0]/100;
DATA1[0]-=(str[0]*100);
str[0]+='0';
}
if(DATA1[0]>=10)
{
str[1]=DATA1[0]/10;
DATA1[0]-=(str[1]*10);
str[1]+='0';
}
if(DATA1[0]>=0)
{
str[2]=DATA1[0];
str[2]+='0';
}
str[3]=0;
// puts("\n\rTemp = ");
DATA1[0]=0;
while(str[DATA1[0]])
{
putch(str[DATA1[0]++]);
}
puts(" degrees C");
}
//**************************************************************************
// ReadTemperature - Reads two temperature probes
//**************************************************************************
void ReadTemperature(void)
{
int count;
D_Reset(); // Reset The Bus
D_Write(0xCC); // Skip ROM
D_Write(0x44); // Convert T Command
Pause(1,2);
//-- Read First Device
D_Reset(); // Reset the Bus Again
D_Write(0xCC); // Skip ROM - only one device
D_Write(0xBE); // Read Scratch Pad Command
for(count=0;count<2;count++)
{
DATA1[count]=D_Read(); // Read the Temperature only
}
}
//****************** END OF Read Temperature
void Valve(void)
{
char temp=0x04; //-- 00000100 -> 1 selects the valve
if(valve>5 || valve <1) valve=1; //-- ensure valve is in range
temp = temp << valve; //-- Select Valve Position
temp ^= 0xFF; //-- Invert the selection
PORTB |=0xF8; //-- change upper 5 leave low 3
PORTB &=temp; //-- Select the valve
}
void RunPump(char Mode)
{
switch(Mode)
{
case FOWARD:
PPFWD=0;
PPREV=1;
break;
case REVERSE:
PPREV=0;
PPFWD=1;
break;
case STOP:
default:
PPREV=1;
PPFWD=1;
break;
}
}
void Pause(char Sec,char Dot)
{
char count;
do
{
count=10;
while(count--)
{
DelayMs(99);
if(Dot==1)
{
putch('.');
}
if(Dot==2)
{
switch(DotCnt++)
{
case 0:
putch('|');
break;
case 1:
putch('/');
break;
case 2:
putch('-');
break;
case 3:
putch('\\');
default:
DotCnt=0;
break;
}
putch(BACKSPACE);
}
}
}while(--Sec);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -