专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
多级中断问题
2020-02-10 08:34
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
7205
3
3
我想对脉冲的周期进行计时。 方案是 :利用 外部中断 启动和停止计时器 T2, T2定时 300us 中断,对中断次数进行统计。 没有用 ccp 是因为 T1 已经被占用。
现在又个问题 : 就是 显示时 会闪现 a。 大家快来看看 问题出在那里?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
wujianwen_2005
1楼-- · 2020-02-10 09:34
程序 :
#INCLUDE P16F877A.INC
;====================================================;
#DEFINE A_1 PORTB,0
#DEFINE B_1 PORTB,1
#DEFINE C_1 PORTB,2
#DEFINE D_1 PORTB,3
#DEFINE E_1 PORTB,4
#DEFINE F_1 PORTB,5
#DEFINE G_1 PORTB,6
#DEFINE H_1 PORTB,7
#DEFINE D1 PORTD,7
#DEFINE D2 PORTD,6
#DEFINE D3 PORTD,5
#DEFINE D4 PORTD,4
#DEFINE D5 PORTD,3
#DEFINE D6 PORTD,2
;=====================================================================;
W_TEMP EQU 20H
STATUS_TEMP EQU 21H
PCLATH_TEMP EQU 22H
;=====================================================================;
TIME_FLAG EQU 23H
TIME_BC EQU 24H
TIME_500MS EQU 26H
#DEFINE SJINT TIME_FLAG,0
#DEFINE SJSXSJ TIME_FLAG,1
#DEFINE LED_SMSJ TIME_FLAG,2
;=====================================================================;
LED0W EQU 2AH
LED1W EQU 2BH
LED2W EQU 2CH
LED3W EQU 2DH
LED4W EQU 2EH
LED5W EQU 2FH
LEDSM_FLAG EQU 30H
#DEFINE SM0W LEDSM_FLAG,0
#DEFINE SM1W LEDSM_FLAG,1
#DEFINE SM2W LEDSM_FLAG,2
#DEFINE SM3W LEDSM_FLAG,3
#DEFINE SM4W LEDSM_FLAG,4
#DEFINE SM5W LEDSM_FLAG,5
;======================================================================;
FLUX0W EQU 31H
FLUX1W EQU 32H
FLUX2W EQU 33H
FLUX3W EQU 34H
FLUX4W EQU 35H
FLUX5W EQU 36H
FLUXLL EQU 3AH
FLUXHH EQU 3BH
FLUX_TEMPH EQU 3CH
FLUX_TEMPL EQU 3DH
FLUX_FLAG EQU 41H
#DEFINE MCSJCJ_OKW FLUX_FLAG,0 ; 脉冲采集完标志位
DAT_BUFLL EQU 42H
DAT_BUFHH EQU 43H
#DEFINE MAXDAT .1667
;======================================================================;
ORG 0000H
GOTO START
ORG 0004H
GOTO INTERMIT
ORG 0005H
INTERMIT:
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
CLRF STATUS
MOVF PCLATH,W
BTFSC INTCON,INTF
GOTO OUTSIDE_INT
BTFSC INTCON,TMR0IF
GOTO TMR0_INT
BANKSEL PIR1
BTFSC PIR1,TMR2IF
GOTO TMR2_INT
GOTO INTERMITOK
TMR0_INT:
BTFSS INTCON,TMR0IF
GOTO INTERMITOK
BCF INTCON,TMR0IF
BSF SJINT ;2ms中断时间到,置1 标志位
INCF TIME_BC,1
MOVLW .5
SUBWF TIME_BC,W
BTFSC STATUS,C
GOTO TIME_BCBC
MOVLW .9 ;因为之前的程式到3所以补偿3
MOVWF TMR0
GOTO INTERMITOK
TIME_BCBC:
CLRF TIME_BC
nop
nop
nop
nop
nop
MOVLW .10 ;因为之前的程式到3所以补偿3
MOVWF TMR0
GOTO INTERMITOK
;=======================================外部中断程序==========================;
OUTSIDE_INT:
BTFSS INTCON,INTF
GOTO INTERMITOK
BCF INTCON,INTF
BTFSS T2CON,TMR2ON
GOTO START_FLUXCJ
GOTO STOP_FLUXCJ
STOP_FLUXCJ:
BCF T2CON,TMR2ON ;关闭T2 开始计时
BSF T2CON,0 ;T2 4 分频
BSF MCSJCJ_OKW ;脉冲时间采集完毕标志位
GOTO INTERMITOK
START_FLUXCJ:
CLRF FLUXLL
CLRF FLUXHH
CLRF TMR2 ;清除TMR2
BSF T2CON,TMR2ON ;启动T2 停止计时
BSF T2CON,0 ;T2 4 分频
BCF MCSJCJ_OKW
GOTO INTERMITOK
;============================================================================;
TMR2_INT:
BANKSEL PIR1
BTFSS PIR1,TMR2IF
GOTO INTERMITOK
BCF PIR1,TMR2IF
CLRF TMR2
BSF T2CON,0 ;T2 4 分频
BANKSEL 20H
INCF FLUXLL,1
MOVF FLUXLL,F
BTFSC STATUS,Z
INCF FLUXHH,1
GOTO INTERMITOK
;============================================================================;
INTERMITOK:
MOVF PCLATH_TEMP,W
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
;===========================================================================;
START:
CLRWDT
CLRF PORTB
CLRF PORTD
MOVLW 0XFF
MOVWF PORTA
BSF INTCON,GIE
BSF INTCON,PEIE
BSF INTCON,T0IE
BSF INTCON,INTE
BSF T2CON,0 ;T2 4 分频
BCF T2CON,TMR2ON ;关闭T2
BANKSEL PR2
MOVLW .75
MOVWF PR2 ;定时300us,作为脉冲计时单位
BANKSEL TMR0
MOVLW .6
MOVWF TMR0
BANKSEL OPTION_REG
MOVLW .2
MOVWF OPTION_REG ;2ms定时中断
BSF OPTION_REG,INTEDG ;外部中断
BANKSEL TRISB
MOVLW 0X01
MOVWF TRISB
MOVLW 0X00
MOVWF TRISD
MOVLW 07H
MOVWF CMCON
MOVLW 06H
MOVWF ADCON1
MOVLW 0FFH
MOVWF TRISA
BSF PIE1,TMR2IE ;定时器2中断
BANKSEL 20H
MOVLW 20H
MOVWF FSR
CLRF_RAM_LOOP:
CLRWDT
CLRF INDF
INCF FSR,1
BTFSS FSR,7
GOTO CLRF_RAM_LOOP
GOTO MAIN
MAIN:
CALL FENSHI ;系统分时
CALL FLUX_DEAL
CALL LED_SM ;数码扫描显示
GOTO MAIN
;==================================================================;
;函 数 名: FENSHI
;功 能: 实现 分时 功能
;输入说明: 标志位:SJINT (本设计为500US中断标志)
;输出说明: SJ500US : 高电平时间单元标志
; LED_SMSJ : LED扫描时间
;空间说明: TIME_2MS,TIME_10MS,TIME_500MS
;==================================================================;
FENSHI:
CLRWDT
BTFSS SJINT
GOTO FENSHI_OK
BCF SJINT
BSF LED_SMSJ
INCF TIME_500MS,1
MOVLW .250
SUBWF TIME_500MS,W
BTFSS STATUS,C
GOTO FENSHI_OK
CLRF TIME_500MS
BSF SJSXSJ ;数据刷新时间
GOTO FENSHI_OK
FENSHI_OK: RETURN
;================================================================;
;函 数 名: FLUX_DEAL
;功 能: 对脉冲高电平时间进行采集
;执行标志: SJ500US
; START_FLUXCJW 1: 高电平状态,开始采集
; 0:低电平状态,停止采集
;数据空间: FLUXHH:FLUXLL : 采集数据空间
; FLUX_TEMPH:FLUX_TEMPL :数据暂存
;说 明: 采集高电平期间有多少个500us
;=================================================================;
FLUX_DEAL: CLRWDT
BTFSS MCSJCJ_OKW ;一周期脉冲时间采集完成位
GOTO FLUX_DEAL_OK
BCF MCSJCJ_OKW
MOVLW HIGH(MAXDAT) ;判断是否0.5秒,即数据为1000
SUBWF FLUXHH,W ;>,判定为无效数据
BTFSS STATUS,C
GOTO FLUXSJ_DEAL_NEXT
BTFSS STATUS,Z
GOTO FLUX_DEAL_OK ;>放弃该值
MOVLW LOW(MAXDAT)
SUBWF FLUXLL,W
BTFSS STATUS,C
GOTO FLUXSJ_DEAL_NEXT
GOTO FLUX_DEAL_OK
FLUXSJ_DEAL_NEXT:
BTFSS SJSXSJ ;刷新数据时间
GOTO FLUX_DEAL_OK
BCF SJSXSJ
CLRF FLUX_TEMPL
CLRF FLUX_TEMPH
MOVF FLUXLL,W
MOVWF FLUX_TEMPL
MOVF FLUXHH,W
MOVWF FLUX_TEMPH
CALL BCD16BIT ;进行BCD转化
GOTO FLUX_DEAL_OK
FLUX_DEAL_OK: RETURN
;===============================================================;
;函数名: BCD16BIT
;功能 : 16位BCD转换
;转换前: DAT_BUFHH:DAT_BUFLL
;转换结果: WANWEI_BUF,QIANWEI_BUF,BAIWEI_BUF,SHIWEI_BUF,GEWEI_BUF
;==============================================================;
BCD16BIT: CLRWDT
CLRF FLUX1W
CLRF FLUX2W
CLRF FLUX3W
CLRF FLUX4W
CLRF FLUX5W
MOVF FLUX_TEMPL,W
MOVWF DAT_BUFLL
MOVF FLUX_TEMPH,W
MOVWF DAT_BUFHH
BAIWEI: MOVLW D'100'
SUBWF DAT_BUFLL,W
BTFSS STATUS,C
GOTO SHIWEI
MOVWF DAT_BUFLL
INCF FLUX3W,1
GOTO BAIWEI
SHIWEI: MOVLW D'10'
SUBWF DAT_BUFLL,W
BTFSS STATUS,C
GOTO GEWEI
MOVWF DAT_BUFLL
INCF FLUX4W,1
GOTO SHIWEI
GEWEI: MOVF DAT_BUFLL,W
ADDWF FLUX5W,F
LOOPH: MOVF DAT_BUFHH,F
BTFSC STATUS,Z
GOTO BCD_OK
DECF DAT_BUFHH,1
CHULI_GEWEI: MOVLW .6
ADDWF FLUX5W,F
MOVLW .10
SUBWF FLUX5W,W
BTFSS STATUS,C
GOTO CHULI_SHIWEI
INCF FLUX4W,1
MOVLW .10
SUBWF FLUX5W,F
CHULI_SHIWEI: MOVLW .5
ADDWF FLUX4W,F
MOVLW .10
SUBWF FLUX4W,W
BTFSS STATUS,C
GOTO CHULI_BAIWEI
INCF FLUX3W,1
MOVLW .10
SUBWF FLUX4W,F
CHULI_BAIWEI: MOVLW .2
ADDWF FLUX3W,F
MOVLW .10
SUBWF FLUX3W,W
BTFSS STATUS,C
GOTO CHULI_QIANWEI
INCF FLUX2W,1
MOVLW .10
SUBWF FLUX3W,F
CHULI_QIANWEI: MOVLW .10
SUBWF FLUX2W,W
BTFSS STATUS,C
GOTO LOOPH
INCF FLUX1W,1
MOVLW .10
SUBWF FLUX2W,F
GOTO LOOPH
BCD_OK:
RETURN
;======================================================================;
;程序名: LED_SM
;功 能: 动态扫描显示
;说 明: 扫描时间: 2MS
; 扫描时间标志: LED_SMSJ
; 显示数据空间:LED0W,LED1W,LED2W
; LED3W,LED4W,LED5W
;=======================================================================;
LED_SM:
CLRWDT
BTFSS LED_SMSJ
GOTO LED_SM_OK
BCF LED_SMSJ
GOTO SM_FLUX
GOTO LED_SM_OK
SM_FLUX:
MOVF FLUX0W,W
MOVWF LED0W
MOVF FLUX1W,W
MOVWF LED1W
MOVF FLUX2W,W
MOVWF LED2W
MOVF FLUX3W,W
MOVWF LED3W
MOVF FLUX4W,W
MOVWF LED4W
MOVF FLUX5W,W
MOVWF LED5W
MOVF LED0W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED0W
MOVF LED1W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED1W
MOVF LED2W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED2W
MOVF LED3W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED3W
MOVF LED4W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED4W
GOTO SMSMSM
GOTO LED_SM_OK
;===========================================================================;
SMSMSM: CLRWDT
BTFSS SM0W
GOTO SM_LED0W
BTFSS SM1W
GOTO SM_LED1W
BTFSS SM2W
GOTO SM_LED2W
BTFSS SM3W
GOTO SM_LED3W
BTFSS SM4W
GOTO SM_LED4W
GOTO SM_LED5W
SM_LED0W:
BSF SM0W
BCF D1
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED0W,W
CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D6
GOTO LED_SM_OK
SM_LED1W:
BSF SM1W
BCF D6
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED1W,W
CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D5
GOTO LED_SM_OK
SM_LED2W:
BSF SM2W
BCF D5
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED2W,W
NEXT1: CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D4
GOTO LED_SM_OK
SM_LED3W:
BSF SM3W
BCF D4
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED3W,W
NEXT2: CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D3
GOTO LED_SM_OK
SM_LED4W:
BSF SM4W
BCF D3
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED4W,W
NEXT3: CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D2
GOTO LED_SM_OK
SM_LED5W:
MOVLW B'11000000'
ANDWF LEDSM_FLAG,F
BCF D2
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED5W,W
NEXT4: CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D1
GOTO LED_SM_OK
LED_SM_OK:
RETURN
ORG 400H
TABLE:
ADDWF PCL,F
;RETLW B'ABCDEFGH'
RETLW B'00000011' ;0
RETLW B'10011111' ;1
RETLW B'00100101' ;2
RETLW B'00001101' ;3
RETLW B'10011001' ;4
RETLW B'01001001' ;5
RETLW B'01000001' ;6
RETLW B'00011111' ;7
RETLW B'00000001' ;8
RETLW B'00001001' ;9
RETLW B'00010001' ;A
RETLW B'11000001' ;B
RETLW B'01100011' ;C
RETLW B'10000101' ;D
RETLW B'01100001' ;E
RETLW B'01110001' ;F
RETLW B'11100011' ;L
RETLW B'11111111' ;灭
END
加载中...
wujianwen_2005
2楼-- · 2020-02-10 11:10
精彩回答 2 元偷偷看……
加载中...
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
串口无法连续接收数据
2 个回答
求助:dsPIC33F串口通信,如何发送字符串
4 个回答
PIC45K40 IOC(interrupt-on-change)功能
2 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#INCLUDE P16F877A.INC
;====================================================;
#DEFINE A_1 PORTB,0
#DEFINE B_1 PORTB,1
#DEFINE C_1 PORTB,2
#DEFINE D_1 PORTB,3
#DEFINE E_1 PORTB,4
#DEFINE F_1 PORTB,5
#DEFINE G_1 PORTB,6
#DEFINE H_1 PORTB,7
#DEFINE D1 PORTD,7
#DEFINE D2 PORTD,6
#DEFINE D3 PORTD,5
#DEFINE D4 PORTD,4
#DEFINE D5 PORTD,3
#DEFINE D6 PORTD,2
;=====================================================================;
W_TEMP EQU 20H
STATUS_TEMP EQU 21H
PCLATH_TEMP EQU 22H
;=====================================================================;
TIME_FLAG EQU 23H
TIME_BC EQU 24H
TIME_500MS EQU 26H
#DEFINE SJINT TIME_FLAG,0
#DEFINE SJSXSJ TIME_FLAG,1
#DEFINE LED_SMSJ TIME_FLAG,2
;=====================================================================;
LED0W EQU 2AH
LED1W EQU 2BH
LED2W EQU 2CH
LED3W EQU 2DH
LED4W EQU 2EH
LED5W EQU 2FH
LEDSM_FLAG EQU 30H
#DEFINE SM0W LEDSM_FLAG,0
#DEFINE SM1W LEDSM_FLAG,1
#DEFINE SM2W LEDSM_FLAG,2
#DEFINE SM3W LEDSM_FLAG,3
#DEFINE SM4W LEDSM_FLAG,4
#DEFINE SM5W LEDSM_FLAG,5
;======================================================================;
FLUX0W EQU 31H
FLUX1W EQU 32H
FLUX2W EQU 33H
FLUX3W EQU 34H
FLUX4W EQU 35H
FLUX5W EQU 36H
FLUXLL EQU 3AH
FLUXHH EQU 3BH
FLUX_TEMPH EQU 3CH
FLUX_TEMPL EQU 3DH
FLUX_FLAG EQU 41H
#DEFINE MCSJCJ_OKW FLUX_FLAG,0 ; 脉冲采集完标志位
DAT_BUFLL EQU 42H
DAT_BUFHH EQU 43H
#DEFINE MAXDAT .1667
;======================================================================;
ORG 0000H
GOTO START
ORG 0004H
GOTO INTERMIT
ORG 0005H
INTERMIT:
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
CLRF STATUS
MOVF PCLATH,W
BTFSC INTCON,INTF
GOTO OUTSIDE_INT
BTFSC INTCON,TMR0IF
GOTO TMR0_INT
BANKSEL PIR1
BTFSC PIR1,TMR2IF
GOTO TMR2_INT
GOTO INTERMITOK
TMR0_INT:
BTFSS INTCON,TMR0IF
GOTO INTERMITOK
BCF INTCON,TMR0IF
BSF SJINT ;2ms中断时间到,置1 标志位
INCF TIME_BC,1
MOVLW .5
SUBWF TIME_BC,W
BTFSC STATUS,C
GOTO TIME_BCBC
MOVLW .9 ;因为之前的程式到3所以补偿3
MOVWF TMR0
GOTO INTERMITOK
TIME_BCBC:
CLRF TIME_BC
nop
nop
nop
nop
nop
MOVLW .10 ;因为之前的程式到3所以补偿3
MOVWF TMR0
GOTO INTERMITOK
;=======================================外部中断程序==========================;
OUTSIDE_INT:
BTFSS INTCON,INTF
GOTO INTERMITOK
BCF INTCON,INTF
BTFSS T2CON,TMR2ON
GOTO START_FLUXCJ
GOTO STOP_FLUXCJ
STOP_FLUXCJ:
BCF T2CON,TMR2ON ;关闭T2 开始计时
BSF T2CON,0 ;T2 4 分频
BSF MCSJCJ_OKW ;脉冲时间采集完毕标志位
GOTO INTERMITOK
START_FLUXCJ:
CLRF FLUXLL
CLRF FLUXHH
CLRF TMR2 ;清除TMR2
BSF T2CON,TMR2ON ;启动T2 停止计时
BSF T2CON,0 ;T2 4 分频
BCF MCSJCJ_OKW
GOTO INTERMITOK
;============================================================================;
TMR2_INT:
BANKSEL PIR1
BTFSS PIR1,TMR2IF
GOTO INTERMITOK
BCF PIR1,TMR2IF
CLRF TMR2
BSF T2CON,0 ;T2 4 分频
BANKSEL 20H
INCF FLUXLL,1
MOVF FLUXLL,F
BTFSC STATUS,Z
INCF FLUXHH,1
GOTO INTERMITOK
;============================================================================;
INTERMITOK:
MOVF PCLATH_TEMP,W
MOVWF PCLATH
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
;===========================================================================;
START:
CLRWDT
CLRF PORTB
CLRF PORTD
MOVLW 0XFF
MOVWF PORTA
BSF INTCON,GIE
BSF INTCON,PEIE
BSF INTCON,T0IE
BSF INTCON,INTE
BSF T2CON,0 ;T2 4 分频
BCF T2CON,TMR2ON ;关闭T2
BANKSEL PR2
MOVLW .75
MOVWF PR2 ;定时300us,作为脉冲计时单位
BANKSEL TMR0
MOVLW .6
MOVWF TMR0
BANKSEL OPTION_REG
MOVLW .2
MOVWF OPTION_REG ;2ms定时中断
BSF OPTION_REG,INTEDG ;外部中断
BANKSEL TRISB
MOVLW 0X01
MOVWF TRISB
MOVLW 0X00
MOVWF TRISD
MOVLW 07H
MOVWF CMCON
MOVLW 06H
MOVWF ADCON1
MOVLW 0FFH
MOVWF TRISA
BSF PIE1,TMR2IE ;定时器2中断
BANKSEL 20H
MOVLW 20H
MOVWF FSR
CLRF_RAM_LOOP:
CLRWDT
CLRF INDF
INCF FSR,1
BTFSS FSR,7
GOTO CLRF_RAM_LOOP
GOTO MAIN
MAIN:
CALL FENSHI ;系统分时
CALL FLUX_DEAL
CALL LED_SM ;数码扫描显示
GOTO MAIN
;==================================================================;
;函 数 名: FENSHI
;功 能: 实现 分时 功能
;输入说明: 标志位:SJINT (本设计为500US中断标志)
;输出说明: SJ500US : 高电平时间单元标志
; LED_SMSJ : LED扫描时间
;空间说明: TIME_2MS,TIME_10MS,TIME_500MS
;==================================================================;
FENSHI:
CLRWDT
BTFSS SJINT
GOTO FENSHI_OK
BCF SJINT
BSF LED_SMSJ
INCF TIME_500MS,1
MOVLW .250
SUBWF TIME_500MS,W
BTFSS STATUS,C
GOTO FENSHI_OK
CLRF TIME_500MS
BSF SJSXSJ ;数据刷新时间
GOTO FENSHI_OK
FENSHI_OK: RETURN
;================================================================;
;函 数 名: FLUX_DEAL
;功 能: 对脉冲高电平时间进行采集
;执行标志: SJ500US
; START_FLUXCJW 1: 高电平状态,开始采集
; 0:低电平状态,停止采集
;数据空间: FLUXHH:FLUXLL : 采集数据空间
; FLUX_TEMPH:FLUX_TEMPL :数据暂存
;说 明: 采集高电平期间有多少个500us
;=================================================================;
FLUX_DEAL: CLRWDT
BTFSS MCSJCJ_OKW ;一周期脉冲时间采集完成位
GOTO FLUX_DEAL_OK
BCF MCSJCJ_OKW
MOVLW HIGH(MAXDAT) ;判断是否0.5秒,即数据为1000
SUBWF FLUXHH,W ;>,判定为无效数据
BTFSS STATUS,C
GOTO FLUXSJ_DEAL_NEXT
BTFSS STATUS,Z
GOTO FLUX_DEAL_OK ;>放弃该值
MOVLW LOW(MAXDAT)
SUBWF FLUXLL,W
BTFSS STATUS,C
GOTO FLUXSJ_DEAL_NEXT
GOTO FLUX_DEAL_OK
FLUXSJ_DEAL_NEXT:
BTFSS SJSXSJ ;刷新数据时间
GOTO FLUX_DEAL_OK
BCF SJSXSJ
CLRF FLUX_TEMPL
CLRF FLUX_TEMPH
MOVF FLUXLL,W
MOVWF FLUX_TEMPL
MOVF FLUXHH,W
MOVWF FLUX_TEMPH
CALL BCD16BIT ;进行BCD转化
GOTO FLUX_DEAL_OK
FLUX_DEAL_OK: RETURN
;===============================================================;
;函数名: BCD16BIT
;功能 : 16位BCD转换
;转换前: DAT_BUFHH:DAT_BUFLL
;转换结果: WANWEI_BUF,QIANWEI_BUF,BAIWEI_BUF,SHIWEI_BUF,GEWEI_BUF
;==============================================================;
BCD16BIT: CLRWDT
CLRF FLUX1W
CLRF FLUX2W
CLRF FLUX3W
CLRF FLUX4W
CLRF FLUX5W
MOVF FLUX_TEMPL,W
MOVWF DAT_BUFLL
MOVF FLUX_TEMPH,W
MOVWF DAT_BUFHH
BAIWEI: MOVLW D'100'
SUBWF DAT_BUFLL,W
BTFSS STATUS,C
GOTO SHIWEI
MOVWF DAT_BUFLL
INCF FLUX3W,1
GOTO BAIWEI
SHIWEI: MOVLW D'10'
SUBWF DAT_BUFLL,W
BTFSS STATUS,C
GOTO GEWEI
MOVWF DAT_BUFLL
INCF FLUX4W,1
GOTO SHIWEI
GEWEI: MOVF DAT_BUFLL,W
ADDWF FLUX5W,F
LOOPH: MOVF DAT_BUFHH,F
BTFSC STATUS,Z
GOTO BCD_OK
DECF DAT_BUFHH,1
CHULI_GEWEI: MOVLW .6
ADDWF FLUX5W,F
MOVLW .10
SUBWF FLUX5W,W
BTFSS STATUS,C
GOTO CHULI_SHIWEI
INCF FLUX4W,1
MOVLW .10
SUBWF FLUX5W,F
CHULI_SHIWEI: MOVLW .5
ADDWF FLUX4W,F
MOVLW .10
SUBWF FLUX4W,W
BTFSS STATUS,C
GOTO CHULI_BAIWEI
INCF FLUX3W,1
MOVLW .10
SUBWF FLUX4W,F
CHULI_BAIWEI: MOVLW .2
ADDWF FLUX3W,F
MOVLW .10
SUBWF FLUX3W,W
BTFSS STATUS,C
GOTO CHULI_QIANWEI
INCF FLUX2W,1
MOVLW .10
SUBWF FLUX3W,F
CHULI_QIANWEI: MOVLW .10
SUBWF FLUX2W,W
BTFSS STATUS,C
GOTO LOOPH
INCF FLUX1W,1
MOVLW .10
SUBWF FLUX2W,F
GOTO LOOPH
BCD_OK:
RETURN
;======================================================================;
;程序名: LED_SM
;功 能: 动态扫描显示
;说 明: 扫描时间: 2MS
; 扫描时间标志: LED_SMSJ
; 显示数据空间:LED0W,LED1W,LED2W
; LED3W,LED4W,LED5W
;=======================================================================;
LED_SM:
CLRWDT
BTFSS LED_SMSJ
GOTO LED_SM_OK
BCF LED_SMSJ
GOTO SM_FLUX
GOTO LED_SM_OK
SM_FLUX:
MOVF FLUX0W,W
MOVWF LED0W
MOVF FLUX1W,W
MOVWF LED1W
MOVF FLUX2W,W
MOVWF LED2W
MOVF FLUX3W,W
MOVWF LED3W
MOVF FLUX4W,W
MOVWF LED4W
MOVF FLUX5W,W
MOVWF LED5W
MOVF LED0W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED0W
MOVF LED1W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED1W
MOVF LED2W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED2W
MOVF LED3W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED3W
MOVF LED4W,F
BTFSS STATUS,Z
GOTO SMSMSM
MOVLW .17
MOVWF LED4W
GOTO SMSMSM
GOTO LED_SM_OK
;===========================================================================;
SMSMSM: CLRWDT
BTFSS SM0W
GOTO SM_LED0W
BTFSS SM1W
GOTO SM_LED1W
BTFSS SM2W
GOTO SM_LED2W
BTFSS SM3W
GOTO SM_LED3W
BTFSS SM4W
GOTO SM_LED4W
GOTO SM_LED5W
SM_LED0W:
BSF SM0W
BCF D1
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED0W,W
CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D6
GOTO LED_SM_OK
SM_LED1W:
BSF SM1W
BCF D6
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED1W,W
CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D5
GOTO LED_SM_OK
SM_LED2W:
BSF SM2W
BCF D5
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED2W,W
NEXT1: CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D4
GOTO LED_SM_OK
SM_LED3W:
BSF SM3W
BCF D4
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED3W,W
NEXT2: CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D3
GOTO LED_SM_OK
SM_LED4W:
BSF SM4W
BCF D3
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED4W,W
NEXT3: CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D2
GOTO LED_SM_OK
SM_LED5W:
MOVLW B'11000000'
ANDWF LEDSM_FLAG,F
BCF D2
MOVLW HIGH(TABLE)
MOVWF PCLATH
MOVF LED5W,W
NEXT4: CALL TABLE
MOVWF PORTB
BSF PORTD,1
BSF D1
GOTO LED_SM_OK
LED_SM_OK:
RETURN
ORG 400H
TABLE:
ADDWF PCL,F
;RETLW B'ABCDEFGH'
RETLW B'00000011' ;0
RETLW B'10011111' ;1
RETLW B'00100101' ;2
RETLW B'00001101' ;3
RETLW B'10011001' ;4
RETLW B'01001001' ;5
RETLW B'01000001' ;6
RETLW B'00011111' ;7
RETLW B'00000001' ;8
RETLW B'00001001' ;9
RETLW B'00010001' ;A
RETLW B'11000001' ;B
RETLW B'01100011' ;C
RETLW B'10000101' ;D
RETLW B'01100001' ;E
RETLW B'01110001' ;F
RETLW B'11100011' ;L
RETLW B'11111111' ;灭
END
一周热门 更多>