?? cutter.c
字號:
#include <REG51.H>
#include <intrins.h>
#define ON 0
#define OFF 1
#define uint unsigned int
#define uchar unsigned char
#define IN9 P3^0
#define IN10 P3^1
#define IN11 P3^2
#define IN12 P3^3
#define IN13 P3^4
#define Out1 P0^0
#define Out2 P0^1
#define Out3 P0^2
#define Out4 P0^3
#define Out5 P0^4
#define Out6 P0^5
sbit Start =IN9;
sbit Dirc =IN10;
sbit Stop =IN11;
sbit DH48S =IN12;
sbit Sensor =IN13;
sbit K1 =Out1;
sbit K2 =Out2;
sbit RED =Out3;
sbit Buzzer =Out4;
sbit Reset =Out5;
sbit Count1 =Out6;
sbit Puls =P3^7;
sbit Sign =P3^6;
uchar bdata SetFlag;
sbit StartFlag =SetFlag^0;
sbit DircFlag =SetFlag^1;
sbit StopFlag =SetFlag^2;
sbit DH48SFlag =SetFlag^3;
sbit MotorFlag =SetFlag^4;
sbit int1Flag =SetFlag^5;
sbit RunOKflag =SetFlag^6;//用來檢查紙有沒有被堵,空跑時沒有檢測到紙時也會報警
uchar data Count;//讀8421碼所得到的數
uchar data Timer_Count=0;
uchar data SensCount=0;
void tst_nop_(void);
void Initial(void);
uchar Read_8421Code(void);
void DelayXms(uint);
uint CheckInput(void);
void ResetTimer1(void);
void CloseTimer1(void);
void ResetCount0(void);
void CloseCount0(void);
void RunMotor(void);
void StopMotor(void);
void main(){
uint i=0;
uchar j=0;
Initial();
while(1){
i= CheckInput();
if(i!=1)
continue;
if(StartFlag!=1)
continue;
else{
ResetCount0();
MotorFlag=1;
Sign=ON;
DelayXms(50);
ResetTimer1();
while(MotorFlag==1){
if(Sign==1){
Sign=0;
DelayXms(50);
}
RunMotor();
}
}
}
}
void tst_nop_(void){
_nop_();
_nop_();
}
void Initial(void){
// RunOKflag=1;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
SetFlag=0;
TMOD=0x16;
PT0=1;
TH0=0xff;
TL0=0xff;
TH1=0x00;
TL1=0x00;
ET0=0;
ET1=0;
TR0=0;
TR1=0;
TF0=0;
TF1=0;
IT0=0;
IT1=1;
EX0=1;
EX1=1;
IE0=0;
IE1=0;
PX0=1;
// Count=0;
EA=1;
}
uchar Read_8421Code(void){
uchar data Code=0;
P1=0xff;
DelayXms(10);
Code=P1;
Code=~Code;
if(Code<=0x09)
return Code;
if(Code>=0x10 && Code<=0x19){
Code=Code-6;
return Code;
}
if(Code>=0x20 && Code<=0x29){
Code=Code-12;
return Code;
}
if(Code>=0x30 && Code<=0x39){
Code=Code-18;
return Code;
}
if(Code>=0x40 && Code<=0x49){
Code=Code-24;
return Code;
}
if(Code>=0x50 && Code<=0x59){
Code=Code-30;
return Code;
}
if(Code>=0x60 && Code<=0x69){
Code=Code-36;
return Code;
}
if(Code>=0x70 && Code<=0x79){
Code=Code-42;
return Code;
}
if(Code>=0x80 && Code<=0x89){
Code=Code-48;
return Code;
}
if(Code>=0x90 && Code<=0x99){
Code=Code-56;
return Code;
}
}
void DelayXms( uint x){
uchar i,j;
uint k,h;
k=x;
for(h=0;h<k;h++)
for(i=0;i<2;i++)
for(j=0;j<255;j++);
}
void ResetTimer1(void){
ET1=0;
TR1=0;
Timer_Count=0;
TH1=0x00;
TL1=0x00;
ET1=1;
TR1=1;
EA=1;
}
void CloseTimer1(void){
TR1=0;
ET1=0;
}
void ResetCount0(void){
ET0=0;
TR0=0;
TH0=0xff;
TL0=0xff;
ET0=1;
TR0=1;
EA=1;
}
void CloseCount0(void){
TR0=0;
ET0=0;
}
uint CheckInput(void){
uchar i=0;
// if((int1Flag==1) || ((!Start)==1)){
if(!Start){
DelayXms(10);
if(!Start){
// if((int1Flag==1) || ((!Start)==1)){
StartFlag=1;
i=Read_8421Code();
if(i!=0){
Count=i;
return 1;
}
else{
Buzzer=ON;
DelayXms(4000);
Buzzer=OFF;
return 0;
}
}
}
return 0;
}
void RunMotor(void){
Puls=0;
tst_nop_();
Puls=!Puls;
if(SensCount==(Count-1)){
tst_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
tst_nop_();
}
void StopMotor(void){
Puls=1;
Sign=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void int0() interrupt 0 using 1{
StopMotor();
Buzzer=OFF;
MotorFlag=0;
StartFlag=0;
CloseTimer1();
CloseCount0();
EA=0;
SensCount=0;
}
void Count0_0() interrupt 1 using 2{
SensCount++;
RunOKflag=1;
if(SensCount==Count){//用來判斷是不是遍馬器的問題。
StopMotor();
CloseTimer1();
CloseCount0();
EA=0;
K1=ON;
SensCount=0;
DelayXms(200);
K1=OFF;
// DelayXms(100);
Count1=ON;
DelayXms(100);
Count1=OFF;
K2=ON;
DelayXms(200);
K2=OFF;
// DelayXms(500);
ResetTimer1();
ResetCount0();
}
}
void int1() interrupt 2 using 3{
StopMotor();
CloseTimer1();
CloseCount0();
Buzzer=ON;
Reset=ON;
// DelayXms(1000);
DelayXms(3000);
Reset=OFF;
Buzzer=OFF;
MotorFlag=0;
StartFlag=0;
SensCount=0;
// int1Flag=1;
}
void Timer1_1() interrupt 3 using 0{
TR1=0;
ET1=0;
Timer_Count++;
TH1=0x00;
TL1=0x00;
if(Timer_Count==30){
if(RunOKflag!=1){
StopMotor();
CloseTimer1();
CloseCount0();
Buzzer=ON;
DelayXms(3500);
Buzzer=OFF;
MotorFlag=0;
StartFlag=0;
SensCount=0;
Timer_Count=0;
RunOKflag=0;
// RunOKflag=0;
}
else{
Timer_Count=0;
RunOKflag=0;
TR1=1;
ET1=1;
}
}
else{
TR1=1;
ET1=1;
// ET1=1;
// TR1=1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -