wave_measure.lst
来自「自己的平时一些制作 现在整理一下 与大家一起分享」· LST 代码 · 共 108 行
LST
108 行
C51 COMPILER V7.20 WAVE_MEASURE 03/05/2007 20:53:58 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE WAVE_MEASURE
OBJECT MODULE PLACED IN wave_measure.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wave_measure.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //十.测低频信号周期/频率的一个程序
2 /************测低频信号周期的一个程序***********/
3 // 经过数学变换后就可以用来测频率
4 // 思路:数一个周期中有多少个2ms,用count放这个计数值
5 // 当然亦可数有多少个10ms,那样精度稍差。
6 /**************************************/
7
8 #include<reg51.h>
9 //定义全局变量用于存放计算值
10 unsigned char count;
11 sbit int0=P3^2; //被测量信号,当然也可以接到其他的引脚
12 //下面两个变量就是用来 切换数码管的序号 和 存放显示的数据
13 unsigned char n;
14 unsigned char d[4];
15
16 unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1}; //数码管显示选择
17 unsigned char code tab[16]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,
18 7,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
19 //显示0--9;a--f;
20
21 /********十进制到bcd码转换************/
22 void hextobcd (unsigned int hexs)
23 {
24 1 d[0]=hexs/1000;
25 1 hexs=hexs%1000;
26 1 d[1]=hexs/100;
27 1 hexs=hexs%100;
28 1 d[2]=hexs/10;
29 1 hexs=hexs%10;
30 1 d[3]=hexs;
31 1 }
32
33 /*********定时器初始化程序******/
34 void Init_Timer (void)
35 {
36 1 TMOD=0x11; //定时器1和定时器0都工作在16位定时器方式
37 1 EA=1; //cpu开中断
38 1 ET0=1; //定时器0开中断
39 1 ET1=1; //定时器1开中断
40 1 TH1=(65536-1000)/256; //定时常数设置
41 1 TL1=(65536-1000)%256;
42 1 TR1=1;
43 1 }
44
45 /*********定时2毫秒*********/
46 void timer0(void) interrupt 1
47 {
48 1 count++; //计数
49 1 TH0=(65536-1843)/256; //设定定时常数,定时2ms
50 1 TL0=(65536-1843)%256;
51 1 }
52
53 /********中断显示***********/
54 void timer1(void) interrupt 3
55 {
C51 COMPILER V7.20 WAVE_MEASURE 03/05/2007 20:53:58 PAGE 2
56 1 TH1=(65536-1000)/256;
57 1 TL1=(65536-1000)%256;
58 1 n=n++;
59 1 if(n>3) n=0;
60 1 P0=0; P2=digit[n];P0=tab[d[n]];
61 1 }
62
63
64 /********主函数********/
65 main()
66 {
67 1 unsigned int snumber; //周期 单位ms
68 1 Init_Timer();
69 1 while(1)
70 1 {
71 2 count=0;
72 2 TH0=(65536-1843)/256; //设定定时常数,定时2ms
73 2 TL0=(65536-1843)%256;
74 2 while(int0==0) ; //测周期长度
75 2 TR0=1;
76 2 while(int0==1) ;
77 2 while(int0==0) ;
78 2 TR0=0;
79 2 snumber=count*2; //计算出有几个2ms,乘以2后得到周期。
80 2 hextobcd(snumber); //显示出有几个ms
81 2 }
82 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 214 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?