📄 fgsdfgfgsfpt0611.c
字号:
/**********************************this program is written for pirnt rolling papaer ************************/
/********************************** Kingteller version V2.0 **********************************************/
/********************************** version change on2006/6/16**********************************************/
/********************************** Written by Ludonghua ***************************************************/
/********************************** Started on 2005/2/17 **************************************************/
/********************************** modified on 2005/2/17 *************************************************/
/********************************** channge on 2006/6/16 *************************************************/
#include "AT89x52.h"
#include "string.h"
#include "stdio.h"
#include "absacc.h"
#include "intrins.h"
#include "ctype.h"
#define uint unsigned int
#define uchar unsigned char
//#define PWML 0x55
#define PWML 0x80 //PWML更改前为0x61输出电压为9.1V;更改后为0x80,输出电压为12.5V;更改日期为2006.8.15
#define T2TIME_H 0XB8
#define T2TIME_L 0X00
/********************* interrelated function and parameter **********************************/
void delayms(uint ms);
void cpu_init(void);
void parameter_init(void);
uchar read_status(uchar tt);//读传感器状态
void StartMotor (void); //启动卷纸电机
/*********************parameter define*************************************/
uint mainproc=0; //main loop counter
bit out_of_paper_flag=0; //out of paper flag
bit motor_run_timeout_flag=0; //motor run time out flag
bit front_sensor_flag=0; //front sensor status
bit back_sensor_flag=0; //back sensor status
uint motor_run_delay_time=0;
bit PWM_flag=0;
bit motor_start_flag=0;
bit en_motor_flag=1;// one to enable motor run;
bit extern_motor_enable_flag=1; //another one to enable motor run
uint motor_delay_time=0;
bit motor_delay_time_flag=0;
uchar error_time=0;
/********************* I/O port define **********************************/
sbit WDOG = 0x97;//P1^7;
sbit OUT_OF_PAPER = 0x96;//P1^6; //OUT OF PAPER SENSOR INPUT
sbit MOTOR_OUT1 = 0x90;//P1^0; //Motor控制脚1
sbit MOTOR_OUT2 = 0x91;//P1^1; //Motor控制脚2
sbit FRONT_SENSOR = 0x94;//P1^4; //前端传感器
sbit BACK_SENSOR = 0x95;//P1^5; //后端传感器
sbit ERROR_OUT = 0xa0;//= 0xB1; // //alter 2005-8-12
sbit NOPAPER_ERR = 0x92;//P1^2; // ERROR out if error set to 0;// add 2005-0704
bit pc_temp=0;
sbit EN_CHECK = 0xb0;//if this bit is 0,stop motor;
bit PC_EN_MOTOR =1;
void pc_en_check(void);
uchar key_scan_time=0;
void test_button(void);
void test_motor_drive(void); //if button press down,start motor
bit key_button_down_flag=0;
uint button_delaytime=0; //button press down and motor run time out
bit button_delaytime_flag=0;
sbit LED=0xb4; //test button1
sbit PAPER_IN =0xb5; // test button2
uchar paper_in_time=0;
/************************************ cpu initialize *******************/
void cpu_init(void)
{
/*t2 initialization*/
RCAP2H=T2TIME_H;
RCAP2L=T2TIME_L;
TL2=T2TIME_L;
TH2=T2TIME_H;
T2CON=0x00;
T2MOD=0x00;
/*t2 initialization*/
TMOD = 0x21 ; /* 初始化CPU内部控制寄存器 */
PCON = 0x00 ;
TL0 = 0x48 ; /* 10 ms */
TH0 = 0xff ;
TR1=0;
IP=0X02;
IE=0x82;
ET2=1;
TR2=1;
TR0 = 0 ;
ET0=0;
ES=0;
ET1=0;
}
void parameter_init(void)
{
mainproc = 0 ;
MOTOR_OUT1=0;
MOTOR_OUT2=0;
ERROR_OUT=1;
PWM_flag=0;
motor_run_timeout_flag=0;
ERROR_OUT=1;
}
/******************** main program *********************************************/
main()
{
delayms(500);
cpu_init();
parameter_init();
// motor_run_delay_time=200;
while(1)
{
// pc_en_check();
if((en_motor_flag)&&(extern_motor_enable_flag)&&PC_EN_MOTOR)
{
if((read_status(0)==1)&&(!PWM_flag))
{
StartMotor ();
motor_run_delay_time=1000;
}
}
if(read_status(0)==3)
{
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0; //取消PWM功能
}
if(read_status(1)==5)
{
NOPAPER_ERR=0;
_nop_();
_nop_();
_nop_();
NOPAPER_ERR=0;
//********************no papaer,stop motor****2005-8-31**********
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0; //取消PWM功能
en_motor_flag=0;
}
else if(read_status(1)==6)
{
en_motor_flag=1;
NOPAPER_ERR=1;
_nop_();
_nop_();
_nop_();
NOPAPER_ERR=1;
en_motor_flag=1;
}
if(read_status(0)==4) //if motor run error
{
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0; //取消PWM功能
ERROR_OUT=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ERROR_OUT=0;
}
if((read_status(0)==1)&&(read_status(1)==5))
{
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0;
en_motor_flag=0;
_nop_();
_nop_();
_nop_();
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0;
en_motor_flag=0;
}
if(motor_run_timeout_flag)
{
motor_run_timeout_flag=0;
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0;
ERROR_OUT=0;
_nop_();
_nop_();
_nop_();
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0;
ERROR_OUT=0;
extern_motor_enable_flag=0;
}
test_button();
if(button_delaytime_flag)
{
button_delaytime_flag=0;
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0;
_nop_();
_nop_();
_nop_();
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0;
key_button_down_flag=0;
}
if(key_button_down_flag) // if button down,enable all funtion //add 08-04
{
test_motor_drive();
extern_motor_enable_flag=1; //add 08-04
PC_EN_MOTOR=1; ////add 08-04
en_motor_flag=1; //add 08-04
ERROR_OUT=1;
_nop_();
_nop_();
ERROR_OUT=1;
key_button_down_flag=0;
}
mainproc = 0 ;
}
}
/*********************************************************************************************/
/* 毫秒延时 *
/*********************************************************************************************/
void delayms(uint ms)
{
uint idata tem1,tem2;
for(tem1=0;tem1<ms;tem1++)
{
for(tem2=0;tem2<120;tem2++)
{;}
}
}
/************************ send a char ***************************/
/************************* serial interrupt ****************************************************/
void serial( ) interrupt 4
{
;
}
/************************* timer0 interrupt ****************************************************/
void T0_int (void) interrupt 1
{
TH0 = 0xff;
if (PWM_flag) //PWM功能
{
if (motor_start_flag) //已经启动了电机
{
motor_start_flag = 0;
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
TL0 = PWML; //关闭时间
}
else
{
motor_start_flag = 1;
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 1; //开启Motor电源
TL0 = 256 - PWML; //
}
}
else
{
TR0=0;
ET0=0;
}
}
/************************* timer2 interrupt ****************************************************/
void T2_int (void) interrupt 5
{
TF2=0;
mainproc ++ ;
if(mainproc < 12000 ) // one minute long not to be executed ,reset.
WDOG=~WDOG;
if(PWM_flag)
{
if(motor_run_delay_time)
{
motor_run_delay_time--;
if(motor_run_delay_time==0)
{
motor_run_timeout_flag=1;
}
else
{
motor_run_timeout_flag=0;
}
}
if(button_delaytime)
{
button_delaytime--;
if(button_delaytime==0)
{
button_delaytime_flag=1;
}
else
{
button_delaytime_flag=0;
}
}
}
}
/*********************************** operation function **************************************************/
void StartMotor (void)
{
motor_start_flag = 1;
PWM_flag = 1;
TR0=1;ET0=1;
TH0=0XFF;
TL0=256-PWML;
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 1;
}
//*****************************read sensor status************************************
//************
uchar read_status(uchar tt)
{
while(1)
{
front_sensor_flag=FRONT_SENSOR;
back_sensor_flag=BACK_SENSOR;
out_of_paper_flag=OUT_OF_PAPER;
delayms(2);
if((front_sensor_flag==FRONT_SENSOR)&&(back_sensor_flag==BACK_SENSOR)&&(out_of_paper_flag==OUT_OF_PAPER))
break;
}
if(tt==0)
{
if((front_sensor_flag==0)&&(back_sensor_flag==1)) //paper out纸松
return(1);
else if ((front_sensor_flag==1)&&(back_sensor_flag==1)) //纸松(中间位置)
return(2);
else if ((front_sensor_flag==1)&&(back_sensor_flag==0)) //纸紧
return(3);
else return(4);
}
else if(tt==1)
{
if(out_of_paper_flag==0) //have NO paper
return(5);
else
return(6); // have paper
}
}
//*******************************test button down********************************
void test_button(void)
{
if(LED==0)
key_scan_time++;
if(key_scan_time==1)
{
key_button_down_flag=1;
key_scan_time=0;
}
if(PAPER_IN==0)
paper_in_time++;
if(paper_in_time==1)
{
key_button_down_flag=1;
paper_in_time=0;
}
}
//**************************test motor_drive*******************************
void test_motor_drive(void)
{
//*********************if no papaer stop motor****2005-8-31********
//*********************if no papaer stop motor****2005-8-31********
if(read_status(1)==6)
{
if((read_status(0)==1)&&(!PWM_flag))
{
StartMotor ();
button_delaytime=500;
}
}
/*
if(read_status(0)==3)
{
MOTOR_OUT1 = 0;
MOTOR_OUT2 = 0;
PWM_flag = 0; //取消PWM功能
key_button_down_flag=0;
}
*/
}
//**************************PC EN CHECK*********************************
/*
void pc_en_check(void)
{
while(1)
{
pc_temp=EN_CHECK;
delayms(2);
if(pc_temp==EN_CHECK)
break;
}
if(pc_temp==0)
{
PC_EN_MOTOR=0;
}
else
{
PC_EN_MOTOR=1;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -