📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 10/26/2005 14:32:40 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: c:\KEIL\C51\BIN\C51.exe main.c DB OE
stmt level source
1 #include "c8051f020.h"
2 #include <intrins.h>
3
4 sfr16 DAC0 = 0xd2; // DAC0 data
5 #define PRT0CF P0MDOUT
6 #define PRT1CF P1MDOUT
7 #define PRT2CF P2MDOUT
8
9 unsigned int SetSpeed;// 设定稳定转速,转一圈3个脉冲
10
11 unsigned int Count1s=1000;
12 unsigned int SaveMotorCount=0;// 每秒脉冲个数
13 unsigned int MotorCount=0;
14 unsigned int iDAC0=0x0b00;
15 int SD;
16 unsigned char Count1ms;
17 void DispLED(char *DispBuf,char ShowDot); //ShowDot 显示小数点位
18 void TestMotor(bit LoopFlag);
19
20
21 void Delay1us(unsigned char us)
22 {
23 1 while (us)
24 1 {
25 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
26 2 --us;
27 2 }
28 1 }
29
30 void SYSCLK_Init (void)
31 {
32 1 int i; // delay counter
33 1 OSCXCN = 0x67; // start external oscillator with
34 1 // 18.432MHz crystal
35 1 for (i=0; i < 256; i++) ; // Wait for osc. to start up
36 1 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
37 1 OSCICN = 0x88; // select external oscillator as SYSCLK
38 1 // source and enable missing clock
39 1 // detector
40 1 }
41
42
43 void PORT_Init (void)
44 {
45 1 XBR0 = 0x04; // Enable UART0
46 1 XBR1 = 0x06; // P10<---int0
47 1 XBR2 = 0x40; // Enable crossbar and weak pull-ups
48 1 }
49
50
51 void Timer0_Init (void)
52 {
53 1 CKCON|=0x8; // 使用系统时钟
54 1 TMOD|=0x1; // 16Bit
55 1 Count1ms=10;
C51 COMPILER V7.06 MAIN 10/26/2005 14:32:40 PAGE 2
56 1 TR0 = 0; // STOP Timer0
57 1 TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1ms
58 1 TL0 = -SYSCLK/1000;
59 1 TR0 = 1; // START Timer0
60 1 IE|= 0x2;
61 1 }
62
63
64 void Timer0_ISR (void) interrupt 1 //1ms
65 {
66 1 TH0 = (-SYSCLK/1000) >> 8;
67 1 TL0 = -SYSCLK/1000;
68 1 if (Count1ms) Count1ms--;
69 1 if (Count1s) Count1s--;
70 1 else
71 1 {
72 2 Count1s=1000;
73 2 SaveMotorCount=MotorCount;
74 2 MotorCount=0;
75 2 SD=SaveMotorCount-SetSpeed; // 转速差额
76 2 SaveMotorCount*=20;// 转速为脉冲个数乘20
77 2
78 2 iDAC0-=SD; // 调整输出电压
79 2 DAC0=iDAC0;
80 2
81 2 }
82 1 }
83
84 void Int0_ISR (void) interrupt 0
85 {
86 1 MotorCount++;
87 1 }
88
89 void Delay1ms(unsigned char T)
90 {
91 1 Count1ms=T;
92 1 while (Count1ms);
93 1 }
94
95 void Delay1s(unsigned char T)
96 {
97 1 while (T)
98 1 {
99 2 Delay1ms(200);
100 2 Delay1ms(200);
101 2 Delay1ms(200);
102 2 Delay1ms(200);
103 2 Delay1ms(200);
104 2 T--;
105 2 }
106 1 }
107
108
109 void main (void)
110 {
111 1
112 1 WDTCN = 0xde;
113 1 WDTCN = 0xad; // 关看门狗
114 1 SYSCLK_Init (); // 初始化时钟
115 1 Timer0_Init(); // 初始化定时器
116 1 PORT_Init (); // 初始化IO口
117 1 CPT1CN|=0x80; // 使能比较器1
C51 COMPILER V7.06 MAIN 10/26/2005 14:32:40 PAGE 3
118 1 REF0CN = 0x07; // 使能片内参考电压
119 1 DAC0CN |= 0x80; // 使能DAC0
120 1 DAC0H=0; DAC0L=0;
121 1 IT0=1;
122 1 IE |= 0x01; // 使能INT0中断
123 1 EA=1; // 开中断
124 1
125 1 TestMotor(1);
126 1 }
127
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 285 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
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 + -