📄 频率计程序.lst
字号:
C51 COMPILER V8.02 频率计程序 10/30/2008 18:45:10 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 频率计程序
OBJECT MODULE PLACED IN 频率计程序.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 频率计程序.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //MCU:AT89S51
2 //晶振:12M
3 #include"AT89X51.H"
4 unsigned char code numcode[]={0xc0,0xf9,0xa4,0xb0,0x99,
5 0x92,0x82,0xf8,0x80,0x90,
6 0xb7,0x8E
7 };//数字0~9及"=""F"共阳数码管代码
8 unsigned char dispbuff[8]={0,0,0,0,0,0,10,11};
9 unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,
10 0xef,0xdf,0xbf,0x7f}; //数码管位选代码
11 unsigned char temp[8]; //频率值暂存
12 unsigned char disp_bit_count;
13 unsigned char T0_ovf_times; //记录计数器C/T0溢出次数
14 unsigned char T1_count;
15 bit flag; //读频率标志位,flag=1时,读和计算频率值。
16 unsigned long f; //频率值
17
18 void main(void)
19 {
20 1 unsigned char i;
21 1 TMOD=0x15;//定时器T1工作在方式1(16位),T0工作在16位计数方式
22 1 TH0=0; //T0寄存器清零
23 1 TL0=0;
24 1 TH1=(65536-4000)/256; //T1装载4MS定时初值
25 1 TL1=(65536-4000)%256;
26 1 TR0=1; //开计数器C0;
27 1 TR1=1; //开定时器T1;
28 1 ET0=1; //允许计数器C0溢出中断
29 1 ET1=1; //允许定时器T1溢出中断
30 1 EA=1; //开总中断
31 1
32 1 while(1)
33 1 {
34 2 if(flag==1)
35 2 {
36 3 flag=0;
37 3 // f=T0_ovf_times*65536+TH0*256+TL0; //读出频率值
38 3 for(i=0;i<8;i++)
39 3 {
40 4 temp[i]=0;
41 4 }
42 3 i=0;
43 3 while(f/10)
44 3 {
45 4 temp[i]=f%10;
46 4 f=f/10;
47 4 i++;
48 4 }
49 3 temp[i]=f;
50 3 for(i=0;i<6;i++)
51 3 {
52 4 dispbuff[i]=temp[i];
53 4 }
54 3 T1_count=0;
55 3 T0_ovf_times=0;
C51 COMPILER V8.02 频率计程序 10/30/2008 18:45:10 PAGE 2
56 3 TH0=0;
57 3 TL0=0;
58 3 TR0=1; //重开计数器C0
59 3 }
60 2 }
61 1 }
62
63 void t0(void) interrupt 1
64 {
65 1 T0_ovf_times++;
66 1 }
67
68 /*********T1定时4mS中断服务程序*********************/
69 void t1(void) interrupt 3
70 {
71 1 TH1=(65536-2500)/256;//重装定时器T1初值
72 1 TL1=(65536-2500)%256;
73 1 T1_count++;
74 1 if(T1_count==250) //定时1S到,置flag=1,允许读C/T0值和T0_ovf_time
75 1 {
76 2 TR0=0; //关闭计数器C0
77 2 T1_count=0;
78 2 flag=1;
79 2 f=T0_ovf_times*65536+TH0*256+TL0; //读出频率值
80 2 }
81 1 P0=numcode[dispbuff[disp_bit_count]];
82 1 P1=bitcode[disp_bit_count];
83 1 disp_bit_count++;
84 1 if(disp_bit_count==8)
85 1 {
86 2 disp_bit_count=0;
87 2 }
88 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 343 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 1
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 + -