📄 text2.lst
字号:
C51 COMPILER V8.05a TEXT2 08/09/2008 12:43:59 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 // by GaoLin...~
2 #include <c8051f020.h> // SFR声明
3 #include <stdio.h>
4 //-----------------------------------------------------------------------------
5 // C8051F02X的16位SFR定义
6 //-----------------------------------------------------------------------------
7 sfr16 TMR3RL = 0x92; // 定时器3重装值
8 sfr16 TMR3 = 0x94; // 定时器3计数器
9 sfr16 ADC0 = 0xbe; // ADC0数据
10 long temperature; // 温度为百分之一精度度C
11 int temp_int, temp_frac; // 温度的整数和小数部分
12 //-----------------------------------------------------------------------------
13 // 全局常量
14 //-----------------------------------------------------------------------------
15 #define SYSCLK 22118400 // 系统时钟频率Hz
16 #define SAMPLERATE0 50000 // ADC0采样频率Hz
17 sbit LED = P1^6; // LED=’1’ 意为ON
18 sbit test=P3^0;
19 //-----------------------------------------------------------------------------
20 // 函数原型
21 //-----------------------------------------------------------------------------
22 void SYSCLK_Init (void);
23 void PORT_Init (void);
24 void ADC0_Init (void);
25 void Timer3_Init (int counts);
26 void ADC0_ISR (void);
27 //-----------------------------------------------------------------------------
28 // ADC0中断服务程序
29 //-----------------------------------------------------------------------------
30 //
31 // ADC0转换结束中断服务程序
32 // 我们将ADC0取样结果存储在全局变量<result>.
33 //
34 void ADC0_ISR (void) interrupt 15
35 {
36 1 AD0INT = 0; // ADC转换结束清除标志
37 1 }
38
39 //-----------------------------------------------------------------------------
40 // 主函数
41 //-----------------------------------------------------------------------------
42 void main (void)
43 {
44 1
45 1 WDTCN = 0xde; // 禁止看门狗定时器
46 1 WDTCN = 0xad;
47 1 SYSCLK_Init (); // 初始化振荡器
48 1 PORT_Init (); // 初始化数据交叉开关和通用IO口
49 1 Timer3_Init (SYSCLK/SAMPLERATE0); // 初始化定时器3溢出作为采样速率
50 1 ADC0_Init (); // 初始化ADC
51 1 AD0EN = 1; // 使能ADC
52 1 EA = 1; // 允许全局中断
53 1
54 1 while (1)
55 1 {
C51 COMPILER V8.05a TEXT2 08/09/2008 12:43:59 PAGE 2
56 2 while(AD0INT==0);AD0INT=0;
57 2 temperature = ADC0;
58 2
59 2 // 计算温度误差为百分之一度
60 2 temperature = temperature - 41380;
61 2 temperature = (temperature * 100L) / 156;
62 2 temp_int = temperature / 100;
63 2 temp_frac = temperature - (temp_int * 100);
64 2 test=1;
65 2 }
66 1 }
67 //-----------------------------------------------------------------------------
68 // 系统时钟初始化
69 //-----------------------------------------------------------------------------
70 //
71 // 此程序初始化系统时钟使用22.1184MHz晶体作为时钟源
72 //
73 void SYSCLK_Init (void)
74 {
75 1 int i; // 延时计数器
76 1 OSCXCN = 0x67; // 起动外部振荡器晶体为 22.1184MHz
77 1 for (i=0; i < 256; i++) ; // 等待振荡器启动(>1ms)
78 1 while (!(OSCXCN & 0x80)) ; // 等待晶体振荡器稳定
79 1 OSCICN = 0x88; // 选择外部振荡器作为系统时钟源并使能丢失时钟检测器
80 1 }
81 //-----------------------------------------------------------------------------
82 // IO口初始化
83 //-----------------------------------------------------------------------------
84 //
85 // 配置数据交叉开关和通用IO口
86 //
87 void PORT_Init (void)
88 {
89 1 XBR0 = 0x04; // 使能UART0
90 1 XBR1 = 0x00;
91 1 XBR2 = 0x40; // 允许数据交叉开关和弱上拉
92 1 P0MDOUT |= 0x01; // 允许TX0为推挽输出
93 1 P1MDOUT |= 0x40; // 允许P1.6(LED)为推挽输出
94 1 }
95 //-----------------------------------------------------------------------------
96 // ADC0初始化
97 //-----------------------------------------------------------------------------
98 //
99 // 配置ADC0 使用定时器3溢出作为转换源,转换结束产生中断
100 // 使用左对齐输出模式使能ADC转换结束中断禁止ADC
101 //
102 void ADC0_Init (void)
103 {
104 1 ADC0CN = 0x05; // 禁止ADC0; 正常跟踪模式
105 1 // 定时器3溢出ADC0开始转换ADC0数据左对齐
106 1 REF0CN = 0x07; // 使能温度传感器, 片内 VREF和VREF 输出缓冲器
107 1 AMX0SL = 0x0f; // 选择温度传感器作为ADC为多路模拟输出
108 1 ADC0CF = (SYSCLK/2500000) << 3; // ADC 转换时钟=2.5MHz
109 1 ADC0CF |= 0x01; // PGA增益=2
110 1 EIE2 |= 0x02; // 允许ADC中断
111 1 }
112 //-----------------------------------------------------------------------------
113 // 定时器3初始化
114 //-----------------------------------------------------------------------------
115 //
116 // 配置定时器3为自动重装时间间隔由<counts> 制定(不产生中断)
117 // 使用系统时钟作为时基.
C51 COMPILER V8.05a TEXT2 08/09/2008 12:43:59 PAGE 3
118 //
119 void Timer3_Init (int counts)
120 {
121 1 TMR3CN = 0x02; // 停止定时器3; 清除TF3;
122 1 // 使用系统时钟作为时基
123 1 TMR3RL = -counts; // 初始化重装值
124 1 TMR3 = 0xffff; // 设置立即重装值
125 1 EIE2 &= ~0x01; // 禁止定时器3中断
126 1 TMR3CN |= 0x04; // 起动定时器3
127 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 229 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
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 + -