SOU
movlw 0x00 ;乘数放入RLTH,RLT
movwf RLTH
movlw 0x05 ;
movwf RLT ;这里表示:30F*5,结果放入RLTH,RLT,SOUH,SOU;
call DUMUL ;>>>>>>5*V_gather,result>>>RLTH,RLT SOUH,SOU
movlw 0x04 ;准备除1024(400),放数入RLTH,RLT!!!!关键所以,要理解为重.....以下三步都是这样的操作
movwf RLTH ;除法子程序用SOUH,SOU除以RLTH,RLT,因为上面的乘法
程序不会超过两个字节
movlw 0x00 ;5V*3FF(10位满值)=13FB,所以在调用除法程序前不用考虑RLTH,RLT是否有其他值而被值
movwf RLT ;0X0400冲掉
call DUDIV ;调用除法程序,商在SOUH,SOU,余数在RLTH,RLT,对于余数再*0A处理.然后再除 0x0400
movf SOU,w ;这样的话除两次就是小数点后两位精度
movwf disbuf ;这里得到电压整数值
movf RLTH,w
movwf SOUH ;送余数到SOUH,SOU,然后*0A,为小数点后一位的运算作准备
movf RLT,w
movwf SOU
movlw 0x00
movwf RLTH
movlw 0x0A
movwf RLT
call DUMUL; >>>余数*10>>>RLTH,RLT SOUH,SOU,这里一般在souh,sou两个字节,为除法作准备
movlw 0x04 ;放除数0X0400
movwf RLTH
movlw 0x00
movwf RLT
call DUDIV ;原来的余数再除以0X400
movf SOU,w
movwf disbuf+1 ;//取商到第二位电压值,这里是小数点的后一位
movf RLTH,w ;然后将余数放到SOUH,SOU,为下一次乘法作准备
movwf SOUH
movf RLT,w
movwf SOU
movlw 0x00
movwf RLTH
movlw 0x0A ;SOUH,SOU,RLTH,RLT为乘法入口
movwf RLT
call DUMUL