⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auto10.asm

📁 应用于电力控制领域的基于PIC单片机的原代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;******************************************************************************
;    Filename:  zhuhainobel                                                   *
;    Date:   2004.10.06                                                       *
;    File Version:  1.001                                                     *
;                                                                             *
;    Author:zhanghuirong                                                      *
;    Company:nobel                                                            *
;                                                                             *
;******************************************************************************
;                                                                             *
	LIST P=18F6720, F=INHX32 ;directive to define processor and file format
	#include <P18F6720.INC>	 ;processor specific variable definitions
;******************************************************************************
TABLADDR     EQU     04000H
BUF0         EQU     0D0H

REG_TEMP     EQU     70H	;variable used for context saving
STATUS_TEMP  EQU     71H	;variable used for context saving
BSR_TEMP     EQU     72H	;variable used for context saving
BWREG        EQU     73H	;variable used for context saving
BSTATUS      EQU     74H	;variable used for context saving
BBSR         EQU     75H	;variable used for context saving
WREG_TEMP    EQU     76H
R0_TEMP      EQU     77H
R1_TEMP      EQU     78H
R2_TEMP      EQU     79H
H_BYTT       EQU     7AH
L_BYTT       EQU     7BH
TEMPT        EQU     7CH
COUNTT       EQU     7DH
FSR0LT       EQU     7EH
FSR0HT       EQU     7FH

FAG0         EQU     00H
;FAG0.0      USE     BUT1
;FAG0.1      USE     BUT2
;FAG0.2      USE     BUT3
;FAG0.3      USE     BUT4
;FAG0.4      USE     SETB
;FAG0.5      USE     ON_OFF
;FAG0.6      USE     0.25ms
;FAG0,7      USE     SET TIME

FAG1        EQU     01H
;FAG1,0      USE     FALUT,I PASS,TEMPH.
;FAG1,1      USE     OVER CURRENT
;FAG1,2      USE     I<10%Imax
;FAG1,3      USE     I<10%Imax,time over 30minute
;FAG1,4      USE     I>=10%Imax
;FAG1,5      USE     I>=10%Imax,time over 30minute
COUNT3       EQU     02H
COUNT4       EQU     03H

FUN          EQU     04H;8632944
FMS          EQU     05H;83308246
;FMS,0       USE
;FMS,1       USE
;FMS,2       USE
;FMS,3       USE
;FMS,4       USE     ;Communation Start
;FMS,5       USE
;FMS,6       USE     ; send 55h after
;FMS,7       USE     ;RECEIVE RIGHT DATA
FMK          EQU     06H
FMK1         EQU     07H
LIMIT        EQU     08H
DELT         EQU     09H
RPT          EQU     0AH
;ADRL        EQU     0BH  MIN4
;ADRH        EQU     0CH  TIME4

FLAG2        EQU     0EH
;FLAG2,0      USE     1
;FLAG2,1      USE     2
;FLAG2,2      USE     3

;FLAG2,4      USE     save 1
;FLAG2,5      USE     save 2
;FLAG2,6      USE     save 3

FLAG3        EQU     0FH
;FLAG3,0     USE     TURN OFF  DISPLAY
;FLAG3,1     USE     1S

VEIL         EQU     10H
VEIH         EQU     11H
LONL         EQU     12H
LONH         EQU     13H
RBUF         EQU     14H
DANG         EQU     15H
FOURB        EQU     16H
R4           EQU     17H
R5           EQU     18H
R3           EQU     19H
DELMIN       EQU     1AH
DEL20        EQU     1BH
DEL21        EQU     1CH
DIS1         EQU     20H        ;display  low  bit
DIS2         EQU     21H        ;
DIS3         EQU     22H        ;
DIS4         EQU     23H        ;
DIS5         EQU     24H        ;
DIS6         EQU     25H        ;
DIS7         EQU     26H        ;
DIS8         EQU     27H        ;display  high  bit
COUNT1       EQU     28H        ;dely  counter 1
COUNT2       EQU     29H        ;dely  counter
DISBUF       EQU     2AH
DISID        EQU     2BH
SET04        EQU     2CH
SET03        EQU     2DH
SET02        EQU     2EH
SET01        EQU     2FH
TURN0        EQU     30H
TURN1        EQU     31H
TURN2        EQU     32H
NFBUF1       EQU     33H
WRDA         EQU     34H
ADRS         EQU     35H
WRL          EQU     36H
RGA          EQU     37H
RGB          EQU     38H
COUNT        EQU     39H
NFBUF2       EQU     3AH
NFBUF3       EQU     3BH
NFBUF4       EQU     3CH

YEARH        EQU     40H
YEARL        EQU     41H
MONTH        EQU     42H
DAY          EQU     43H
TIME0        EQU     44H
MIN0         EQU     45H
TIME1        EQU     46H
MIN1         EQU     47H
TIME2        EQU     48H
MIN2         EQU     49H
TIME3        EQU     4AH
MIN3         EQU     4BH
TIME4        EQU     4CH
MIN4         EQU     4DH
ARMC010      EQU     4EH

ARMC011      EQU     ARMC010+4
HUANG        EQU     ARMC011+3
EEROMH       EQU     HUANG+8
EEROML       EQU     EEROMH+1
EEVAL        EQU     EEROML+1
GENR1        EQU     EEVAL+1
ADRES58      EQU     GENR1+1
DAFR581      EQU     ADRES58+1
DAFR582      EQU     DAFR581+1
DAFR583      EQU     DAFR582+1
RES0         EQU     DAFR583+1
RES1         EQU     RES0+1
RES2         EQU     RES1+1
RES3         EQU     RES2+1    
ARG1L        EQU     RES3+1      ;K1
ARG1H        EQU     ARG1L+1     ;K2
ARG2L        EQU     ARG1H+1
ARG2H        EQU     ARG2L+1
DCOUNT       EQU     ARG2H+1                      

UAL          EQU   80H  
UAH          EQU   UAL +1
UBL          EQU   UAH +1
UBH          EQU   UBL +1
UCL          EQU   UBH +1
UCH          EQU   UCL +1
IAL          EQU   UCH +1
IAH          EQU   IAL +1
IBL          EQU   IAH +1
IBH          EQU   IBL +1
ICL          EQU   IBH +1
ICH          EQU   ICL +1

BUA          EQU   ICH+1
BUB          EQU   BUA+3
BUC          EQU   BUB+3
BIA          EQU   BUC+3
BIB          EQU   BIA+3
BIC          EQU   BIB+3
BTIME        EQU   BIC+3 
BUAL         EQU   BTIME+1
BUAH         EQU   BUAL +1
BUBL         EQU   BUAH +1
BUBH         EQU   BUBL +1
BUCL         EQU   BUBH +1
BUCH         EQU   BUCL +1
BIAL         EQU   BUCH +1
BIAH         EQU   BIAL +1
BIBL         EQU   BIAH +1
BIBH         EQU   BIBL +1
BICL         EQU   BIBH +1
BICH         EQU   BICL +1
NB           EQU   BICH +1
H_BYTE       EQU   NB+1
L_BYTE       EQU   H_BYTE+1
R0           EQU   L_BYTE+1
R1           EQU   R0+1    
R2           EQU   R1+1    
TEMP         EQU   R2+1    
STIME        EQU   TEMP+1        
RB23         EQU   STIME+3 
STTIME       EQU   RB23+3                 
;******************************************************************************
	SCL1    EQU        3
	SDA1    EQU        4

	#DEFINE  ADDOUT  PORTA,0
	#DEFINE  ADSCLK  LATA,1
	#DEFINE  ADDIN   LATA,2
	#DEFINE  ADCS    LATA,3
	

	#DEFINE  LED7    LATD,7
	#DEFINE  LED6    LATD,6
	#DEFINE  LED5    LATD,5
	#DEFINE  LED4    LATD,4
	#DEFINE  LED3    LATD,3
	#DEFINE  LED2    LATD,2
	#DEFINE  LED1    LATD,1
	#DEFINE  LED0    LATD,0

	#DEFINE  KEY4    PORTB,1
	#DEFINE  KEY3    PORTB,2
	#DEFINE  KEY2    PORTB,3
	#DEFINE  KEY1    PORTB,4

	#DEFINE  BZ      LATB,0
	#DEFINE  WDOG    LATC,2
;   #DEFINE  SCL1    LATC,3
;	#DEFINE  SDA1    LATC,4
        #DEFINE  CTRL     LATC,5
	    #DEFINE  TXD     LATC,6
	    #DEFINE  RXD     LATC,7
	
        #DEFINE  KLED1   LATE,0
        #DEFINE  KLED2   LATE,1
        #DEFINE  KLED3   LATE,2
        #DEFINE  KLED4   LATE,3
        #DEFINE  KLED5   LATE,4
        #DEFINE  KLED6   LATE,5
   
        #DEFINE  DG0     LATG,0
        #DEFINE  DG1     LATG,3
        #DEFINE  DG2     LATG,4
        
        #DEFINE  TEMP_H  PORTG,2

	    org    0x0000
        goto    Main		;go to start of main code
;************************************************************************
;High priority interrupt vector
; This code will start executing when a high priority interrupt occurs or
; when any interrupt occurs if interrupt priorities are not enabled.
;************************************************************************
            org 	0x0008
	    bra	        HighInt		;go to high priority interrupt routine
;************************************************************************
;Low priority interrupt vector
; This code will start executing when a low priority interrupt occurs.
; This code can be removed if low priority interrupts are not used.
             org	0x0018
             bra 	LowInt	       	;go to low priority interrupt routine
;******************************************************************************
;Low priority interrupt routine
; The low priority interrupt code is placed here.
; This code can be removed if low priority interrupts are not used.
LowInt:
	movff	STATUS,STATUS_TEMP	;save STATUS register
	movff	WREG,WREG_TEMP		;save working register
	movff	BSR,BSR_TEMP		;save BSR register
    NOP
	NOP
	movff	BSR_TEMP,BSR		;restore BSR register
	movff	WREG_TEMP,WREG		;restore working register
	movff	STATUS_TEMP,STATUS	;restore STATUS register
	retfie

;**********************************************************************
HighInt:
	BTFSS  PIR2, TMR3IF
   	GOTO   INTTIM0

	MOVFF	STATUS,BSTATUS  	;save STATUS register
	MOVFF	WREG,BWREG  		;save working register
	MOVFF	BSR,BBSR
	
	BCF    PIR2,TMR3IF
	MOVLW  47H                      ;
	MOVFF  WREG, TMR3L              ;
	MOVLW  0F4H                     ; Timers 0.1 ms
	MOVFF  WREG, TMR3H              ;

DISPLAY0:
       MOVF    COUNT1,W
       SUBLW   0
       BTFSS   STATUS,Z
       GOTO    DISPLAY1
       INCF    COUNT1,F
       MOVFF    DIS1,WREG
       ADDWF    DIS1,0
       MOVFF    WREG, DISBUF     ;disp low bit
       CALL     LEDTABLE
       BSF      DG0
       BSF      DG1
       BSF      DG2              ;disp 1 bit
       GOTO     DISPLAY8
DISPLAY1:
        MOVF    COUNT1,W
        SUBLW   1
    	BTFSS   STATUS,Z
        GOTO    DISPLAY2
	    INCF    COUNT1,F
	    MOVFF    DIS2,WREG
	    ADDWF    DIS2,0
	    MOVFF    WREG, DISBUF
	    CALL     LEDTABLE         ;disp 2 bit
	    BCF      DG0
        GOTO     DISPLAY8
DISPLAY2:
        MOVF     COUNT1,W
        SUBLW    2
        BTFSS    STATUS,Z
	    GOTO     DISPLAY3
        INCF     COUNT1,F 
	    MOVFF    DIS3,WREG
	    ADDWF    DIS3,0
	    MOVFF    WREG, DISBUF
	    CALL     LEDTABLE        ;disp 3 bit
	    BSF      DG0
	    BCF      DG1
        GOTO     DISPLAY8
DISPLAY3:
	    MOVF     COUNT1,W
        SUBLW    3
        BTFSS    STATUS,Z
        GOTO     DISPLAY4
        INCF     COUNT1,F 
	    MOVFF    DIS4,WREG
	    ADDWF    DIS4,0
	    MOVFF    WREG, DISBUF
	    CALL     LEDTABLE         ;disp 4 bit
	    BCF      DG0
	    GOTO     DISPLAY8
DISPLAY4:
        MOVF     COUNT1,W
        SUBLW    4
        BTFSS    STATUS,Z
        GOTO     DISPLAY5
        INCF     COUNT1,F 
	    MOVFF    DIS5,WREG
	    ADDWF    DIS5,0
	    MOVFF    WREG, DISBUF
	    CALL     LEDTABLE         ;disp 5 bit
	    BCF      DG2
	    BSF      DG0
	    BSF      DG1
        GOTO     DISPLAY8
DISPLAY5:
        MOVF     COUNT1,W
        SUBLW    5
        BTFSS    STATUS,Z
        GOTO     DISPLAY6   	  
	    INCF     COUNT1,F
  	    MOVFF    DIS6,WREG
	    ADDWF    DIS6,0
	    MOVFF    WREG, DISBUF
	    CALL     LEDTABLE         ;disp 6 bit
	    BCF      DG0
        GOTO     DISPLAY8
DISPLAY6:
        MOVF     COUNT1,W
	    SUBLW    6
	    BTFSS    STATUS,Z
        GOTO     DISPLAY7
        INCF     COUNT1,F 
	    MOVFF    DIS7,WREG
	    ADDWF    DIS7,0
	    MOVFF    WREG, DISBUF
	    CALL     LEDTABLE
	    BSF      DG0
	    BCF      DG1
        GOTO     DISPLAY8
DISPLAY7:
        MOVF     COUNT1,W
        SUBLW    7
        BTFSS    STATUS,Z
        GOTO     DISPLAY8 
        MOVLW    0
        MOVWF    COUNT1
	    MOVFF    DIS8,WREG
	    ADDWF    DIS8,0
	    MOVFF    WREG, DISBUF
	    CALL     LEDTABLE
	    BCF      DG0
DISPLAY8:
	    INCF     TURN0,F
	    MOVF     TURN0,W
	    SUBLW    D'250'
	    BTFSS    STATUS,Z
	    GOTO     DTURND
	    MOVLW    0H
	    MOVWF    TURN0     ;0.25S
	    BSF      FAG0,6    ;  1s

	    INCF     FOURB,F
	    MOVF     FOURB,W
	    SUBLW    D'4'
	    BTFSS    STATUS,Z
	    GOTO     DTURND
	    MOVLW    0H
	    MOVWF    FOURB
	    BSF      FLAG3,1    ;  1s

;	    BTFSC   FLAG3,0
;	    GOTO    DTURN88
;	    BTFSC   FAG0,4
;	    GOTO    DTURN2

;	    INCF    TURN1,F
;	    MOVF    TURN1,W
;	    SUBLW   D'10'         ;10S
;	    BTFSS   STATUS,Z
;	    GOTO    DTURND
;	    MOVLW   0H
;	    MOVWF   TURN1

;	    MOVF    DISID,W
;	    SUBLW   0CH
;	    BTFSS   STATUS,Z
;	    GOTO    DTURN1
;	    MOVLW   00H
;	    MOVWF   DISID
;	    GOTO    DTURN11
;DTURN1:
;	    INCF    DISID,F
;DTURN11:
;	    INCF    STTIME,F
;	    MOVF    STTIME,W
;	    SUBLW   D'60'         ;10S*60/60=10MIN
;	    BTFSS   STATUS,Z
;	    GOTO    DTURND
;       BCF     FAG0,4
;	    BSF     FLAG3,0
;	    MOVLW   1
;	    MOVWF   STTIME

	    INCF    DELMIN,F
	    MOVF    DELMIN,W
	    SUBLW   D'60'
	    BTFSS   STATUS,Z
	    GOTO    DTURND
	    MOVLW   0H
	    MOVWF   DELMIN     ; 1 MIN

        BTFSS   FAG1,2
        GOTO    DETWO
         
	    INCF    DEL20,F
	    MOVF    DEL20,W
	    SUBLW   D'10'
	    BTFSS   STATUS,Z
	    GOTO    DETWO
	    MOVLW   0H
	    MOVWF   DEL20     ; 10 MIN
        BSF     FAG1,3
        BCF     FAG1,2
        BCF     FAG1,5
        GOTO    DTURND 
DETWO:
        BTFSS   FAG1,4
        GOTO    DTURND
         
	    INCF    DEL21,F
	    MOVF    DEL21,W
	    SUBLW   D'10'
	    BTFSS   STATUS,Z
	    GOTO    DTURND
	    MOVLW   0H
	    MOVWF   DEL21     ; 10 MIN
        BSF     FAG1,5
        BCF     FAG1,4
        BCF     FAG1,3
	    GOTO    DTURND
;----------------------------
;----------------------------
DTURN2:
	MOVF    TURN2,W
	SUBLW   0
	BTFSS   STATUS,Z
	GOTO    DTURN3
	BTFSC   FAG0,5
	GOTO    DTURN20
	MOVLW   1AH
	MOVWF   SET01
	BSF     FAG0,5
	GOTO    DTURN60
DTURN20:
	MOVFF   NFBUF1,SET01
	BCF     FAG0,5
	GOTO    DTURN60

DTURN3:
	MOVF    TURN2,W
	SUBLW   1
	BTFSS   STATUS,Z
	GOTO    DTURN4
	BTFSC   FAG0,5
	GOTO    DTURN30
	MOVLW   1AH
	MOVWF   SET02
	BSF     FAG0,5
	GOTO    DTURN60
DTURN30:
	MOVFF   NFBUF2,SET02
	BCF     FAG0,5
	GOTO    DTURN60

DTURN4:
	MOVF    TURN2,W
	SUBLW   2
	BTFSS   STATUS,Z
	GOTO    DTURN5
	BTFSC   FAG0,5
	GOTO    DTURN40
	MOVLW   0AH
	MOVWF   SET03
	BSF     FAG0,5
	GOTO    DTURN60
DTURN40:
	MOVFF   NFBUF3,SET03
	BCF     FAG0,5
	GOTO    DTURN60

DTURN5:
	MOVF    TURN2,W
	SUBLW   3
	BTFSS   STATUS,Z
	GOTO    DTURND
	BTFSC   FAG0,5
	GOTO    DTURN50
	MOVLW   1AH
	MOVWF   SET04
	BSF     FAG0,5
	GOTO    DTURN60
DTURN50:
	MOVFF   NFBUF4,SET04
	BCF     FAG0,5

DTURN60:
	INCF    STTIME,F
	MOVF    STTIME,W
	SUBLW   D'30'         ;0.25*60/60=10S
	BTFSS   STATUS,Z
	GOTO    DTURND
    BCF     FAG0,4        ;CLEAR SAVE FLAG
	BSF     FLAG3,0
	MOVLW   1
	MOVWF   STTIME
	GOTO    DTURND
DTURN88:
	MOVLW   0FFH
	MOVWF   DISID
DTURND:
	MOVFF	BBSR,BSR																																																																																																																																																																																																																																																																													;restore BSR register
	MOVFF	BWREG,WREG		;restore working register
	MOVFF	BSTATUS,STATUS	        ;restore STATUS register
	RETFIE  FAST
;*************************************************
;*************************************************
INTTIM0:
    BTFSS  INTCON, TMR0IF
	GOTO   INTTX

	MOVFF	STATUS,BSTATUS  	;save STATUS register
	MOVFF	WREG,BWREG  		;save working register
	MOVFF	BSR,BBSR
	BCF    INTCON,TMR0IF
	MOVLW  0C5H
	MOVFF  WREG,TMR0H
	MOVLW  067H
	MOVFF  WREG,TMR0L
IN0T1:
	BTFSS   FMS,7            ; receive right data flag
	GOTO    IN0T2
IN0T10:                          ; receive right data
	DECFSZ  DELT,1           ; receive all data last 3*15ms and send data
	GOTO    IN0T2
	BCF     FMS,7

	BCF     PIE1,RC1IE       ; Disable SCI Recevice interrupt;
	BSF     PIE1,TX1IE       ; Enable SCI Transmit interrupt

	MOVFF   RCREG1,WREG      ; Clear RCIF
	BCF     RCSTA1,CREN      ; Disable  reception (Clear OERR FERR)
	BCF     TXSTA1,TXEN      ; Disable  Transmit

	MOVLW   55H
	MOVFF   WREG, TXREG1
	BSF     TXSTA1,TXEN      ; Enaable Transmit
    CLRF    FMK1
    CLRF    FMK
    GOTO    INT02D
IN0T2:
 	BTFSS   FMS,4            ; Communation Start Flag=1
	GOTO    INT02D
	DECFSZ  LIMIT            ; 100 * 15MS
	GOTO    INT02D
	CLRF    DELT
	CLRF    FMS
	CLRF    FMK
	CLRF    FMK1
	BCF     PIE1,TX1IE            ; Disable SCI Transmit interrupt
	BSF     PIE1,RC1IE            ; Enable SCI Recevice interrupt
	MOVFF   WREG,TXREG1           ; Clear TXIF
	BCF     TXSTA1,TXEN           ; Disable Transmit
	BCF     RCSTA1,CREN           ; Disable  reception (Clear OERR FERR)
	MOVFF   RCREG1,WREG           ; Clear RCIF
	BSF     RCSTA1,CREN           ; Enable reception

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -