📄 main.lst
字号:
C51 COMPILER V6.23a MAIN 12/19/2002 16:17:30 PAGE 1
C51 COMPILER V6.23a, 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 #define SetSpeed 30
9
10
11 unsigned int Count1s=1000;
12 unsigned int SaveMotorCount,MotorCount=0;
13 unsigned int iDAC0=2048;
14 int SD;
15 unsigned char Count1ms;
16 char GetKeyValue(void);
17
18 void Test7279(bit LoopFlag);
19 void DispLED(char *DispBuf,char ShowDot); //ShowDot 显示小数点位
20 void TestMotor(void);
21
22
23
24
25
26 void Delay1us(unsigned char us)
27 {
28 1 while (us)
29 1 {
30 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
31 2 --us;
32 2 }
33 1 }
34
35 void SYSCLK_Init (void)
36 {
37 1 int i; // delay counter
38 1 OSCXCN = 0x67; // start external oscillator with
39 1 // 18.432MHz crystal
40 1 for (i=0; i < 256; i++) ; // Wait for osc. to start up
41 1 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
42 1 OSCICN = 0x88; // select external oscillator as SYSCLK
43 1 // source and enable missing clock
44 1 // detector
45 1 // OSCICN = 0x07; //interal 16MHZ
46 1 }
47
48
49 void PORT_Init (void)
50 {
51 1 XBR0 = 0x07; // Enable SMBus, SPI0, and UART0
52 1 XBR1 = 0x04; //P10<---int0
53 1 XBR2 = 0x40; // Enable crossbar and weak pull-ups
54 1 EMI0CF = 0x27;
55 1 EMI0TC = 0x21;
C51 COMPILER V6.23a MAIN 12/19/2002 16:17:30 PAGE 2
56 1 P74OUT = 0xFF;
57 1 P0MDOUT = 0x15;
58 1
59 1 P1MDOUT |= 0x3C; //P1.2-P1.5推挽输出
60 1 P1 &= 0xc3; //P1.2-P1.5=0
61 1 }
62
63 void SPI0_Init (void)
64 {
65 1 SPI0CFG = 0x07; // data sampled on 1st SCK rising edge
66 1 // 8-bit data words
67 1 SPI0CFG|=0xC0; //CKPOL =1;
68 1
69 1 SPI0CN = 0x03; // Master mode; SPI enabled; flags
70 1 // cleared
71 1 SPI0CKR = SYSCLK/2/8000000-1; // SPI clock <= 8MHz (limited by
72 1 // EEPROM spec.)
73 1 }
74
75 void Timer0_Init (void)
76 {
77 1 CKCON|=0x8;
78 1 TMOD|=0x1; //16Bit
79 1 Count1ms=10;
80 1 TR0 = 0; // STOP Timer0
81 1 TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1ms
82 1 TL0 = -SYSCLK/1000;
83 1 TR0 = 1; // START Timer0
84 1 IE|= 0x2;
85 1 }
86
87
88 void Timer0_ISR (void) interrupt 1 //1ms
89 {
90 1 TH0 = (-SYSCLK/1000) >> 8;
91 1 TL0 = -SYSCLK/1000;
92 1 if (Count1ms) Count1ms--;
93 1 if (Count1s) Count1s--;
94 1 else
95 1 {
96 2 Count1s=1000;
97 2 SaveMotorCount=MotorCount;
98 2 MotorCount=0;
99 2 SD=SaveMotorCount/2-SetSpeed;
100 2 SaveMotorCount*=30;
101 2 if (SD)
102 2 {
103 3 if ((SD>5)||(SD<-5))
104 3 iDAC0-=SD*4;
105 3 else
106 3 iDAC0-=SD;
107 3
108 3 DAC0=iDAC0;
109 3
110 3 }
111 2 }
112 1 }
113
114 void Int0_ISR (void) interrupt 0
115 {
116 1 MotorCount++;
117 1 }
C51 COMPILER V6.23a MAIN 12/19/2002 16:17:30 PAGE 3
118
119 void Delay1ms(unsigned char T)
120 {
121 1 Count1ms=T;
122 1 while (Count1ms);
123 1 }
124
125 void Delay1s(unsigned char T)
126 {
127 1 while (T)
128 1 {
129 2 Delay1ms(200);
130 2 Delay1ms(200);
131 2 Delay1ms(200);
132 2 Delay1ms(200);
133 2 Delay1ms(200);
134 2 T--;
135 2 }
136 1 }
137
138 void main (void)
139 {
140 1
141 1 WDTCN = 0xde;
142 1 WDTCN = 0xad; //关看门狗
143 1 SYSCLK_Init (); //初始化时钟
144 1 Timer0_Init(); //初始化定时器
145 1 PORT_Init (); //初始化IO口
146 1 SPI0_Init (); //初始化SPI0
147 1 CPT1CN|=0x80; //使能比较器1
148 1 REF0CN = 0x07; //使能片内参考电压
149 1 DAC0CN |= 0x80; //使能DAC0
150 1 DAC0H=0; DAC0L=0;
151 1
152 1 IT0=1;
153 1 IE |= 0x01; //使能INT0中断
154 1 EA=1; //开中断
155 1
156 1 Test7279(0);
157 1 TestMotor();
158 1 }
159
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 387 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
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 + -