📄 dacs.asm
字号:
;***************************************************
; DACS.ASM MPB 11-2-06
;
; Test program for parallel
; and serial D/A Converters
; DAC0808 & MCP4921
;
; Proteus simulation DACS.DSN
;
;***************************************************
PROCESSOR 16F877A
INCLUDE "P16F877A.INC"
__CONFIG 0X3731
Hibyte EQU 020 ; SPI data high byte
Lobyte EQU 021 ; SPI data low byte
ORG 0 ; Load at default range
NOP ; for ICD operations
; Initialise parallel and serial ports -------------
BANKSEL TRISD
CLRF TRISD ; Parallel port
BCF TRISC,5 ; Serial data
BCF TRISC,3 ; Serial clock
BCF TRISC,0 ; Chip select
CLRF SSPSTAT ; default SPI mode
BANKSEL PORTD
CLRF PORTD ; zero PDAC
CLRF SSPCON ; default SPI mode
MOVLW B'00111001' ; Initial SDAC data
MOVWF Hibyte ; and store
MOVLW B'11111111'
MOVWF Lobyte
; Check buttons ------------------------------------
up BTFSC PORTB,1 ; Test UP button
GOTO down ; and jump if off
INCF PORTD ; Increment PDAC
INCF Hibyte ; Increment SDAC
waitup BTFSS PORTB,1 ; Wait for..
GOTO waitup ; button release
down BTFSC PORTB,2 ; Test DOWN button
GOTO spi ; and jump if off
DECF PORTD ; Decrement PDAC
DECF Hibyte ; Decrement SDAC
waitdo BTFSS PORTB,2 ; Wait for..
GOTO waitdo ; button release
; Send 16-bit data to SDAC via SPI port ------------
spi BSF SSPCON,SSPEN ; Enable SPI port
BCF PORTC,0 ; Enable SDAC chip
MOVF Hibyte,W ; Get high data
MOVWF SSPBUF ; and send it
waithi BTFSS PIR1,SSPIF ; Wait for..
GOTO waithi ; SPI interrupt
BCF PIR1,SSPIF ; Reset interrupt
MOVF Lobyte,W ; Get low data
MOVWF SSPBUF ; and send it
waitlo BTFSS PIR1,SSPIF ; Wait for..
GOTO waitlo ; SPI interrupt
BCF PIR1,SSPIF ; Reset interrupt
BSF PORTC,0 ; Disable SDAC chip
; Run output loop until reset ---------------------
BTFSC PORTB,0 ; Test run button
GOTO up ; and repeat loop
run INCF PORTD ; Increment PDAC
GOTO run
END ;---------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -