📄 text1.lst
字号:
C51 COMPILER V8.02 TEXT1 05/19/2008 17:40:19 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\Keil破解版\C51\BIN\C51.EXE Text1.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 若晶振频率为12MHZ,如何用T0来测量20ms-1s之间的方波周期?
3 又如何测量频率为0.5MHZ左右的脉冲频率?
4 */
5 /*
6 实现方法:
7 用外部中断,选择下降沿触发,程序响应中断后马上开启定时器,
8 在下个下降沿来临的时候关掉定时器。
9 */
10 #include<regX51.h>
11 #include<intrins.h>
12
13 #define uchar unsigned char
14 #define uint unsigned int
15
16
17
18 uint time0_tick=0;
19 uchar tick=0;
20 uchar count[4]={0,0,0,0};
21
22
23 bit flag = 1;
24
25 code seven_seg[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
26 code scan[4]={0X08,0X04,0X02,0X01};//直接用P3驱动共阳七段显示器;
27
28
29 static void time0_isr(void)interrupt TF0_VECTOR using 2
30 {
31 1 TH0 = (65536-10000)/256;
32 1 TL0 = (65536-10000)%256;
33 1 P0_7 = ~ P0_7; //波动形象化。
34 1 if(flag)
35 1 {
36 2 count[0]++;
37 2 if(count[0]==10)
38 2 {
39 3 count[0]=0;
40 3 count[1]++;
41 3 if(count[1]==10)
42 3 {
43 4 count[1]=0;
44 4 count[2]++;
45 4 if(count[2]==10)
46 4 {
47 5 count[2]=0;
48 5 count[3]++;
49 5 if(count[3]==10)count[3]=0;
50 5 }
51 4 }
52 3 }
53 2 }
54 1 }
55
C51 COMPILER V8.02 TEXT1 05/19/2008 17:40:19 PAGE 2
56 static void xint0_isr(void)interrupt IE0_VECTOR using 1//外部中断
57 {
58 1 tick++;
59 1 if(tick == 1)
60 1 {
61 2 count[0]=0;
62 2 count[1]=0;
63 2 count[2]=0;
64 2 count[3]=0;
65 2 flag = 1;
66 2 TR0 = 1;
67 2 }
68 1 if(tick == 2)
69 1 {
70 2 tick = 0;
71 2 flag = 0;
72 2 TR0 = 0;
73 2 // EX0 = 0; //不允许int0中断;
74 2 }
75 1 }
76
77 void delay(uchar ms)
78 {
79 1 uchar i,j;
80 1 for(i=0;i<ms;i++)
81 1 for(j=0;j<250;j++)
82 1 {
83 2 _nop_();
84 2 _nop_();
85 2 _nop_();
86 2 _nop_();
87 2 }
88 1 }
89
90 static void timer0_initialize(void)
91 {
92 1 EA=0; // 所有中断关
93 1 TR0=0;
94 1 TMOD = 0x01; // T0 模式1 16位计数器
95 1 TH0 = (65536-10000)/256; //直接二进制取位赋值
96 1 TL0 = (65536-10000)%256;
97 1 PT0=1;
98 1 ET0=1;
99 1 //TR0=1;
100 1 EA=1;
101 1 }
102
103 static void xint0_initialize(void)
104 {
105 1 EA=0;
106 1 IT0=1;
107 1 EX0=1;
108 1 EA=1;
109 1 }
110 void main()
111 {
112 1
113 1 uchar i;
114 1 xint0_initialize();
115 1
116 1 timer0_initialize();
117 1
C51 COMPILER V8.02 TEXT1 05/19/2008 17:40:19 PAGE 3
118 1 while(1)
119 1 {
120 2 for(i=0;i<4;i++)
121 2 {
122 3 P2=seven_seg[count[i]];
123 3 P1=scan[i];
124 3 delay(5);
125 3 P1 = 0x00;
126 3 }
127 2 }
128 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 214 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
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 + -