📄 adandda_intial.lst
字号:
C51 COMPILER V8.02 ADANDDA_INTIAL 07/16/2008 00:27:28 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ADANDDA_INTIAL
OBJECT MODULE PLACED IN ADandDA_Intial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ADandDA_Intial.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "common.h"
2 #include"PCA.h"
3
4 sfr16 RCAP2 = 0xca;
5 sfr16 TMR2=0xcc;
6 extern bit isnewdata,flag;
7 extern int kk;
8 extern int xdata realvol0[100];
9 unsigned char temppage;
10 idata unsigned char temp_Page;
11 extern unsigned char Key_Value;
12 int count=0;
13 unsigned char number=0;
14 extern int da;
15 union tcfint16
16 {
17 uint myword;
18 struct{uchar hi;uchar low;}bytes;
19 }myint16;//用联合体定义16位操作
20
21 /*
22 void DAC1_initial()
23 {
24 SFRPAGE=0x01;
25 REF0CN=0x03;
26 DAC1CN|=0x80;
27 }
28 */
29 /*******************************************************************************/
30 /*函数说明:定时器2初始化 */
31 /*******************************************************************************/
32 void t2_ini()
33 {
34 1
35 1 SFRPAGE = 0x00;
36 1 TMR2CF = 0x08;
37 1 TMR2CN = 0x04; // T2为16bit定时器模式,并启动定时器运行
38 1
39 1 }
40
41 /*******************************************************************************/
42 /*函数说明:因为是用定时器2益处,中断来启动adc转换 */
43 /*入口参数: */
44 /* t2reload------------------------------------------------定时脉冲数目*/
45 /*******************************************************************************/
46 void t2_baud(uint t2reload)
47 { //每隔t2reload个T2时钟,产生一次定时溢出
48 1 SFRPAGE = 0x00;
49 1 RCAP2 =~t2reload+1; //相当于65536-t2reload
50 1 TMR2 = RCAP2;
51 1
52 1 }
53 /*******************************************************************************/
54 /*函数说明:选择ADC输入的模拟通道 */
55 /*入口参数: */
C51 COMPILER V8.02 ADANDDA_INTIAL 07/16/2008 00:27:28 PAGE 2
56 /* source--------------------------------为ADC0通道选择(共有9个通道)*/
57 /* type-------------------------------配置测量方式为差动还是单端输入*/
58 /*******************************************************************************/
59 void adc0_mux(uchar type,uchar source)
60 {
61 1 SFRPAGE = 0x00;
62 1 AMX0CF=type; //AIN67IC,AIN45IC,AIN23IC,AIN01IC,0为单端输入。
63 1 AMX0SL=source; //选择AD输入通道的,有9个,其中第9通道是内部温度输入
64 1
65 1 }
66
67 void adc0_ini()
68 {
69 1 SFRPAGE = 0x00;
70 1 ADC0CF=0x0f; //ADC0时钟为系统时钟2分频,PGA增益为0.5
71 1 ADC0CN=0x8c; //AD0TM=0,ADC0为连续跟踪模式,由T2溢出率启动ADC0
72 1 //AD0LJST=0,数据存储格式右对齐,即ADC0H存放12bit高四位
73 1 REF0CN&=0x0f; //AD0VRS=0,ADC0参考电压为VREFA
74 1 REF0CN|=0x07; //TEMPE=1,内部温度传感器工作
75 1 /*
76 1 REFBE=1,内部参考电平工作,电路部分须将VREF参考输出(C8051F40的第12管脚)与 VREF0(C8051F040的16管脚相连,
77 1 并最好并联一个4.7uF和0.1uF的旁路电容以电平滤波
78 1 */
79 1
80 1 adc0_mux(0x00,0);//PORT3IC=1,ADC0 6、7通道为差动模式
81 1 //AIN0.0-AIN0.3均为单端模式
82 1 //选择AIN0.3为ADC0转化通道
83 1 EIE2 |= 0x02; //开ADC0中断
84 1 t2_ini();
85 1 t2_baud(100); //每隔200个T2时钟产生一次ADC0采样
86 1 SFRPAGE = 0x00;
87 1 TR2=1;
88 1 }
89
90
91 void ADC0_ISR() interrupt 15 using 3
92 {
93 1 SFRPAGE = 0x00;
94 1 AD0INT=0;
95 1 kk=ADC0VAL;
96 1 // kk=ADC0H*256+ADC0L;
97 1 DAC0=kk;
98 1 // ad_value=(long)kk*ADJRATESE;
99 1 // temp=(float)ad_value/100000;
100 1 isnewdata=1;
101 1 }
102 /*******************************************************************************/
103 /*函数说明:产生锯齿波形 */
104 /*******************************************************************************/
105
106 void DAC1_initial()
107 {
108 1
109 1 SFRPAGE=0x01;
110 1 DAC1L=DAC0L;
111 1 DAC1H=DAC0H;
112 1 REF0CN=0x03;
113 1 DAC1CN|=0x80;
114 1 }
115 void int0_ISR() interrupt 0
116 { //外部事件中断处理
117 1 number++;
C51 COMPILER V8.02 ADANDDA_INTIAL 07/16/2008 00:27:28 PAGE 3
118 1 if(number==2)
119 1 {
120 2 flag=1;
121 2 }
122 1 SFRPAGE=temp_Page;
123 1 }
124
125 void t0ini(){
126 1 EA=0;
127 1 SFRPAGE=0x00;//这条指令很重要,否则以下操作无法写入相应寄存器,与MCS-51略有不同
128 1 IT0=1;// /INT0中断在电平下降沿触发
129 1 IE0=0;// 外部中断/INT0中断标志位清零,/INT0中断中可硬件清零
130 1 EX0=1;//允许/INT0外部事件中断
131 1 EA=1;//开启全局中断
132 1 }
133
134
135 void DAC0_initial()
136 {
137 1 SFRPAGE=0x00;
138 1 REF0CN=0x03;
139 1 DAC0CN|=0x80;
140 1 }
141 /*************************************************************************************/
142
143
144
145 void t3_ini()
146 {
147 1 SFRPAGE = 0x01;
148 1 TMR3CF = 0x08; // T2时钟为系统时钟
149 1 TMR3CN = 0x04; // 开启T3定时器
150 1 EIE2|=0x01;
151 1 t3_baud(100); //每隔500 T3时钟更新一次DAC1输出,此时T3尚未启动
152 1 EA=1;
153 1 }
154 void t3_baud(uint t3reload)
155 {
156 1 SFRPAGE = 0x01;
157 1 RCAP3=65536-t3reload;
158 1 TMR3=RCAP3;
159 1
160 1
161 1 }
162
163
164 void T3_ISR() interrupt 14
165 { //T3定时中断,更新DAC1输出,DAC1为锯齿波输出
166 1 TF3=0;
167 1
168 1 SFRPAGE=0x01;
169 1 da++;
170 1 DAC1=da;
171 1
172 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 239 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.02 ADANDDA_INTIAL 07/16/2008 00:27:28 PAGE 4
DATA SIZE = 6 ----
IDATA SIZE = 1 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -