📄 system.lst
字号:
C51 COMPILER V7.07 SYSTEM 05/17/2003 11:52:25 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE SYSTEM
OBJECT MODULE PLACED IN system.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.exe system.c DB OE
stmt level source
1 //--------------------------------------------------------------------------------------------------------
---------------------------------------------
2 //文件名:system.c
3 //作用:用于硬件系统的初始化,以及对存储器,AD,485等的操作
4 //
5 //--------------------------------------------------------------------------------------------------------
----------------------------------------------
6
7 #include<c8051F120.h>
8 #include <GAL.h>
9 #define AIADDR 0x01 //AI表地址
10 #define W_CONTROLBYTE 0xA0 //24c01的写地址 A0,A1,A2均为0
11 #define R_CONTROLBYTE 0xA1 //24c01的读地址 A0,A1,A2均为0
12 #define FS_SUM 0x00 //文件系统存储sum的地址
13 #define FS_POINTER 0x01 //存储当前的项目号地址
14 #define FS_START_ADDR 0x02 //数据起始地址
15 //液晶控制口
16 sbit STB=P3^2;
17 sbit Busy=P3^1;
18
19 sbit TR=P3^0; //控制485总线的方向
20 sbit SDA=P0^7;// ************* I2C **************
21 sbit SCL=P0^6;// ************* 总线 **************
22
23 bit nop=0; //延时用
24 unsigned char time=0;
25 unsigned int emissivity_AD;
26 unsigned int voltage_AD;
27 unsigned int current_AD;
28
29 unsigned char xdata AIBUF[10];//518P表的回送数据缓冲寄存器
30 unsigned char xdata AIDATNUM;//518P表接收数据计数器
31 bit AIOVERFLG;//518P转换完成标志
32 bit TIMEFLG;//时间超过标志
33 unsigned char xdata AITIME;//518P转换时间记录
34 unsigned char xdata ERRORNUM;//518P错误次数
35 extern Cstatusbar xdata statusbar;
36
37 //********************************************************************************************************
-****************************************
38 //延时us
39 //********************************************************************************************************
-****************************************
40 //delay function
41 void delay1s(void)
42 {
43 1 unsigned char i,j,k;
44 1 for(i=0;i<214;i++)
45 1 for(j=0;j<255;j++)
46 1 for(k=0;k<125;k++)
47 1 {}
48 1 }
49 void delay100us(void)
50 {
51 1 unsigned char i,j,k;
C51 COMPILER V7.07 SYSTEM 05/17/2003 11:52:25 PAGE 2
52 1 for(i=0;i<200;i++)
53 1 for(j=0;j<1;j++)
54 1 for(k=0;k<1;k++)
55 1 {}
56 1 }
57 void delay200ms(void)
58 {
59 1 unsigned char i,j,k;
60 1 for(i=0;i<43;i++)
61 1 for(j=0;j<255;j++)
62 1 for(k=0;k<255;k++)
63 1 {}
64 1 }
65 void delay5ms(void)
66 {
67 1 unsigned char i,j,k;
68 1 for(i=0;i<1;i++)
69 1 for(j=0;j<200;j++)
70 1 for(k=0;k<100;k++)
71 1 {}
72 1 }
73 void delay4us(void)
74 {
75 1 unsigned char i,j,k;
76 1 for(i=0;i<2;i++)
77 1 for(j=0;j<1;j++)
78 1 for(k=0;k<1;k++)
79 1 {}
80 1 }
81 void delay8us(void)
82 {
83 1 unsigned char i;
84 1 for(i=0;i<20;i++)
85 1 delay4us();
86 1 }
87 //********************************************************************************************************
-******************************************
88 //初始化系统硬件,并显示系统logo,系统
89 //********************************************************************************************************
-*******************************************
90 void sys_init(void)
91 {
92 1 WDTCN=0xDE;//先关看门狗,初始化完成之后再开
93 1 WDTCN=0xAD;//
94 1 //*****************************************************************
95 1 SFRPAGE=CONFIG_PAGE; //选择sfr页
96 1 //OSC Select*******************************************************
97 1 OSCICN=0xC3;//使用内部频率24.5MHz,不分频
98 1 //*****************************************************************
99 1 //io 定义
100 1 XBR0=0X04; //select UART0
101 1 XBR2=0x44; //select UART1 and enable cross switch
102 1 P0MDOUT=0x45; //Tx0,Tx1,SCL推挽
103 1 P2MDOUT=0xff; //与 lcd通信数据端口,全部推挽
104 1 P3MDOUT=0x35; //T/R,STB,CLK,LD 推挽
105 1 SFRPAGE=LEGACY_PAGE;
106 1 //*****************************************************************
107 1 //RSTSRC init******************************************************
108 1 RSTSRC=0x06;//选择时钟丢失监测器和VDD监视器为复位源。
109 1 //*****************************************************************
110 1 //电压基准**********************************************************
111 1 REF0CN=0x03;//内部基准,2.4V,且采用偏置电压
C51 COMPILER V7.07 SYSTEM 05/17/2003 11:52:25 PAGE 3
112 1 //配置时钟和UART
113 1 CKCON=0x00;//define T0 clock is sysclk/12, T1 clock is sysclk/12
114 1 TMR2CF=0x08;//T2 clock is SYSCLK
115 1 TMR2H=0xFF;//UART0 BR is 9600
116 1 TMR2L=0x61;
117 1 RCAP2H=0xFF;
118 1 RCAP2L=0x61;
119 1
120 1 SFRPAGE=LEGACY_PAGE;
121 1 //TMR4CF=0x00;//T4 clock is SYSCLK/12
122 1 TMOD=0x21;//Timer0 is in mode 1; Timer1 is in mode 2
123 1 SCON0=0x40;//UART0 is in the mode 1 and REN0 is close, then UART0 can send but receive data
124 1 SSTA0=0x05;//UART0 use T2 to be the TX and RX BR generator
125 1 SFRPAGE=UART1_PAGE;
126 1 SCON1=0x50;//UART1 is in the 8 bit mode and can receive data
127 1 SFRPAGE=LEGACY_PAGE;
128 1 TL0=0x40;
129 1 TH0=0xB0;//这样T0就在10ms内中断一次
130 1 TH1=0x96;//UART1 BR is 9600
131 1 TL1=0x96;
132 1 TR1=1;//open the UART1 BR
133 1 TR2=1;//open the UART0 BR
134 1
135 1 //设置AD的转换
136 1 ADC0CF=0x58;//加大SAR时钟,1MHz
137 1 ADC0CN=0x80; //使能adc0,选择查询模式
138 1 REF0CN&=0x0f;//AD0VRS=0,ADC0参考电压为VREFA
139 1 REF0CN|=0x07;//TEMPE=1,内部温度传感器工作
140 1 //
141 1 //interrupt define*************************************************
142 1 IP=0x10;//UART0 is the highest level int
143 1 //IE=0x07;//INT0 and T0 and INT1 are active
144 1 IE=0x12;//uart0 and T0 are active
145 1 //EIE1=0x04;//允许ADC0窗口比较中断
146 1 EIE1=0x00;
147 1 EIE2=0x40; //允许UART1中断
148 1 EIP2=0x40; //UART1中断优先级置高,注意此位一定要置高,否则不能进中断
149 1 TR0=1;//开始清狗
150 1 EA=1;//open the interrupt
151 1 //*****************************************************************
152 1 }
153
154 void SYSINIT(void)
155 {
156 1 //*****************************************************************
157 1 SFRPAGE=CONFIG_PAGE;
158 1 //OSC Select*******************************************************
159 1 OSCICN=0xC3;//使用内部频率24.5MHz,不分频
160 1 //*****************************************************************
161 1 //I/O define*******************************************************
162 1 XBR0 = 0x04;//select UART0
163 1 XBR1 = 0x14;//select INT0 and INT1
164 1 XBR2 = 0x04;//选择弱上拉,并且选择UART1
165 1 XBR2 = 0x44;//使能交叉开关
166 1 //*****************************************************************
167 1 P0MDOUT = 0x45; // Output configuration for P0
168 1 P1MDOUT = 0x80; // Output configuration for P1
169 1 P2MDOUT = 0xFF; // Output configuration for P2
170 1 P3MDOUT = 0x61; // Output configuration for P3
171 1 SFRPAGE=LEGACY_PAGE;
172 1 //*****************************************************************
173 1 //RSTSRC init******************************************************
C51 COMPILER V7.07 SYSTEM 05/17/2003 11:52:25 PAGE 4
174 1 RSTSRC=0x06;//选择时钟丢失监测器和VDD监视器为复位源。
175 1 //*****************************************************************
176 1 //电压基准**********************************************************
177 1 REF0CN=0x03;//内部基准,2.4V,且采用偏置电压
178 1 //*****************************************************************
179 1 //TCON*************************************************************
180 1 TCON=0x05;//INT0 and INT1 are active in edge mode
181 1 //*****************************************************************
182 1 //UART and Timer n config******************************************
183 1 CKCON=0x00;//define T0 clock is sysclk/12, T1 clock is sysclk/12
184 1 TMR2CF=0x08;//T2 clock is SYSCLK
185 1 TMR2H=0xFF;//UART0 BR is 9600
186 1 TMR2L=0x61;
187 1 RCAP2H=0xFF;
188 1 RCAP2L=0x61;
189 1 SFRPAGE=TMR3_PAGE;
190 1 TMR3CF=0x00;//T3 clock is SYSCLK/12
191 1 TMR3H=0x00;
192 1 TMR3L=0x00;
193 1 RCAP3H=0x00;
194 1 RCAP3L=0x00;
195 1 SFRPAGE=LEGACY_PAGE;
196 1 //TMR4CF=0x00;//T4 clock is SYSCLK/12
197 1 TMOD=0x21;//Timer0 is in mode 1; Timer1 is in mode 2
198 1 SCON0=0x40;//UART0 is in the mode 1 and REN0 is close, then UART0 can send but receive data
199 1 SSTA0=0x05;//UART0 use T2 to be the TX and RX BR generator
200 1 SFRPAGE=UART1_PAGE;
201 1 SCON1=0x40;//UART1 is in the 8 bit mode and can't receive data
202 1 SFRPAGE=LEGACY_PAGE;
203 1 TL0=0x7F;
204 1 TH0=0x60;//这样T0就在12ms内中断一次
205 1 TH1=0x96;//UART1 BR is 9600
206 1 TL1=0x96;
207 1 TR1=1;//open the UART1 BR
208 1 TR2=1;//open the UART0 BR
209 1 //*****************************************************************
210 1 ADC0LTL=0xA0;
211 1 ADC0LTH=0x02;//上限为4mA报警
212 1 ADC0CF=0x58;//加大SAR时钟,1MHz
213 1 ADC0CN=0xC0;//开ADC0并且设置为转换才跟踪方式,设置为向AD0BUSY写1判断AD0INT为1方式启动ADC0
214 1 //*********************************************************************
215 1 //interrupt define*************************************************
216 1 IP=0x10;//UART0 is the highest level int
217 1 //IE=0x07;//INT0 and T0 and INT1 are active
218 1 IE=0x03;//INT0 and T0 are active
219 1 //EIE1=0x04;//允许ADC0窗口比较中断
220 1 EIE1=0x00;
221 1 EIE2=0x03;//允许ADC0中断和T3中断
222 1 TR0=1;//开始清狗
223 1 EA=1;//open the interrupt
224 1 //*****************************************************************
225 1 // BEEP=0;//close the beep
226 1 // MOTORSTOP;//关电机
227 1 //TPFCOFF;//关二位四通阀
228 1 //*****************************************************************
229 1 }
230
231
232 ///////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -