?? 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 + -