📄 sysclock.c.bak
字号:
/*
*********************************************************************************************************
* Firmware of Fiscal Control ECR System
* Complete and Ready-to-Use Modules in C
*
* SysClock Routine Group
*
* (c) Copyright 2001-2002, EasyFlash, Sichuan Daoheng R&D Center
* All Rights Reserved
*
* Filename : SysClock.C
* Programmer : easyflash
*********************************************************************************************************
*/
#define SYSCLOCK_GLOBALS
/*
*********************************************************************************************************
* include files
*********************************************************************************************************
*/
#include "includes.h"
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define RTCH_DATA 0x0
#define RTCL_DATA (0x39) //1ms @7.373MHz
//#define RTCH_DATA 0x5b
//#define RTCL_DATA 0x8d //50ms @7.373MHz
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/*
************************************************************************************************
* Name : void RTC_ini(void)
* Describe : 实时时钟RTC初始化,50ms@7.373MHz,允许中断
* Input :
* Output :
* Create by : xuyong Date:2005年01月29日 星期六 18:18:47
* Moid by : Date:
************************************************************************************************
*/
void RTC_ini(void)
{
IEN0|=0xC0; //允许RTC中断
WDCON= 0xe0;
RTCH = RTCH_DATA;
RTCL = RTCL_DATA;
RTCCON = 0x63; //RTC 时钟源为 CCLK,中断使能,启动RTC,
//如果真的需要时钟一直运行,则一定需要用外部32.768KHz的低频晶振,这样功耗才能够降低。
timeCnt =0;
st = ST_MOTO_STOP;
MotorDirct=MOTO_STOP;
//ctime.sec = 0;
//ctime.min = 30;
//ctime.hour = 8;
}
void RTC_INT(void) interrupt 10 using 2
{
char i;
RTCCON=0x63;//清除RTC 中断标志,这句话,一定要放在中断服务程序的最开头。
//RTC_INT_FLAG =1;
kkCnt++;
if(kkCnt==100)kkCnt=0; //100ms
//if(UpDown>1)MotorTime = UpDown;
//else if((0x100-UpDown)>1)MotorTime = 0x100-UpDown;
//else MotorTime = 2;
StSwitch();
if(MotorDirct==MOTO_STOP)//
{
MotorTime =5;
}
else
{
i = UpDown;
if(i<0)i+=5;//注意减速时,开始是高速,慢慢才低速,即开始时间短,后面时间长。
if(i>1)MotorTime = i;
else MotorTime = 2;
}
++timeCnt;
if(timeCnt==MotorTime)//MotorTime 是步进电机每步的间隔时间,单位1ms。至少2ms
{
timeCnt =0;
if(MotorDirct!=0)
{
if(MotorDirct==MOTO_ZX)
{
MotorStep ++;
MotorStepCnt++;
if(MotorStep>6)MotorStep = 1;
}
else if(MotorDirct==MOTO_FX)
{
MotorStep --;
MotorStepCnt--;
if(MotorStep<1)MotorStep = 6;
}
switch(MotorStep)
{
case 1:
set1 = 0;
set2 = 1;
set3 = 1;
set4 = 0;
break;
case 2:
set1 = 0;
set2 = 1;
set3 = 0;
set4 = 0;
break;
case 3:
set1 = 0;
set2 = 0;
set3 = 0;
set4 = 1;
break;
case 4:
set1 = 1;
set2 = 0;
set3 = 0;
set4 = 1;
break;
case 5:
set1 = 1;
set2 = 0;
set3 = 0;
set4 = 0;
break;
case 6:
set1 = 0;
set2 = 0;
set3 = 1;
set4 = 0;
break;
default:
break;
}
}
}
}
void StSwitch(void)
{
if(MotorStepCnt==MotorStepDst)
{
MotorDirct=MOTO_STOP;
st = ST_MOTO_STOP;
}
else
{
switch(st)
{
case ST_MOTO_OBV_UP://正向加速
if(MotorStepCnt<MotorStepDst)
{
if(timeCnt==0)
{
UpDown--;
if(UpDown ==0)
{
st =ST_MOTO_OBV;//正向常速
}
}
}
else
{
//进入正向减速模式
//MotorDirct 不变;
UpDown=-5;//减速
st = ST_MOTO_OBV_DOWN;
}
break;
case ST_MOTO_OBV_DOWN:
if(MotorStepCnt<MotorStepDst)
{
st =ST_MOTO_OBV_UP;//正向加速
UpDown = 5;
}
else
{
if(timeCnt==0)
{
UpDown++;
if(UpDown ==0)
{
st =ST_MOTO_OBV;//正向常速
}
}
}
break;
case ST_MOTO_OBV:
if(MotorStepCnt<MotorStepDst)
{
}
else
{
//进入正向减速模式
//MotorDirct 不变;
UpDown=-5;//减速
st = ST_MOTO_OBV_DOWN;
}
break;
case ST_MOTO_STOP:
if(MotorStepCnt<MotorStepDst)
{
MotorDirct=MOTO_ZX;
UpDown=5;//加速
st =ST_MOTO_OBV_UP;//正向加速
}
else
{
MotorDirct=MOTO_FX;
UpDown=5;//加速
st =ST_MOTO_REV_UP;//反向加速
}
break;
case ST_MOTO_REV_UP:
if(MotorStepCnt<MotorStepDst)
{
MotorDirct=MOTO_FX;
UpDown=-5;//减速
st =ST_MOTO_REV_DOWN;//反向减速
}
else
{
if(timeCnt==0)
{
UpDown--;
if(UpDown ==0)
{
st =ST_MOTO_REV;//反向常速
}
}
}
break;
case ST_MOTO_REV_DOWN:
if(MotorStepCnt<MotorStepDst)
{
if(timeCnt==0)
{
UpDown++;
if(UpDown ==0)
{
st =ST_MOTO_STOP;//停止
MotorDirct=MOTO_STOP;
}
}
}
else
{
MotorDirct=MOTO_FX;
UpDown=cabs(UpDown);//加速
st =ST_MOTO_REV_UP;//反向加速
}
break;
case ST_MOTO_REV:
if(MotorStepCnt<MotorStepDst)
{
MotorDirct=MOTO_FX;
UpDown=-5;//减速
st =ST_MOTO_REV_DOWN;//反向减速
}
else
{
}
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -