📄 admp.lst
字号:
C51 COMPILER V6.10 ADMP 12/23/2007 21:31:00 PAGE 1
C51 COMPILER V6.10, COMPILATION OF MODULE ADMP
OBJECT MODULE PLACED IN E:\刘贞\天津项目\单片机~1\AD采集~4\ADMP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\刘贞\天津项目\单片机~1\AD采集~4\ADMP.C DB SB OE
stmt level source
1 /*******MAX186串行A/D采样程序********/
2
3 #include<reg51.h>
4 #include<stdio.h>
5 #include<absacc.h>
6
7 /****定义与码盘地址****/
8
9 #define BYTE0 XBYTE[0x1E00]
10 #define BYTE1 XBYTE[0x1D00]
11 #define BYTE2 XBYTE[0x1B00]
12 #define BYTE3 XBYTE[0x1700]
13 #define CLC XBYTE[0x0F00]
14
15 /****定义与MAX186相关的I/O口****/
16 sbit max186_sclk = P1^2;
17 sbit max186_cs = P1^3;
18 sbit max186_din = P1^4;
19 sbit max186_sstrb = P1^5;
20 sbit max186_dout = P1^6;
21
22
23
24 /*****函数声明****/
25 unsigned int max186_ad(unsigned char);
26 void send_cb(unsigned char);//控制字发送函数
27 unsigned int receive(void);//数据接收函数
28 void delay(unsigned long);//延时函数
29 void T0_ISR(void);
30 void t0_init();
31 void init_serialcomm(void); //串口初始化
32 void serial ();
33 void send_char_com(unsigned char ch);
34 unsigned long Globtime;
35 unsigned char Ctl186; //186控制字
36 int volt_yz; //启动 阈值
37
38 /*****主函数****/
39 void main()
40 {
41 1 unsigned int ad_result;
42 1 unsigned char DAT0,DAT1;
43 1 unsigned char MP[4];
44 1 unsigned char i;
45 1 unsigned int Adrslt; //ad结果
46 1 unsigned int UItemp ;
47 1 int volt_cur; //当前电压值
48 1 int Itemp;
49 1 Globtime=0;
50 1 t0_init();
51 1 init_serialcomm();
52 1 DAT0 = CLC;
53 1 EA=1;
54 1 Ctl186=0x85;
55 1 volt_yz=-50; //启动 阈值 -50mv
C51 COMPILER V6.10 ADMP 12/23/2007 21:31:00 PAGE 2
56 1 while (1)
57 1 {
58 2
59 2
60 2 if(Globtime>99)
61 2 {
62 3 //向串口发送数据
63 3 Globtime=0;
64 3 Adrslt=0;
65 3 //Ctl186=0xBE;
66 3 Itemp=0;
67 3 /* for(i=0;i<5;i++)
68 3 {
69 3 // Adrslt= Adrslt+ max186_ad(Ctl186)/16;
70 3 Itemp= Itemp + max186_ad(Ctl186);
71 3 } */
72 3 Adrslt= Itemp/5;
73 3 Adrslt= max186_ad(Ctl186);
74 3 DAT0 = Adrslt/256;
75 3 DAT1 = Adrslt%256;
76 3 // send_char_com(DAT0);
77 3 // send_char_com(DAT1);
78 3 MP[0] = BYTE3;
79 3 MP[1] = BYTE2;
80 3 MP[2] = BYTE1;
81 3 MP[3] = BYTE0;
82 3 //计算电压值
83 3 UItemp = Adrslt;
84 3 if(UItemp>=0x8000) // 负数
85 3 {
86 4 UItemp =UItemp&0x7ff0;
87 4 UItemp =UItemp/16;
88 4 UItemp =UItemp-1;
89 4 UItemp =~UItemp;
90 4 UItemp =UItemp&0x7ff;
91 4 volt_cur= -(int)UItemp;
92 4 }
93 3 else
94 3 {
95 4 UItemp =UItemp/16;
96 4 volt_cur= (int)UItemp;
97 4 }
98 3 if( volt_cur> volt_yz) //如果大于阈值则
99 3 {
100 4 send_char_com(0xff);
101 4 send_char_com(0x00);
102 4 send_char_com(0xff);
103 4 send_char_com(0x00);
104 4 send_char_com(DAT0);
105 4 send_char_com(DAT1);
106 4 for(i=0;i<4;i++) { send_char_com(MP[i]);}
107 4 }
108 3 }
109 2
110 2 }
111 1 }
*** WARNING C280 IN LINE 41 OF E:\刘贞\天津项目\单片机~1\AD采集~4\ADMP.C: 'ad_result': unreferenced local variable
112 //串口中断函数
113 void serial () interrupt 4 using 3
114 {
115 1 unsigned char ch;
116 1 unsigned char tmp;
C51 COMPILER V6.10 ADMP 12/23/2007 21:31:00 PAGE 3
117 1 static unsigned char cnt;
118 1 static unsigned char recchar[4];
119 1 if(RI)
120 1 {
121 2 RI = 0;
122 2 ch=SBUF;
123 2 if(cnt>=6) cnt=0;
124 2 if(ch==0xff) cnt=0; //帧头
125 2 else if(ch==0xfe&&cnt==4) //帧尾
126 2 {
127 3 if (recchar[0]==0x00) Ctl186 = 0x85; //通道0
128 3 else if(recchar[0]==0x01) Ctl186 = 0xc5; //通道1
129 3 else if(recchar[0]==0x02) Ctl186 = 0x95; //通道2
130 3 else if(recchar[0]==0x03) tmp=CLC; //码盘清零
131 3 else if(recchar[0]==0x05) //启动阈值
132 3 {
133 4 volt_yz= (int)(recchar[2]/16)*1000+(int)(recchar[2]&0x0f)*100
134 4 +(int)(recchar[3]/16)*10 +(int)(recchar[3]&0x0f);
135 4 if( recchar[1]==1) volt_yz=-volt_yz;
136 4 }
137 3 }
138 2 else
139 2 {
140 3 recchar[cnt]=ch;
141 3 cnt++;
142 3 }
143 2 }
144 1 }
145 //延时函数
146 void delay(unsigned long dly_time) //延时
147 {
148 1 while ( (dly_time--) > 0 )
149 1 { ; }
150 1 }/***********************
151 串口初始化
152 /**********************/
153 void init_serialcomm(void) //串口初始化
154 {
155 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
156 1 TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
157 1 PCON |= 0x00; //SMOD=1;
158 1 TH1 = 0xFD; //Baud:9600 fosc=11.0592MHz
159 1 // TH1 = 0xF3; //6M wei 2400bps
160 1 IE |= 0x91; //Enable Serial Interrupt
161 1 TR1 = 1; // timer 1 run
162 1 // TI=1;
163 1 }
164 /**********************
165 串口发送一个字符
166 /*********************/
167 void send_char_com(unsigned char ch)
168 {
169 1 SBUF=ch;
170 1 do{}while(TI==0);
171 1 TI=0;
172 1 }
173
174
175 void t0_init()
176 {
177 1 TMOD=0x01; //T0工作在方式1,16位定时器
178 1 TH0=0XFC;
C51 COMPILER V6.10 ADMP 12/23/2007 21:31:00 PAGE 4
179 1 TL0=0X18;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -