adc.lst
来自「宏晶单片机的AD演示程序」· LST 代码 · 共 164 行
LST
164 行
C51 COMPILER V8.02 ADC 07/05/2010 14:59:40 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ADC
OBJECT MODULE PLACED IN ADC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ADC.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*------------------------------------------------------------------*/
2 /* --- STC MCU International Limited -------------------------------*/
3 /* --- STC 1T Series MCU A/D Conversion Demo -----------------------*/
4 /* --- Mobile: (86)13922805190 -------------------------------------*/
5 /* --- Fax: 86-755-82944243 ----------------------------------------*/
6 /* --- Tel: 86-755-82948412 ----------------------------------------*/
7 /* --- Web: www.STCMCU.com -----------------------------------------*/
8 /* If you want to use the program or the program referenced in the */
9 /* article, please specify in which data and procedures from STC */
10 /*------------------------------------------------------------------*/
11
12 #include "reg51.h"
13 #include "intrins.h"
14
15 #define FOSC 18432000L
16 #define BAUD 9600
17
18 typedef unsigned char BYTE;
19 typedef unsigned int WORD;
20
21 /*Declare SFR associated with the ADC */
22 sfr ADC_CONTR = 0xC5; //ADC control register
23 sfr ADC_RES = 0xC6; //ADC high 8-bit result register
24 sfr ADC_LOW2 = 0xBE; //ADC low 2-bit result register
25 sfr P1M0 = 0x91; //P1 mode control register0
26 sfr P1M1 = 0x92; //P1 mode control register1
27
28 /*Define ADC operation const for ADC_CONTR*/
29 #define ADC_POWER 0x80 //ADC power control bit
30 #define ADC_FLAG 0x10 //ADC complete flag
31 #define ADC_START 0x08 //ADC start control bit
32 #define ADC_SPEEDLL 0x00 //420 clocks
33 #define ADC_SPEEDL 0x20 //280 clocks
34 #define ADC_SPEEDH 0x40 //140 clocks
35 #define ADC_SPEEDHH 0x60 //70 clocks
36
37 void InitUart();
38 void InitADC();
39 void SendData(BYTE dat);
40 BYTE GetADCResult(BYTE ch);
41 void Delay(WORD n);
42 void ShowResult(BYTE ch);
43
44 void main()
45 {
46 1 InitUart(); //Init UART, use to show ADC result
47 1 InitADC(); //Init ADC sfr
48 1 while (1)
49 1 {
50 2 ShowResult(0); //Show Channel0
51 2 ShowResult(1); //Show Channel1
52 2 ShowResult(2); //Show Channel2
53 2 ShowResult(3); //Show Channel3
54 2 ShowResult(4); //Show Channel4
55 2 ShowResult(5); //Show Channel5
C51 COMPILER V8.02 ADC 07/05/2010 14:59:40 PAGE 2
56 2 ShowResult(6); //Show Channel6
57 2 ShowResult(7); //Show Channel7
58 2 }
59 1 }
60
61 /*----------------------------
62 Send ADC result to UART
63 ----------------------------*/
64 void ShowResult(BYTE ch)
65 {
66 1 SendData(ch); //Show Channel NO.
67 1 SendData(GetADCResult(ch)); //Show ADC high 8-bit result
68 1
69 1 //if you want show 10-bit result, uncomment next line
70 1 // SendData(ADC_LOW2); //Show ADC low 2-bit result
71 1 }
72
73 /*----------------------------
74 Get ADC result
75 ----------------------------*/
76 BYTE GetADCResult(BYTE ch)
77 {
78 1 ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
79 1 _nop_(); //Must wait before inquiry
80 1 _nop_();
81 1 _nop_();
82 1 _nop_();
83 1 while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
84 1 ADC_CONTR &= ~ADC_FLAG; //Close ADC
85 1
86 1 return ADC_RES; //Return ADC result
87 1 }
88
89 /*----------------------------
90 Initial UART
91 ----------------------------*/
92 void InitUart()
93 {
94 1 SCON = 0x5a; //8 bit data ,no parity bit
95 1 TMOD = 0x20; //T1 as 8-bit auto reload
96 1 TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate
97 1 TR1 = 1; //T1 start running
98 1 }
99
100 /*----------------------------
101 Initial ADC sfr
102 ----------------------------*/
103 void InitADC()
104 {
105 1 P1 = P1M0 = P1M1 = 0xff; //Set all P1 as Open-Drain mode
106 1 ADC_RES = 0; //Clear previous result
107 1 ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
108 1 Delay(2); //ADC power-on and delay
109 1 }
110
111 /*----------------------------
112 Send one byte data to PC
113 Input: dat (UART data)
114 Output:-
115 ----------------------------*/
116 void SendData(BYTE dat)
117 {
C51 COMPILER V8.02 ADC 07/05/2010 14:59:40 PAGE 3
118 1 while (!TI); //Wait for the previous data is sent
119 1 TI = 0; //Clear TI flag
120 1 SBUF = dat; //Send current data
121 1 }
122
123 /*----------------------------
124 Software delay function
125 ----------------------------*/
126 void Delay(WORD n)
127 {
128 1 WORD x;
129 1
130 1 while (n--)
131 1 {
132 2 x = 5000;
133 2 while (x--);
134 2 }
135 1 }
136
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 152 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?