📄 max530.lst
字号:
C51 COMPILER V6.02 2_25 03/03/2005 01:09:26 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE 2_25
OBJECT MODULE PLACED IN F:\单片机~1\软件设计\2-25.OBJ
COMPILER INVOKED BY: d:\wave6000\COMP51\C51.EXE F:\单片机~1\软件设计\2-25.C DB SB OE
stmt level source
1 #include <reg52.h>
2 #include <absacc.h>
3
4 #define MAX197 XBYTE[0x8004]
5 #define MAX530_H XBYTE[0x800D]
6 #define MAX530_L XBYTE[0x8005]
7 #define LED_1 XBYTE[0x8000]
8 #define LED_2 XBYTE[0x8001]
9 #define LED_3 XBYTE[0x8002]
10 #define LED_4 XBYTE[0x8003]
11
12 sbit P1_0=P1^0;
13 sbit P1_1=P1^1;
14 sbit P1_2=P1^2;
15 sbit P1_3=P1^3;
16 sbit P1_4=P1^4;
17 sbit P1_5=P1^5;
18 sbit P1_6=P1^6;
19 sbit P1_7=P1^7;
20 sbit P3_4=P3^4;
21 sbit P3_5=P3^5;
22 bit f_unit=0;//外部RAM存储标志位,0代表一个存储单元结束,1代表存储单元未结束
23 bit f_out=0;
24 bit f_key=0;//f_out为与许输出标志位;f_key为有键按下标志位
25 unsigned char t_key=0;//案件状态标志(数值允许从0到4,五个状态)
26
27 unsigned char xdata *addr_RAM;//RAM存储指针
28 int counter=0;
29 int c_set=0;//0.1S的倍数,为设定延迟常数
30 unsigned int led[4]={0,0,0,0};//各位LED数值(0-9)
31 unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
32 unsigned char *addr_197;
33 unsigned char *addr_530_H;
34 unsigned char *addr_530_L;
35
36 void serve_INT0()interrupt 0 using 0
37 {
38 1 bit f_HL;
39 1 unsigned char buf_H;
40 1 unsigned char buf_L;
41 1
42 1 f_HL=P3_4;//将HBEN赋给f_HL
43 1 *(addr_RAM+2)=*(addr_RAM+2)&&0x00;//将存储转换结果高位的单元清0
44 1
45 1 if(f_HL)//判断是高位还是低位
46 1 buf_H=MAX197;
47 1 else
48 1 buf_L=MAX197;
49 1 while(f_HL==P3_4);//等待另一部分结果
50 1 if(P3_4)
51 1 buf_H=MAX197;
52 1 else
53 1 buf_L=MAX197;
54 1
55 1 //下面组织数据存储,将两个结果存入3个RAM单元
C51 COMPILER V6.02 2_25 03/03/2005 01:09:26 PAGE 2
56 1
57 1 if(f_unit)//判断数据包1还是数据包2
58 1 {
59 2 buf_H=buf_H&&0x0f;//将结果2数据包2高4位清0
60 2 *(addr_RAM+1)=buf_L;
61 2 *(addr_RAM+2)=*(addr_RAM+2)||buf_H;
62 2 f_unit=0;
63 2 }
64 1 else
65 1 {
66 2 buf_H=buf_H<<4;//低4位清0
67 2 *addr_RAM=buf_L;
68 2 *(addr_RAM+2)=*(addr_RAM+2)||buf_H;
69 2 f_unit=1;
70 2 }
71 1 addr_RAM=addr_RAM+2;//指针指向下一个单元
72 1 }
73 void serve_INT1()interrupt 2 using 1
74 {
75 1 f_key=1; //有键按下标志位
76 1 }
77 void serve_timer0()interrupt 1 using 2
78 {
79 1 *addr_197=0;//启动MAX197
80 1 if(f_out)
81 1 {
82 2 //启动MAX530
83 2 if(c_set*3%2==0)//发数据单元结果2
84 2 {
85 3 *addr_530_H=*(addr_RAM-c_set*3/2);
86 3 P3_4=0;//发LDAC脉冲
87 3 P3_4=1;
88 3 *addr_530_L=*(addr_RAM-c_set*3/2+2)>>4;
89 3 P3_4=0;//发LDAC脉冲
90 3 P3_4=1;
91 3 }
92 2 else//发数据单元结果1
93 2 {
94 3 *addr_530_H=*(addr_RAM-c_set*3/2-2);
95 3 P3_4=0;//发LDAC脉冲
96 3 P3_4=1;
97 3 *addr_530_L=*(addr_RAM-c_set*3/2-1);;
98 3 P3_4=0;//发LDAC脉冲
99 3 P3_4=1;
100 3 }
101 2 }
102 1 }
103 void serve_timer1()interrupt 3 using 3
104 {
105 1 counter=counter+1;
106 1 if(counter>=c_set)//延迟时间比较
107 1 {
108 2 f_out=1;//允许输出标志位置1
109 2 TR1=0;//关闭定时/技计数器1
110 2 }
111 1 else
112 1 f_out=0;
113 1 }
114 void initiate()
115 {
116 1 unsigned char *AD;
117 1 AD=&MAX197;
C51 COMPILER V6.02 2_25 03/03/2005 01:09:26 PAGE 3
118 1 //单片机初始化
119 1 IE=0x0f;
120 1 IP=0x0e;
121 1 TCON=0x05;
122 1 TMOD=0x12;
123 1 TH1=0x3c;
124 1 TL1=0xb0;
125 1 TL0=0xce;
126 1 EA=1;
127 1 TR0=1;
128 1 TR1=1;
129 1 //初始化MAX197
130 1 *AD=0x48;
131 1 }
132 void delay()//延时去抖动
133 {
134 1 unsigned char i;
135 1 for(i=200;i>0;i--);
136 1 }
137 main()
138 {
139 1 initiate();
140 1 addr_RAM=0x0000;//将指针指向外部RAM首地址
141 1 addr_197=&MAX197;//MAX197地址
142 1 addr_530_H=&MAX530_H;//MAX530高位地址
143 1 addr_530_L=&MAX530_L;//MAX530低位地址
144 1 while(f_key)
145 1 {
146 2 delay();//延时去抖动
147 2 if(!P1_0)
148 2 {
149 3 switch(t_key)
150 3 {
151 4 case 0: t_key=1;
152 4 P1=1;
153 4 P1_4=0; break;//等待状态转移到状态1,LED1点亮
154 4 case 1: t_key=2;
155 4 P1=1;
156 4 P1_5=0; break;//状态1转移到状态2,LED2点亮
157 4 case 2: t_key=3;
158 4 P1=1;
159 4 P1_6=0; break;//状态2转移到状态3,LED3点亮
160 4 case 3: t_key=4;
161 4 P1=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -