请教单片机汇编语言解析

2019-07-16 03:43发布

MAIN_1
;********数据变换处理(BIN;maxFFFF -> BCD;max065535)
;代入参数 源数据  : L_byte,H_byte
;   目标数据: MYDT_A,B,C
;BCD设定值初始化
MOVFF BIN_D00,L_byte ;设定值_0(温度,BIN;2字节)
MOVFF BIN_D01,H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D00 ;设定值_0(BCD;2字节)
    MOVLW   0X0F   ;高位屏蔽
ANDWF BCD_D00,F
    MOVLW   0XE0   ;小数点
IORWF BCD_D00,F
MOVFF MYDT_B,BCD_D01
SWAPF BCD_D01,F
    MOVLW   0XF0   ;低位屏蔽
ANDWF BCD_D01,F
SWAPF MYDT_C,F
    MOVLW   0X0F   ;高位屏蔽
ANDWF MYDT_C,W
IORWF BCD_D01,F
MOVFF BIN_D10,L_byte ;设定值_1(照度,BIN;2字节)
MOVFF BIN_D11,H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D10 ;设定值_1(BCD;2字节)
MOVFF MYDT_B,BCD_D11
;记录频率
MOVFF BIN_D20,L_byte ;设定值_2(温度,BIN;2字节)
MOVFF BIN_D21,H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D20 ;设定值_2(BCD;2字节)
MOVFF MYDT_B,BCD_D21
MOVFF BIN_D30,L_byte ;设定值_3(照度,BIN;2字节)
MOVFF BIN_D31,H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D30 ;设定值_3(BCD;2字节)
MOVFF MYDT_B,BCD_D31
MOVFF BIN_D40,L_byte ;设定值_4(PH,BIN;2字节)
MOVFF BIN_D41,H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D40 ;设定值_4(BCD;2字节)
MOVFF MYDT_B,BCD_D41
MOVFF BIN_D50,L_byte ;设定值_5(浊度,BIN;2字节)
MOVFF BIN_D51,H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D50 ;设定值_5(BCD;2字节)
MOVFF MYDT_B,BCD_D51
;吹泡频率
MOVFF BIN_D60,L_byte ;设定值_60(分,BIN;1字节)
CLRF H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D60 ;设定值_60(BCD;1字节)
MOVFF BIN_D61,L_byte ;设定值_61(时,BIN;1字节)
CLRF H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D61 ;设定值_61(BCD;1字节)
MOVFF BIN_D62,L_byte ;设定值_62(秒,BIN;1字节)
CLRF H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D62 ;设定值_62(BCD;1字节)
MOVFF BIN_D63,L_byte ;设定值_63(分,BIN;1字节)
CLRF H_byte
CALL B2_BCD  
MOVFF MYDT_C,BCD_D63 ;设定值_63(BCD;1字节)
;延时约1秒(10*255*255)
    MOVLW   0X10
MOVWF MYCNT2
MAIN_LP1
CLRF MYCNT1
MAIN_LP2
CLRF DELAY_CNT
CALL DELAY_NUS
DECFSZ MYCNT1,F
GOTO MAIN_LP2
DECFSZ MYCNT2,F
GOTO MAIN_LP1
CLRF KEYFLG    ;键标志清零
CLRF KEYMOD
CLRF RUNMOD
CLRF DSPFLG
CLRF BIN_D73    ;40微秒单位
CLRF S电子发烧友T     ;1秒计数器(10毫秒单位)
CLRF DSPSEG    ;当前显示数据段
CLRF DSPBIT    ;当前显示数据位
CLRF RFDAT0
CLRF RFDAT1
MOVLW .2
MOVWF SMPCNT
    CALL    INIT_DISPLAY
    CALL    CLEAR_SCREEN
    CALL    FIRST_SCREEN
CLRF DSPSEG    ;段:0
CLRF DSPBIT    ;位:0:
CALL CURSOR_SET   ;画面光标位置计算set
    MOVLW B'11000000'         
    MOVWF INTCON    ;GIEH=1,GIEL=1,TMR0IE=1,INTE=0;RBIE=0,TMR0IF=0,INTF=0,RBIF=0   
    MOVLW B'00000100'         
    MOVWF T2CON    ;无分频;tiMER2 ON  
BSF  ADCON0,ADON           
BSF  ADCON0,GO/DONE  ;AD START
BSF  RUNMOD,0        ;TEST***********1/启动按钮有效
LOOP
; GOTO LOOP_4
NOP
CALL KEY_PRO    ;内部键查询处理
CALL RF_PRO    ;无线键查询处理
; GOTO LOOP    ;***************test
BTFSC KEYFLG,7   ;IF=1;有键数据待处理
CALL KEY_DT_SET   ;内部键或RF遥控器接受数据处理
NOP
MOVF DSPCNT,F
BNZ  LOOP_0
CALL DSP_PRO    ;数据显示处理(每100ms更新一组数据)
NOP
MOVLW .5
MOVWF DSPCNT
LOOP_0
NOP
MOVF SMPCNT,F
BNZ  LOOP_1
BTFSC ADCON0,GO/DONE      ;0 AD DONE
GOTO LOOP_1
NOP
CALL AD_SAMPLE
MOVLW .2
MOVWF SMPCNT
BSF  ADCON0,GO/DONE      ;AD RESTART
LOOP_1
BTFSS RUNMOD,0        ;b0:0/停止;1/启动按钮有效
GOTO LOOP
BTFSC RUNMOD,7        ;b7:1/首次低电平等待
GOTO LOOP_2
BTFSC PORTE,7        ;低电平测试
GOTO LOOP
BSF  RUNMOD,7        ;b7:1/首次低电平有效
GOTO LOOP
LOOP_2
BTFSC RUNMOD,6       ;b6:1/首次高电平等待
GOTO LOOP_3
BTFSS PORTE,7        ;高电平测试
GOTO LOOP
BSF  RUNMOD,6       ;b6:1/已同步
GOTO LOOP
LOOP_3
NOP
MOVF PI_CNT,F  ;计算间歇计数器(20ms单位)
GOTO LOOP_4
BTFSC PI_CH,0   ;当前PI计算通道
GOTO LOOP_30
;通道1计算(温度控制)
MOVFF UNIT_1,UNIT_0 ;前次符号位
MOVFF E_NOW1,E_NOW ;前次误差值
MOVFF D_DTY1,D_DTY0 ;前次控制值
MOVFF BIN_D00,DC_VT0
MOVFF BIN_D01,MYDT_B
BCF  STATUS,C
RRNCF MYDT_B,F  ;带进位循环右移
RRNCF DC_VT0,F  ;带进位循环右移
RRNCF MYDT_B,F  ;带进位循环右移
RRNCF DC_VT0,F  ;带进位循环右移
MOVFF BIN_D80,SMP_VT0
MOVFF BIN_D81,MYDT_B
BCF  STATUS,C
RRNCF MYDT_B,F  ;带进位循环右移
RRNCF SMP_VT0,F  ;带进位循环右移
RRNCF MYDT_B,F  ;带进位循环右移
RRNCF SMP_VT0,F  ;带进位循环右移
;** 输入参数:DC_VT0,SMP_VT0,UNIT_0,E_NOW
;** 返回参数:D_DTY0,E_NOW占空比高8位
CALL SIGN_PI_CAL  ;单字节数字PI参数计算
MOVFF E_NOW,E_NOW1 ;当前误差值
MOVFF UNIT_0,UNIT_1 ;当前符号位
MOVFF D_DTY0,D_DTY1 ;当前控制值
BSF  PI_CH,0   ;当前PI计算通道
GOTO LOOP_3E
LOOP_30
;通道2计算(照度控制)
MOVFF UNIT_2,UNIT_0 ;前次符号位
MOVFF E_NOW2,E_NOW ;前次误差值
MOVFF D_DTY2,D_DTY0 ;前次控制值
MOVFF BIN_D10,DC_VT0
MOVFF BIN_D11,MYDT_B
BCF  STATUS,C
RRNCF MYDT_B,F  ;带进位循环右移
RRNCF DC_VT0,F  ;带进位循环右移
RRNCF MYDT_B,F  ;带进位循环右移
RRNCF DC_VT0,F  ;带进位循环右移
MOVFF BIN_D90,SMP_VT0
MOVFF BIN_D91,MYDT_B
BCF  STATUS,C
RRNCF MYDT_B,F  ;带进位循环右移
RRNCF SMP_VT0,F  ;带进位循环右移
RRNCF MYDT_B,F  ;带进位循环右移
RRNCF SMP_VT0,F  ;带进位循环右移
CALL SIGN_PI_CAL  ;单字节数字PI参数计算
MOVFF D_DTY0,D_DTY2 ;当前控制值
MOVFF E_NOW,E_NOW2 ;当前误差值
MOVFF UNIT_0,UNIT_2 ;当前符号位
BCF  PI_CH,0   ;当前PI计算通道

LOOP_3E
MOVLW .5
MOVWF PI_CNT   ;计算间歇计数器(20ms单位)
LOOP_4      ;温度控制处理
NOP
MOVF STEP_C1,F  ;初始角计数器(10ms/250单位)
BNZ  LOOP_5
;温度控制脉冲输出(100us)
BSF  PORTB,4
MOVLW .40
MOVWF MYCNT1
LOOP_4LP
MOVLW .200
MOVWF DELAY_CNT
CALL DELAY_NUS
DECFSZ MYCNT1,F
GOTO LOOP_4LP
BCF  PORTB,4
; MOVLW .100
; MOVWF STEP_C1   ;初始角计数器(10ms/250单位)
; BTFSC RUNMOD,2       ;温度控制半波已触发?
; GOTO LOOP_41
; BSF  RUNMOD,2       ;温度控制半波已触发
; GOTO LOOP_5
LOOP_41      ;温度控制处理
BCF  RUNMOD,1       ;下次同步等待允许
LOOP_5      ;照度控制处理
MOVLW .0
CPFSEQ STEP_C2   ;初始角计数器(10ms/250单位)
GOTO LOOP
;照度控制脉冲输出(100us)
BSF  PORTB,5
MOVLW .200
MOVWF DELAY_CNT
CALL DELAY_NUS
BCF  PORTB,5
INCF STEP_C2,F  ;初始角计数器(10ms/250单位)
BSF  RUNMOD,3       ;照度控制已触发
GOTO LOOP

END
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。