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

📄 f310kz4.29.asm

📁 由C8051F310单片机的 CAN控制器程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
					 CLR     P1.6
					 MOV     SPI0DAT,#0A0H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     SPI0DAT,#0A0H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     A,SPI0DAT
					 MOV     SPI0DAT,#0A0H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     SPI0DAT,#0A0H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     A,SPI0DAT
           SETB    P1.6
					 lcall    can_5
					 CJNE    A,#0FFH,CAN_4
           
					 ACALL    CAN_RST0
					 LJMP    CAN_STOP
					 CAN_4: 
					 JB      ACC.1,CAN_0
					 JB      ACC.0,CAN_1
					 ACALL   CLR_INT
					 ;ACALL   CAN_RST0
					 LJMP    CAN_STOP
					 RET
CAN_1:
           CLR     P1.6
					 MOV     SPI0DAT,#03H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     SPI0DAT,#60H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     A,SPI0DAT
           MOV     SPI0DAT,#60H
           JNB     TXBMT,$
           JNB     SPIF,$
					 CLR     SPIF
					 MOV     R0,#80H
					 MOV     R1,#0FH
					 MOV     A,SPI0DAT
					 SJMP    CAN0_INT_LOOP1
CAN_0:
           LCALL   CLR_INT
					 MOV     R0,#80H
					 CLR     P1.6
           MOV     SPI0DAT,#03H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     SPI0DAT,#70H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     A,SPI0DAT
           MOV     SPI0DAT,#60H
           JNB     TXBMT,$
           JNB     SPIF,$
					 CLR     SPIF
					 MOV     R0,#80H
					 MOV     R1,#0FH
					 MOV     A,SPI0DAT
CAN0_INT_LOOP1:
           MOV     @R0,A
					 MOV     SPI0DAT,#03H
           JNB     TXBMT,$
           JNB     SPIF,$
           MOV     A,SPI0DAT
					 INC     R0
					 DJNZ    R1,CAN0_INT_LOOP1
					 SETB    P1.6
					 MOV     R0,#80H
					 MOV     A,@R0
					 JNB     ACC.3,CAN_INT_LOOP2
           SETB    CAN_START
CAN_INT_LOOP2:
           MOV     R0,#81H
					 MOV     A,@R0
					 CJNE    A,#0A1H,CAN_STOP
					 MOV     R0,#87H
					 MOV     R1,#0A0H
					 MOV     R2,#08H
CAN_INT_LOOP3:
           MOV     A,@R0
					 MOV     @R1,A
					 INC     R0
					 INC     R1
					 DJNZ    R2,CAN_INT_LOOP3
CAN_STOP:
					 SETB    P1.6
					 MOV     R0,AL
					 MOV     R1,AH
					 SETB    EA
					 SETB    EA
           POP     ACC
					 POP     PSW
					 RETI
can_5:
           CLR     P1.6
					 MOV     SPI0DAT,#0A0H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     SPI0DAT,#0A0H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     A,SPI0DAT
					 SETB    P1.6
					 ret
can_send1:
           CLR     P1.6
					 MOV     SPI0DAT,#02H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
					 MOV     SPI0DAT,#30H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#03H;TXB0CTRL
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#0A1H;TXB0SIDH
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#00H;TXB0SIDL
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#0FFH;TXB00EID0
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#0FFH;TXB0EID8
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#08;TXB0DLC
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#00H;D0
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#01H;D1
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#02H;D2
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#03H;D3
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#04H;D4
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
           MOV     SPI0DAT,#05H;D5
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
					 MOV     SPI0DAT,#06H;D6
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
           MOV     SPI0DAT,#07H;D7
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
					 SETB    P1.6
           LCALL   TDELAY1MS
           CLR     P1.6
           MOV     SPI0DAT,#81H;D7
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
					 SETB    P1.6
					 RET
CAN_SEND:
           CLR     P1.6
					 MOV     R0,#90H
					 MOV     R1,#0EH
					 MOV     SPI0DAT,#02H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
					 MOV     SPI0DAT,#30H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR      SPIF
CAN_SEND_LOOP:
           MOV     SPI0DAT,@R0
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
					 INC     R0
					 DJNZ    R1,CAN_SEND_LOOP
  				 SETB    P1.6
           LCALL   TDELAY1MS
           CLR     P1.6
           MOV     SPI0DAT,#81H
					 JNB     TXBMT,$
					 JNB     SPIF,$
					 CLR     SPIF
					 SETB    P1.6
CAN_SEND_STOP:
           RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;         系统状态监测子程序
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;          |0 |待机           |
;          --------------------
					;|2 |输入欠压       |
					;|0B|运行指示       |
          ;|0A|电池故障       |
           ;-------------------
					;|1 |输入过压       |
					;|3 |输出过压       |
          ;|4 |输出欠压       |
					;|5 |输入过流       |
					;|6 |输出过流       |
					;|7 |输出过载       |
          ;|8 |IPM保护        |
					;|9 |充电机过热     |
STATE_EIR:
           ;MOV     A,EVR0
					 JNB     ACC.0,STATE_LOOP0
           
					 RET                  ;待机  0
STATE_LOOP0:
           JNB     ACC.1,STATE_LOOP1
          
					 RET                   ;输入欠压 2
STATE_LOOP1:
           JNB     ACC.2,STATE_LOOP2
           
					 RET                     ;运行 P
STATE_LOOP2:
           JNB     ACC.3,STATE_LOOP3
					 
					 SJMP    ERROR                   ;电池故障 A
STATE_LOOP3:
           ;MOV     A,EVR1
					 JNB     ACC.0,STATE_LOOP4
					
					 SJMP    ERROR                   ;输入过压1
STATE_LOOP4:
           JNB     ACC.1,STATE_LOOP5
					
					 SJMP    ERROR                  ;输出过压3
STATE_LOOP5:
           JNB     ACC.2,STATE_LOOP6
					 
					 SJMP    ERROR                  ;输出欠压4
STATE_LOOP6:
           JNB     ACC.3,STATE_LOOP7
					  
					 SJMP    ERROR                 ;输入过流5
STATE_LOOP7:
           JNB     ACC.4,STATE_LOOP8
					 
					 SJMP    ERROR                 ;输出过流6
STATE_LOOP8:
           JNB     ACC.5,STATE_LOOP9
					 
					 SJMP    ERROR                  ;输出过载7
STATE_LOOP9:
           JNB     ACC.6,STATE_LOOP10
					 
					 SJMP    ERROR                  ;IPM短路保护8
STATE_LOOP10:
           JNB     ACC.7,STATE_LOOP11
					 
					 SJMP    ERROR                  ;充电机过热9
STATE_LOOP11:
           RET
ERROR:     
          
					 RET					    
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@        延时子程序                 @;CH BH CL
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
TDELAY:          ;延时公共子程序
           NOP
TDELAY_1S:
           MOV     R1,#100
					 SJMP    TDELAY_MS_LOOP
					 RET
TDELAY_500MS:
           MOV     R1,#50
					 SJMP    TDELAY_MS_LOOP
					 RET
TDELAY_100MS:
           MOV     R1,#10
					 SJMP    TDELAY_MS_LOOP
					 RET

TDELAY_20MS:
           MOV     R1,#2
TDELAY_MS_LOOP:
					 ACALL   TDELAY_10MS
					 DJNZ    R1,TDELAY_MS_LOOP
					 RET
TDELAY_10MS:
           MOV     TMR3L,#0E5H
					 MOV     TMR3H,#0BEH
           ORL     TMR3CN,#00000100B
TDELAY_10MS_WAIT:
           nop
					 ret
           MOV     A,TMR3CN
           JNB     ACC.7,TDELAY_10MS_WAIT
					 ANL     TMR3CN,#11111011B
					 RET

TDELAY_1MS:
           MOV     TMR3L,#0dH
					 MOV     TMR3H,#01H
           ORL     TMR3CN,#00000100B
TDELAY_1MS_WAIT:
           MOV     A,TMR3CN
					 JNB     ACC.7,TDELAY_1MS_WAIT
					 ANL     TMR3CN,#11111011B
           RET

TDELAY1MS:
         PUSH     CH
				 PUSH     BH
				 PUSH     CL
         MOV     CH,#01H
TFL2:   
         MOV      BH,#5FH
TFL0:
				 MOV      CL,#5FH
TFL1:
         NOP
				 NOP
				 NOP
				 NOP
				 NOP
				 NOP
         NOP
				 NOP
				 NOP
				 NOP
				 NOP
				 NOP
				 NOP
				 NOP
				 NOP
				 NOP
				 NOP
				 NOP
        DJNZ    CL,TFL1
				DJNZ    BH,TFL0
				DJNZ    CH,TFL2
				POP     CL
				POP     BH
				POP     BL
				RET
	        ;ORG     2000H
					BELAY:     
					DB         0,1,2,3,4,5,6,7,8,9,10
					DB         11,12,13,14,15,16,17,18,19,20
	
DIS_DPTD:
				  DB  0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H 
				  DB  0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH 
         
DIS_RE_BELAY:        ;系统运行状态显示代码段
					DB  7eh,06h,0dah,9eh,0a6h       ;0  1  2  3  4    
					DB  0bch,0fch,0eh,0feh,0beh,00h  ;5  6  7  8  9  B  P  ;
DIS_RESS_BELAY:      ;按键状态显示代码段
					DB         0EEH,0EFH,76H,77H,0E6H    ; A  A. U  U. H   ;0BH 0CH 0DH 0EH 0FH 10H
					DB         0E7H,0FCH,0FDH,0F8H,0F9H,0DDH    ;H. G  G. E  E. R.  ;11H 12H 13H 14H 15H 16H
					DB         0D7H,0ABH,71H,7EH,7EH,7EH,7EH,7EH,7EH,7EH,7EH,7EH,7EH,0F0H;;                    ;D. N. L.           ;17H 18H 19H
				 
         END

⌨️ 快捷键说明

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