📄 12-3.lst
字号:
C51 COMPILER V7.09 12_3 08/11/2005 18:38:41 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 12_3
OBJECT MODULE PLACED IN 12-3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12-3.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #ifndef AT89C51_HEADER_FILE
2 #define AT89C51_HEADER_FILE 1
3 //Byte 寄存器
4 sfr SP = 0x81;
5 sfr DPL = 0x82;
6 sfr DPH = 0x83;
7 sfr PCON = 0x87;
8 sfr TCON = 0x88;
9 sfr TMOD = 0x89;
10 sfr TL0 = 0x8A;
11 sfr TL1 = 0x8B;
12 sfr TH0 = 0x8C;
13 sfr TH1 = 0x8D;
14 sfr P1 = 0x90;
15 sfr SCON = 0x98;
16 sfr SBUF = 0x99;
17 sfr IE = 0xA8;
18 sfr P3 = 0xB0;
19 sfr IP = 0xB8;
20 sfr PSW = 0xD0;
21 sfr ACC = 0xE0;
22 sfr B = 0xF0;
23 //PCON
24 #define IDL_ 0x01
25 #define STOP_ 0x02
26 #define EWT_ 0x04
27 #define EPFW_ 0x08
28 #define WTR_ 0x10
29 #define PFW_ 0x20
30 #define POR_ 0x40
31 #define SMOD_ 0x80
32
33 //TCON
34 sbit IT0 = 0x88;
35 sbit IE0 = 0x89;
36 sbit IT1 = 0x8A;
37 sbit IE1 = 0x8B;
38 sbit TR0 = 0x8C;
39 sbit TF0 = 0x8D;
40 sbit TR1 = 0x8E;
41 sbit TF1 = 0x8F;
42
43 //TMOD值
44 #define T0_M0_ 0x01
45 #define T0_M1_ 0x02
46 #define T0_CT_ 0x04
47 #define T0_GATE_ 0x08
48 #define T1_M0_ 0x10
49 #define T1_M1_ 0x20
50 #define T1_CT_ 0x40
51 #define T1_GATE_ 0x80
52
53 #define T1_MASK_ 0xF0
54 #define T0_MASK_ 0x0F
55
C51 COMPILER V7.09 12_3 08/11/2005 18:38:41 PAGE 2
56 //P1
57 sbit P1_0 = 0x90;
58 sbit P1_1 = 0x91;
59 sbit P1_2 = 0x92;
60 sbit P1_3 = 0x93;
61 sbit P1_4 = 0x94;
62 sbit P1_5 = 0x95;
63 sbit P1_6 = 0x96;
64 sbit P1_7 = 0x97;
65
66 sbit AIN0 = 0x90; // + 输入
67 sbit AIN1 = 0x91; //- 输入
68
69 //SCON
70 sbit RI = 0x98;
71 sbit TI = 0x99;
72 sbit RB8 = 0x9A;
73 sbit TB8 = 0x9B;
74 sbit REN = 0x9C;
75 sbit SM2 = 0x9D;
76 sbit SM1 = 0x9E;
77 sbit SM0 = 0x9F;
78
79 //IE
80 sbit EX0 = 0xA8; // 开INT0
81 sbit ET0 = 0xA9; // 开ET0
82 sbit EX1 = 0xAA; // 开INT1
83 sbit ET1 = 0xAB; // Timer 1
84 sbit ES = 0xAC; // 开ES
85 sbit ET2 = 0xAD; // Timer 2
86
87 sbit EA = 0xAF; // 关中断
88
89 //P3
90 sbit P3_0 = 0xB0;
91 sbit P3_1 = 0xB1;
92 sbit P3_2 = 0xB2;
93 sbit P3_3 = 0xB3;
94 sbit P3_4 = 0xB4;
95 sbit P3_5 = 0xB5;
96 sbit P3_7 = 0xB7;
97
98 sbit RXD = 0xB0; // 串行收中断
99 sbit TXD = 0xB1; //串行发中断
100 sbit INT0 = 0xB2; // INT0
101 sbit INT1 = 0xB3; // INT11
102 sbit T0 = 0xB4; // Timer 0
103 sbit T1 = 0xB5; // Timer 1
104 sbit AOUT = 0xB6; // 模拟输出
105
106 //IP
107 sbit PX0 = 0xB8;
108 sbit PT0 = 0xB9;
109 sbit PX1 = 0xBA;
110 sbit PT1 = 0xBB;
111 sbit PS = 0xBC;
112
113 //PSW
114 sbit P = 0xD0;
115 sbit FL = 0xD1;
116 sbit OV = 0xD2;
117 sbit RS0 = 0xD3;
C51 COMPILER V7.09 12_3 08/11/2005 18:38:41 PAGE 3
118 sbit RS1 = 0xD4;
119 sbit F0 = 0xD5;
120 sbit AC = 0xD6;
121 sbit CY = 0xD7;
122
123 //中断地址= (Number * 8) + 3
124 #define IE0_VECTOR 0 // 0x03 INT0
125 #define TF0_VECTOR 1 // 0x0B Timer 0
126 #define IE1_VECTOR 2 // 0x13 INT11
127 #define TF1_VECTOR 3 // 0x1B Timer 1
128 #define SIO_VECTOR 4 // 0x23 串行口
129
130 #endif
131
132 // io分配:
133 /* OUTPUT:
134 P1.0 ...... 模拟量输入
135 P1.1 ...... DA输入比较基准电压
136 P1.2~7..... R-2R DA电阻网络
137 P3.7 ...... LED 模拟亮度输出
138 CPU CLOCK EQU 6M */
139
140 //#pragma src
141 //#include "reg51.h"
142 #include <stdlib.h>
143 #include<math.h>
144 #include<intrins.h>
145
146 //变量类型标识的宏定义
147 #define Uchar unsigned char
148 #define Uint unsigned int
149
150 #define Ledlight() (P3 &= 0x7f)
151 #define Leddark() (P3 |= 0x80)
152
153 sbit P36 = P3^6; // 比较器内部判断脚
154 sbit LED = P3^7; // 一个发光二级管观察亮度变化
155
156 // 内部标志位定义
157 bit less; // 比较是否大于 1.小于,0.大于
158
159 // 全局变量定义
160 Uchar timer1, // 通用延时计数器
161 timer2, // 按键蜂鸣器反应定时器
162 adcdata, // ad转换变量
163 pwm1; // PWM输出比例
164
165 // 函数列表
166 void DelayMs(unsigned int number); // 毫秒延时
167 void timers0(); // 在定时器中断中做数码管的扫描显示(ct0)
168 void Initall(void); // 系统初始化
169 void timers1(void); // TC1定时器中断用于扫描显示与键盘
170 Uchar adcread(void); // adc转换程序
171
172 void main(void) using 0
173 {
174 1 DelayMs(120);
175 1 Initall();
176 1 pwm1 = adcread();
177 1 LED=1;
178 1 while(1)
179 1 {
C51 COMPILER V7.09 12_3 08/11/2005 18:38:41 PAGE 4
180 2 pwm1 = adcread();
181 2 timer2=10;
182 2 while (timer2);
183 2 }
184 1 }
185 //毫秒延时
186 void DelayMs(unsigned int number)
187 {
188 1 unsigned char temp;
189 1
190 1 for(;number!=0;number--)
191 1 for(temp=112;temp!=0;temp--);
192 1 }
193
194 //在定时器中断中做LED的PWM输出
195
196 void timers0() interrupt 1 using 1
197 {
198 1 TH0 = 0xff;
199 1 TL0 = 0xd0;
200 1 timer1--;
201 1 if (timer1==pwm1)LED=0;
202 1 if (timer1==0){
203 2 LED=1;
204 2 timer1=0x40;
205 2 timer2--;
206 2 };
207 1 }
208
209 //6位ADC转换
210 Uchar adcread(void)
211 {
212 1 Uchar i=0x3f,temp=0;
213 1 P36 =1;
214 1 P1 = 3; _nop_();_nop_(); //从零开始
215 1 while ((i--)&& (P36))
216 1 {
217 2 temp += 4;
218 2 P1 = temp|3;
219 2 _nop_();
220 2 }
221 1 temp >>= 2;
222 1 return temp;
223 1 }
224
225 //系统初始化
226 void Initall(void)
227 {
228 1 TMOD = 0x11; // 0001 0001 16进制计数器
229 1 IP = 0x8; // 0000 1000 t1优先
230 1 IE = 0x8A; // 1000 1010 t0,t1中断允许
231 1 TCON = 5; // 0000 0101 外部中断低电平触发
232 1 TR0 = 1; // 打开定时器中断,IE中已经打开,在明示一下
233 1 TR1 = 0;
234 1 ET0 = 1;
235 1 ET1 = 0;
236 1 P1 = 0xff;
237 1 }
238
239 // TC1定时器中断用于扫描显示与键盘(ct1)
240 void timers1(void) interrupt 3 using 2
241 {
C51 COMPILER V7.09 12_3 08/11/2005 18:38:41 PAGE 5
242 1 _nop_(); //实验中没有启用
243 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 151 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -