PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 30-07-2009, 02:26 AM   #9
trangham283
Nhập môn đệ tử
 
Tham gia ngày: Jul 2009
Bài gửi: 7
:
Cảm ơn mọi người đã giúp mình trả lời những câu hỏi trên. Hic hic đây là code mình viết, mình dùng UART để kiểm tra xem việc đọc/viết dữ liệu nhưng vẫn không thành công.

Mình trước đó đã có một code riêng để kiểm tra UART, nên mình khá chắc chắn vấn đề nằm ở cái SPI này...

Các cao thủ có thể nhìn qua code này rồi giúp em được không ạ? Cảm ơn mọi người nhiều nhiều!


Code:
;Instruction shortcuts:
.equ 	RDINS,3
.equ	WRINS,2
.equ	WRDI,4
.equ	WREN,6
.equ	RDSR,5
.equ	WRSR,1


ADDR:		.space 2				;Current Memory address
TOSEND:		.space 2
NUM:		.space 2

RDATA:		.space 2
OUTWORD:	.space 2




call	_spi_init

mov		#0xFFFF,W0
mov		W0,NUM

;WREN:
call	cslow
mov		#WREN,W0
mov		W0,OUTWORD
call	output
call	cshigh

call	cslow
mov		#WRINS,W0
mov		W0,OUTWORD
call 	output

;Write address:
mov		ADDR,W0				;MSB of address
swap	W0
mov		W0,OUTWORD
call	output

mov		ADDR,W0				;LSB of address
mov		W0,OUTWORD
call	output

;Write data
mov 	NUM,W0				;This would write only LSB
mov		W0,OUTWORD
call	output
call 	cshigh


;Polling:
poll:
call	cslow
mov		#RDSR,W0
mov		W0,OUTWORD
call	output
mov		#0x0000,W0			;Dummy send to read
mov		W0,OUTWORD
call	output
mov		RDATA,W0
and		#0x0001,W0			;Is WIP bit clear?
bra		nz,poll
call	cshigh

send:
clr		ADDR

memrd1:

call	cslow
mov		#RDINS,W0
mov		W0,OUTWORD
call	output

;Write address:
mov		ADDR,W0				;address MSB
swap	W0
mov		W0,OUTWORD
call	output

mov		ADDR,W0				;address LSB
mov		W0,OUTWORD
call	output

mov		#0x00,W0			;Dummy write to retain clock
mov		W0,OUTWORD	
call	output
call	cshigh

mov		RDATA,W0
mov		W0,TOSEND

;Send to PC via UART

call	chktr	
mov		TOSEND,W0
mov		W0,U1TXREG
swap	        W0
call	        chktr
mov		W0,U1TXREG

done:
bra		done
;..............................................................................
;Subroutine: SPI Initialization
;..............................................................................
_spi_init:
mov		#0x013E,W0			;SS not used anyway
							;SDO pin controlled by module
                                ;Communication byte-wide
				;Input sampled at middle of data output line
				;CKE = 1: Output data changes on transition from CLK active to idle
				;CKP = 0: Idle state for CLK at low level
			        ;Master enable, scale: fsck = fcy/4	= 1MHz

mov		W0,SPI1CON
bclr	SPI1STAT,#SPIROV
bset	SPI1STAT,#SPIEN
clr		ADDR						;Set first memory address to write to: 0x0000
return

;Sending instructions to EEPROM
output:
mov		OUTWORD,W8
mov		W8,SPI1BUF

chktrans:							;Is transmit buffer empty??
mov		SPI1STAT,W2
and		#0x0002,W2
bra		nz,chktrans

chkrd:
mov		SPI1STAT,W2
and		#0x0001,W2					;Is receive buffer full?
bra		z,chkrd


mov		SPI1BUF,W8					;Dump received data
mov		W8,RDATA
bclr	SPI1STAT,#SPIROV

return

cslow:
bclr	PORTB,#RB2
return

cshigh:
bset	PORTB,#RB2
return

chktr:
;Check if UART transmit buffer is full
mov		U1STA,W2
and		#0x0200,W2
bra		nz,chktr
return

thay đổi nội dung bởi: trangham283, 30-07-2009 lúc 02:28 AM. Lý do: sửa code
trangham283 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 11:04 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam