📄 main.s
字号:
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 + -