📄 single.lst
字号:
C51 COMPILER V7.50 SINGLE 08/08/2007 13:32:47 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SINGLE
OBJECT MODULE PLACED IN single.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE single.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //////////单端输入,定时启动,由T2定时,选择AIN0.3为ADC0转化通道////////////////
2 //////single.c///////////////////////////////////
3 #include "lcd.h"//笔者所写的LCD显示头文件,具体见LCD章节
*** WARNING C235 IN LINE 48 OF LCD.H: parameter 1: different types
*** WARNING C236 IN LINE 216 OF LCD.H: '_showintmes': different length of parameter lists
4
5 /*若读者没有条件使用"lcd.h"的各显示和键盘函数,则可在lcd.h文件中如下定义:
6
7 #include "c8051f040.h"
8 void dispini();
9 void showf();
10
11 */
12 //则该调试文件能编译通过,用户也可调试,只是要通过设断点来观察数据
13
14 #define ADC0START temppage=SFRPAGE;SFRPAGE=0x00;AD0BUSY=1;SFRPAGE=temppage
15 #define REAL_RATE 488L
16 #define ADJRATEDIF 237L
17 #define ADJRATESE 118L
18
19 /*
20 REAL_RATE为物理量转化系数,由具体对象而定
21 ADJRATEDIF为差动模式下,增益为0.5时ADC0转化值与真实电压的转换系数
22 ADJRATESE为单端输入模式下,增益为0.5时ADC0转化值与真实电压的转换系数
23 */
24 sfr ADC0H = 0xbf;
25 sfr ADC0L = 0xbe;
26 sfr16 RCAP2=0xca;
27 sfr16 RCAP3=0xca;
28 sfr16 RCAP4=0xca;
29 sfr16 TMR4=0xcc;
30 sfr16 TMR3=0xcc;
31 sfr16 TMR2=0xcc;
32 sfr16 PCA0CP0=0xfb;
33 sfr16 PCA0CP1=0xfd;
34 sfr16 PCA0CP2=0xe9;
35 sfr16 PCA0CP3=0xeb;
36 sfr16 PCA0CP4=0xed;
37 sfr16 PCA0CP5=0xe1;
38 sfr16 ADC0VAL=0xbe;//将ADC0H-ADC0L通过sfr16实现
39 sfr16 ADC0GT=0xc4;
40 sfr16 ADC0LT=0xc6;
41 uchar temppage;
42 bit isnewdata;
43 int kk;
44 long target_val;//工程量转化值
45 long realvol;//真实测量电压值
46 float temp;
47 void adc0_mux(uchar type,uchar source);
48 void adc0_source(uchar source);
49 void p3anolog_ini(uchar port);
50 void HVDA_ini(uchar gaind);
51 void adc0_ini();
52 void config();
53 void t2_ini();
C51 COMPILER V7.50 SINGLE 08/08/2007 13:32:47 PAGE 2
54 void t2_baud(uint t2reload);
55 void t2_ini(){
56 1 SFRPAGE = 0x00;
57 1 TMR2CF = 0x08; // T2时钟为系统时钟,计数方向为增值计数
58 1 TMR2CN = 0x04; // T2为16bit定时器模式,并启动定时器运行
59 1 }
60 void t2_baud(uint t2reload){//每隔t2reload个T2时钟,产生一次定时溢出
61 1 SFRPAGE = 0x00;
62 1 RCAP2=~t2reload+1;//相当于65536-t2reload
63 1 TMR2=RCAP2;
64 1 }
65 void adc0_mux(uchar type,uchar source){//type 配置测量方式为差动还是单端输入
66 1 //source 为ADC0通道选择(共有9个通道)
67 1 SFRPAGE=0x00;
68 1 AMX0CF=type;
69 1 AMX0SL=source;
70 1 }
71 void adc0_source(uchar source){//ADC0通道选择,为adc0_mux()的简化函数
72 1 SFRPAGE=0x00;
73 1 AMX0SL=source;
74 1 }
75 void p3anolog_ini(uchar port){//配置p3口模拟输入管脚
76 1 SFRPAGE=0x00;
77 1 AMX0PRT=port;
78 1 SFRPAGE=0x0f;
79 1 P3MDIN&=~port;//将相应管脚配置成模拟输入口
80 1 }
81 void HVDA_ini(uchar gaind){
82 1 /*高压差动放大器配置,调的只是第二级的增益,整体增益还需再乘以0.05;*/
83 1 //HVDA禁止时,HCAP+上检测到的是HVAIN+的电压
84 1 SFRPAGE=0x00;
85 1 HVA0CN=gaind;
86 1 }
87 void adc0_ini(){
88 1 SFRPAGE=0x00;
89 1 ADC0CF=0x0f;//ADC0时钟为系统时钟2分频,PGA增益为0.5
90 1 ADC0CN=0x8c;//AD0TM=0,ADC0为连续跟踪模式,由T2溢出率启动ADC0
91 1 //AD0LJST=0,数据存储格式右对齐,即ADC0H存放12bit高四位
92 1 REF0CN&=0x0f;//AD0VRS=0,ADC0参考电压为VREFA
93 1 REF0CN|=0x07;//TEMPE=1,内部温度传感器工作
94 1 //BIASE=1,偏移产生器工作
95 1
96 1 /*REFBE=1,内部参考电平工作,电路部分须将VREF参考输出(C8051F40的第12管脚)与 VREF0(C8051F040的16管脚相连,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -