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

📄 ch11_intr6.asm

📁 51单片机基础篇 对于有一定基础的人看看 包含书中所以的源代码
💻 ASM
字号:
     ;PROGRAM NAME:INTR6.ASM
     ;TEST SERIAL INTERRUPT(MODE 1)
     ;
     COUNT   	EQU     9217    		;10ms FOR XTAL=11.0592MHz
     ;
     DIGIT1  	REG     P1.4
     DIGIT2  	REG     P1.5
     LED     	REG      P3.7
     ;
     DISP    	EQU     30H
     SEC     	EQU      31H
     O_CNT   	EQU     32H
     ;
     O_TRUE  	REG     20H.0
     ;
             	ORG      0000H
             	LJMP    RESET
             	ORG     0003H    		;INT0 INTERRUPT
             	RETI
             	ORG     000BH    		;TIMER0 INTERRUPT
             	LJMP    INT_TIMER0
             	ORG     0013H    		;INT1 INTERRUPT
             	RETI
             	ORG     001BH    		;TIMER1 INTERRUPT
             	RETI
             	ORG     0023H    		;SERIAL INTERRUPT
             	LJMP    SERIAL
     ;
     RESET  	MOV     R0,#00H
             	DJNZ    R0,$    		;WAIT
             	MOV     DISP,#00H  	        ;DISPLAY '0''0'
             	MOV     SEC,#00H
             	MOV     SP,#40H
     ;
             	MOV     A,#00100001B
             	MOV     TMOD,A
     ;TIMER0 	IN MODE 1:16-BIT COUNT
             	MOV     TH0,#(65536-COUNT)/256
             	MOV     TL0,#(65536-COUNT).MOD.256
             	CLR     TF0      		;CLEAR TF0
             	SETB    TR0
     ;
     ;TIMER1 	IN MODE 2:8-BIT AUTO RELOAD MODE
             	MOV     TH1,#FDH
             	SETB    TR1     		;TIMER1 START
     ;
             	MOV     SCON,#01000000B
             	SETB    REN     		;RECEIVE ENABLE
     ;
     ;TIMER0 	SETTING
             	SETB    PT0
             	SETB    ET0     		;ENABLE TIMER0 INTURRUPT
     ;
             	CLR     RI
             	CLR     TI
             	SETB    ES      		;ENABLE SERIAL INTERRUPT
     ;
             	SETB    EA      		;ENABLE SYSTEM INTERRUPT
     ;
     LOOP    	LCALL   LDELAY
              	LCALL   LDELAY
     ;
             	MOV     A,DISP
             	ADD     A,#01H
             	DA       A
             	MOV     DISP,A  		;DISP=DISP+1 (PLUS DAA)
     ;
             	MOV     O_CNT,#00H
             	SETB    O_TRUE
             	SETB    TI
             	SJMP    LOOP    		;WAITTING
     ;
     TABLE   	DB     ' ','H','E','L','L','O',0DH,0AH
     ;
     SERIAL  	JNB     TI,NO_DATA
              	JNB     O_TRUE,NO_DATA
     ;TI=1 AND O_TRUE=1
             	CLR     TI
             	MOV     A,O_CNT
             	INC     O_CNT   		;OUT_CNT=O_CNT+1
             	MOV     DPTR,#TABLE
             	MOVC    A,@A+DPTR
             	MOV     SBUF,A
             	CJNE    A,#0AH,NO_DATA
             	MOV     O_CNT,#00H
             	CLR     O_TRUE
     NO_DATA
             	RETI
     ;
     ;TF0=1
     INT_TIMER0
             	CLR     TF0     		;CLEAR TF0
             	MOV     TH0,#(65536-COUNT)/256
             	MOV     TL0,#(65536-COUNT).MOD.256
             	INC     SEC     		;SEC=SEC+1
             	MOV     A,SEC  		        ;CHECK SEC>=100?
             	CJNE    A,#100,$CHK1	        ;A-100
     $CHK1  	JC      $NEXT
             	MOV     SEC,#00H		;SEC=0
     ;
     $NEXT  	MOV     A,SEC
             	CJNE    A,#40,$CHK2
     $CHK2  	JNC     OVER
             	SETB    LED        	        ;LED ON
             	SJMP    DISPLAY
     OVER   	CLR     LED
     ;
     DISPLAY 	MOV      A,DISP
             	ANL     A,#00001111B	        ;GET LOW NIBBLES
             	SETB    ACC.5        	        ;BIT5,BIT4=10
             	MOV     P1,A
             	ACALL   DELAY
     ;ADD EXTRA PART
             	CLR     P1.4
             	CLR     P1.5
             	ACALL   DELAY
     ;
             	MOV     A,DISP
             	SWAP    A
             	ANL     A,#00001111B
             	SETB    ACC.4      	         ;BIT5,BIT4=01
             	MOV     P1,A
             	ACALL   DELAY
             	CLR     P1.4
             	CLR     P1.5
             	RETI
     ;
     DELAY  	MOV     R7,#80H
             	DJNZ    R7,$
             	RET 
     ;
     LDELAY  	MOV     R1,#00H
     $R0     	MOV      R0,#00H
             	DJNZ    R0,$
             	DJNZ    R1,$R0
             	RET

⌨️ 快捷键说明

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