請教PIC單片機(jī)高手
誰能幫幫解說一下用匯編編程的乘除法運算是怎么編寫的(是PIC單片機(jī)哦)
全部回復(fù)(8)
正序查看
倒序查看
〓利瑪電子(新加坡)有限公司〓SKM400GB128D現(xiàn)貨137-1410 2508
〓利瑪電子(新加坡)有限公司〓SKM300GB128DE現(xiàn)貨137-1410 2508
〓利瑪電子(新加坡)有限公司〓SKM200GB128D現(xiàn)貨137-1410 2508
〓利瑪電子(新加坡)有限公司〓SKM400GB176D現(xiàn)貨137-1410 2508
〓利瑪電子(新加坡)有限公司〓137-1410 2580〓
※※※※※※利瑪電子(新加坡)有限公司※※※※※※※
★是一家專注於國際品牌功率模塊銷售為主的龍頭企業(yè)★
★在國際國內(nèi)同行業(yè)中享有較高的知名度和良好的聲譽(yù)★
〓代理及經(jīng)銷的世界品牌:〓
1: 三菱(MITSUBISHI) 2: 富士(FUJI) 3: 東芝(TOSHIBA)
4: 三社(SANREX) 5:三肯(SANKEN) 6:日立(HITACHI)
7:西門康(SEMIKRON) 8:西門子(SIEMENS) 9:艾賽斯(IXYS)
10: IR(國際整流器) 11:歐派克(EUPEC) 12:英飛凌(INFINEON)
13:仙童(FAIRCHILD) 14: 泰科(TYCO) 15: 摩托羅拉(MOTOEOLA)
16: 新電元(SHINDENGEN) 17: 西碼(WESTCODE) 18: 日之初(HINODE)
19: 博仕曼(BUSSMANN) 20: (CATELEC) 21: (APT)
22: (ABB) 23: 賽靈思(XILINX) 24: 歐姆龍(OMRON)
銷售産品:IGBT、GTR、IPM、PIM、可控硅、整流橋、快恢複二極管、軟恢複二極管.
電解電容、場效應(yīng)管、消特基、高頻無感電容.快速熔斷器.等等!!!
如:美國 日本 德國 英國 西班牙 瑞士等國際知名品牌
◆◆◆熱忱歡迎業(yè)界人士來電來函垂詢!!!◆◆◆
◆國際現(xiàn)貨供應(yīng)商==來自原廠的品質(zhì)==出售一流的服務(wù)◆
聯(lián)繫人:周先生
手機(jī):137-1410-2508
電話:(86)-0755-88 364656
地址:深圳市羅湖區(qū)嘉賓路彭年酒店旁東佳大廈17樓
◆◆◆網(wǎng)絡(luò)聯(lián)繫方式◆◆◆
QQ:173943820
MSN:sz-lima@hotmail.com
E-mail:limapower@21cn.com
Http:www.lima-power.com.sg
〓利瑪電子(新加坡)有限公司〓SKM300GB128DE現(xiàn)貨137-1410 2508
〓利瑪電子(新加坡)有限公司〓SKM200GB128D現(xiàn)貨137-1410 2508
〓利瑪電子(新加坡)有限公司〓SKM400GB176D現(xiàn)貨137-1410 2508
〓利瑪電子(新加坡)有限公司〓137-1410 2580〓
※※※※※※利瑪電子(新加坡)有限公司※※※※※※※
★是一家專注於國際品牌功率模塊銷售為主的龍頭企業(yè)★
★在國際國內(nèi)同行業(yè)中享有較高的知名度和良好的聲譽(yù)★
〓代理及經(jīng)銷的世界品牌:〓
1: 三菱(MITSUBISHI) 2: 富士(FUJI) 3: 東芝(TOSHIBA)
4: 三社(SANREX) 5:三肯(SANKEN) 6:日立(HITACHI)
7:西門康(SEMIKRON) 8:西門子(SIEMENS) 9:艾賽斯(IXYS)
10: IR(國際整流器) 11:歐派克(EUPEC) 12:英飛凌(INFINEON)
13:仙童(FAIRCHILD) 14: 泰科(TYCO) 15: 摩托羅拉(MOTOEOLA)
16: 新電元(SHINDENGEN) 17: 西碼(WESTCODE) 18: 日之初(HINODE)
19: 博仕曼(BUSSMANN) 20: (CATELEC) 21: (APT)
22: (ABB) 23: 賽靈思(XILINX) 24: 歐姆龍(OMRON)
銷售産品:IGBT、GTR、IPM、PIM、可控硅、整流橋、快恢複二極管、軟恢複二極管.
電解電容、場效應(yīng)管、消特基、高頻無感電容.快速熔斷器.等等!!!
如:美國 日本 德國 英國 西班牙 瑞士等國際知名品牌
◆◆◆熱忱歡迎業(yè)界人士來電來函垂詢!!!◆◆◆
◆國際現(xiàn)貨供應(yīng)商==來自原廠的品質(zhì)==出售一流的服務(wù)◆
聯(lián)繫人:周先生
手機(jī):137-1410-2508
電話:(86)-0755-88 364656
地址:深圳市羅湖區(qū)嘉賓路彭年酒店旁東佳大廈17樓
◆◆◆網(wǎng)絡(luò)聯(lián)繫方式◆◆◆
QQ:173943820
MSN:sz-lima@hotmail.com
E-mail:limapower@21cn.com
Http:www.lima-power.com.sg
0
回復(fù)
@da2007
暈,多少位還不是一樣的!
LIST p=16f877
INCLUDE p16f877.inc
ACCALO EQU 20 ;存放乘數(shù)低8位
ACCAHI EQU 21 ;存放乘數(shù)高8位
ACCBLO EQU 23 ;存放被乘數(shù)低8位和乘積第16~23位
ACCBHI EQU 24 ;存放被乘數(shù)高8位和乘積第24~31位
ACCCLO EQU 26 ;存放乘積低8位
ACCCHI EQU 27 ;存放乘積高8位
ACCDLO EQU 28 ;臨時寄存器
ACCDHI EQU 29 ;臨時寄存器
TEMP EQU 2A ;臨時寄存器
SIGN EQU 2B ;存放乘積的符號
ORG 0X0000
START GOTO MAIN
;***16×16位乘法子程序,入口地址ACCB×ACCA,出口地址ACCB和ACCC ***
ORG 0X0100
D_mpy CALL S_SIGN ;求取乘積的符號,并對負(fù)數(shù)取補(bǔ)
CALL SETUP ;調(diào)用子程序,將ACCB的值送ACCD
INCF TEMP
CLRF ACCCHI ;清ACCC
CLRF ACCCLO
MLOOP BCF STATUS,C ;清進(jìn)位位
RRF ACCDHI ;ACCD右移
RRF ACCDLO
BTFSC STATUS,C ;判斷是否需要相加
CALL D_add ;加乘數(shù)至ACCB,見加法程序
BCF STATUS,C ;清進(jìn)位位
RRF ACCBHI ;右移部分乘積
RRF ACCBLO
RRF ACCCHI
RRF ACCCLO
DECFSZ TEMP ;乘法完成否?
GOTO MLOOP ;否,繼續(xù)求乘積
BTFSS SIGN,7 ;是,確定乘積的符號
GOTO OVER ;為正,乘法結(jié)束
COMF ACCCLO ;為負(fù),乘積取補(bǔ)
INCF ACCCLO
BTFSC STATUS,Z
DECF ACCCHI
COMF ACCCHI
BTFSC STATUS,Z
NEG_B DECF ACCBLO ;
COMF ACCBLO
BTFSC STATUS,Z
DECF ACCBHI
COMF ACCBHI
OVER RETURN ;子程序返回
;****************************************
SETUP MOVLW .15 ;初始化TEMP寄存器
MOVWF TEMP
MOVF ACCBHI,0 ;ACCB送ACCD
MOVWF ACCDHI
MOVF ACCBLO,0
MOVWF ACCDLO
CLRF ACCBHI ;清ACCB
CLRF ACCBLO
RETURN ;子程序返回
;*******乘法運算確定結(jié)果符號判斷子程序******
S_SIGN MOVF ACCAHI,0 ;ACCAHI異或ACCBHI,結(jié)果送SIGN單元
XORWF ACCBHI,0
MOVWF SIGN
BTFSS ACCBHI,7 ;ACCB為負(fù)嗎?
GOTO CHEK_A ;否,檢查ACCA
CALL NEG_B ;是,求取ACCB絕對值
CHEK_A BTFSC ACCAHI,7 ;ACCA為負(fù)嗎?
CALL NEG_A ;ACCA為負(fù),求取ACCA絕對值,
;見雙字節(jié)加法程序
RETURN ;ACCA和ACCB均為正,返回
幫幫分析一下該程序是采用什么數(shù)學(xué)公式計算的,謝謝了
INCLUDE p16f877.inc
ACCALO EQU 20 ;存放乘數(shù)低8位
ACCAHI EQU 21 ;存放乘數(shù)高8位
ACCBLO EQU 23 ;存放被乘數(shù)低8位和乘積第16~23位
ACCBHI EQU 24 ;存放被乘數(shù)高8位和乘積第24~31位
ACCCLO EQU 26 ;存放乘積低8位
ACCCHI EQU 27 ;存放乘積高8位
ACCDLO EQU 28 ;臨時寄存器
ACCDHI EQU 29 ;臨時寄存器
TEMP EQU 2A ;臨時寄存器
SIGN EQU 2B ;存放乘積的符號
ORG 0X0000
START GOTO MAIN
;***16×16位乘法子程序,入口地址ACCB×ACCA,出口地址ACCB和ACCC ***
ORG 0X0100
D_mpy CALL S_SIGN ;求取乘積的符號,并對負(fù)數(shù)取補(bǔ)
CALL SETUP ;調(diào)用子程序,將ACCB的值送ACCD
INCF TEMP
CLRF ACCCHI ;清ACCC
CLRF ACCCLO
MLOOP BCF STATUS,C ;清進(jìn)位位
RRF ACCDHI ;ACCD右移
RRF ACCDLO
BTFSC STATUS,C ;判斷是否需要相加
CALL D_add ;加乘數(shù)至ACCB,見加法程序
BCF STATUS,C ;清進(jìn)位位
RRF ACCBHI ;右移部分乘積
RRF ACCBLO
RRF ACCCHI
RRF ACCCLO
DECFSZ TEMP ;乘法完成否?
GOTO MLOOP ;否,繼續(xù)求乘積
BTFSS SIGN,7 ;是,確定乘積的符號
GOTO OVER ;為正,乘法結(jié)束
COMF ACCCLO ;為負(fù),乘積取補(bǔ)
INCF ACCCLO
BTFSC STATUS,Z
DECF ACCCHI
COMF ACCCHI
BTFSC STATUS,Z
NEG_B DECF ACCBLO ;
COMF ACCBLO
BTFSC STATUS,Z
DECF ACCBHI
COMF ACCBHI
OVER RETURN ;子程序返回
;****************************************
SETUP MOVLW .15 ;初始化TEMP寄存器
MOVWF TEMP
MOVF ACCBHI,0 ;ACCB送ACCD
MOVWF ACCDHI
MOVF ACCBLO,0
MOVWF ACCDLO
CLRF ACCBHI ;清ACCB
CLRF ACCBLO
RETURN ;子程序返回
;*******乘法運算確定結(jié)果符號判斷子程序******
S_SIGN MOVF ACCAHI,0 ;ACCAHI異或ACCBHI,結(jié)果送SIGN單元
XORWF ACCBHI,0
MOVWF SIGN
BTFSS ACCBHI,7 ;ACCB為負(fù)嗎?
GOTO CHEK_A ;否,檢查ACCA
CALL NEG_B ;是,求取ACCB絕對值
CHEK_A BTFSC ACCAHI,7 ;ACCA為負(fù)嗎?
CALL NEG_A ;ACCA為負(fù),求取ACCA絕對值,
;見雙字節(jié)加法程序
RETURN ;ACCA和ACCB均為正,返回
幫幫分析一下該程序是采用什么數(shù)學(xué)公式計算的,謝謝了
0
回復(fù)
@andrew.yang
呵呵,所有都是一樣的啦,有興趣聯(lián)系我一下,共同進(jìn)步啊QQ178843781/MSN:SHZHYZL@HOTMAIL.COM/FLY_MAN100@163.COM
高手好,我有一個問題,我用的是PIC16F690,我們做的是電子鎮(zhèn)流器,用單片機(jī)和485通訊,我把接收放在中斷里了,可是當(dāng)我一個數(shù)一個數(shù)的發(fā)時,接收是沒問題的,當(dāng)我一下發(fā)一串?dāng)?shù)時就不好用了
;**************************************************************
;** 中斷服務(wù)子程序 **
; *************************************************************
ORG 010H
INTERRUPT:
;------------軟件現(xiàn)場保護(hù)和恢復(fù)-----
MOVWF W_TEMP ;1 暫存累加器 W,不影響STATUS的值
SWAPF STATUS,0 ;1 (用SWAPF才不會影響STATUS的值)
MOVWF STATUS_TEMP ;1 暫存狀態(tài)寄存器 WTATUS
MOVF PCLATH,0 ;1
MOVWF PCLATH_TEMP ;1 暫存程序指針寄存器高位 PCLATH
; ------------------------------------------------------------------------------------------------------------
BCF STATUS,RP1 ; 此語句必需!!
BCF STATUS,RP0 ; 1 BANK0
bcf STATUS,IRP
BTFSS PIR1,RCIF
GOTO TM0_INT
BTFSC RCV_SIGN,1
GOTO RECEIVE
MOVF RCREG,0
SUBLW 55H
BTFSS STATUS,Z
GOTO TIM_CHN_OVER
BSF RCV_SIGN,1 ;;;;置1表示數(shù)據(jù)頭對,可以繼續(xù)接收
MOVLW RCV_BUF
MOVWF FSR
CLRF RCV_CNT
GOTO TIM_CHN_OVER
RECEIVE:
BTFSC RCSTA,OERR
GOTO YICHU
MOVF RCREG,0
MOVWF INDF
INCF FSR
INCF RCV_CNT
MOVF RCV_CNT,0
SUBLW 09H ;L-RCV_CNT,L>RCV_CNT C=1;L<=RCV_CNT C=0;;;;09H 是接收10個數(shù)
BTFSS STATUS,C ;rcv_cnt<=10跳轉(zhuǎn)
GOTO RCV_NT2 ;rcv_cnt>10,不再接收
RCSTA,CREN;;;;;;;;;;;;;;;;;;;;;;關(guān)接受
;BSF RCV_SIGN,6 ;;;;;;;;;;;;;;;;;;;;;;;置1表示接收數(shù)據(jù)超時.
GOTO TIM_CHN_OVER
YICHU:
BCF RCSTA,CREN
CLRF RCV_SIGN
MOVF RCREG,0
MOVF RCREG,0
BSF RCSTA,CREN
GOTO TIM_CHN_OVER
RCV_NT2:
BCF RCSTA,CREN ;;;;;;;;;;;;;;;;;;;;;;;;;關(guān)接受
BSF RCV_SIGN,5 ;;;;;;;;;;;;;;;;;;;;接收數(shù)據(jù)成功.
GOTO TIM_CHN_OVER
;*******************************************************************************
TM0_INT:
BTFSS INTCON,T0IF
GOTO TIM_CHN_OVER
CLOCK:
;----- 長延時-TIMER0 --------------------------
; BCF STATUS,RP0 ; 1 BANK0
BCF INTCON,T0IF ; 清Timer0 溢出中斷標(biāo)志,允許下次進(jìn)入中斷
;INCFSZ TIMER0L,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;1107
MOVF TIMER0L,0 ; (TIMER0L+1)計時
ADDLW 1H ;
MOVWF TIMER0L
BTFSS STATUS,C
GOTO ADD1
MOVF TIMER0H,0 ; (TIMER0H+1)計時
ADDLW 1H
MOVWF TIMER0H
;INCF TIMER0H,1
;---- 調(diào)光計時器 TIMER1、TIMER2L計時,這里采用3個字節(jié)---------
ADD1:
;INCFSZ TIMER1L,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;1107
MOVF TIMER1L,0
ADDLW 1H
MOVWF TIMER1L
BTFSS STATUS,C
GOTO TIAOGUANG
;INCFSZ TIMER1H,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;1107
MOVF TIMER1H,0
ADDLW 1H
MOVWF TIMER1H
BTFSS STATUS,C
GOTO TIAOGUANG
ADD2:
MOVF TIMER2L,0
SUBLW 0FBH ; 防止調(diào)光計時器溢出,計時時間已經(jīng)足夠長
BTFSS STATUS,C
GOTO TIM_CHN_OVER
;INCF TIMER2L,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1107
MOVF TIMER2L,0
ADDLW 1H
MOVWF TIMER2L
;----- 調(diào)光控制 ----------------
TIAOGUANG:
CLRWDT
STAGE3:
MOVF TIMER2L,0
ADDLW 01H
SUBWF SEC_STAGE_TIME,0 ; 10小時,切換到第三階段,10小時 = 10*3600*1000/13.1072 = 29E8D6H
; 10分鐘,切換到第三階段,10分鐘 = 10*60*1000/13.1072 = B16DH
BTFSC STATUS,C
GOTO STAGE2
MOVF TIMER1H,0
ADDLW 01H
SUBWF SEC_STAGE_TIME+1,0
BTFSC STATUS,C
GOTO STAGE2
MOVF TIMER1L,0
ADDLW 01H
SUBWF SEC_STAGE_TIME+2,0
BTFSC STATUS,C
GOTO STAGE2
MOVF PERCENT_POWER+1,0 ;
MOVWF P_REF ; 第三階段功率設(shè)定值;**bus_i_set ;;;;;55H對應(yīng)150W ;;8AH對應(yīng)250W
GOTO TIM_CHN_OVER
STAGE2:
MOVF TIMER2L,0
ADDLW 01H
SUBWF FIR_STAGE_TIME,0 ; 5小時,切換到第二階段,5小時 = 5*3600*1000/13.1072 = 14F46BH
; 5分鐘,切換到第二階段,5分鐘 = 5*60*1000/13.1072 = 58B6H
; 5.5小時,切換到第二階段,5.5小時 = 5.5*3600*1000/13.1072 = 170CDCH
BTFSC STATUS,C
GOTO TIM_CHN_OVER
MOVF TIMER1H,0
ADDLW 01H
SUBWF FIR_STAGE_TIME+1,0
BTFSC STATUS,C
GOTO TIM_CHN_OVER
MOVF TIMER1L,0
ADDLW 01H
SUBWF FIR_STAGE_TIME+2,0
BTFSC STATUS,C
GOTO TIM_CHN_OVER
MOVF PERCENT_POWER,0
MOVWF P_REF ; 第二階段功率設(shè)定值;**bus_i_set ;;;;;73H對應(yīng)210W
GOTO TIM_CHN_OVER
;-----恢復(fù)中斷現(xiàn)場---------------------------
TIM_CHN_OVER:
CLRWDT ;1
MOVF PCLATH_TEMP,0 ;1
MOVWF PCLATH ;1 恢復(fù)程序指針寄存器高位 PCLATH
SWAPF STATUS_TEMP,0 ;1 (用SWAPF才不會影響STATUS的值)
MOVWF STATUS ;1 恢復(fù)狀態(tài)寄存器 WTATUS
SWAPF W_TEMP,1 ;1
SWAPF W_TEMP,0 ;1 restore pre-isr W register contents
RETFIE ;2 中斷返回
;**************************************************************
;** 中斷服務(wù)子程序 **
; *************************************************************
ORG 010H
INTERRUPT:
;------------軟件現(xiàn)場保護(hù)和恢復(fù)-----
MOVWF W_TEMP ;1 暫存累加器 W,不影響STATUS的值
SWAPF STATUS,0 ;1 (用SWAPF才不會影響STATUS的值)
MOVWF STATUS_TEMP ;1 暫存狀態(tài)寄存器 WTATUS
MOVF PCLATH,0 ;1
MOVWF PCLATH_TEMP ;1 暫存程序指針寄存器高位 PCLATH
; ------------------------------------------------------------------------------------------------------------
BCF STATUS,RP1 ; 此語句必需!!
BCF STATUS,RP0 ; 1 BANK0
bcf STATUS,IRP
BTFSS PIR1,RCIF
GOTO TM0_INT
BTFSC RCV_SIGN,1
GOTO RECEIVE
MOVF RCREG,0
SUBLW 55H
BTFSS STATUS,Z
GOTO TIM_CHN_OVER
BSF RCV_SIGN,1 ;;;;置1表示數(shù)據(jù)頭對,可以繼續(xù)接收
MOVLW RCV_BUF
MOVWF FSR
CLRF RCV_CNT
GOTO TIM_CHN_OVER
RECEIVE:
BTFSC RCSTA,OERR
GOTO YICHU
MOVF RCREG,0
MOVWF INDF
INCF FSR
INCF RCV_CNT
MOVF RCV_CNT,0
SUBLW 09H ;L-RCV_CNT,L>RCV_CNT C=1;L<=RCV_CNT C=0;;;;09H 是接收10個數(shù)
BTFSS STATUS,C ;rcv_cnt<=10跳轉(zhuǎn)
GOTO RCV_NT2 ;rcv_cnt>10,不再接收
RCSTA,CREN;;;;;;;;;;;;;;;;;;;;;;關(guān)接受
;BSF RCV_SIGN,6 ;;;;;;;;;;;;;;;;;;;;;;;置1表示接收數(shù)據(jù)超時.
GOTO TIM_CHN_OVER
YICHU:
BCF RCSTA,CREN
CLRF RCV_SIGN
MOVF RCREG,0
MOVF RCREG,0
BSF RCSTA,CREN
GOTO TIM_CHN_OVER
RCV_NT2:
BCF RCSTA,CREN ;;;;;;;;;;;;;;;;;;;;;;;;;關(guān)接受
BSF RCV_SIGN,5 ;;;;;;;;;;;;;;;;;;;;接收數(shù)據(jù)成功.
GOTO TIM_CHN_OVER
;*******************************************************************************
TM0_INT:
BTFSS INTCON,T0IF
GOTO TIM_CHN_OVER
CLOCK:
;----- 長延時-TIMER0 --------------------------
; BCF STATUS,RP0 ; 1 BANK0
BCF INTCON,T0IF ; 清Timer0 溢出中斷標(biāo)志,允許下次進(jìn)入中斷
;INCFSZ TIMER0L,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;1107
MOVF TIMER0L,0 ; (TIMER0L+1)計時
ADDLW 1H ;
MOVWF TIMER0L
BTFSS STATUS,C
GOTO ADD1
MOVF TIMER0H,0 ; (TIMER0H+1)計時
ADDLW 1H
MOVWF TIMER0H
;INCF TIMER0H,1
;---- 調(diào)光計時器 TIMER1、TIMER2L計時,這里采用3個字節(jié)---------
ADD1:
;INCFSZ TIMER1L,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;1107
MOVF TIMER1L,0
ADDLW 1H
MOVWF TIMER1L
BTFSS STATUS,C
GOTO TIAOGUANG
;INCFSZ TIMER1H,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;1107
MOVF TIMER1H,0
ADDLW 1H
MOVWF TIMER1H
BTFSS STATUS,C
GOTO TIAOGUANG
ADD2:
MOVF TIMER2L,0
SUBLW 0FBH ; 防止調(diào)光計時器溢出,計時時間已經(jīng)足夠長
BTFSS STATUS,C
GOTO TIM_CHN_OVER
;INCF TIMER2L,1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1107
MOVF TIMER2L,0
ADDLW 1H
MOVWF TIMER2L
;----- 調(diào)光控制 ----------------
TIAOGUANG:
CLRWDT
STAGE3:
MOVF TIMER2L,0
ADDLW 01H
SUBWF SEC_STAGE_TIME,0 ; 10小時,切換到第三階段,10小時 = 10*3600*1000/13.1072 = 29E8D6H
; 10分鐘,切換到第三階段,10分鐘 = 10*60*1000/13.1072 = B16DH
BTFSC STATUS,C
GOTO STAGE2
MOVF TIMER1H,0
ADDLW 01H
SUBWF SEC_STAGE_TIME+1,0
BTFSC STATUS,C
GOTO STAGE2
MOVF TIMER1L,0
ADDLW 01H
SUBWF SEC_STAGE_TIME+2,0
BTFSC STATUS,C
GOTO STAGE2
MOVF PERCENT_POWER+1,0 ;
MOVWF P_REF ; 第三階段功率設(shè)定值;**bus_i_set ;;;;;55H對應(yīng)150W ;;8AH對應(yīng)250W
GOTO TIM_CHN_OVER
STAGE2:
MOVF TIMER2L,0
ADDLW 01H
SUBWF FIR_STAGE_TIME,0 ; 5小時,切換到第二階段,5小時 = 5*3600*1000/13.1072 = 14F46BH
; 5分鐘,切換到第二階段,5分鐘 = 5*60*1000/13.1072 = 58B6H
; 5.5小時,切換到第二階段,5.5小時 = 5.5*3600*1000/13.1072 = 170CDCH
BTFSC STATUS,C
GOTO TIM_CHN_OVER
MOVF TIMER1H,0
ADDLW 01H
SUBWF FIR_STAGE_TIME+1,0
BTFSC STATUS,C
GOTO TIM_CHN_OVER
MOVF TIMER1L,0
ADDLW 01H
SUBWF FIR_STAGE_TIME+2,0
BTFSC STATUS,C
GOTO TIM_CHN_OVER
MOVF PERCENT_POWER,0
MOVWF P_REF ; 第二階段功率設(shè)定值;**bus_i_set ;;;;;73H對應(yīng)210W
GOTO TIM_CHN_OVER
;-----恢復(fù)中斷現(xiàn)場---------------------------
TIM_CHN_OVER:
CLRWDT ;1
MOVF PCLATH_TEMP,0 ;1
MOVWF PCLATH ;1 恢復(fù)程序指針寄存器高位 PCLATH
SWAPF STATUS_TEMP,0 ;1 (用SWAPF才不會影響STATUS的值)
MOVWF STATUS ;1 恢復(fù)狀態(tài)寄存器 WTATUS
SWAPF W_TEMP,1 ;1
SWAPF W_TEMP,0 ;1 restore pre-isr W register contents
RETFIE ;2 中斷返回
0
回復(fù)
@吳增賢
高手好,我有一個問題,我用的是PIC16F690,我們做的是電子鎮(zhèn)流器,用單片機(jī)和485通訊,我把接收放在中斷里了,可是當(dāng)我一個數(shù)一個數(shù)的發(fā)時,接收是沒問題的,當(dāng)我一下發(fā)一串?dāng)?shù)時就不好用了;**************************************************************;** 中斷服務(wù)子程序 **;*************************************************************ORG010HINTERRUPT:;------------軟件現(xiàn)場保護(hù)和恢復(fù)-----MOVWFW_TEMP;1暫存累加器W,不影響STATUS的值SWAPFSTATUS,0;1(用SWAPF才不會影響STATUS的值)MOVWFSTATUS_TEMP;1暫存狀態(tài)寄存器WTATUSMOVFPCLATH,0;1MOVWFPCLATH_TEMP;1暫存程序指針寄存器高位PCLATH;------------------------------------------------------------------------------------------------------------BCFSTATUS,RP1;此語句必需!!BCFSTATUS,RP0 ;1BANK0bcfSTATUS,IRPBTFSSPIR1,RCIFGOTOTM0_INTBTFSCRCV_SIGN,1GOTORECEIVEMOVFRCREG,0SUBLW55HBTFSSSTATUS,ZGOTOTIM_CHN_OVERBSFRCV_SIGN,1 ;;;;置1表示數(shù)據(jù)頭對,可以繼續(xù)接收MOVLWRCV_BUFMOVWFFSRCLRFRCV_CNTGOTOTIM_CHN_OVERRECEIVE:BTFSCRCSTA,OERRGOTOYICHUMOVFRCREG,0MOVWFINDFINCFFSRINCFRCV_CNTMOVFRCV_CNT,0SUBLW09H;L-RCV_CNT,L>RCV_CNTC=1;L
用個串口調(diào)試工具什么的,抓串?dāng)?shù)據(jù)看看,是不是波特率沒設(shè)好
0
回復(fù)