📄 adc0_temp.lst
字号:
C51 COMPILER V7.20 ADC0_TEMP 08/15/2007 18:56:00 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE ADC0_TEMP
OBJECT MODULE PLACED IN .\ADC0_TEMP.obj
COMPILER INVOKED BY: E:\SoC单片机实验,实践与应用设计(基于C8051F系列)\C8051F应用软件\Keil\C51\BIN\C51.EXE ..\311\ADC0_TEM
-P.c DEBUG OBJECTEXTEND PRINT(.\ADC0_TEMP.lst) OBJECT(.\ADC0_TEMP.obj)
line level source
1 //内部温度传感器调试程序//
2 //ADC0_TEMP.c
3 #include <C8051F040.h>
4 #define ADC0START temppage=SFRPAGE;SFRPAGE=0x00;AD0BUSY=1;SFRPAGE=temppage
5 typedef unsigned int uint;
6 typedef unsigned char uchar;
7 typedef unsigned long ulong;
8 sfr16 RCAP2=0xca;
9 sfr16 RCAP3=0xca;
10 sfr16 RCAP4=0xca;
11 sfr16 TMR4=0xcc;
12 sfr16 TMR3=0xcc;
13 sfr16 TMR2=0xcc;
14 sfr16 PCA0CP0=0xfb;
15 sfr16 PCA0CP1=0xfd;
16 sfr16 PCA0CP2=0xe9;
17 sfr16 PCA0CP3=0xeb;
18 sfr16 PCA0CP4=0xed;
19 sfr16 PCA0CP5=0xe1;
20 sfr16 ADC0VAL=0xbe;
21 sfr16 ADC0GT=0xc4;
22 sfr16 ADC0LT=0xc6;
23 uchar temppage;
24 bit isnewdata;
25 uint kk;
26 uint i;
27 float temp;
28 xdata float t[20];//存放温度检测数据,为20个数据
29 void adc0_mux(uchar type,uchar source);
30 void adc0_source(uchar source);
31 void p3anolog_ini(uchar port);
32 void HVDA_ini(uchar gaind);
33 void adc0_ini();
34 void delay1ms(uint time);
35 void config();
36 void adc0_mux(uchar type,uchar source){//type 配置测量方式为差动还是单端输入
37 1 //source 为ADC0通道选择(共有9个通道)
38 1 SFRPAGE=0x00;
39 1 AMX0CF=type;
40 1 AMX0SL=source;
41 1 }
42 void adc0_source(uchar source){//ADC0通道选择,为adc0_mux()的简化函数
43 1 SFRPAGE=0x00;
44 1 AMX0SL=source;
45 1 }
46 void p3anolog_ini(uchar port){//配置p3口模拟输入管脚
47 1 SFRPAGE=0x00;
48 1 AMX0PRT=port;
49 1 SFRPAGE=0x0f;
50 1 P3MDIN&=~port;//将相应管脚配置成模拟输入口
51 1 }
52 void HVDA_ini(uchar gaind){//高压差动放大器配置
53 1 SFRPAGE=0x00;
54 1 HVA0CN=gaind;
C51 COMPILER V7.20 ADC0_TEMP 08/15/2007 18:56:00 PAGE 2
55 1 }
56 void adc0_ini(){
57 1 SFRPAGE=0x00;
58 1 ADC0CF=0x80;//ADC0时钟为系统时钟17分频,PGA增益为1
59 1 ADC0CN=0x80;
60 1 /*AD0EN=1,ADC0模块使能
61 1 AD0TM=0,ADC0为连续跟踪模式
62 1 AD0CM1:AD0CM0=00b,为AD0BUSY启动方式
63 1 AD0LJST=0,数据存储格式右对齐,即ADC0H存放12bit高四位*/
64 1 REF0CN&=0x0f;//AD0VRS=0,ADC0参考电压为VREFA
65 1 REF0CN|=0x07;//TEMPE=1,内部温度传感器工作
66 1 /*BIASE=1,偏移产生器工作
67 1 REFBE=1,内部参考电平工作,电路部分须将VREF参考输出(C8051F40的第12管脚)与VREF0(C8051F040的16管脚相连,并
-最好并联一个4.7uF和0.1uF的旁路电容以电平滤波*/
68 1 adc0_source(9);//选择第9通道,即选择温度信号为AD转换
69 1 EIE2 |= 0x02; //开ADC0中断
70 1 }
71 void delay1ms(uint time){ //延迟1ms
72 1 uint i;
73 1 uint j;
74 1 for (i=0;i<time;i++){
75 2 for(j=0;j<300;j++);
76 2 }
77 1 }
78 void config(){
79 1 //看门狗禁止
80 1 WDTCN = 0x07;
81 1 WDTCN = 0xDE;
82 1 WDTCN = 0xAD;
83 1 SFRPAGE = 0x0F;
84 1 //交叉开关使能,但没有进行外围设备配置
85 1 XBR0 = 0x00;
86 1 XBR1 = 0x00;
87 1 XBR2 = 0x40;
88 1 XBR3 = 0x00;
89 1 //管脚输出配置,P0口为开漏输出,其中P0.6接上拉电阻,P0为数字输入口
90 1 SFRPAGE = 0x0F;
91 1 P0MDOUT = 0x00;
92 1 P4MDOUT = 0x03;
93 1 P1MDIN = 0xFF;
94 1
95 1 OSCXCN = 0x67;
96 1 for(i=0;i<256;i++); //等待1ms以上; // Wait 1ms for initialization
97 1 while(!(OSCXCN&0x80)); //等待晶体稳定while ((OSCXCN & 0x80) == 0);
98 1 CLKSEL = 0x01;
99 1 OSCICN = 0x02;
100 1
101 1 /*
102 1 OSCXCN=0x67; //启动外部振荡器用22.1184MHz晶体
103 1 for(i=0;i<256;i++); //等待1ms以上;
104 1 while(!(OSCXCN&0x80)); //等待晶体稳定
105 1 OSCICN=0x88; //选择外部振荡器作业
106 1
107 1 /*晶振配置,采用内部晶振8分频
108 1 SFRPAGE = 0x0F;
109 1 CLKSEL = 0x00;
110 1 OSCXCN = 0x00;
111 1 OSCICN = 0x80; */
112 1
113 1 }
114 void main(){
115 1
C51 COMPILER V7.20 ADC0_TEMP 08/15/2007 18:56:00 PAGE 3
116 1 char i;
117 1 config();
118 1 adc0_ini();//ADC0初始化
119 1 ADC0START;//ADC0启动
120 1 EA=1;
121 1 i=0;
122 1 while(1){
123 2 if(isnewdata){//由该位查询ADC0转化值是否更新
124 3 kk=ADC0H*256;
125 3 kk+=ADC0L;//可用sfr16一次性读取
126 3 temp=(float)kk/4096.0;
127 3 temp*=2.43;
128 3 temp-=0.776;
129 3 temp/=0.00286;//将测量值转化成真实温度值
130 3 isnewdata=0;
131 3 t[i]=temp;//将温度检测值存入长度为20的数组中
132 3 i++;
133 3 if(i>19)
134 3 i=0;//在此设断点,观察程序运行结果
135 3 delay1ms(100);
136 3 ADC0START;
137 3 }
138 2 }
139 1 }
140 void ADC0_ISR() interrupt 15{//ADC0中断
141 1 SFRPAGE=0x00;
142 1 AD0INT=0;
143 1 isnewdata=1;
144 1
145 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 373 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 80 ----
PDATA SIZE = ---- ----
DATA SIZE = 9 1
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -