📄 dac.lst
字号:
C51 COMPILER V7.01 DAC 05/04/2004 13:35:14 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE DAC
OBJECT MODULE PLACED IN DAC.OBJ
COMPILER INVOKED BY: C:\keil7\C51\BIN\C51.EXE DAC.c DB OE
stmt level source
1 /////////DAC调试程序/////////////////
2 /////////T2定时更新DAC1输出/////////////////////
3 ////////DAC0为直接更新///////////////////////////
4 /////////DAC.c////////////////////////////////////////
5 #include "c8051F040.h"
6 typedef unsigned char uchar;
7 typedef unsigned int uint;
8 typedef unsigned long ulong;
9 sfr16 RCAP2=0xca;
10 sfr16 RCAP3=0xca;
11 sfr16 RCAP4=0xca;
12 sfr16 TMR4=0xcc;
13 sfr16 TMR3=0xcc;
14 sfr16 TMR2=0xcc;
15 sfr16 PCA0CP0=0xfb;
16 sfr16 PCA0CP1=0xfd;
17 sfr16 PCA0CP2=0xe9;
18 sfr16 PCA0CP3=0xeb;
19 sfr16 PCA0CP4=0xed;
20 sfr16 PCA0CP5=0xe1;
21 sfr16 ADC0VAL=0xbe;
22 sfr16 ADC0GT=0xc4;
23 sfr16 ADC0LT=0xc6;
24 sfr16 DAC1VAL=0xD2;
25 sfr16 DAC0VAL=0xD2;
26 union tcfint16{
27 uint myword;
28 struct{uchar hi;uchar low;}bytes;
29 }myint16;//用联合体定义16位操作
30 void dac0_cfg(uchar cfg);
31 void dac1_cfg(uchar cfg);
32 void dac0_updata(uint val);
33 void dac1_updata(uint val);
34 void config();
35 void t2_ini();
36 void t2_baud(uint t2reload);
37 void t2_ini(){
38 1 SFRPAGE = 0x00;
39 1 TMR2CF = 0x08; // T2时钟为系统时钟
40 1 TMR2CN = 0x00; // 开启T2定时器
41 1 ET2=1;//开启T2定时器中断
42 1 }
43 void t2_baud(uint t2reload){
44 1 SFRPAGE = 0x00;
45 1 RCAP2=65536-t2reload;
46 1 TMR2=RCAP2;
47 1 }
48 void dac0_cfg(uchar cfg){
49 1 SFRPAGE=0x00;
50 1 DAC0CN=cfg;
51 1 REF0CN|=0x03;//DAC参考电平只能由VREFD输入
52 1 }
53 void dac1_cfg(uchar cfg){
54 1 SFRPAGE=0x01;
55 1 DAC0CN=cfg;
C51 COMPILER V7.01 DAC 05/04/2004 13:35:14 PAGE 2
56 1 SFRPAGE=0x00;
57 1 REF0CN|=0x03;
58 1 }
59 void dac0_updata(uint val){
60 1 SFRPAGE=0x00;
61 1 myint16.myword=val;//利用联合体进行快速uint型数据操作
62 1 DAC0L=myint16.bytes.low;
63 1 DAC0H=myint16.bytes.hi;//在直接更新模式下,此时开始更新DAC0输出
64 1 }
65 void dac1_updata(uint val){
66 1 SFRPAGE=0x01;
67 1 myint16.myword=val;//利用联合体进行快速uint型数据操作
68 1 DAC1L=myint16.bytes.low;
69 1 DAC1H=myint16.bytes.hi;//在直接更新模式下,此时开始更新DAC1输出
70 1 }
71 void config (void) {
72 1 WDTCN = 0x07; // Watchdog Timer Control Register
73 1 WDTCN = 0xDE; // Disable WDT
74 1 WDTCN = 0xAD;
75 1 SFRPAGE = 0x0F;
76 1 XBR0 = 0x00; // XBAR0: Initial Reset Value
77 1 XBR1 = 0x00; // XBAR1: Initial Reset Value
78 1 XBR2 = 0x40; // XBAR2: Initial Reset Value
79 1 XBR3 = 0x00; // XBAR3: Initial Reset Value
80 1 SFRPAGE = 0x0F;
81 1 P0MDOUT = 0x00; // Output configuration for P0
82 1 P1MDOUT = 0x00; // Output configuration for P1
83 1 P2MDOUT = 0x00; // Output configuration for P2
84 1 P3MDOUT = 0x00; // Output configuration for P3
85 1 P4MDOUT = 0xff; // Output configuration for P4
86 1 P5MDOUT = 0x07; // Output configuration for P5
87 1 P6MDOUT = 0x00; // Output configuration for P6
88 1 P7MDOUT = 0x00; // Output configuration for P7
89 1 P1MDIN = 0xFF; // Input configuration for P1
90 1 P2MDIN = 0xFF; // Input configuration for P2
91 1 P3MDIN = 0xFF; // Input configuration for P3
92 1 SFRPAGE = 0x0F;
93 1 CLKSEL = 0x00; // Oscillator Clock Selector
94 1 OSCXCN = 0x00; // EXTERNAL Oscillator Control Register
95 1 OSCICN = 0x84; // Internal Oscillator Control Register
96 1 //采用内部晶振,为24.5MHZ8分频
97 1 } //End of config
98 void main(){
99 1 uchar i;
100 1 config();
101 1 dac0_cfg(0x80);//dac0使能,且为立即更新方式
102 1 dac1_cfg(0x98);//dac1使能,且为t2溢出更新方式
103 1 i=0;
104 1 t2_ini();
105 1 t2_baud(500);//每隔500 T2时钟更新一次DAC1输出,此时T2尚未启动
106 1 EA=1;
107 1 dac0_updata(0x0800);
108 1
109 1 /*
110 1 DAC0输出为0.5VREFD,若VREFD与ADC0参考电压相同,则可作为HVREF参考电压输入,使得HVDA差动检测负压
111 1 */
112 1
113 1 SFRPAGE=0x00;
114 1 TR2=1;//启动定时器T2
115 1 while(1);
116 1 }
117 void T2_ISR() interrupt 5{//T2定时中断,更新DAC1输出,DAC1为锯齿波输出
C51 COMPILER V7.01 DAC 05/04/2004 13:35:14 PAGE 3
118 1 TF2=0;
119 1 SFRPAGE=0x01;
120 1 DAC1VAL++;//因为是T2溢出更新DAC1输出,所以可以sfr16操作,因为此时并不立即更新
121 1 if(DAC1VAL>=0x1000)
122 1 DAC1VAL=0;
123 1 }
124
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 218 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 1
IDATA SIZE = ---- ----
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 + -