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

📄 adc_lpc915.a51

📁 简易虚拟示波器(只测波形不测值)之单片机端汇编程序(LPC915)
💻 A51
📖 第 1 页 / 共 2 页
字号:
timer0_L data 2Ah
P_RX_H DATA 2BH
P_RX_E DATA 2CH
P_TX_H DATA 2DH
P_TX_E DATA 2EH ;R1
UART_BUF_S DATA 2FH    ;BIT 变量只能在地址20H到2fH  http://www.keil.com/support/docs/1903.htm
	REC_CH BIT UART_BUF_S.0
	TX_END BIT UART_BUF_S.1
	REC_OVERWRITE BIT UART_BUF_S.2
	TX_FULL BIT UART_BUF_S.3
	CONTINUE_ADC BIT UART_BUF_S.4
RX_BUF DATA 30H
TX_BUF DATA 34H
GREEN_LED BIT P0.3


;IR DATA USING R0~R4 IN SET 1


_UCFG1 EQU FOSC OR (WDSE SHL 4) OR (BOE SHL 5) OR (RPD SHL 6) OR (WDTE SHL 7)
_UCFG2 EQU 0

                CSEG    AT      0FF00H
                DB      _UCFG1          ; place UCFG Bytes in hex file
                DB      _UCFG2
                DB      BOOTVEC
                DB      BOOTSTAT
                CSEG    AT      0FF04H
                DB      SEC0
                DB      SEC1
                DB      SEC2
                DB      SEC3
                DB      SEC4
                DB      SEC5
                DB      SEC6
                DB      SEC7

               	CSEG    AT      0
		JMP     STARTUP1
               	CSEG    AT      3 ;EXT0
		RETI
;		LJMP INT_EXT0
               	CSEG    AT      0xB ;timer0
		Ljmp int_timer0
		RETI
               	CSEG    AT      0x13
		RETI
               	CSEG    AT      0x1B ;time1
;		INC TIME_T ;INC NOT CHANGE FLAGS
		RETI
               	CSEG    AT      0x23 ;Rx/Tx INT OR Rx ONLY SEE SSTAT.5
;		RETI
		LJMP UART_Rx_Tx
               	CSEG    AT      0x2B
		RETI
               	CSEG    AT      0x33
		RETI
;		LJMP I2C_INT
               	CSEG    AT      0x3B
		RETI
               	CSEG    AT      0x43
		RETI
               	CSEG    AT      0x4B
		RETI
               	CSEG    AT      0x53
		RETI
               	CSEG    AT      0x5B
		RETI
               	CSEG    AT      0x63
		RETI
               	CSEG    AT      0x6B
		RETI
               	CSEG    AT      0x73 ; ADC
		LJMP INT_ADC
		RETI
               	CSEG    AT      0x7B
		RETI
;		DSEG	AT	040H
;    o_buf	data	040H ;20 data
;    d1_buf	data	054H ;16 data
;    out_data	data	064H ;ADC out data

                CSEG    AT      080H		
STARTUP1:
		CLR GREEN_LED
		MOV SP,#8 ;SET0
		CALL INT_PRIORITY_SET
		CALL UART_INIT
		CALL ADC_INIT
		call timer0_init
;		JNB REC_CH,START_1
;		CALL GET_CH
;		CALL WRITE_CH
PC_COMMAND:
		JNB REC_CH,$
		CALL GET_CH
		CJNE A,#01H,PC_C_1
		;START ADC HERE
;		MOV ADMODA,#10H ;SINGLE CONVERSION MODE
		CLR CONTINUE_ADC
		setb ET0
		JMP PC_COMMAND
	PC_C_1:
		CJNE A,#0H,PC_C_2
		;STOP ADC HERE
		CLR ET0
		MOV ADCON1,#44H ; CLEAR ADCI1 AND START
		JMP PC_COMMAND
	PC_C_2:
		CJNE A,#02,PC_C_3
		;SET ADC 9600 HERE
;		MOV ADMODA,#10H ;SINGLE CONVERSION MODE
		CLR CONTINUE_ADC
		mov timer0_H,#0E8H ;9600 at 11.0592MHz 110592./9.6/2=576,TL0 +6 =6H
		mov timer0_L,#6H ;9600 at 11.0592MHz
		setb ET0
		JMP PC_COMMAND
	PC_C_3:
		CJNE A,#03,PC_C_4
		;SET ADC 19200 HERE
		CLR CONTINUE_ADC
		mov timer0_H,#0F7H ;19200 at 11.0592MHz 110592./19.2/2=288,TL0 +6 =6H
		mov timer0_L,#6H ;19200 at 11.0592MHz
		setb ET0
		JMP PC_COMMAND
	PC_C_4:
		CJNE A,#04,PC_C_5
		;SET ADC 38400 HERE
		CLR CONTINUE_ADC
		mov timer0_H,#0FCH ;38400 at 11.0592MHz 110592./38.4/2=144,TL0 +6 =16H
		mov timer0_L,#16H ;38400 at 11.0592MHz
		setb ET0
		JMP PC_COMMAND
	PC_C_5:
		CJNE A,#05,PC_C_6
		;SET ADC 57600 HERE
		CLR CONTINUE_ADC
		mov timer0_H,#0FDH ;57600 at 11.0592MHz 110592./57.6/2=96,TL0 +6 =6H
		mov timer0_L,#6H ;57600 at 11.0592MHz
		setb ET0
		JMP PC_COMMAND
	PC_C_6:
		CJNE A,#06,PC_C_7
		;SET ADC 57600 HERE
		CLR CONTINUE_ADC
		mov timer0_H,#0FDH ;57600 at 11.0592MHz 110592./57.6/2=96,TL0 +6 =6H
		mov timer0_L,#6H ;57600 at 11.0592MHz
		setb ET0
		JMP PC_COMMAND
	PC_C_7:
		CJNE A,#07,PC_C_8
		;SET ADC 115200 HERE
		CLR CONTINUE_ADC
		mov timer0_H,#0FEH ;115200 at 11.0592MHz 110592./115.2/2=48,TL0 +6 =16H
		mov timer0_L,#16H ;115200 at 11.0592MHz
		setb ET0
		JMP PC_COMMAND
	PC_C_8:
		CJNE A,#08,PC_C_9
		;SET ADC 153600 HERE
		CLR CONTINUE_ADC
		mov timer0_H,#0FEH ;138240 at 11.0592MHz 110592./138.24/2=40,TL0 +6 =1EH
		mov timer0_L,#1EH ;138240 at 11.0592MHz
		setb ET0
		JMP PC_COMMAND
	PC_C_9:
		CJNE A,#09,PC_C_10
		;SET ADC 153600 HERE
		CLR CONTINUE_ADC
		mov timer0_H,#0FFH ;153600 at 11.0592MHz 110592./153.6/2=36,TL0 +6 =2H
		mov timer0_L,#2H ;153600 at 11.0592MHz
		setb ET0
		JMP PC_COMMAND
	PC_C_10:
		CJNE A,#10H,PC_C_11
		;SET ADC CONTINUE HERE
;		MOV ADMODA,#20H ;SINGLE CONVERSION MODE
		SETB CONTINUE_ADC
		MOV ADMODA,#10H ;SINGLE CONVERSION MODE
		MOV ADCON1,#45H ;START ADC
		JMP PC_COMMAND
		;BIT1:0=01 Immediate Start mode,BIT2 ENADC1,BIT3 ADCI1 CLEAR IN INT,BIT6 ENADCI1
	PC_C_11:
		JMP PC_COMMAND

INT_PRIORITY_SET:
;		MOV IP0H,#1 ;IE0
		MOV IP0H,#2 ;TIMER0
		MOV IP0,#2 ;TIMER0
;		MOV IP0H,#8 ;TIME1
;		MOV IP0,#3 ;IE0,TIMER0
;		MOV IP0,#0BH ;IE0,TIMER0,TIME1
		RET
timer0_init: ;7.373MHz/
		
;		mov timer0_H,#0FCH ;38400 at 11.0592MHz 110592./38.4/2=144,TL0 +6 =16H
;		mov timer0_L,#16H ;38400 at 11.0592MHz
;		mov timer0_H,#0FDH ;57600 at 11.0592MHz 110592./57.6/2=96,TL0 +6 =6H
;		mov timer0_L,#6H ;57600 at 11.0592MHz
;		mov timer0_H,#0FEH ;115200 at 11.0592MHz 110592./115.2/2=48,TL0 +6 =16H
;		mov timer0_L,#16H ;115200 at 11.0592MHz
;		mov timer0_H,#0FFH ;197486 at 11.0592MHz 110592./197.486/2=28,TL0 +6 =0AH
;		mov timer0_L,#0AH ;197486 at 11.0592MHz
		mov timer0_H,#0FEH ;115200 at 11.0592MHz 110592./115.2/2=48,TL0 +6 =16H
		mov timer0_L,#16H ;115200 at 11.0592MHz
		MOV TMOD,#20H
		MOV TH0,timer0_H
;		MOV TL0,timer0_OFF_L
		setb TR0
;		setb ET0
		setb EA
		ret
;ADC_START:
;		MOV ADCON1,#45H
;		;BIT1:0=01 Immediate Start mode,BIT2 ENADC1,BIT3 ADCI1 CLEAR IN INT,BIT6 ENADCI1
;	        RET
ADC_INIT:
		MOV ADINS,#10H ;AIN10
		MOV ADMODA,#10H ;SINGLE CONVERSION MODE
;		MOV ADMODB,#60H;BIT 7:5 + 1 = DIVISOR NOW IS 4 ,BIT 3 DAC MODE
;	 	;ADC CLOCK = 11.0592/4 = 2.7648MHz ADC TIME = 13*1/F = 4.7 uS
		MOV ADMODB,#40H;BIT 7:5 + 1 = DIVISOR NOW IS 3, BIT 3 DAC MODE
	 	;ADC CLOCK = 11.0592/3 = 3.6864MHz ADC TIME = 13*1/F = 3.52 uS
		CLR CONTINUE_ADC
		SETB EAD
		RET
UART_INIT:
		ANL P1M1,#11111100B
		ANL P1M2,#11111100B
		MOV SSTAT,#0    ; Rx / Tx  INT
		MOV SCON,#50H ;SM0 & REN
		MOV BRGCON,#0  ;must CLR BRGCON.0 TO ENABLE SET BRGR1&BRGR0
;		MOV BRGR1,#2H  ;9600 at 7.373MHz  BRGR1,BRGR0=(CCLK/BAND RADE)-16
;		MOV BRGR0,#0F0H
;		MOV BRGR1,#1H  ;19200 AT 7.373MHz  BRGR1,BRGR0=(CCLK/BAND RADE)-16
;		MOV BRGR0,#70H
;		MOV BRGR1,#2H  ;19200 AT 11.0592MHz  BRGR1,BRGR0=(CCLK/BAND RADE)-16
;		MOV BRGR0,#30H
;		MOV BRGR1,#0H  ;115200 AT 11.0592MHz  BRGR1,BRGR0=(CCLK/BAND RADE)-16
;		MOV BRGR0,#50H
;		MOV BRGR1,#0H  ;460800 AT 11.0592MHz  BRGR1,BRGR0=(CCLK/BAND RADE)-16
;		MOV BRGR0,#8H
		MOV BRGR1,#0H  ;115200 AT 11.0592MHz  BRGR1,BRGR0=(CCLK/BAND RADE)-16
		MOV BRGR0,#50H
		MOV BRGCON,#3
		MOV P_RX_H,#LOW RX_BUF
		MOV P_RX_E,#LOW RX_BUF
		MOV P_TX_H,#LOW TX_BUF
;		MOV P_TX_E,#LOW TX_BUF
		MOV R1,#LOW TX_BUF
		SETB TX_END
		CLR REC_CH
		CLR REC_OVERWRITE
		CLR TX_FULL
		SETB ES ;ENABLE UART INT
		SETB EA ;ENABLE INTERUPT
		RET
GET_CH:		;RETURN IN A,ERR RETURN C
		JB REC_CH,GET_C_0
		SETB C
		JMP GET_C_END
GET_C_0:
		PUSH 0
		MOV R0,P_RX_H
		MOV A,@R0
		MOV R0,A
		INC P_RX_H
		MOV A,P_RX_H
		CJNE A,#LOW TX_BUF,GET_C_1
		MOV P_RX_H,#LOW RX_BUF
		MOV A,P_RX_H
GET_C_1:
		CJNE A,P_RX_E,GET_C_E1
		CLR REC_CH
GET_C_E1:
		MOV A,R0
		CLR REC_OVERWRITE
		POP 0
GET_C_END:
		RET
WRITE_CH:		;DATA IN A ,IF FAULT SET C
		JNB TX_FULL, WRITE_C_1
		SETB C
		JMP WRITE_C_END
WRITE_C_1:
		MOV @R1,A
		INC R1
		CJNE R1,#80H,WRITE_C_2
		MOV R1,#LOW TX_BUF
WRITE_C_2:
		XCH A,R1
		CJNE A,P_TX_H,WRITE_C_3
		SETB TX_FULL	
WRITE_C_3:
		XCH A,R1
		CLR C
		JNB TX_END,WRITE_C_END
		CLR TX_END
		MOV SBUF,A
WRITE_C_END:
		RET


int_timer0:  ;************************ INT_TIMER0 ****************
		push psw
		MOV TL0,timer0_L
		MOV TH0,timer0_H
		MOV ADCON1,#45H ;START ADC
		;BIT1:0=01 Immediate Start mode,BIT2 ENADC1,BIT3 ADCI1 CLEAR IN INT,BIT6 ENADCI1
		pop psw
		RETI
UART_Rx_Tx:
		PUSH PSW
		PUSH 0
		PUSH ACC
		CLR RS0 ; NEED IT WHEN USING R0~R7
;		CLR RS1
		JNB RI,UART_TX
		CLR RI
		MOV R0,P_RX_E
		MOV @R0,SBUF
		SETB REC_CH
		INC P_RX_E
		MOV R0,P_RX_E
		CJNE R0,#LOW TX_BUF,UART_RX_1
		MOV P_RX_E,#LOW RX_BUF
UART_RX_1:
		MOV A,P_RX_E
		CJNE A,P_RX_H,UART_END
		SETB REC_OVERWRITE
		INC P_RX_H
		MOV R0,P_RX_H
		CJNE R0,#LOW TX_BUF,UART_END
		MOV P_RX_H,#LOW RX_BUF	
		JMP UART_END
UART_TX:
		CLR TI
		CLR TX_FULL
		INC P_TX_H
UART_TX_1:
		MOV A,P_TX_H
		CJNE A,#80H,UART_TX_2
		MOV P_TX_H,#LOW TX_BUF
		MOV A,P_TX_H		
UART_TX_2:
		CJNE A,1,UART_TX_3;1:R1 : P_TX_E
		SETB TX_END
		JMP UART_END
UART_TX_3:
		MOV R0,P_TX_H
		MOV SBUF,@R0
UART_END:
		POP ACC
		POP 0
		POP PSW
		RETI

INT_ADC:
		PUSH PSW
		PUSH ACC
		ANL ADCON1,#0F7H; CLEAR ADCI1
		JNB TX_FULL, INT_WRITE_C_1
		MOV ADCON1,#44H ; CLEAR ADCI1 AND START
		CLR ET0
		MOV ADMODA,#10H ;SINGLE CONVERSION MODE
		JMP INT_ADC_END
	INT_WRITE_C_1:
		MOV A,AD1DAT0
		JNB CONTINUE_ADC,INT_ADC_NO_CONTINUE
		MOV ADCON1,#45H
	INT_ADC_NO_CONTINUE:
		MOV @R1,A
		INC R1
		CJNE R1,#80H,INT_WRITE_C_2
		MOV R1,#LOW TX_BUF
	INT_WRITE_C_2:
		XCH A,R1
		CJNE A,P_TX_H,INT_WRITE_C_3
		SETB TX_FULL	
	INT_WRITE_C_3:
		XCH A,R1
		JNB TX_END,INT_WRITE_C_END
		CLR TX_END
		MOV SBUF,A
	INT_WRITE_C_END:
	INT_ADC_END:
		POP ACC
		POP PSW
		RETI
		END

⌨️ 快捷键说明

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