完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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 |
|
相关推荐
|
|
这么多,怎么跟你解释呢?
|
|
|
|
LOOP_3E MOVFF D_DTY1,STEP_C1 ;当前温度控制初始角 MOVFF D_DTY2,STEP_C2 ;当前照度控制初始角 MOVLW .2 MOVF STEP_C1 ;温度控制初始角计数器(10ms/250单位)**************** MOVF STEP_C2 ;照度控制初始角计数器(10ms/250单位)**************** ; CLRF STEP_C ;半周期计数器(10ms/250单位) INCF RUNMOD,F ;4/初始角OK GOTO LOOP LOOP_4 ;控制处理 MOVLW .4 CPFSEQ RUNMOD ;2/初始角OK? GOTO LOOP_5 BTFSC PI_CNT,0 ;温度未触发 GOTO LOOP_42 NOP MOVLW .0 CPFSEQ STEP_C1 ;温度初始角计数器(10ms/250单位) GOTO LOOP_42 ;温度控制正半波触发脉冲输出(2X5us) BSF PORTB,4 MOVLW .3 MOVWF MYCNT1 LOOP_41LP MOVLW .4 MOVWF DELAY_CNT CALL DELAY_NUS BTG PORTB,4 DECFSZ MYCNT1,F GOTO LOOP_41LP BSF PI_CNT,0 ;温度已触发 GOTO LOOP LOOP_42 NOP MOVLW .0 CPFSEQ STEP_C2 ;照度初始角计数器(10ms/250单位) GOTO LOOP BTFSC PI_CNT,1 ;照度未触发 GOTO LOOP_4E ;照度控制正半波触发脉冲输出(2X5us) BSF PORTB,5 MOVLW .3 MOVWF MYCNT1 LOOP_42LP MOVLW .4 MOVWF DELAY_CNT CALL DELAY_NUS BTG PORTB,5 DECFSZ MYCNT1,F GOTO LOOP_42LP BSF PI_CNT,1 ;照度已触发 GOTO LOOP LOOP_4E ;2CH正半波触发OK MOVLW .2 CPFSGT PI_CNT ;半周期脉冲计数器>2 GOTO LOOP MOVLW .2 MOVF STEP_C1 ;温度控制初始角计数器(10ms/250单位)**************** MOVF STEP_C2 ;照度控制初始角计数器(10ms/250单位)**************** ; MOVLW .225 ; MOVWF STEP_C ;半波计数器(10ms/250单位) CLRF PI_CNT ;半波已触发计数器 INCF RUNMOD ;5/正半波已触发 GOTO LOOP LOOP_5 ;负半波同步 MOVLW .5 CPFSEQ RUNMOD ;5/正半波已触发OK? GOTO LOOP_6 ;同步低电平等待 BTFSS PORTE,7 ;低电平测试 INCF RUNMOD ;5/正半波已触发 GOTO LOOP LOOP_6 ;负半波触发 MOVLW .6 CPFSEQ RUNMOD ;6/负半波同步OK? GOTO LOOP_7 BTFSC PI_CNT,0 ;温度负半波未触发 GOTO LOOP_62 NOP MOVLW .0 CPFSEQ STEP_C1 ;温度初始角计数器(10ms/250单位) GOTO LOOP_62 ;温度控制负半波触发脉冲输出(2X5us) BSF PORTB,4 MOVLW .3 MOVWF MYCNT1 LOOP_61LP MOVLW .4 MOVWF DELAY_CNT CALL DELAY_NUS BTG PORTB,4 DECFSZ MYCNT1,F GOTO LOOP_61LP BSF PI_CNT,0 ;温度已触发 GOTO LOOP LOOP_62 NOP MOVLW .0 CPFSEQ STEP_C2 ;照度初始角计数器(10ms/250单位) GOTO LOOP BTFSC PI_CNT,1 ;照度未触发 GOTO LOOP_6E ;照度控制负半波触发脉冲输出(2X5us) BSF PORTB,5 MOVLW .3 MOVWF MYCNT1 LOOP_62LP MOVLW .4 MOVWF DELAY_CNT CALL DELAY_NUS BTG PORTB,5 DECFSZ MYCNT1,F GOTO LOOP_62LP BSF PI_CNT,1 ;照度已触发 GOTO LOOP LOOP_6E ;2CH半波触发OK MOVLW .2 CPFSGT PI_CNT ;半周期脉冲计数器>2 GOTO LOOP CLRF PI_CNT ;半波已触发计数器 INCF RUNMOD ;7/正半波已触发 GOTO LOOP LOOP_7 ;2CH半波触发OK ;同步高电平等待 BTFSS PORTE,7 ;高电平测试 GOTO LOOP MOVLW .3 MOVWF RUNMOD ;3/已同步 GOTO LOOP END |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2003 浏览 1 评论
3124 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2248 浏览 2 评论
2669 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
3866 浏览 5 评论
777浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6196浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-18 02:05 , Processed in 0.697708 second(s), Total 91, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191