单片机功率因素的计算
;181度和1度的绝对值对应,
;182度和2度的绝对值对应,
;。。。。。。。。。。。。。
;。。。。。。。。。。。。。
;189度和89度的绝对值对应,
所以,我们判断第三象限置一个标志,用于显示时显示正数,其计算为用63h62h(度)-180(度)即对应到第一象限,而绝对值与第一象限相同,为正。
;对于第二象限转换为第一象限的思路是,由于
;179度和1度的绝对值对应,
;178度和2度的绝对值对应,
;。。。。。。。。。。。。。
;。。。。。。。。。。。。。
;91度和89度的绝对值对应,
所以,我们判断第二象限置一个标志,用于显示时显示负数,其计算为用180(度)-63h62h(度)即对应到第一象限,仅仅是绝对值误差一个负号本文来自辣文论文网而已。
第四象限转换为第一象限子程序为
XIANGXIAN_4:
BIT_XX1=0;
BIT_XX2=0;
BIT_XX3=0;
BIT_XX4=1;置第四象限标志
;调用减法程序,用360-(63H62H)并传到B寄存器中推出,360=0168H
MOV A,#68H
CLR C
SUBB A,62H
MOV B,A
MOV A,#01H
SUBB A,63H
CLR ERR
JC ERROR_4
RET
ERROR_4:
SETB ERR
RET
第三象限转换为第一象限子程序为
XIANGXIAN_3:
BIT_XX1=0;
BIT_XX2=0;
BIT_XX3=1; ;置第三象限标志
BIT_XX4=0;置第四象限标志
;调用减法程序,用(63H62H)-180并传到B寄存器中推出,180=0B4H
MOV A,62H
CLR C
SUBB A,#0B4H
MOV B,A
毕业论文http://www.751com.cn
JC ERROR_3
RET
ERROR_3:
SETB ERR
RET
第二象限转换为第一象限子程序为
XIANGXIAN_2:
BIT_XX1=0;
BIT_XX2=1;置第二象限标志
BIT_XX3=0;
BIT_XX4=0
;调用减法程序,用180-(63H62H)并传到B寄存器中推出,180=0B4H
MOV A,#0B4H
CLR C
SUBB A,62H
MOV B,A
RET
第一象限子程序为
XIANGXIAN_1:
BIT_XX1=1; 置第二象限标志
BIT_XX2=0;
BIT_XX3=0;
BIT_XX4=0
MOV B,62H
RET
这样我们只要建立0~90的余弦表即可。
下面编制的是求余弦即功率因素cosφ程序,指令如下:
;先定义一个表格为余弦表
YUXIAN_TAB:;(每度占两个字节)
DB 99H,99H,99H,98H,99H,94H,99H,86H,99H,76H; 0° 4°的余弦值
DB ……
DB ……
DB 08H,72H,06H,98H,05H,23H,03H,49H,01H,75H; 85° 89°的余弦值
;查表程序,根据B寄存器中的值(0~90)查表
MOV DPTR, #YUXIAN_TAB
MOV A,B
ADD A,B
MOV B,A
MOVC A,@A+DPTR
MOV 64H,A
INC B
MOV A,B
MOVC A,@A+DPTR
MOV 65H,A
RET
其结果在65H64H中,为功率因素cosφ,存储的是BCD形式的数,可直接用于显示,显示的值前应价0和点(.),为纯小数。如:
0度时为0.9999,(非常接近1)
1度时为0.9998,
……
……
89度时为0.0175(非常的小了)
然而还没考虑到符号和出错。这两个问题只有在显示程序中才可加以考虑,1是加不加负号的问题,二是出错报不报警的问题,后续(显示程序)讨论。
如果要用于计算,则需要换算成16进制数。1389