📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 04/13/2007 13:24:52 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE main.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <Reg931.h>
2 #include <Meter_def.h>
3 #include <Rscomm.h>
4 #include <General.h>
5
6 #ifdef uchar
7 #define READYDEF 1 //宏uchar已定义
8 #else
#define uchar unsigned char
#endif
11
12
13 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
14 // 变量定义
15 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
16 uchar bdata MeterFlag; //电表运行状态字
17 sbit Battery = MeterFlag^0; //电池状态
18 sbit Hardware = MeterFlag^1; //硬件状态
19 sbit RsComm = MeterFlag^2; //通讯状态
20 sbit AdjTime = MeterFlag^3; //时钟状态
21 sbit EryRev = MeterFlag^4; //电能方向
22 sbit AdjDate = MeterFlag^5; //校时期允许
23 sbit Fee0 = MeterFlag^6; //费率位0
24 sbit Fee1 = MeterFlag^7; //费率位1
25
26 uchar bdata Flag; //状态标志位1
27 sbit TimeAdj = Flag^0; //校时时间
28 sbit TimeProg = Flag^1; //编程时间
29 sbit RxdFlag = Flag^2; //接收结束
30 sbit TxdFlag = Flag^3; //应答开关
31 sbit TxdWork = Flag^4; //发送状态
32 sbit DspType = Flag^5; //显示类型
33 sbit DspPage = Flag^6; //显示页
34 sbit DspFlag = Flag^7; //显示刷新
35
36 uchar bdata SystemStates; //状态标志位2
37 sbit Comm_RTC_Err = SystemStates^0; //实时时钟通讯错误
38 sbit Comm_EPM_Err = SystemStates^1; //EEPROM通讯错误
39 sbit Data_RTC_Err = SystemStates^2; //实时时钟数据错误
40 sbit Data_EPM_Err = SystemStates^3; //EEPROM数据错误
41 sbit EryBln_Flag = SystemStates^4; //电量结算标志
42 sbit Prog_Flag = SystemStates^5; //编程允许开关
43 sbit Fee_Flag = SystemStates^6; //时段费率检查标志
44 sbit CommFlag = SystemStates^7; //通讯标志
45
46 uchar DspSec; //轮显时间秒计数
47 uchar RevSec; //反向时间秒计数
48 uchar CommSec; //通讯指示灯显示时间
49
50 uchar DspPtr; //轮显指针
51 uchar ComPtr; //通信缓冲区指针
52 uchar CommTimer; //通讯帧间隔时间计数
53
54 uchar Addr[2]; //地址数据
55 uchar Len[2]; //地址空间、数据空间长度
C51 COMPILER V7.50 MAIN 04/13/2007 13:24:52 PAGE 2
56
57 uchar PulseTmp[6]; //剩余脉冲数+校验
58 uchar EryTmp[6]; //电量小数+校验
59 uchar Ptr[8]; //缓存区指针
60 uchar RTC[8]; //时间数据+校验
61
62 uchar DspPara[4]; //3位显示控制+1位检验和
63 uchar DspExch[6]; //显示交换区
64
65 uchar idata ComBuf[RS_MaxSize]; //通信缓冲区
66
67 unsigned int MSSum; //毫秒和
68 unsigned int ProgTimer; //编程状态计时
69
70
71
72 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
73 // 函数定义、引用
74 //※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
75 void McuInit(void); //MCU系统配置及初始化
76 void MeterInit(void); //电表系统初始化
77
78 void Int1_isr(void); //外部中断1服务程序(电能脉冲输入处理)
79 void CMP_isr(void); //比较器中断服务程序(电源和电池电压检测)
80 void Timer0_isr(void); //Timer0服务程序(通讯超时监测)
81 void Keyboard_isr(void); //键盘中断服务程序(RS485通讯触发)
82 void UART_isr(void); //串行中断通讯服务程序
83 void Watchdogrtc_isr(void); //RTC中断服务程序
84
85 //Measure.c
86 extern void Resume(void); //电表数据恢复
87 extern void Measure(void); //电能计量
88 extern void WriteEPMData(uchar idata *ptr); //写数据
89 extern bit ReadData(uchar idata *ptr);
90
91 //RTC_DSP.C
92 extern void DspPara_Read(void); //读显示控制参数
93 extern void RTC_Dsp_Proc(void); //时间、显示处理
94 extern void RTC_Init(void); //RTC初始化设置
95 extern void RTC_Read(void); //读时间
96 extern void Fee_CHK(void); //时段、费率检查
97 extern void Ery_Balance(void); //电量结算
98 extern void Display(uchar idata *ptr); //数据显示
99 extern void RTC_Set(uchar staddr,uchar idata *ptr,uchar len);//实时时钟设置
100 extern bit DateTerm(void); //日期条件判断
101
102 //RSCOMM.C
103 extern void Comm_Proc(void); //通讯处理
104
105
106
107 //**********************************************************
108 //名称:main()
109 //功能:
110 //说明:主函数
111 //**********************************************************
112 void main(void)
113 {
114 1 McuInit(); //MCU初始化
115 1 MeterInit(); //电表初始化
116 1
117 1 while(1)
C51 COMPILER V7.50 MAIN 04/13/2007 13:24:52 PAGE 3
118 1 {
119 2 Measure(); //计量处理
120 2 RTC_Dsp_Proc(); //时钟、显示处理
121 2 Comm_Proc(); //通讯处理
122 2 }
123 1 }
124
125
126
127 //**********************************************************
128 //名称:McuInit()
129 //功能:
130 //说明:MCU初始化
131 //**********************************************************
132 void McuInit(void)
133 {
134 1 uchar i;
135 1
136 1 //======================================================
137 1 //配置I/O口工作模式
138 1 //======================================================
139 1 P0M1=0xCA; //11001010
140 1 P0M2=0xB5; //10110101
141 1
142 1 //P0.7开漏 :38K载波
143 1 //P0.6输入 :RS485通讯唤醒
144 1 //P0.5推挽输出 :RS485收发控制
145 1 //P0.4推挽输出 :PDA
146 1 //P0.3输入 :电源检测
147 1 //P0.2推挽输出 :LED_COMM
148 1 //P0.1输入 :电池检测
149 1 //P0.0推挽输出 :LED_G
150 1
151 1 P1M1=0x3F; //00111111
152 1 P1M2=0xCD; //11001101
153 1 //P1.7推挽输出 :LED_F
154 1 //P1.6推挽输出 :通讯信道选择
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -