📄 adda.lst
字号:
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ADDA
OBJECT MODULE PLACED IN ADDA.OBJ
COMPILER INVOKED BY: C:\Keil\UV3\C51\BIN\c51.exe ADDA.c DB OE
line level source
1
2 //----------------------------------------------------------------
3 // C8051F020实验核心模块测试程序
4 // AD_DA实验
5 //
6 // 实现功能:测试电路板AD,DA功能,实现:
7 // 1.使用ADC0测量AIN0引脚电压,每秒通过串口发送测量的电压和温度值。
8 // 2.将AD的输入电压在DA上输出,经2倍放大后驱动LED1
9 // 3.注意,常量AD_VREF是单片机输出的参考电压,不同单片机会有变化,具体见常量定义处
10 // 其值应该于J1的2,3间电压保持一致
11 // 4.AD测量的电压可以通过用万用表测量J1的2,18间的电压验证
12 //
13 // 实验条件:
14 // 1.底板上JP1的1,2,4,6设置为ON状态
15 // 2.底板上JP2的1,2,3,4设置为ON状态
16 //
17 //
18 // 说明:
19 // 本模块中配套的测试程序都是以消息驱动的.
20 //---------------------------------------------------------------
21 // 修改记录
22 // 版本 时间 人员 内容
23 // 1.0 2007/4/30 scj 建立文件,实现基本功能
24 // 1.1 2007/6/4 scj 根据V122底板修改
25 //
26 //---------------------------------------------------------------
27
28 #include "F020.h"
29 #include <string.h>
30 #include <ctype.h>
31 #include <stdio.h>
32
33
34 //--------------------------------------------
35 // 数据类型定义
36 //--------------------------------------------
37
38 // 基本数据类型
39 typedef unsigned char BYTE; // 8位无符号数
40 typedef unsigned int WORD; // 16位无符号数
41 typedef unsigned long DWORD; // 32位无符号数
42
43 // 结构体
44 typedef struct
45 {
46 BYTE base; // DIDA次数
47 BYTE second; // 秒
48 BYTE minute; // 分
49
50 }S_TIME;
51
52
53 //--------------------------------------------
54 // 引脚定义
55 //--------------------------------------------
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 2
56 #define P_LED2 P31
57
58
59 //--------------------------------------------
60 // 宏定义
61 //--------------------------------------------
62
63 // 系统消息定义
64 #define SECD_SIGNAL 0x01
65 #define MINU_SIGNAL 0x02
66 #define UART0RECV_SIGNAL 0x04
67
68
69 // 常量定义
70
71 //定时器0定时,使用SYSCLK/12作为时钟源
72 //定时计算方法,TH0:TL0= 65536-t*SYSCLK/12
73 //定时25ms,TH0:TL0=0x4C 00
74 #define TMR0H 0x4C
75 #define TMR0L 0x00
76
77 #define TICKS_PER_SEC 40
78 #define RECVBUF_LEN 20
79
80 //////////////////////////////////////////////////////////////////////
81 // 单片机内部参考电压,测量J1差排的2,3引脚的电压设置该值来校正输出电压
82 // 该值为实际电压的1000倍
83 //////////////////////////////////////////////////////////////////////
84 #define AD_VREF 2400
85 //--------------------------------------------
86 // 函数声明
87 //--------------------------------------------
88 void CommandProc(char *pRecvString);
89 void SendString(char *pSendString);
90
91 //--------------------------------------------
92 // 全局变量定义
93 // 全局变量以g_开头
94 // 位变量: g_b
95 // 无符号字节变量: g_c
96 // 无符号双字节变量: g_w
97 // 无符号4字节变量: g_dw
98 // 有符号数在类型前加s,比如char型位g_sc
99 // 结构体为g_s后为大写
100 //--------------------------------------------
101 data BYTE g_cMainSignal; // 主消息变量
102
103 data S_TIME g_sTime; // 主时钟
104
105 data BYTE g_cRecvPointer; // 接收指针
106 data BYTE g_cRecvLength; // 接收数据长度
107 idata BYTE g_cRecvBuffer[RECVBUF_LEN]; // 接收缓冲区
108
109 xdata char g_SendBuffer[200];
110
111 data WORD g_Voltage; // 电压
112 data float g_Temperature; // 温度
113
114
115 //-----------------------------------------------
116 // 初始化函数
117 //
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 3
118 //-----------------------------------------------
119 void Timer_Init()
120 {
121 1
122 1 PCON = 0;
123 1
124 1 //.......................................
125 1 // 设置定时器的时钟信号
126 1 // - T4M T2M T1M T0M - - -
127 1 // 0 1 0 1 0 0 0 0
128 1 // 1:使用SYSCLK;0:使用SYSCLK/12
129 1 // 定时器0,1,2,4均使用SYSCLK
130 1 //.......................................
131 1 CKCON = 0x70;
132 1
133 1
134 1 //......................................
135 1 // 定时0工作在16位定时器模式
136 1 // 定时器1工作在8位重载模式
137 1 //......................................
138 1
139 1 TMOD = 0x21;
140 1
141 1 //....................................
142 1 // T0作为系统节拍时钟
143 1 // 定时计算方法= 65536-t*SYSCLK
144 1 //.....................................
145 1 TH0 = TMR0H;
146 1 TL0 = TMR0L;
147 1
148 1 //.......................................
149 1 // T1作为串口0时钟
150 1 // 串口0波特率=SYSCLK/32*(256-TMR1LOAD)
151 1 // T1波特率=9600
152 1 //.......................................
153 1
154 1 TH1 = 0xB8;
155 1 TL1 = 0xB8;
156 1
157 1 TCON = 0x00;
158 1
159 1
160 1 //..................................................
161 1 // T2 and T3 not used
162 1 //..................................................
163 1 RCAP2H = 0x00; // Timer 2 Capture Register High Byte
164 1 RCAP2L = 0x00; // Timer 2 Capture Register Low Byte
165 1 TH2 = 0x00; // Timer 2 High Byte
166 1 TL2 = 0x00; // Timer 2 Low Byte
167 1 T2CON = 0x00; // Timer 2 Control Register
168 1
169 1 TMR3RLL = 0x00; // Timer 3 Reload Register Low Byte
170 1 TMR3RLH = 0x00; // Timer 3 Reload Register High Byte
171 1 TMR3H = 0x00; // Timer 3 High Byte
172 1 TMR3L = 0x00; // Timer 3 Low Byte
173 1 TMR3CN = 0x00; // Timer 3 Control Register
174 1
175 1 //.....................................................
176 1 // T4 作为串口1波特率发生器
177 1 // T4波特率=SYSCLK/32*(65536-RCAP4H:RCAP4L)
178 1 // T4波特率=19200
179 1 //.....................................................
C51 COMPILER V8.02 ADDA 08/18/2007 20:23:46 PAGE 4
180 1 RCAP4H = 0xFF; // Timer 4 Capture Register High Byte
181 1 RCAP4L = 0xDC; // Timer 4 Capture Register Low Byte
182 1 TH4 = 0xFF; // Timer 4 High Byte
183 1 TL4 = 0xDC; // Timer 4 Low Byte
184 1 T4CON = 0x30; // Timer 4 Control Register
185 1
186 1
187 1 }
188
189 //...........................................................
190 // 功能:UART0初始化
191 // 输入参数:无
192 // 输出参数:无
193 // 注意:1.应该首先使用交叉开关为UART0分配相应的引脚
194 // 2.初始化定时器1作为波特率发生器
195 //..........................................................
196 void UART0_Init()
197 {
198 1
199 1 SCON0 = 0x50; // 8位波特率异步通信模式
200 1
201 1 REN0 = 1; // 使能UART0接收
202 1 TR1 = 1; // 启动定时器1
203 1 }
204
205 //......................................................
206 // 功能:配置交叉开关和端口方向
207 // 输入参数:无
208 // 输出参数:无
209 // 注意:该函数使能交叉开关
210 // TX0,RX0被分配到P00,P01
211 //.....................................................
212
213 void Port_IO_Init()
214 {
215 1 // P0.0 - TX0 (UART0), Open-Drain, Digital
216 1 // P0.1 - RX0 (UART0), Open-Drain, Digital
217 1 // P0.2 - SCK (SPI0), Open-Drain, Digital
218 1 // P0.3 - MISO (SPI0), Open-Drain, Digital
219 1 // P0.4 - MOSI (SPI0), Open-Drain, Digital
220 1 // P0.5 - NSS (SPI0), Open-Drain, Digital
221 1 // P0.6 - SDA (SMBus), Open-Drain, Digital
222 1 // P0.7 - SCL (SMBus), Open-Drain, Digital
223 1
224 1 // P1.0 - Skipped, Open-Drain, Analog
225 1 // P1.1 - Skipped, Open-Drain, Analog
226 1 // P1.2 - Skipped, Open-Drain, Analog
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -