📄 yh_t3_new.lst
字号:
C51 COMPILER V7.50 YH_T3_NEW 04/28/2007 10:16:51 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE YH_T3_NEW
OBJECT MODULE PLACED IN yh_t3_new.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE yh_t3_new.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************
2 说明:
3 1.该程序适用于高精度的场合
4 2.关于如何借鉴保加利亚程序的原则:
5 首先,如果能完全看懂,则将原汇编程序改写为C程序;
6 其次,如果大部分能看懂,则仍模仿汇编程序的
7 结构和流程,改写。那些不懂的细节可以自己编写
8 或者干脆暂时省略,以后出了问题再补充。
9 最后,如果大部分看不懂,则自己创造,自己编写,
10 同时借鉴汇编程序中可以看得懂的部分,以后出了
11 问题再完善和补充。
12 *********************************/
13 /********************************
14 注意事项:
15 1.对AT24C02进行多次写操作时,中间必须相隔5ms
16 2.乘法运算时,乘数必须和积的数据类型相统一。
17 注意:不同的数据类型进行运算时,极易出现隐蔽性的差错。
18 要么定义为相同的数据类型,要么使用强制转换。
19 另外,涉及到乘法运算时,存在着运算过程中,某个被乘数
20 的变量的内容被“非法”修改的现象。
21 如果碰上这种情况,重新赋值就可以了。
22 通过单步调试来发现这个隐形杀手。
23
24 3.我们使用的晶振是11.0592M,不是12M,所以定时是不准确
25 的,存在误差。
26 4.DATA的128个字节不能全部占用,因为堆栈也需要占用DATA
27 的空间。因此可以将占用空间最大的数组存放在IDATA,
28 其余变量都默认存放在DATA即可。
29 5.制约响应速度的原因有两个:排序数组的长度和5460的
30 输出速率。
31 6.CS5460A的偏置校准数据一旦写入偏置校准寄存器,要断电
32 之后该寄存器的数据才消失。当然如果,每次运行程序都
33 写入偏置校准数据,可能也不需要断电。
34 7.单位转换中的克与英镑的转换存在bug,当秤的精度变大
35 时会出现问题。示数的最高位与小数点的位置可能不正确
36 8.AT24C02的页面写操作存在不能超越当前page(8个字节);
37 顺序写操作则没有这种限制。
38 9.分度值的改变牵连很广,包括:重量值的计算,精度,
39 数值的符号的产生,长期稳定旗标。
40 10.
41 *********************************/
42
43
44 /********************************
45 功能上的欠缺:
46 1.还是校准完成后马上可以称重,比较人性化,但是代码
47 可能会大量增加,因为,称重那部分很可能要重复。
48 以后再尝试。
49 也不一定,不妨尝试一下,我感觉应该也没有多少难度,
50 代码也不会增加多少。
51 建议方法:将菜单部分设计成一个庞大的函数。
52 通过在称重循环结尾处查询组合键是否按下
53 调用菜单函数。设定完成后通过break跳出
54 菜单的循环,继续称重。
55 当然读取24c02部分可能会重复。也
C51 COMPILER V7.50 YH_T3_NEW 04/28/2007 10:16:51 PAGE 2
56 可能不会。现炒现卖。
57 暂时不用。
58 2.应该添加防震功能。
59 3.传说中的LCD亮度调节,就是背光亮度的调节,只要在硬件
60 上调整相应的电阻就可以了。
61 至于软件调节肯定要使用专门的液晶或者增加相关的硬件
62 电路。
63 4.低电压报警模块应该并不难,但是,如果想要显示电压的
64 数值则比较困难。要研究耀华T3的电路和软件才能解决。
65 5.目前没有hold功能,因为按键不够!
66 6.
67 7.
68 8.我所使用的背光模块是一种手动背光,必须进行菜单设置。
69 今后可能要考虑自动背光以及真正的手动按键控制背光。
70 9.
71 ***************************************************/
72
73
74 /*************************************************
75 目前存在的问题
76 问题一:现在的背光电路有一个不爽的地方,开机就亮!
77 建议方法:背光电路之前加一个三极管作为反相器
78 就可以了。
79 问题二:如果没有单位转换,小数点位置的变换会很简单,
80 有单位转换,可能很麻烦。
81 问题三:
82 问题四:
83
84 问题五:T2作为波特率发生器,仿真失败;有可能是keil
85 本身的模拟串口存在问题,不支持T2。如果进行
86 实际的线路连接可能会成功。
87 暂时使用T1作为串口波特率发生器;使用T0和T2
88 实现延时5分钟的功能。
89 问题六:
90 问题七:串口模块中,由于目前的示数的正负旗标:f_minus
91 的局限性,当示数为0时,串口输出的数据会出现
92 +0和-0两种情况。不过影响也不大,暂时不管它。
93 **************************************************/
94
95
96 /***************************
97 思路一:菜单所包含的内容暂时有以下几个:
98 分度值选择、小数点的位置、波特率、背光开关
99
100 、量程选择、校准、校准砝码。
101 先模仿T3,归零范围选择和零点跟踪选择以后再说。
102 思路二:
103 思路三:新建LCD编码数组的过程中可能修改了某些数据,
104 也不会出错,但是看着不爽。如果见到就改回来。
105
106 思路四:原来使用的sort函数中后来被去掉的部分应该有一定
107 的防震功能。考虑一下是否恢复。
108 在某个时间段之内的短暂的AD变化不去取样。
109 建议方法:保加利亚程序中,在排序部分,那种间隔取值的
110 方法研究一下。这种方法,在相同的排序数组长度
111 的情况下,牺牲一部分时间,即LCD的变化速率
112 翻倍,如果数组的长度是25,则称对瞬间冲力的忽略
113 时间可达1~2秒。
114 只要忽略时间达到2秒,防震功能就马马虎虎了。
115 暂时不用,以后再说,因为我的RAM和ROM的空间
116 都很有限。
117 思路五:
C51 COMPILER V7.50 YH_T3_NEW 04/28/2007 10:16:51 PAGE 3
118 思路六:在菜单这部分,考虑使用位域,因为变量的值都
119 比较小,即使使用最小的uchar也有点浪费。
120 或者使用枚举
121 思路七:尽量减少变量,尽量减少全局变量。宁可增加子函数
122 中的局部变量也要减少全局变量和主函数中的变量。
123 思路八:
124 思路九:
125 思路十:考虑延时自动关机功能。也不复杂,只要在
126 时间到了之时,对OFF脚(P1.4)置零就能达到
127 关机的目的。
128 思路11:考虑分段校准。表头项目成功生产后再考虑提高。
129 思路12:
130 思路13:
131 思路14:
132 思路15:通过对比汇编产生的代码的多少,进行深层次的
133 优化。
134 ******************************/
135 #include <reg52.h>
136 #include <intrins.h>
137 //----------------------
138 //以下是自定义的数据类型
139 #define uchar unsigned char
140 #define uint unsigned int
141 #define ulong unsigned long
142 struct AFEI
143 {
144 ulong ad;
145 uchar times;
146 };
147 //--------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -