wave_generator_measure.lst
来自「自己的平时一些制作 现在整理一下 与大家一起分享」· LST 代码 · 共 142 行
LST
142 行
C51 COMPILER V7.20 WAVE_GENERATOR_MEASURE 03/05/2007 21:48:09 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE WAVE_GENERATOR_MEASURE
OBJECT MODULE PLACED IN wave_generator_measure.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wave_generator_measure.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 /*****定义50ms方波的波形输出接口******/
3 sbit led=P1^0;
4
5 sbit int0=P3^2; //被测量信号,当然也可以接到其他的引脚
6
7 //下面两个变量就是用来 切换数码管的序号 和 存放显示的数据
8 unsigned char n;
9 unsigned char d[4];
10
11 //定义全局变量用于存放计算值
12 unsigned char count;
13
14 unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1}; //数码管显示选择
15 unsigned char code tab[16]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,
16 7,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
17 //显示0--9;a--f;
18
19 /********十进制到bcd码转换************/
20 void hextobcd (unsigned int hexs)
21 {
22 1 d[0]=hexs/1000;
23 1 hexs=hexs%1000;
24 1 d[1]=hexs/100;
25 1 hexs=hexs%100;
26 1 d[2]=hexs/10;
27 1 hexs=hexs%10;
28 1 d[3]=hexs;
29 1 }
30
31
32 /********延时子程序***********/
33 void delay(unsigned char dy)
34 {
35 1 while(--dy);
36 1 }
37
38 /*******定时器初始化**********/
39 void Init_Timer (void)
40 {
41 1 TMOD=0x11; //设定定时器的工作模式 定时器1工作在16位定时状态
42 1 TH1=(65536-23040)/256; //设定定时常数,产生25ms中断,这样输出的就是周期50ms的方波
43 1 TL1=(65536-23040)%256;
44 1 TH0=(65536-1843)/256; //设定定时常数,定时2ms
45 1 TL0=(65536-1843)%256;
46 1 EA=1; //cpu开中断
47 1 ET1=1; //定时器1开中断
48 1 ET0=1; //定时器0开中断
49 1 TR1=1; //启动定时器1
50 1 }
51
52 /*********定时器1中断服务程序************/
53 void timer1 (void) interrupt 3
54 {
55 1 TR1=0; //停定时器1
C51 COMPILER V7.20 WAVE_GENERATOR_MEASURE 03/05/2007 21:48:09 PAGE 2
56 1 TH1=(65536-23040)/256; //设定定时常数,产生25ms中断,这样输出的就是周期50ms的方波
57 1 TL1=(65536-23040)%256;
58 1 led=!led; //输出去反
59 1 TR1=1; //启动定时器1
60 1 }
61
62 /*********定时器0中断服务程序**************/
63 /*********定时2毫秒*********/
64 void timer0 (void) interrupt 1
65 {
66 1 count++; //计数
67 1 TH0=(65536-1843)/256; //设定定时常数,定时2ms
68 1 TL0=(65536-1843)%256;
69 1 }
70
71
72 /*******非中断的数码管显示子程序***********/
73 //由于这里中断用完了,所以
74 /******************************************/
75 void display()
76 {
77 1 unsigned char m;
78 1 for(m=0;m<4;m++)
79 1 {
80 2 P2=digit[m]; P0=tab[d[m]];
81 2 delay(250);
82 2 P0=0;
83 2 }
84 1 }
85
86 /*****主函数main****/
87 /*******实现P1^0输出周期50ms方波,P3^2输入该方波..****/
88 /**..我们可以用金属线连接两个引脚*******/
89 /***显示方波的周期:单位ms**/
90 /***定时器0产生2ms中断,定时器1产生25ms中断*****/
91 /*****************************/
92
93 main()
94 {
95 1 unsigned char i;
96 1 unsigned int snumber; //周期: 单位ms
97 1 Init_Timer();
98 1 while(1)
99 1 {
100 2 count=0;
101 2 for(i=0;i<10;i++) { display(); delay(250);} //显示及延时
102 2 TH0=(65536-1843)/256; //设定定时常数,定时2ms
103 2 TL0=(65536-1843)%256;
104 2 while(int0==0) ; //测周期长度 //先等待上升沿..
105 2 TR0=1; //..启动定时器0..
106 2 while(int0==1) display(); //..等待下降沿..
107 2 while(int0==0) display(); //..再等待上升沿..
108 2 TR0=0; //同时停止定时器0
109 2 snumber=count*2; //计算出有几个2ms,乘以2后得到周期。
110 2 hextobcd(snumber); //显示出有几个ms
111 2 }
112 1 }
113
114
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.20 WAVE_GENERATOR_MEASURE 03/05/2007 21:48:09 PAGE 3
CODE SIZE = 227 ----
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 + -
显示快捷键?