📄 ups.lst
字号:
C51 COMPILER V8.05a UPS 08/15/2008 13:25:18 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE UPS
OBJECT MODULE PLACED IN ups.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ups.c ROM(COMPACT)
line level source
1 /*********************************************************************************************************
2 ** UPS
3 ** The Drive(For Keil c51)
4 **
5 ** (c) Copyright 2003-2004, baijianfeng
6 ** All Rights Reserved
7 **
8 ** V0.0.1
9 **
10 **
11 **--------------文件信息--------------------------------------------------------------------------------
12 **文 件 名: UPS.C
13 **
14 **最后修改日期: 2005年6月1日
15 **描 述:
16 ** 222 4.36 30V
17 ** 178 3.49V 24V
18 ** 134 2.62V 18V
19 **------------------------------------------------------------------------------------------------------
20 */
21
22 #include <reg51.h>
23 #include <intrins.h>
24 #define ch0 0x03 //ch0通道 输入时,右移, 011--->1 10,第一位为起始位 后面分别为SGL,ODD
25 #define ch1 0x07 //ch1通道 111--->1 11
26 #define Uchar unsigned char
27 #define Uint unsigned int
28
29 //AD 引脚定义
30 sbit cs =P3^3;
31 sbit clk =P3^4;
32 sbit di =P3^5;
33 //其它引脚定义
34 sbit diss=P1^6;
35 sbit bell=P1^5;
36 sbit ld =P1^4;
37
38 //变量定义
39 Uchar voltage;
40 Uchar count;
41 Uchar timecount,num1;
42 Uchar bdata flash;
43 sbit f=flash^0;
44 sbit dis1=flash^1;
45 Uchar bdata ADvalue; /* AD转换结果 */
46 sbit IN = ADvalue^0;
47
48 //函数
49 Uchar read(Uchar a) //AD0832(力源TLC0832)转换子程序 采样频率由T0定时中断周期决定
50 {
51 1 Uchar i;
52 1 EA=0; //开始AD转换后,关中断
53 1 ADvalue=a;
54 1 cs=1;
55 1 cs=0;
C51 COMPILER V8.05a UPS 08/15/2008 13:25:18 PAGE 2
56 1 clk=0;
57 1 for(i=0;i<3;i++) /* 地址输入3位 */
58 1 {
59 2 di=IN; //IN是ADvalue的最低位
60 2 clk=0; //地址输入,上升沿
61 2 clk=1;
62 2 ADvalue=ADvalue>>1; //右移
63 2 }
64 1 clk=0;
65 1 clk=1;
66 1 di=1; //设置I/O口为输入状态
67 1 for(i=0;i<8;i++)
68 1 {
69 2 clk=1; //8位数据输出,下降沿 ,高位在前,低位在后
70 2 clk=0;
71 2 ADvalue=ADvalue<<1; //高位在前,所以左移输入
72 2 IN=di; //从di管脚输入,存到寄存器
73 2 }
74 1 for(i=0;i<7;i++) //等过7个脉冲
75 1 {
76 2 clk=1;
77 2 clk=0;
78 2 }
79 1 cs=1;
80 1 EA=1; //开中断
81 1 return ADvalue;
82 1 }
83
84
85
86 //初始化
87 void InitSYS(void)
88 {
89 1 TMOD = 0x11; /* 设置 定时器 T1 为十六位计数器(定时方式1) */
90 1 SCON=0; /* 模式 0 */
91 1 TH0=0xcf; //25ms
92 1 TL0=0x00;
93 1 ET0=1; /* 定时器 T0中断使能 */
94 1 TR0 = 1; /* 定时器 T0计数使能 */
95 1 EA =1;
96 1
97 1 }
98
99
100 //主函数
101 void start(void)
102 {
103 1 voltage=read(ch0);
104 1 bell=dis1 | !f; //消音后,蜂鸣器不叫
105 1 ld=!dis1 & !f; //消音后,灯常亮
106 1 if(!diss) dis1=1; //消音键按下,消音标志位置1(dis1=1)
107 1 }
108
109 //主程序
110 void main(void)
111 {
112 1 InitSYS();
113 1 while(1)
114 1 {
115 2 start();
116 2 }
117 1 }
C51 COMPILER V8.05a UPS 08/15/2008 13:25:18 PAGE 3
118
119 /* 定时器 0 中断子程序*/
120 void Timing0Int(void) interrupt 1
121 {
122 1 TH0=0xcf;
123 1 TL0=0x00;
124 1 if(voltage<133) count=6;
125 1 else count=(voltage-130)*2; //确定valtage的一个范围,count值
126 1
127 1 if(timecount<count) timecount++; //计数器timecount f=0的时间(间隔)
128 1 else {timecount=0;f=1;} //f置1间隔
129 1
130 1 if(f) //报警音 长度
131 1 {
132 2 if(num1<3) num1++; //num1=0->1->2->3, 75ms,f置0 f=1的时间
133 2 else{num1=0;f=0;}
134 2 }
135 1 else num1=0;
136 1 }
137
138
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 200 ----
CONSTANT SIZE = ---- ----
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -