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

📄 linmac.lst

📁 由LPC932构成的LIN BUS节点实例 LIN总线驱动程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
                       687     						
                       688     						
                       689     ;#############################################################################
                       690     ;# UART Tx-routine									                                #
                       691     ;#############################################################################
                       692     INTUARTTX: 
0103    C0E0           693     			PUSH ACC
0105    C0D0           694     			PUSH PSW
                       695     			
0107    43D018         696     			ORL PSW,#18H;  : regbank 3
010A    C299           697     			CLR TI
                       698     			
010C    E521           699     			MOV A,LINSTATE
010E    B4070A         700     			CJNE A,#07H,_TXRETI ;test Flags
                       701     			
0111    D20C           702     			SETB LINTXDATA; this Bit indicates, that the node is tranmitting data
                       703     			;send the first data byte
0113    7400     F     704     			MOV A,#LINDATA
0115    2E             705     			ADD A,R6; _ByteLeft
0116    F9             706     			MOV R1,A
0117    8799           707     			MOV  SBUF,@R1; send the first Databyte
0119    871B           708     			MOV _LINLASTSENT,@R1
                       709     
                       710     _TXRETI: 			
011B    D0D0           711     			POP PSW
011D    D0E0           712     			POP ACC			
011F    32             713     			RETI
                       714     						
                       715     						
                       716     $IF (_HW_SYNC_COUNTER) 
                       717     ;####################################################################################
                       718     ;# Timer1 ISR											                                       #
                       719     ;####################################################################################
                       720     INTTIMER1: 
0120    C0D0           721     						PUSH PSW
                       722     						
0122    43D018         723     						ORL PSW,#18H;	; use Registerbank 3
                       724     						
0125    B28C           725     						CPL TR0 ;enable/disable timer0 for bittiming evaluation
0127    C28F           726     						CLR TF1
0129    C28E           727     						CLR TR1   ; stop counter
012B    308C0B         728     						JNB TR0,_LOADNEWBAUDVAL						
                       729     						;start of counter
012E    758DFF         730     						MOV TH1,#0FFH ;preload counter
0131    758BFC         731     						MOV TL1,#0FCH
0134    D28E           732     						SETB TR1 ;start counter
                       733     						
0136    D0D0           734     						POP PSW
0138    32             735     						RETI
                       736     $ENDIF  
                       737     
                       738     $IF (_SW_SYNC_COUNTER)
                               ;######################################################################################
                               ;# external Int1 ISR									                                         #
                               ;######################################################################################
                               INTEXT1:
                               						PUSH PSW
                               						
                               						ORL	PSW,#18H;	; use Registerbank 3
                               						SETB TR0
                               						DJNZ R4,_COUNTING ; R4 in Registerbak 2 is _SyncEdgeCount
                               						CLR TR0
                               						CLR EX1 ; disable external int
                               						SJMP _LOADNEWBAUDVAL
                               _COUNTING:
                               						POP PSW
                               						RETI
                               $ENDIF
                       755     
                       756     ;****************************
                       757     ;calculating and loading the new
                       758     ;baudrate. Same function for HW or SW counter
                       759     _LOADNEWBAUDVAL:   
0139    C0E0           760     						PUSH ACC
013B    C0F0           761     						PUSH B
                       762     
                       763     						;calculating the new baudrategenerator reload value from TH0 and TL0
                       764     						;the formular is:
                       765     						;THL0/4 with round on the last bit
013D    858CF0         766     						MOV B,TH0
0140    E58A           767     						MOV A,TL0
0142    7802           768     						MOV R0,#2
                       769     						
                       770     _DIV_2_16: 
0144    C5F0           771     						XCH A,B   ; divide 16bit-value by 2
0146    C3             772     						CLR C
0147    13             773     						RRC A     ; High-byte
0148    C5F0           774     						XCH A,B
014A    13             775     						RRC A     ; Low-byte
014B    D8F7           776     						DJNZ R0,_DIV_2_16 ; 2 times to divide by 4
                       777     						
014D    5005           778     						JNC _NO_ROUND_UP  ; test if the result has to be round up
014F    04             779     						INC A             ; round up
0150    7002           780     						JNZ _NO_HIGH_INC ; test if high-byte also needs to be increased due to the round up
0152    05F0           781     						INC B
                       782     						
                       783     _NO_HIGH_INC: 
                       784     _NO_ROUND_UP: 		
                       785     						;flush the UART-buffer, so that the next falling edge is interpreted as Start of the Startbit
0154    75BD02         786     						MOV BRGCON,#2   ; stop the generator
0157    C2AC           787     						CLR ESR         ; disable receive-int
0159    75BF00         788     						MOV BRGR1,#0    ; maximum baudrate
015C    75BE00         789     						MOV BRGR0,#0
015F    75BD03         790     						MOV BRGCON,#3   ;enable baudrategenerator
0162    C298           791     						CLR RI          
0164    3098FD         792     						JNB RI,$        ;wait for next receive-int
                       793     						;load the calculated value into the baudrategenerator
0167    75BD02         794     						MOV BRGCON,#2   ;disable baudrategenerator
016A    85F0BF         795     						MOV BRGR1,B		 ; load high byte
016D    F5BE           796     						MOV BRGR0,A     ; load low byte
016F    75BD03         797     						MOV BRGCON,#3   ; start generator again
                       798     						
0172    D209           799     						SETB LINSYNCED
0174    D0F0           800     						POP B
0176    0100     F     801     						AJMP _EVENTRETURN ; this Symbol can be found in the Rx-ISR. A little bit cruel to jump into another
                       802     											   ; ISR, but at least it safes some byte.
                       803     
                       804     ;############################################################################
                       805     ;# Initialisation Routine							                               #
                       806     ;############################################################################
                       807     INITLINMAC: 
                       808     				; reset all Flags
0178    752100         809     						MOV LINSTATE,#0    
017B    752200         810     						MOV LINERROR,#0
                       811     				;Initialise Baudrategenerator for default baudrate
017E    75BD02         812     						MOV BRGCON,#2
0181    75BE80         813     MOV BRGR0 , # 128 
0184    75BF01         814     MOV BRGR1 , # 1 
                       815     				; put UART to 8-bit mode
0187    5387BF         816     						ANL PCON,#0BFH    
018A    759850         817     						MOV SCON,#050H
018D    438740         818     						ORL PCON,#040H    ; Make FE-bit visible
0190    75BA21         819     						MOV SSTAT,#21H    ; seperate Rx and Tx int, Break generates an Int
                       820     				;initialise Sync-Sequence evaluation
0193    758F00         821     						MOV TAMOD,#0 ;set Timer mode
                       822     						$IF (_HW_SYNC_COUNTER) 
0196    758951         823     						MOV TMOD,#01010001B  ; Timer0 as 16bit Timer
                       824     													; Timer1 as 16bit counter with preloadvalue
0199    C28E           825     						CLR TR1
                       826     						$ENDIF
                       827     						$IF (_SW_SYNC_COUNTER)
                               						ANL TMOD,#0F0H
                               						ORL TMOD,#01H       ; Timer0 as 16bit Timer
                               						SETB IT1            ; edge trigger
                               						$ENDIF
                       832     						
019B    75BD03         833     						MOV BRGCON,#3    ;start baudrate generator
                       834     						
019E    53BAF1         835     						ANL SSTAT,#0F1H ; reset the SSTAT register
01A1    53987C         836     						ANL SCON,#7CH   ; CLR TI, CLR RI, CLR FE
                       837     				 ;set interrupt priorities
                       838     				 		;UART is absolutely not time-critical, so Priority 0 (reset value)
                       839     				 		;The Sync-Measurement is very time-critical, so it gets Priority 3 (Ext1 or Timer1)
                       840     				 		$IF (_HW_SYNC_COUNTER) 
01A4    43B708         841     				 		ORL IP0H,#08H
01A7    43B808         842     				 		ORL IP0,#08H
                       843     				 		$ENDIF
                       844     				 		$IF (_SW_SYNC_COUNTER)
                               				 		ORL IP0H,#04H
                               				 		ORL IP0,#04H
                               				 		$ENDIF
                       848     						
                       849     				;allow UART Tx and Rx interrupt	
01AA    D2AC           850     						SETB ESR
01AC    D2EE           851     						SETB EST
01AE    22             852     						RET
                       853     
                       854     END
MACRO ASSEMBLER LINMAC                                      05/21/02 11:28:48 PAGE     0


SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES             REFERENCES

LINCHECKSUMERROR .  B ADDR   0022H.2 A                          339# 375 414# 587 
                                                                
KB3. . . . . . . .  B ADDR   0080H.3 A                          204# 
ECCU . . . . . . .  B ADDR   00E8H.4 A                          172# 
P2M1 . . . . . . .  D ADDR   00A4H   A                          98# 
P1M2 . . . . . . .  D ADDR   0092H   A                          97# 
P0 . . . . . . . .  D ADDR   0080H   A                          90# 
KBPATN . . . . . .  D ADDR   0093H   A                          81# 

⌨️ 快捷键说明

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