📄 dcmotor.lst
字号:
C51 COMPILER V7.06 DCMOTOR 05/22/2007 15:14:50 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DCMOTOR
OBJECT MODULE PLACED IN dcMOTOR.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE dcMOTOR.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 实验接线:
3 1、CPU板上的INT0接电机模块上的SIGNAL。
4 2、试验箱(台)上的CS0832选择CS1,A/D模块上的DS的1、2脚短接,VOUT接电机模块的DRV。
5 3、试验箱(台)上的CS244接CS0,244的输入IN0--IN7接平推开关KK1--KK8的输入K1--K8
6 实验说明:
7 全速运行程序后,在数码管的左两位显示设定的转速(16进制),此数值可通过与
8 244输入端相连的8个平推开关kk1---kk8设定,同时在数码管的右两位显示电机实际转速,
9 显示的格式同左两位。认真观察数码管的右两位数值的变化,可以了解电机转速的控制过程。
10 */
11 #include <reg51.h>
12 #include <absacc.h>
13 #define da_port XBYTE[0xcfa8]
14 #define da_buf XBYTE[0xcfa9]
15 #define input XBYTE[0xcfa0]
16 #define Led_dat XBYTE[0xcfe8]
17 #define Led_ctl XBYTE[0xcfe9]
18
19 unsigned char count,speed;
20 char buf=0;
21 void Display_byte(unsigned char loc,unsigned char dat)
22 {
23 1 unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
-0x40};
24 1 loc &=0xf;
25 1 Led_ctl = loc|0x80;
26 1 if(dat==0xaa) Led_dat = table[16];
27 1 else Led_dat = table[dat>>4]; /*显示高4位*/
28 1 loc++;
29 1 Led_ctl = loc|0x80;
30 1 if(dat==0xaa) Led_dat = table[16];
31 1 else Led_dat = table[dat&0xf]; /*显示低4位*/
32 1 }
33
34 void drv(unsigned char dat)
35 {
36 1 da_port = dat;
37 1 da_buf = dat;
38 1 }
39
40 void pulse(void) interrupt 0
41 {
42 1 EX0 = 0;
43 1 count++;
44 1 EX0 = 1;
45 1 }
46 void time1(void) interrupt 3
47 {
48 1 TR1=0;
49 1 TL1 = 0xaf;TH1 = 0x3c;
50 1 buf++;
51 1 if(buf>9)
52 1 {
53 2 speed=count;
54 2 count=0;
C51 COMPILER V7.06 DCMOTOR 05/22/2007 15:14:50 PAGE 2
55 2 buf=0;
56 2 }
57 1 TR1=1;
58 1 }
59 void main(void)
60 {
61 1 unsigned char dat,tmp,tmp1,driver=0x80;
62 1 float ave=0;
63 1 drv(driver);
64 1 Led_ctl = 0xd1;
65 1 while((Led_ctl&0x80)==0x80);
66 1 Led_ctl = 0x31;
67 1 TR1 = 1;
68 1 IT0=1;EX0=1;
69 1 TMOD = 0x10;ET1=1;TL1 = 0xaf;TH1 = 0x3c;
70 1 EA=1;
71 1 Display_byte(2,0xaa);
72 1 while(1)
73 1 {
74 2 dat = input;
75 2 Display_byte(0,dat);
76 2 while((buf==0)&&(tmp1!=speed))
77 2 {
78 3 Display_byte(4,speed);
79 3 if(speed<dat)
80 3 {
81 4 tmp=input-speed;
82 4 if(tmp>50)
83 4 {
84 5 driver -=0x18;
85 5 if(driver>(0xff-0x17)) driver = 0;
86 5 }
87 4 else if(tmp>30)
88 4 {
89 5 driver -=0x8;
90 5 if(driver>(0xff-0x7)) driver = 0;
91 5 }
92 4 else if(tmp>10)
93 4 {
94 5 driver -=2;
95 5 if(driver>(0xff-1)) driver = 0;
96 5 }
97 4 else
98 4 {
99 5 driver -=1;
100 5 if(driver==0xff) driver = 0;
101 5 }
102 4 }
103 3 else
104 3 {
105 4 tmp=speed-input;
106 4 if(tmp>50)
107 4 {
108 5 driver +=0x18;
109 5 if(driver<0x17) driver = 0xff;
110 5 }
111 4 else if(tmp>30)
112 4 {
113 5 driver +=0x8;
114 5 if(driver<0x7) driver = 0xff;
115 5 }
116 4 else if(tmp>10)
C51 COMPILER V7.06 DCMOTOR 05/22/2007 15:14:50 PAGE 3
117 4 {
118 5 driver +=0x2;
119 5 if(driver<0x1) driver = 0xff;
120 5 }
121 4 else
122 4 {
123 5 driver +=1;
124 5 if(driver==0) driver = 0xff;
125 5 }
126 4 }
127 3 drv(driver);
128 3 tmp1=speed;
129 3 }
130 2 }
131 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 419 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 27
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -