Mortgage 2nd Mortgage

Www Savings2ndmortgage Tag Img Software Savings 2nd Mortgage MAX5581快速建立DAC与PIC微控制器的接口-电子电路图,电子技术资料网站

Www Savings2ndmortgage Tag Img Software Savings 2nd Mortgage

dead goto dead ; goto endless loop ;****************************************************************************** set_cf_error movlw 0x00 ; 0x00 into W sublw 0x00 ; Subtract W-0x00: If W<=N C set; If W>N C clear. return ; error=> cf=set ;****************************************************************************** clear_cf_ok movlw 0x01 ; 0x00 into W sublw 0x00 ; Subtract W-0x00: If W<=N C set; If W>N C clear. return ; success=> cf=clear ;****************************************************************************** HWSPI_init ;T SPI MSSP Initialization for M2EAM schematic ;T CPOL,CPHA = 0,0 => CKP = 0 & CKE = 1 bcf SSPCON1,SSPEN ;T Disable the MSSP, SSPCON-5 ; bcf TRISC,SDO ;T TRISC bit5 RC5/SDO = 0 MOSI Output bcf TRISC,SCK ;T TRISC bit3 RC3/SCK = 0 SCLK Output bsf TRISC,SDI ;T TRISC bit4 RC4/SDI = 1 MISO Input movlw 0x0040 ;T SSPSTAT bit8 = 0 sampled in middle ;T SSPSTAT bit6 = CKE = 1 movwf SSPSTAT ;T Used to be sspstat on older PICs movlw 0x0020 ;T SSPCON1 bit5 SSPEN = 1 Enables sycn serial port ;T SSPCON1 bit4 = CKP = 0 ;T SSPCON1 bit3= 0 = Turn MSSP ON for SPI ;T SSPCON1 bit2-0 = 000b = SCLK = Fosc/4 ;T SSPCON1 bit2 = 0 = Master movwf SSPCON1 ;T Used to be sspcon on older PICs bsf INTCON,PEIE ;T INTCON bit6 = PEIE = 1 = Enable periph interrupt bsf PIE1,SSPIE ;T PIE1 bit3 = SSPIE = 1 = interrupt enable movlw 0x00 ;T load 0x00 into W movwf tcount ;T initialize tcount to zero (0x00) ;****************************************************************************** HWSPI_W_configure ;Configure SPI Mode ; ;On Entry: WREG = confDATA ;On Exit: ;On Success: return with C flag clear ;On Failure: return with C flag set ; bcf SSPCON1,SSPEN ;T Disable the MSSP, SSPCON1-5 movwf temp ;T move the confDATA byte to temp btfsc SSPCON1,SSPM3 ;T In SPI Mode?, skip if yes call HWSPI_init ;T MSSP is in wrong mode, Init for SPI ; btfsc temp,1 ;T Is bit1 of confDATA byte clear? if so skip next goto CPOL_1 ;T goto CPOL = 1 label => CPOL = 1 btfsc temp,0 ;T Is bit0 of confDATA byte clear? if so skip next ;T => CPOL = 0 , CPHA = ? goto CPOLCPHA_01 ;T goto => CPOL = 0 CPHA = 1 ;Configure for CPOL = 0, CPHA = 0 bcf SSPCON1,CKP ;T SSPCON1 bit4 = CKP = 0 bsf SSPSTAT,CKE ;T SSPSTAT bit6 = CKE = 1 btfsc SSPCON1,CKP ;T Is SSPCON1 bit4 = CKP = 0 ? goto badjump ;T CKP bit test error btfss SSPSTAT,CKE ;T Is SSPSTAT bit6 = CKE = 1 ? goto badjump ;T CKE bit test error goto okjump2 ;OK configured! ; CPOL_1 btfsc temp,0 ;T Is bit0 of confDATA byte clear? if so skip next ;T CPOL = 1 , CPHA = ? goto CPOLCPHA_11 ;T goto => CPOL = 1, CPHA = 1 ;Configure for CPOL = 1, CPHA = 0 bsf SSPCON1,CKP ;T SSPCON1 bit4 = CKP = 1 bsf SSPSTAT,CKE ;T SSPSTAT bit6 = CKE = 1 btfss SSPCON1,CKP ;T Is SSPCON1 bit4 = CKP = 1 ? goto badjump ;T CKP bit test error btfss SSPSTAT,CKE ;T Is SSPSTAT bit6 = CKE = 1 ? goto badjump ;T CKE bit test error goto okjump2 ;OK configured! ; CPOLCPHA_01 ;configure for CPOL = 0, CPHA = 1 bcf SSPCON1,CKP ;T SSPCON1 bit4 = CKP = 0 bcf SSPSTAT,CKE ;T SSPSTAT bit6 = CKE = 0 btfsc SSPCON1,CKP ;T Is SSPCON1 bit4 = CKP = 0 ? goto badjump ;T CKP bit test error btfsc SSPSTAT,CKE ;T Is SSPSTAT bit6 = CKE = 0 ? goto badjump ;T CKE bit test error goto okjump2 ;OK configured! ; CPOLCPHA_11 ;configure for CPOL = 1, CPHA = 1 bsf SSPCON1,CKP ;T SSPCON1 bit4 = CKP = 1 bcf SSPSTAT,CKE ;T SSPSTAT bit6 = CKE = 0 btfss SSPCON1,CKP ;T Is SSPCON1 bit4 = CKP = 1 ? goto badjump ;T CKP bit test error btfsc SSPSTAT,CKE ;T Is SSPSTAT bit6 = CKE = 0 ? goto badjump ;T CKE bit test error goto okjump2 ;OK configured! ; okjump2 bsf SSPCON1,SSPEN ;T Re-enable MSSP goto clear_cf_ok return badjump bsf SSPCON1,SSPEN ;T Re-enable MSSP goto set_cf_error ;T configuration error return ;****************************************************************************** HWSPI_W_speed ;On Entry: WREG = speedDATA & checks SSPCON1-3 for SPI mode ; speedDATA = 0x00 => Fosc/4 ; speedDATA = 0x01 => Fosc/16 ; speedDATA = 0x02 => Fosc/64 ; speedDATA = 0x03 => Timer Divisor (Not working yet) ; ;On Exit: ;On Success: return with C flag clear ;On Failure: return with C flag set ; bcf SSPCON1,SSPEN ;T Disable MSSP movwf speedLbyte ;T move speedDATA stored in W to speedLbyte btfsc SSPCON1,SSPM3 ;T In SPI Mode?, skip if yes call HWSPI_init ;T MSSP is in wrong mode, Init for SPI ; ;Test if speedLbyte = 0x00. If yes, SPI clock speed = Fosc/4 movlw 0x00 ;T load 0x00 into W subwf speedLbyte,W ;T subtract 0x00 from tcount result in w btfss STATUS,Z ;T test zero flag, skip next instr if z set goto fdiv16 ;T goto Fosc/16 section bcf SSPCON1,SSPM1 ;T SSPCON1-1 = 0 bcf SSPCON1,SSPM0 ;T SSPCON1-0 = 0 goto okjump3 ;T Fosc/4 was selected ;Test if speedLbyte = 0x01. If yes, SPI clock speed = Fosc/16 fdiv16 movlw 0x01 ;T load 0x01 into W subwf speedLbyte,W ;T subtract 0x01 from tcount result in w btfss STATUS,Z ;T test zero flag, skip next instr if z set goto fdiv64 ;T goto Fosc/64 section bcf SSPCON1,SSPM1 ;T SSPCON1-1 = 0 bsf SSPCON1,SSPM0 ;T SSPCON1-0 = 1 goto okjump3 ;T Fosc/16 was selected ;Test if speedLbyte = 0x02. If yes, SPI clock speed = Fosc/64 fdiv64 movlw 0x02 ;T load 0x02 into W subwf speedLbyte,W ;T subtract 0x02 from tcount result in w btfss STATUS,Z ;T test zero flag, skip next instr if z set goto timer ;T goto Timer section bsf SSPCON1,SSPM1 ;T SSPCON1-1 = 1 bcf SSPCON1,SSPM0 ;T SSPCON1-0 = 0 goto okjump3 ;T Fosc/64 was selected ;Test if speedLbyte >= 0x03. If yes, SPI clock speed will be set by the timer ;SETTING THE SPI CLOCK WITH THE TIMER WILL RETURN A FAILURE AT THIS TIME. ;Future To d Implement the TIMER section timer movlw 0x03 ;T load 0x02 into W subwf speedLbyte,W ;T subtract 0x02 from tcount result in w btfss STATUS,Z ;T test zero flag, skip next instr if z set goto badjmp2 ;T goto error section to return failure goto badjmp2 ;T goto error section to return failure ; bsf SSPCON1,SSPM1 ;T SSPCON1-1 = 1 ; bsf SSPCON1,SSPM0 ;T SSPCON1-0 = 1 ; goto okjump3 ;T Fosc/64 was selected okjump3 bsf SSPCON1,SSPEN ;T Re-enable MSSP bcf STATUS,C ;T clear c flag on success return badjmp2 bsf SSPCON1,SSPEN ;T Re-enable MSSP bsf STATUS,C ;T set c flag on failure return ;****************************************************************************** HWSPI_W_spidata_W ;Simultaneously write SPI data on MOSI and read SPI data on MISO ; ;on Entry: WREG = mosiDATA & checks bit3 of SSPCON1 for SPI mode ;On Exit: WREG = misoDATA ;On Success: return with C flag clear ;On Failure: return with C flag set ; movwf temp2 ;T move mosiDATA stored in W to WREG_TEMP btfsc SSPCON1,SSPM3 ;T In SPI Mode?, skip if yes call HWSPI_init ;T MSSP is in wrong mode, Init for SPI movf temp2,W ;T load W with original mosiDATA ; movwf SSPBUF ;T move byte to transmit to SSPBUF (transmit buffer) movlw 0x00 ;T load 0x00 into W movwf tcount ;T initialize tcount to zero (0x00) again1 btfsc SSPSTAT,BF ;T receive completed? if no, skip next goto okjump1 ;T no. goto again incf tcount,F ;T increment tcount movlw 0xFF ;T load w with literal subwf tcount,W ;T subtract 0xFF from tcount result in w btfss STATUS,Z ;T test zero flag, skip next instr if z set goto again1 ;T loop until timeout goto set_cf_error ;T receive timeout error return okjump1 movf SSPBUF,W ;T put received data in W goto clear_cf_ok return ;****************************************************************************** ; UART routine asyxmtc bcf PORTC,xmit ;T used to be portc,xmit call full movlw 0x08 ;TEST_T "08" movwf bitctr asyxmt1 rrcf xmtreg,f btfsc STATUS,C goto asyxmt2 bcf PORTC,xmit ;T used to be portc,xmit goto asyxmt3 asyxmt2 bsf PORTC,xmit ;T used to be portc,xmit ; asyxmt3 call full decfsz bitctr,f goto asyxmt1 ; bsf PORTC,xmit ;T used to be portc,xmit call full retlw 0 ;****************************************************************************** ; UART baud rate of 115.2kbps using a 40MHz System Clock full movlw d'3' movwf cntrb vdly0 movlw d'6' ; d'43' with 4MHz => 2400 baud movwf cntra vdly1 decfsz cntra,f goto vdly1 decfsz cntrb,f goto vdly0 retlw 0 ;****************************************************************************** ;End of program END

表1. 配置写命令,将所有四路DAC的建立时间设置为3µs
SPI Line C7 C6 C5 C4 C3 C2 C1 C0 D7 D6 D5 D4 D3 D2 D1 D0
DIN 1 1 1 0 1 1 0 0 0 0 0 0 1 1 1 1

表2. 装载全部DAC输出命令
SPI Line C3 C2 C1 C0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
DIN (1st) 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0
DIN (2nd) 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1

表2中,第一个命令将所有DAC输出设置为零,第二个命令将所有DAC设置为满量程输出。

<-- END: DB HTML -->

[] [返回上一页] [打 印]
上一篇文章:利用低功耗微控制器开发FFT应用 下一篇文章:MAX5591快速建立DAC与PIC微控制器的接口
相关技术应用阅读 相关技术资料下载