📄 hcs635.lst
字号:
0000 00346 ORG 000H
00347
00348 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
00349 ;
00350 ; FUNCTION : RESET ()
00351 ;
00352 ; DESCRIPTION : PROGRAM RESET ROUTINE
00353 ;
00354 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
0000 00355 RESET
0000 3007 00356 MOVLW b'00000111' ; disable analog sections-->move to all digitial
0001 0099 00357 movwf CMCON0
0002 0185 00358 clrf PORTA
0003 1407 00359 bsf LED ; turn off LED
0004 018E 00360 clrf TMR1L
0005 018F 00361 clrf TMR1H
0006 3031 00362 movlw b'00110001'
0007 0090 00363 movwf T1CON
0008 1683 00364 bsf STATUS,RP0 ; bank0--> RP0 = RP1 = 0
0009 303F 00365 movlw RA_TRIS ; Setup port A
000A 0085 00366 movwf TRISA ;
00367 IFNDEF P12F635
000B 300C 00368 movlw RC_TRIS ; Setup port C
000C 0087 00369 movwf TRISC ;
00370 ENDIF
000D 3061 00371 movlw b'01100001' ; internal 4 MHz
000E 008F 00372 movwf OSCCON
00373 ; movlw b'00000000'
00374 ; movwf OSCTUNE
000F 3046 00375 MOVLW b'01000110' ; SET UP FOR TMR0'S PRESCALER VALUE TO 128
00376 ; (RAPU, bit7) = 0 to enable weak pull-up for 3 also
0010 0081 00377 MOVWF OPTION_REG ; this is used for Delay loop only
0011 303F 00378 movlw b'00111111' ;
0012 0097 00379 movwf WDA ; pull-up selection register
00380 IFDEF pullup
0013 303F 00381 movlw b'00111111' ;
00382 ELSE
00383 movlw b'00000000'
00384 ENDIF
0014 0095 00385 movwf WPUDA ; pull-up direction register
0015 30FF 00386 movlw b'11111111' ;
0016 0096 00387 movwf IOCA ; enable all RA port individual pin interupt
0017 1283 00388 bcf STATUS,RP0
0018 30AB 00389 movlw 0xAB ; initialse user variables
0019 00F1 00390 movwf UserDefined
001A 30CD 00391 movlw 0xCD
001B 00F2 00392 movwf UserDefined+1
00393
00394 IFDEF P16F639
MPASM 5.16 HCS635.ASM 4-16-2008 14:39:21 PAGE 10
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
001C 00395 Init_AFE
001C 01A0 00396 clrf AFEflags
001D 1487 00397 bsf AFECS ; CS pin high
001E 1020 00398 bcf AFEOK ; assume AFE will not initialise
001F 2376 00399 call Set_up_AFE_Registers
0020 3800 00400 iorlw 0x00
0021 1903 00401 btfsc STATUS,Z ; any registers fail to initialse
0022 1420 00402 bsf AFEOK ; AFE initialised OK
00403 ; call Dump_AFE_Registers
00404 ; iorlw 0x00
00405 ; btfsc STATUS,Z ; any registers fail to initialse
00406 ; bsf AFEOK ; AFE initialised OK
0023 1683 00407 bsf STATUS,RP0
0024 0807 00408 movfw TRISC
0025 380C 00409 iorlw b'00001100' ; Reset LFDATA,ALERT as input. CS as output
0026 0087 00410 movwf TRISC ;
0027 1283 00411 bcf STATUS,RP0
0028 1487 00412 bsf AFECS
0029 1107 00413 bcf SCK
002A 1487 00414 bsf AFECS ; make sure cs pin high
00415 ENDIF
002B 00416 NEWBUTTON:
00417
00418 ; ****** LOAD SYSTEM CONIGURATION FROM EEPROM *********************************
00419
002B 2A4C 00420 GOTO DEBOUNCER ; DEBOUNCE BUTTONS AND READ EEPROM OPTIONS
00421
00422 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
00423 ;
00424 ; FUNCTION : RFOUT_OFF()
00425 ;
00426 ; DESCRIPTION : SWITCH RF OUT OFF AND CONTINUE TO WAIT FOR ONE RF Te
00427 ;
00428 ; PAGE : 0
00429 ;
00430 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
002C 00431 RFOUT_OFF
002C 0AED 00432 INCF COMP,F ; SHORTEN PULSE WIDTH
002D 00433 RFOUT_OFF3
002D 1287 00434 BCF RFOUT ; SET RF OUTPUT LOW
002E 2833 00435 GOTO TE_DELAY ; DO TE DELAY TIME
00436
00437 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
00438 ;
00439 ; FUNCTION : RFOUT_ON()
00440 ;
00441 ; DESCRIPTION : SWITCH RF OUT ON AND CONTINUE TO WAIT FOR ONE RF Te
00442 ;
00443 ; PAGE : 0
00444 ;
00445 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
002F 00446 RFOUT_ON
002F 0AED 00447 INCF COMP,F ; SHORTEN PULSE WIDTH
MPASM 5.16 HCS635.ASM 4-16-2008 14:39:21 PAGE 11
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0030 00448 RFOUT_ON3
0030 1687 00449 BSF RFOUT ; SET RF OUTPUT HIGH
0031 2833 00450 GOTO TE_DELAY ; DO TE DELAY TIME
00451
00452 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
00453 ;
00454 ; FUNCTION : TE_DELAY ()
00455 ;
00456 ; PARAMETER : CNT2 EQUAL TO NUMBER OF 5US STEPS TO REMOVE FROM DELAY
00457 ;
00458 ; DESCRIPTION : WAIT FOR 1 TE CYCLE AND FLASH LED AS REQUIRED
00459 ;
00460 ; RETURN : SET ZERO FLAG IF ALL BUTTON RELEASED
00461 ;
00462 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
0032 00463 TE_DELAYL
0032 0AED 00464 INCF COMP,F ; REMOVE 4 US COMPENSATION TIME
0033 00465 TE_DELAY
0033 2070 00466 CALL TST_CLK ; UPDATE 50MS CLOCK
0034 00467 TE_DEL03
0034 205A 00468 CALL TST_LED ; CHANGE LED PIN IF REQUIRED, RETURNS BAUD RATE AND C=0
0035 00469 TE_DEL05
0035 0000 00470 nop
0036 0000 00471 nop
0037 00DF 00472 MOVWF CNT2 ; STORE BAUD RATE
0038 1A60 00473 BTFSC BSL0 ; CHECK IF BSL0 BIT IS SET
0039 07DF 00474 ADDWF CNT2,F ; ... YES, THEN MULTIPLY BY 2
00475
003A 300E 00476 MOVLW D'14' ; MINIMUM COMPENSATION
003B 076D 00477 ADDWF COMP,W ; ADD COMPENSATION FOR CALCULATION OVERHEAD
003C 02DF 00478 SUBWF CNT2,F ; SHORTEN BIT WIDTH BY COMPENSATION AMOUNT
00479
003D 1C03 00480 BTFSS STATUS,C ; CHECK IF COMPENSATION IS MORE THAN LOOP COUNTER
003E 3400 00481 RETLW 0H ; ... YES, THEN SKIP TE DELAY LOOP
003F 01ED 00482 CLRF COMP ; CLEAR FOR NEXT BIT
0040 00483 TE_DEL10
0040 0000 00484 nop
0041 0000 00485 nop
0042 0BDF 00486 DECFSZ CNT2,F ; [2/1] MORE LOOPS TO DO?
0043 2840 00487 GOTO TE_DEL10 ; [0/2] ... YES
00488
00489 ; ***** CHECK BUTTONS ******************
00490
0044 00491 TE_DEL30
00492 IFDEF pullup
0044 0905 00493 comf PORTA,w
00494 ELSE
00495 MOVFW PORTA ; [1/1] READ GENERAL I/O PORT
00496 ENDIF
0045 0563 00497 ANDWF B_MASK,W ; [1/1] MASK OUT THE BUTTON BITS
0046 00EF 00498 movwf ButtonImage
0047 1903 00499 BTFSC STATUS,Z ; [2/1] CHECK ALL BUTTONS RELEASED ??
0048 0BEB 00500 DECFSZ CSR5,F ; DEBOUNCE FALLING BUTTON EDGE
MPASM 5.16 HCS635.ASM 4-16-2008 14:39:21 PAGE 12
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0049 284B 00501 GOTO TE_DEL90
004A 14D8 00502 BSF FLAGS,BUT_REL ; [0/1] ... YES, THEN SET BUTTON RELEASED BIT
004B 00503 TE_DEL90
004B 095A 00504 COMF BUTTON,W ; [1] INVERT BUTTON CODE
004C 056F 00505 ANDWF ButtonImage,W ; [1] AND WITH WHATS ON THE PORT
004D 18D8 00506 BTFSC FLAGS,BUT_REL ; [2/1] CHECK IF BUTTON WAS RELEASED
00507 IFDEF pullup
004E 0905 00508 comf PORTA,w
00509 ELSE
00510 MOVFW PORTA ; [1/1] READ GENERAL I/O PORT
00511 ENDIF
004F 0563 00512 ANDWF B_MASK,W ; [1/1] MASK OUT THE BUTTON BITS
0050 00EF 00513 movwf ButtonImage
0051 1903 00514 BTFSC STATUS,Z ; IF NO BUTTON WAS ADDED
0052 3400 00515 RETLW 0H ; ... THEN RETURN
0053 065A 00516 XORWF BUTTON,W ; COMPARE THE NEW BUTTON PRESSED TO PREVIOUS ONE
0054 0563 00517 ANDWF B_MASK,W ; ELIMINATE EXTRA BITS
0055 1903 00518 BTFSC STATUS,Z ; IF IT WAS THE SAME
0056 17DA 00519 BSF BUTTON,7 ; ... THEN SET THE DOUBLE BUTTON PRESS FLAG
0057 1D03 00520 BTFSS STATUS,Z ; OTHERWISE
0058 282B 00521 goto NEWBUTTON
00522
00523 ;T GOTO MAIN ; ... RESTART WITH NEW TRANSMISSION
0059 00524 VLOW_DELAY
0059 3401 00525 RETLW 1H
00526
00527 ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
00528 ;
00529 ; FUNCTION : TST_LED ()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -