📄 motor_main.lst
字号:
C51 COMPILER V8.02 MOTOR_MAIN 04/10/2007 13:45:24 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MOTOR_MAIN
OBJECT MODULE PLACED IN Motor_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Motor_Main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define uchar unsigned char
2 #define uint unsigned int
3 #define low_speed 10
4 #define high_speed 100
5 #include<reg52.h>
6 #include<Key_Define.h>
7 #include<Get_Key_Declare.h>
8 #include<Lcd_Init_Declare.h>
9 //#include<Main_Define.h>
10 uchar speed=50,step_length=10,thdata,tldata;
11 #include<Start.h>
12 bit SData_flag=0;
13 bit step_permit=0;
14 bit direction,sisdf;//set direction flag
15 bit stepflag=0; //步进标志
16 bit run=0; //全带运行标志
17 bit stopflag=0;
18 uchar int_cnt;
19 bit spdset;
20
21 sbit AA= P3^4;
22 sbit AB= P3^5;
23 sbit BA= P3^6;
24 sbit BB= P3^7;
25 uchar cnt;
26 uchar sicnt=0;
27 //产生脉冲波形
28 void Timer0(void)interrupt 1 using 1
29 {
30 1 TL0=(tldata+10);
31 1 TH0=thdata;
32 1 if(step_permit) int_cnt++;
33 1 if(direction) //反转
34 1 {
35 2 switch(cnt)
36 2 {
37 3 case 0:AA=1;AB=1;BA=0;BB=0; break;
38 3 case 1:AA=0;AB=1;BA=1;BB=0; break;
39 3 case 2:AA=0;AB=0;BA=1;BB=1; break;
40 3 case 3:AA=1;AB=0;BA=0;BB=1; break;
41 3 default: break;
42 3 }
43 2 }
44 1 else {
45 2 switch(cnt)
46 2 {
47 3 case 0:AA=1;AB=1;BA=0;BB=0; break;
48 3 case 1:AA=1;AB=0;BA=0;BB=1; break;
49 3 case 2:AA=0;AB=0;BA=1;BB=1; break;
50 3 case 3:AA=0;AB=1;BA=1;BB=0; break;
51 3 default: break;
52 3 }
53 2 }
54 1 ++cnt;
55 1 if(cnt==4)cnt=0;
C51 COMPILER V8.02 MOTOR_MAIN 04/10/2007 13:45:24 PAGE 2
56 1 }
57 void SeriCab(void)interrupt 4 using 2
58 {
59 1 uchar sda;
60 1 RI=0;
61 1 sda=SBUF;
62 1 if(sda>=64)
63 1 {
64 2 if((sda<95)&&(run==0)){step_length=sda*3;stepflag=1;}
65 2 else if((sda==0x61)&&(SData_flag==1)){run=1;stopflag=0;}
66 2 else if(sda==0x63){direction=0;sisdf=1;}
67 2 else if(sda==0x64){direction=1;sisdf=1;}
68 2 else if((sda==0x62)&&(SData_flag==1)){run=0;stopflag=1;}
69 2 else if((sda==0x65)&&(SData_flag==1)){step_permit=1;}
70 2
71 2 }
72 1 else {speed=sda*2;spdset=1;}
73 1 ++sicnt;
74 1 if(sicnt==2){sicnt=0;SData_flag=1;}
75 1 }
76
77 void ST_Convert(void)//将转速转换为T0常数
78 {
79 1 uint tdbuf;
80 1 tdbuf=(1000000/speed)/192;
81 1 tdbuf=0xffff-tdbuf;
82 1 tldata=(uchar)(tdbuf&0xff);
83 1 thdata=(uchar)((tdbuf>>8)&0xff);
84 1 }
85
86 bit Operating(void) //开机初始化程序
87 { uchar key;
88 1 bit step_flag=0;
89 1 Show_Null();
90 1 key=0;
91 1 Show_Sign(); //显示===========
92 1 Show_Speed_Set(); //显示"请预置转速 "
93 1 speed=Get_Speed(speed); //转速设置子程序
94 1 Show_Null();
95 1 Show_Operation_Model();
96 1 while(key!=LEFT&&key!=RIGHT)
97 1 key=GetKey();
98 1 Show_Null();
99 1 if(key==RIGHT) //步进
100 1 {
101 2 key=0;
102 2 step_flag=1;
103 2 Show_Sign(); //显示===========
104 2 Show_Step_Length(); //显示"请预置步长: "
105 2 step_length=Get_Step_Length(step_length); //预置步长
106 2 }
107 1 return step_flag;
108 1 }
109
110 void main(void)
111 {
112 1 uchar key,stl,stepcnt=0;
113 1 IntRst();
114 1 Lcd_SetZ(1);
115 1 Lcd_Off();
116 1 Show_Null();
117 1 Show_Sign(); //显示===========
C51 COMPILER V8.02 MOTOR_MAIN 04/10/2007 13:45:24 PAGE 3
118 1 Show_Greet();
119 1 Lcd_On();
120 1 TMOD=0x21; //T0工作在方式1,T1工作在方式2自动重装
121 1 TH1=0xF3; //波特率设置;晶振12MHz;波特率为2400
122 1 TL1=0xF3;
123 1 SCON=0X50; //串行口工作在方式1,八位方式,允许接收
124 1 PCON=0; //SMOD设置为0
125 1 EA=1;
126 1 ES=1; //串行中断允许
127 1 ET0=0; //T0中断禁止
128 1 TR1=1;
129 1
130 1 while((key==0)&&(SData_flag==0))
131 1 key=GetKey();
132 1 if(key)stepflag=Operating();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -