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

📄 main.s

📁 Button 一个国外大学生毕业设计,用的是AVR单片机
💻 S
📖 第 1 页 / 共 2 页
字号:
	mov A,<L28
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 191
; 			}			
L36:
	.dbline 194
; 
; 			// check to see if BUTTON 4 is on or off
; 			if ((CSR_1_baSwOnMask[0]) & BUTTON_4) 
	mov REG[0xd0],>_CSR_1_baSwOnMask
	tst [_CSR_1_baSwOnMask],16
	jz L38
	.dbline 195
; 			{
	.dbline 197
; 				// switch is ON
; 				LCD_1_Position(0,8);
	push X
	mov X,8
	mov A,0
	xcall _LCD_1_Position
	.dbline 198
; 				LCD_1_PrCString("4 ");
	mov A,>L40
	push A
	mov A,<L40
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 199
; 			}else
	xjmp L39
L38:
	.dbline 200
; 			{
	.dbline 202
; 				// switch is OFF
; 				LCD_1_Position(0,8);
	push X
	mov X,8
	mov A,0
	xcall _LCD_1_Position
	.dbline 203
; 				LCD_1_PrCString("  ");
	mov A,>L28
	push A
	mov A,<L28
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 204
; 			}			
L39:
	.dbline 207
; 
; 			// check to see if BUTTON 5 is on or off
; 			if ((CSR_1_baSwOnMask[0]) & BUTTON_5) 
	mov REG[0xd0],>_CSR_1_baSwOnMask
	tst [_CSR_1_baSwOnMask],32
	jz L41
	.dbline 208
; 			{
	.dbline 210
; 				// switch is ON
; 				LCD_1_Position(0,10);
	push X
	mov X,10
	mov A,0
	xcall _LCD_1_Position
	.dbline 211
; 				LCD_1_PrCString("5 ");
	mov A,>L43
	push A
	mov A,<L43
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 212
; 			}else
	xjmp L42
L41:
	.dbline 213
; 			{
	.dbline 215
; 				// switch is OFF
; 				LCD_1_Position(0,10);
	push X
	mov X,10
	mov A,0
	xcall _LCD_1_Position
	.dbline 216
; 				LCD_1_PrCString("  ");
	mov A,>L28
	push A
	mov A,<L28
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 217
; 			}			
L42:
	.dbline 220
; 
; 			// check to see if BUTTON 6 is on or off
; 			if ((CSR_1_baSwOnMask[0]) & BUTTON_6) 
	mov REG[0xd0],>_CSR_1_baSwOnMask
	tst [_CSR_1_baSwOnMask],64
	jz L44
	.dbline 221
; 			{
	.dbline 223
; 				// switch is ON
; 				LCD_1_Position(0,12);
	push X
	mov X,12
	mov A,0
	xcall _LCD_1_Position
	.dbline 224
; 				LCD_1_PrCString("6 ");
	mov A,>L46
	push A
	mov A,<L46
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 225
; 			}else
	xjmp L24
L44:
	.dbline 226
; 			{
	.dbline 228
; 				// switch is OFF
; 				LCD_1_Position(0,12);
	push X
	mov X,12
	mov A,0
	xcall _LCD_1_Position
	.dbline 229
; 				LCD_1_PrCString("  ");
	mov A,>L28
	push A
	mov A,<L28
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 230
; 			}
	.dbline 231
; 		}
	xjmp L24
L23:
	.dbline 233
; 		else // blank the top line of the LCD screen
; 		{
	.dbline 234
; 				LCD_1_Position(0,0);
	push X
	mov A,0
	mov X,A
	xcall _LCD_1_Position
	.dbline 235
; 				LCD_1_PrCString("                ");
	mov A,>L12
	push A
	mov A,<L12
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 236
; 		}
L24:
	.dbline 239
	push X
	mov X,0
	mov A,1
	xcall _LCD_1_Position
	.dbline 240
	mov A,>L47
	push A
	mov A,<L47
	mov X,A
	pop A
	xcall _LCD_1_PrCString
	pop X
	.dbline 243
L14:
	.dbline 119
	xjmp L13
X0:
	.dbline -2
	.dbline 244
; 
; 		// output the value of CSR_baSwOnMask[0] to the LCD screen
; 		LCD_1_Position(1,0);
; 		LCD_1_PrCString("baSwOnMask[0]:  ");
; 
; 			
; 	} // End of normal operation loop
; } // End of main
L1:
	.dbline 0 ; func end
	jmp .
	.dbend
	.dbfunc e CalibrateSwitches _CalibrateSwitches fV
;          bFlag -> X+0
_CalibrateSwitches::
	.dbline -1
	push X
	mov X,SP
	add SP,1
	.dbline 269
; 
; // -------------------------------------------------------------
; //
; // Function: CalibrateSwitches()
; //
; // Description:
; //		This function will automatically determine the appropriate
; // DAC values for each switch in the system.  The values will be
; // stored in the variable - bDACcurrent[].  The function will set
; // the DAC value depending on the values set by the following lines:
; //
; // #define DAC_MAX_RAW_COUNT	310
; // #define DAC_MIN_RAW_COUNT	290
; //
; // These lines are located at the top of the program and give a range
; // for the raw CSR count values to be in to set the DAC value.  This 
; // function will iterate through each switch.  It will do a single
; // scan and compare the raw count values with the range defined above.  
; // If the count values for that particular switch are outside of the
; // range, the function will change the DAC value appropriately and do
; // a rescan.  This process is repeated until the raw counts for each
; // particular switch are within the specified range.
; //
; void CalibrateSwitches(void)
; {
	.dbline 270
; 	BYTE bFlag = 1;
	mov [X+0],1
	.dbline 272
; 	
; 	for(i=0; i<NUM_SWITCHES; i++) // iterate through all the switches in the system
	mov REG[0xd0],>_i
	mov [_i+1],0
	mov [_i],0
	xjmp L52
L49:
	.dbline 273
; 	{
	.dbline 276
; 		// calibrate DAC setting for a switch
; 		//------------------------------------------------------
; 		bFlag = 1; // reset the flag to a true state
	mov [X+0],1
	.dbline 277
; 		CSR_1_SetScanSpeed(3); // start with a scanspeed of three to get ONE oscillator cycle or period
	push X
	mov A,3
	xcall _CSR_1_SetScanSpeed
	pop X
	.dbline 278
; 		bDACcurrent[i] = 20; // a DAC current of 20 will start us in range	
	mov REG[0xd0],>_i
	mov A,[_i+1]
	add A,<_bDACcurrent
	mov REG[0xd0],>__r0
	mov [__r1],A
	mov REG[0xd0],>_i
	mov A,[_i]
	adc A,>_bDACcurrent
	mov REG[0xd0],>__r0
	mov REG[0xd5],A
	mov A,20
	mvi [__r1],A
L53:
	.dbline 287
; 		
; 		// do one scan and compare the raw count value against
; 		// the defined range. 
; 		// - If the counts are BELOW the set range
; 		// DECREASE the DAC setting to INCREASE the counts
; 		// - If the counts are ABOVE the set range
; 		// INCREASE the DAC setting to DECREASE the counts
; 		do
; 		{
	.dbline 289
; 			// set the DAC current
; 			CSR_1_SetDacCurrent(bDACcurrent[i], 0);
	push X
	mov A,0
	push A
	mov REG[0xd0],>_i
	mov A,[_i+1]
	add A,<_bDACcurrent
	mov REG[0xd0],>__r0
	mov [__r1],A
	mov REG[0xd0],>_i
	mov A,[_i]
	adc A,>_bDACcurrent
	mov REG[0xd0],>__r0
	mov REG[0xd4],A
	mvi A,[__r1]
	pop X
	xcall _CSR_1_SetDacCurrent
	.dbline 291
; 			// scan just the one button
; 			CSR_1_StartScan(i,1,0);
	mov A,0
	push A
	mov A,1
	push A
	mov REG[0xd0],>_i
	mov A,[_i+1]
	mov REG[0xd0],>__r0
	push A
	xcall _CSR_1_StartScan
	add SP,-3
	pop X
L56:
	.dbline 292
L57:
	.dbline 292
; 			while(!(CSR_1_GetScanStatus() & CSR_1_SCAN_SET_COMPLETE));
	push X
	xcall _CSR_1_GetScanStatus
	mov REG[0xd0],>__r0
	pop X
	mov [__r0],A
	tst [__r0],32
	jz L56
	.dbline 295
; 		
; 			// check to see if the counts are in range
; 			if (CSR_1_iaSwResult[i] < DAC_MIN_RAW_COUNT)
	mov REG[0xd0],>_i
	mov A,[_i+1]
	push A
	mov A,[_i]
	mov REG[0xd0],>__r0
	mov [__r0],A
	pop A
	mov [__r1],A
	asl [__r1]
	rlc [__r0]
	add [__r1],<_CSR_1_iaSwResult
	adc [__r0],>_CSR_1_iaSwResult
	mov A,[__r0]
	mov REG[0xd4],A
	mvi A,[__r1]
	mov [__r0],A
	mvi A,[__r1]
	sub A,34
	mov A,[__r0]
	sbb A,1
	jnc L59
X4:
	.dbline 296
; 			{
	.dbline 297
; 				bDACcurrent[i]--; // counts are BELOW the range so DECREASE the DAC setting
	mov REG[0xd0],>_i
	mov A,[_i+1]
	add A,<_bDACcurrent
	mov REG[0xd0],>__r0
	mov [__r1],A
	mov REG[0xd0],>_i
	mov A,[_i]
	adc A,>_bDACcurrent
	mov REG[0xd0],>__r0
	mov [__r0],A
	mov REG[0xd4],A
	mvi A,[__r1]
	dec [__r1]
	mov [__r2],A
	sub [__r2],1
	mov A,[__r0]
	mov REG[0xd5],A
	mov A,[__r2]
	mvi [__r1],A
	.dbline 298
; 			}
	xjmp L60
L59:
	.dbline 299
; 			else if (CSR_1_iaSwResult[i] > DAC_MAX_RAW_COUNT)
	mov REG[0xd0],>_i
	mov A,[_i+1]
	push A
	mov A,[_i]
	mov REG[0xd0],>__r0
	mov [__r0],A
	pop A
	mov [__r1],A
	asl [__r1]
	rlc [__r0]
	add [__r1],<_CSR_1_iaSwResult
	adc [__r0],>_CSR_1_iaSwResult
	mov A,[__r0]
	mov REG[0xd4],A
	mvi A,[__r1]
	mov [__r0],A
	mvi A,[__r1]
	mov [__r1],A
	mov A,54
	sub A,[__r1]
	mov A,1
	sbb A,[__r0]
	jnc L61
X5:
	.dbline 300
; 			{
	.dbline 301
; 				bDACcurrent[i]++; // counts are ABOVE the range so INCREASE the DAC setting
	mov REG[0xd0],>_i
	mov A,[_i+1]
	add A,<_bDACcurrent
	mov REG[0xd0],>__r0
	mov [__r1],A
	mov REG[0xd0],>_i
	mov A,[_i]
	adc A,>_bDACcurrent
	mov REG[0xd0],>__r0
	mov [__r0],A
	mov REG[0xd4],A
	mvi A,[__r1]
	dec [__r1]
	mov [__r2],A
	add [__r2],1
	mov A,[__r0]
	mov REG[0xd5],A
	mov A,[__r2]
	mvi [__r1],A
	.dbline 302
; 			}
	xjmp L62
L61:
	.dbline 304
; 			else
; 			{
	.dbline 305
; 				bFlag = 0; // the counts are in range so exit the do loop
	mov [X+0],0
	.dbline 306
; 			}		
L62:
L60:
	.dbline 307
L54:
	.dbline 307
	cmp [X+0],0
	jnz L53
	.dbline 308
L50:
	.dbline 272
	mov REG[0xd0],>_i
	inc [_i+1]
	adc [_i],0
L52:
	.dbline 272
	mov REG[0xd0],>_i
	mov A,[_i+1]
	sub A,7
	mov A,[_i]
	sbb A,0
	jc L49
X6:
	.dbline -2
	.dbline 309
; 		}while (bFlag);	//if the flag is still 1 then go back and rescan the switch
; 	}
; }
L48:
	add SP,-1
	pop X
	.dbline 0 ; func end
	ret
	.dbsym l bFlag 0 c
	.dbend
	.area data(ram, con, rel)
	.dbfile ./main.c
_x::
	.byte 0,0
	.dbsym e x _x i
	.area data(ram, con, rel)
	.dbfile ./main.c
_i::
	.byte 0,0
	.dbsym e i _i i
	.area data(ram, con, rel)
	.dbfile ./main.c
_bDACcurrent::
	.byte 0,0,0,0,0,0,0
	.dbsym e bDACcurrent _bDACcurrent A[7:7]c
	.area lit(rom, con, rel)
L47:
	.byte 'b,'a,'S,'w,'O,'n,'M,'a,'s,'k,91,48,93,58,32,32
	.byte 0
L46:
	.byte 54,32,0
L43:
	.byte 53,32,0
L40:
	.byte 52,32,0
L37:
	.byte 51,32,0
L34:
	.byte 50,32,0
L31:
	.byte 49,32,0
L28:
	.byte 32,32,0
L27:
	.byte 48,32,0
L12:
	.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
	.byte 0
L3:
	.byte 'D,'e,'m,'o,32,'v,50,46,48,32,32,32,32,32,32,32
	.byte 0
L2:
	.byte 55,45,'B,'u,'t,'t,'o,'n,32,32,32,32,32,32,32,32
	.byte 0

⌨️ 快捷键说明

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