?? datalog.sdi
字號(hào):
,,,LIST p=18F458 ;PIC18F458 is the target processor
,,,
,,,#include "P18f458.INC" ;Include header file
,,,
,,,;====================================================================
,,,; Macros
,,,;--------------------------------------------------------------------
,,,
,,,#define CLK_FREQ D'20000000'
,,,#define BAUD(x) ((CLK_FREQ/x)/D'64')-1
,,,
,,,#define BRG_VAL BAUD(D'9600') ;Baud rate configuration value
,,,
,,,;====================================================================
,,,; Uninitialised data
,,,;--------------------------------------------------------------------
,,,
,,,; General temps
,,,TMP1 equ 0x000000
,,,TMP2 equ 0x000001
,,,
,,,; Current LBA sector address for reading/wring
,,,ATA_A0 equ 0x000002
,,,ATA_A1 equ 0x000003
,,,ATA_A2 equ 0x000004
,,,ATA_A3 equ 0x000005
,,,
,,,; Counter used to track data words read/written to/from ATA
,,,ATA_CNT equ 0x000006
,,,
,,,; High priority interrupt temps
,,,STATUS_TEMP_H equ 0x000007
,,,WREG_TEMP_H equ 0x000008
,,,BSR_TEMP_H equ 0x000009
,,,
,,,; Low priority interrupt temps
,,,STATUS_TEMP_L equ 0x00000A
,,,WREG_TEMP_L equ 0x00000B
,,,BSR_TEMP_L equ 0x00000C
,,,
,,,; Countdown number of timer 0 overflows
,,,T0COUNT equ 0x00000D
,,,
,,,; End of logged data
,,,END_POSL equ 0x00000E
,,,END_POSH equ 0x00000F
,,,END_ATA_A0 equ 0x000010
,,,END_ATA_A1 equ 0x000011
,,,END_ATA_A2 equ 0x000012
,,,END_ATA_A3 equ 0x000013
,,,
,,,; Temp for log data to be displayed
,,,INPDATA_L equ 0x000014
,,,INPDATA_H equ 0x000015
,,,
,,,; Countdoen the number of log entries on a display line
,,,OUT_COUNT equ 0x000016
,,,
,,,; ATA data transfer buffer
,,,ATA_BUF equ 0x000400
,,,ATA_BUF_END equ 0x000600
,,,
,,,;====================================================================
,,,; Interrupt vectors
,,,;--------------------------------------------------------------------
00000000,,, org 0x000000 ;Reset vector
00000000,D00C,, bra START
,,,
00000008,,, org 0x000008 ;High priority interrupt vector
00000008,D052,, bra INT_HIGH
,,,
00000018,,, org 0x000018 ;Low priority interrupt vector
00000018,D05B,, bra INT_LOW
,,,
,,,;====================================================================
,,,; Main program
,,,;--------------------------------------------------------------------
0000001A,,START,START
0000001A,D82F,, rcall INIT ; Program initialisation
0000001C,D909,, rcall OUT_VERSION ; Version message
0000001E,,REHELP,REHELP
0000001E,D910,, rcall OUT_HELP ; Help message
00000020,,MLOOP,MLOOP
00000020,D917,, rcall OUT_COMMAND ; Command prompt
,,,
00000022,D870,, rcall UART_Getch ; Get user input
00000024,6E00,, movwf TMP1 ; and store
,,,
00000026,D91C,, rcall OUT_CRLF ; Newline
00000028,0E68,, movlw 'h' ; Check for help
0000002A,1800,, xorwf TMP1, W
0000002C,E0F8,, bz REHELP
0000002E,0E48,, movlw 'H'
00000030,1800,, xorwf TMP1, W
00000032,E0F5,, bz REHELP
00000034,0E76,, movlw 'v' ; Check for version
00000036,1800,, xorwf TMP1, W
00000038,E012,, bz VERSION
0000003A,0E56,, movlw 'V'
0000003C,1800,, xorwf TMP1, W
0000003E,E00F,, bz VERSION
00000040,0E6C,, movlw 'l' ; Check for log start
00000042,1800,, xorwf TMP1, W
00000044,E00F,, bz LOG
00000046,0E4C,, movlw 'L'
00000048,1800,, xorwf TMP1, W
0000004A,E00C,, bz LOG
0000004C,0E64,, movlw 'd' ; Check for log dump
0000004E,1800,, xorwf TMP1, W
00000050,E010,, bz DUMP
00000052,0E44,, movlw 'D'
00000054,1800,, xorwf TMP1, W
00000056,E00D,, bz DUMP
00000058,D90B,, rcall OUT_UNKNOWN ; Command is unknown
0000005A,EF10 F000,, goto MLOOP
,,,
0000005E,D8E8,VERSION,VERSION rcall OUT_VERSION ; Version message
00000060,EF10 F000,, goto MLOOP
,,,
00000064,D90D,LOG,LOG rcall OUT_LOG ; Log start message
00000066,D926,, rcall LOG_START ; Enable logging under interrupt
00000068,D84D,, rcall UART_Getch ; Wait for any user input
0000006A,D92C,, rcall LOG_STOP ; Terminate logging
0000006C,D8F9,, rcall OUT_CRLF
0000006E,EF10 F000,, goto MLOOP
,,,
00000072,D90E,DUMP,DUMP rcall OUT_DUMP ; Dump start message
00000074,D955,, rcall DUMP_ALL ; Dump data
00000076,EF10 F000,, goto MLOOP
,,,
,,,;====================================================================
,,,; Program initialisation
,,,;--------------------------------------------------------------------
0000007A,,INIT,INIT
,,, ;Setup serial comms
0000007A,0E90,, movlw b'10010000' ;Enable USART in continous receive mode
0000007C,6EAB,, movwf RCSTA
0000007E,0E22,, movlw b'00100010' ;Async, TX enabled, low baud rate
00000080,6EAC,, movwf TXSTA
00000082,0E1F,, movlw BRG_VAL ;Set baud rate
00000084,6EAF,, movwf SPBRG
00000086,50AE,, movf RCREG, W ;Flush out RX buffer
00000088,50AE,, movf RCREG, W
,,,
,,, ;Setup I/O ports
0000008A,6A80,, clrf PORTA
0000008C,6892,, setf TRISA ; Port A all input
0000008E,6A81,, clrf PORTB
00000090,6893,, setf TRISB ; Port B all input, ATA D0-7
00000092,6A82,, clrf PORTC
00000094,0EE0,, movlw B'11100000' ; Port C lower bits for ATA adressing
00000096,6E94,, movwf TRISC
00000098,0E07,, movlw B'00000111' ; Turn off comparitor
0000009A,6EB4,, movwf CMCON ; On PORTD bits 0-3
0000009C,6A83,, clrf PORTD
0000009E,6895,, setf TRISD ; Port D all input, ATA D8-15
000000A0,0E03,, movlw B'00000011'
000000A2,6E84,, movwf PORTE
000000A4,0E04,, movlw B'00000100' ; Port E lower two bits output for ATA
000000A6,6E96,, movwf TRISE ; read and write
000000A8,D91E,, rcall LOG_RESET ; Reset log pointers
000000AA,D910,, rcall LOG_UPDATE
000000AC,0012,, return
,,,
,,,;====================================================================
,,,; High priority intrrupt handler
,,,;--------------------------------------------------------------------
000000AE,,INT_HIGH,INT_HIGH
000000AE,CFD8 F007,, movff STATUS, STATUS_TEMP_H
000000B2,CFE0 F009,, movff BSR, BSR_TEMP_H
000000B6,6E08,, movwf WREG_TEMP_H
,,,
000000B8,94F2,, bcf INTCON, TMR0IF ;Clear timer 0 overflow interrupt flag
000000BA,2E0D,, decfsz T0COUNT
000000BC,D003,, bra INT_HIGH_EXIT1
000000BE,0E14,, movlw D'20' ;Only start conversion every 20 timer 0 timeouts
000000C0,6E0D,, movwf T0COUNT
000000C2,84C2,, bsf ADCON0, GO ;Start ADC conversion
,,,
000000C4,,INT_HIGH_EXIT1,INT_HIGH_EXIT1
000000C4,5008,, movf WREG_TEMP_H, W
000000C6,C009 FFE0,, movff BSR_TEMP_H, BSR
000000CA,C007 FFD8,, movff STATUS_TEMP_H, STATUS
000000CE,0010,, retfie
,,,
,,,;====================================================================
,,,; Low prority interrupt handler
,,,;--------------------------------------------------------------------
000000D0,,INT_LOW,INT_LOW
000000D0,CFD8 F00A,, movff STATUS, STATUS_TEMP_L
000000D4,CFE0 F00C,, movff BSR, BSR_TEMP_L
000000D8,6E0B,, movwf WREG_TEMP_L
,,,
000000DA,50C3,, movf ADRESL, W ;Copy ADC result to buffer
000000DC,6EDE,, movwf POSTINC2
000000DE,50C4,, movf ADRESH, W ;Copy ADC result to buffer
000000E0,6EDE,, movwf POSTINC2
,,,
000000E2,9C9E,, bcf PIR1, ADIF ;Clear ADC interrupt flag
,,,
000000E4,0E06,, movlw HIGH(ATA_BUF_END) ; Check if at end of buffer
000000E6,62DA,, cpfseq FSR2H
000000E8,D007,, bra INT_LOW_EXIT1
000000EA,0E00,, movlw LOW(ATA_BUF_END)
000000EC,62D9,, cpfseq FSR2L
000000EE,D004,, bra INT_LOW_EXIT1
,,,
000000F0,D82A,, rcall ATA_Block_Write
000000F2,D84B,, rcall ATA_A_INC
000000F4,EE24 F000,, lfsr FSR2, ATA_BUF ; Point to start of data capture buffer
,,,
000000F8,,INT_LOW_EXIT1,INT_LOW_EXIT1
000000F8,500B,, movf WREG_TEMP_L, W
000000FA,C00C FFE0,, movff BSR_TEMP_L, BSR
000000FE,C00A FFD8,, movff STATUS_TEMP_L, STATUS
00000102,0010,, retfie
,,,
,,,;====================================================================
,,,; Read a byte from the serial port
,,,;--------------------------------------------------------------------
,,,; W contains the byte that was received
,,,;--------------------------------------------------------------------
00000104,,UART_Getch,UART_Getch
00000104,0004,, clrwdt
00000106,AA9E,, btfss PIR1, RCIF ; Wait for RX buffer full
00000108,D7FD,, bra UART_Getch
0000010A,50AE,, movf RCREG, W
0000010C,0012,, return
,,,
,,,;====================================================================
,,,; Write a byte to the serial port
,,,;--------------------------------------------------------------------
,,,; W contains the byte to be sent
,,,;--------------------------------------------------------------------
0000010E,,UART_Putch,UART_Putch
0000010E,A89E,, btfss PIR1, TXIF ; Wait for TX buffer empty
00000110,D7FE,, bra UART_Putch
00000112,6EAD,, movwf TXREG
00000114,0012,, return
,,,
,,,;====================================================================
,,,; Write null terminated string to serial port from
,,,; program memory
,,,;--------------------------------------------------------------------
,,,; TBLPTR Points to the start of the string
,,,;--------------------------------------------------------------------
00000116,,UART_Puts_loop,UART_Puts_loop
00000116,DFFB,, rcall UART_Putch
00000118,,UART_Puts,UART_Puts
00000118,0009,, tblrd*+
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -