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

📄 p16c71_test.asm

📁 可移植的MicroChip的PIC全系列单片机软件仿真器
💻 ASM
字号:
	list	p=16c71  __config _wdt_off	;; The purpose of this program is to test gpsim's ability to simulate a pic 16c71.	;; Specifically, the a/d converter is tested.include "p16c71.inc"		  cblock  0x0c	x	t1,t2	avg_lo,avg_hi	w_temp,status_temp  endc	  org	0	goto	main  org	4	;; 	;; Interrupt	;; 	movwf	w_temp	swapf	status,w	movwf	status_temp	bcf	status,rp0	;adcon0 is in bank 0	btfsc	intcon,adie	 btfss	adcon0,adif	  goto	check;;	An A/D interrupt has occurred	bsf	t1,0		;Set a flag to indicate we got the int.	bcf	adcon0,adif	;Clear the a/d interruptcheck:	swapf	status_temp,w	movwf	status	swapf	w_temp,f	swapf	w_temp,w	retfiemain:	;; Let's use the ADC's interrupt		clrf	intcon	#define FAST_CONVERSION		((1<<adcs1) | (1<<adcs0))	movlw	FAST_CONVERSION | (1<<adon)	movwf	adcon0#define ENABLE_INTS		((1<<gie) | (1<<adie))	movlw	ENABLE_INTS	movwf	intcon	;; Upon power up, porta is configured for analog inputs.	;; (how many times have I been burnt by this???).		;; So let's test this out to see if it's true:	call	do_some_conversions	;; The next test consists of misusing the A/D converter.	;; TRISA is configured such that the I/O pins are digital outputs.	;; Normally you want them to be configued as inputs. According to	;; the data sheet, the A/D converter will measure the voltage produced	;; by the digital I/O output:	 either 0 volts or 5 volts (or Vdd).	;; [I wonder if this would be a useful way of measuring the power supply	;; level in the event that there's an external reference connected to	;; an3?]		movlw   0	bsf	status,rp0	movwf	porta		;Make the I/O's digital outputs	movwf	adcon1		;Configure porta to be completely analog				;(note that this is unnecessary since that's				;the condition they're in at power up.)	bcf	status,rp0	movwf	porta		;Drive the digital I/O's low	;;	;; First do a few conversion with porta configured as a digital output	;; that is driving low	;;		call	do_some_conversions	;;	;; Now do some with the digital output high	;;	movlw	0xff	movwf	porta		call	do_some_conversions	;;	;; Now make the inputs analog (like they normally would be)	;;	bsf	status,rp0	movlw	0xff	movwf	porta	bcf	status,rp0	call	do_some_conversions	;;	;; Now let's use the external analog signal connected to AN3	;; as the voltage reference	bsf	status,rp0	movlw	1<<pcfg0	movwf	adcon1 ^ 0x80	bcf	status,rp0	call	do_some_conversions		goto	$-1do_some_conversions	clrf	avg_lo	clrf	avg_hi	movlw	4	movwf	t2		;Used to count the number of A/D conversionsl1:	clrf	t1		;flag set by the interrupt routine		bsf	adcon0,go	;Start the A/D conversion	btfss	t1,0		;Wait for the interrupt to set the flag	 goto	$-1	movf	adres,w		;Read the result	addwf	avg_lo,f	;and accumulate it here	skpnc	 incf	avg_hi,f	decfsz	t2,f	 goto	l1	rrf	avg_hi,f	rrf	avg_lo,f	rrf	avg_hi,f	rrf	avg_lo,f		return	end

⌨️ 快捷键说明

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