Người báo cáo: Ngày

:

Phạm Đức Mạnh 2/17/2006

Tài liệu: Trang:

TUT04.02 1/15

Tutorial no 04.02
Gửi đến: Nội dung: picvietnam@googlegroups.com Mạch phát triển PIC16F877A MICROSOFT WORD Tóm tắt: Giới thiệu chuẩn I2C

1.

Giới thiệu về chuẩn I2C
Đã làm việc với VĐK và cụ thể là PIC chúng ta không thể không biết đến chuẩn I2C, đã có rất nhiểu bài viết nói vè cái này, nhưng một cách chi tiết cụ thể mình chưa thấy. Nhân ngày chủ nhật rỗi rãi xin trình bày với các bạn về chuẩn I2C Viết tắt của Inter-Intergrated Circuit – là một bus nối tiếp do Philip phát triển. Trước đây I2C chủ yếu được dùng trong việc chế tạo các hệ thống điện tử sử dụng chip của Philip. Ngày nay I2C được sử dụng rộng rãi trong việc kết nối các thiết bị ngoại vi tốc độ thấp vào các mạch tích hợp. I2C sử dụng 2 đường truyền tín hiệu 2 chiều (một đường clock và một đường data), sử dụng hiệu điện thế 5V và cùng được kéo lên cao(pull-ups) bằng điện trở. I2C hoạt động theo nhiều mode: mode chuẩn (standard mode) hoạt động ở tốc độ 100kbit/s, mode tốc độ thấp (low-speed mode) hoạt động ở tốc độ 10kbit/s. Tần số clock có thể cho xuống 0. I2C có sử dụng 7 bit để định địa chỉ, do đó trên một bus có thể có 112 nút (16 địa chỉ được sử dụng vào mục đích riêng). Điểm mạnh của I2C là ở chỗ, một vi điều khiển có thể dùng để điều khiển cả một mạng thiết bị mà chỉ tốn 2 chân của vi điều khiển. Chính vì nguyên nhân đó mà I2C và SPI là hai chuẩn giao tiếp được sử dụng nhiều nhất trong các IC đặc biệt là các VĐK 8 bít.

2.

I2C trong VĐK PIC
Ở Việt Nam Pic16x được sử dụng và đề cập nhiều nhất là 16F84, 16F628, 16F88, 16F87x. Trong đó: 16F84, 16F628 ko tích hợp chuẩn I2C 16F88 tích hợp I2C nhưng chỉ hỗ trợ chế độ Slave, ko dùng đựoc chế độ Master 16F87x tích hợp I2C cả chế độ Master và Slave

Do đó nếu muốn sử dụng chế độ Master với các chíp 16F84, 16F628, 16F88 chúng ta phải gây dựng bằng phần mềm, và đã có rất nhiều tài liệu đề cập đến cái này điển hình 1

code ngắn hơn và tối ưu hơn so với việc sử dụng Software. SSPCON1 ( 14H bank 0) và SSPCON2 ( 91H bank 1 ).Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04. hay copy paste code về I2C vào trong chương trình của mình. Cách sử dụng I2C chế độ Master trong 16F87x 3. các bạn hoàn toàn có thể tham khảo.1. Trong đó thì: SSPSTAT: - SMP CKE R/W BF chọn Speed chuẩn ( =1: 100kHz. Receive ) SSPCON1 - WCOL : báo rằng có sự xếp chông dữ liệu SSPEN enable chế độ I2C SSPM3:SSPM0: chọn chế độ với chế độ I2C master: là '1000' 2 . Các thanh ghi sử dụng trong PIC16F877A Trong Pic 16F87x có 3 thanh ghi điều khiẻn quá trình truyền và nhận dữ liệu: đó là SSPSTAT ( 94h bank 1). Cái này dùng đơn giản hơn. và ko tối ưu ) Còn với 16F87x để sử dụng chuẩn giao tiếp I2C ta có thể dùng Hardware đã được tích hợp sẵn.02 2/15 nhất là Tutorial6 của ngài Nigel. =0 400KHz) báo rằng quá trình truyền vẫn đang diễn ra báo rằng SSPBUF vẫn đang đầy ( trong cả hai trường hợp transmit. Do đó trong Project này tôi chỉ xin đề cập đến việc dùng I2C trong 16F87x 3. ( cũng ko nên tự gây dựng nấy vì nếu tự làm sẽ mất rất nhiều thời gian. 1MHz.

400Kb. và cần sử dụng tốc độ 100Kb ta phải nạp giá trì vào thanh ghi SSPADD là: 28H với tốc độ 400Kb ta cần giá trị là 0AH. =1 là NACK ) RCEN : tín hiêu báo hiệu quá trình nhân ( chỉ dùng trong Receive: khi RCEN = 1. đầu tiên ta phải khởi tạo các giá trị ban đầu của chúng. Start Để điều khiển tốc độ baud của chế độ.02 3/15 SSPCON2 - ACKSTAT: Bít ACK được nhận từ Slave ( =0. SEN: bit khởi tạo quá trình truyền Stop.. người ta sử dụng thanh ghi SSPADD. RSEN. ACKEN: dùng để phát bít ACK hay NACK từ Master ( trong chế độ Receive ACKDT =0 là ACK. Hàm khỏi tạo I2C trong PIC16F877A Cũng tương tự như khi dùng USART. Còn để lưu và nhận dữ liệu người ta dùng thanh ghi SSPBUF Như vây tổng cộng có cả thẩy 5 thanh ghi được dùng đến : SSPSTAT.2.Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04. Restart. Chúng ta nên tách riêng việc khởi tạo này thành một chương trình con. 3. SSPCON1. Nếu ta dùng thạch anh 4M. I2C làm việc ở 3 chế độ chuẩn ( tất nhiên chỉ tương đối ) : 100Kb. Master nhận tín hiệu từ Slave ) PEN. và Transmister. LCD.. SSPCON2 ( chọn chế độ và đỉều khiển đường truyền ) SSPADD ( khởi tạo tốc độ Baud ) và SSPBUF dùng để lưu dữ liệu trong hai quá trình Receive. PWM. Việc khởi tạo phải theo các bước như sau: Chọn chế độ Master mode bằng việc SSPM3 : SSPM0 = 1000 Enable MASTER mode: SSPEN = 1 Chọn baud chuẩn với 100Kb thì SMP =1 Set tốc độ baud của đường truyền: với 100Kb thì SSPADD = 28H 3 . chỉ dùng trong Transmit ) ACKDT. 1Mb.

tôi sẽ ko đề cập ở đây ( vì nói cái này sẽ rất dài dòng ) mà ở đây tôi chỉ đề cập đến hoạt dộng của các bít này trong PIC16F87x Quá trình hoạt động các bit này khá giống nhau đẻ bắt đầu phát đi: ta phải set bit tưong ứng trong thanh ghi đó đi VD muốn gửi bít Stop đi ta chỉ cần PEN =1. Như vậy ta cần phải biết được lúc nào chương trình đa hoàn thành xong nhiệm vụ và đây chính là vai trò của cờ SSPIF trong thanh ghi PIR1. Quá trình truyền và nhận trong PIC16F877A 3. Thiet lap MSSP cho chan PORTC o che do I2C . SSPEN. Cũng tương tự như các cơ khác.02 4/15 Dưới đây là chương trình cho Initialize cho I2C: INIT_I2C: BANKSEL MOVLW MOVWF BANKSEL MOVLW MOVWF BANKSEL MOVLW MOVWF RETLW SSPCON B'00101000' SSPCON SSPSTAT B'10000000' SSPSTAT SSPADD 0x28 SSPADD 0x00 . chon MSSP che do MASTER MODE .Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04. ACKEN. RSEN. Start. ACK. SEN. Tinh toan gia tri cho thiet lap toc do 3. Như vậy chương trình con đó là: 4 . tưong tự với các bit kia và khi đã truyền xong rồi thì các bit đó sẽ tự động chuyển về 0 ( băng Hardware). Nhưng các bạn phải lưu ý qúa trình hoạt động này chỉ có tác dụng khi mà I2C đã hoàn thành xong nhiệm vụ trước đó. Restart.1. thì mới cho phép hoạt động kia bắt đầu chính yêu cầu này đặt ra chúng ta phải có một chương trình con báo hiệu khi kết thúc một hoạt động. Thiet lap toc do duong truyen . Hàm WaitMSSP và các bit chức năng trong PIC16F877A Để truyền và nhận dữ trong I2C tạo thành khối người ta dùng các bít Stop. SSPM BITS .3. Thiet lap che do chuan cua toc do baud ( SMP= 1 ) . Ý nghĩa của các bít này các bạn tham khảo các tài liệu nói về chuẩn I2C. Do yêu cầu I2C là: khi hoạt động này kết thúc.3. ACKDT ). SSPIF báo cho uC biét là hoạt động đã kết thúc bằng cách Set từ 0 lên 1 và ta phải xoá cờ này băng phần mềm cho các hoạt động tiếp theo. NACK ( ứng với PEN. Toc do chuan la 100Kb .

SSPIF . Gui bit restart STOPBit BANKSEL BSF CALL RETLW SSPCON2 SSPCON2. Gui va kiem tra bit Stop.Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04. Chua hoan thanh BCF PIR1. gui bit Stop 5 . Da hoan thanh cong viec.RSEN WaitMSSP 0x00 .02 5/15 WaitMSSP: BANKSEL PIR1 BTFSS PIR1. Gui bit start RESTARTBit BANKSEL BSF CALL RETLW SSPCON2 SSPCON2.PEN WaitMSSP 0x00 .. . Kiem tra trang thai co GOTO $-1 . và ta nên đặt chương trình con này ở cuối các hoạt động Như vậy kết hợp với chương trình con WaitMSSP chúng ta có các hoạt động: phát ra bit Stop. Restart.SSPIF . là STARTBit: BANKSEL BSF CALL RETLW SSPCON2 SSPCON2..SEN WaitMSSP 0x00 . chuyen sang hoat dong moi RETLW 0 Chương trình con này sẽ được dùng rất nhiều về sau trong mọi hoạt động của chương trình..

. Các bạn phải phân biệt được cách chuyền và nhận ( tưong ứng với Transmit.. sau khi bit cuối cùng đuợc nhận thì RCEN sẽ tự động Clear.ACKEN WaitMSSP 0x00 . Chon gui NACK . Gui NACKBit BANKSEL SSPCON2 BSF SSPCON2. Chon gui ACK . do đó để bắt đầu quá trình Read tiếp theo thì ta phải tiép tục Set RCEN ( đối với quá tình đọc ít nhất hai lần trở lên ) đê tiếp tục một hoạt động mới.02 6/15 ACKBit BANKSEL BCF BSF CALL RETLW SSPCON2 SSPCON2. Receive ) trong PIC a. Start..3.2. Ta có module nhận dữ liệu 6 .ACKDT BSF SSPCON2. Gui di Lưu ý: có sự khác biệt một chút trong bit ACKBit.. còn ACKDT dùng để chọn bit gửi đi là ACK ( = 0 ) hay NACK ( =1 ) 3.Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04.ACKDT SSPCON2. Nhận dữ liệu Để bắt đầu nhận dữ liệu từ Slave thì Master phải set bít RCEN = 1 . Phương thức truyền và nhận dữ liệu trong PIC16F87x.. NACKBit là : ACKEN gửi bit ACK nói chung đi. đây cũng là một hoạt động.ACKEN CALL WaitMSSP RETLW 0x00 . cũng tương tự như các bít Stop.

Doi cho den khi I2C thuc hien xong . quá trình Transmit bắt đầu ( lúc bắt đầu ghi dữ liệu lên SSPBUF ) khi các hoạt động trước nó đã kết thúc.RP0 SSPSTAT.2 $-1 SSPCON2 SSPCON2. Quá trình truyền dữ liệu Còn quá trình truyền dữ liệu là ngay sau khi chúng ta ghi dữ liệu cần truyền lên thanh ghi SSPBUF tất nhiên. In la W . kiem tra bit R/W.RCEN WaitMSSP ACKBit SSPBUF SSPBUF. Bit gui la cuoi la ACK STATUS.02 7/15 READ_I2C BSF BTFSC GOTO BANKSEL BSF CALL CALL BANKSEL MOVF RETURN . Và đến đây chúng ta đã có đủ các công cụ cho việc tryền hay nhận dữ liệu dùng I2C rôi đấy 7 .Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04. Vậy ta có module truyền là WRITE_I2C BANKSEL MOVWF CALL RETLW SSPBUF SSPBUF WaitMSSP 0x00 . bít này cho sự đảm bảo rằng quá trình Transmit đã kết thúc và sẵn sàng cho hoạt động Receive. Luu du lieu vao W Trong module này tôi có dùng bít R/W ở thanh ghi SSPSTAT. Khi qua trình truyền kết thúc ta gửi bit ACK tới Slave báo cho Slave biết rằng Master sẵn sàng nhận dự liệu tiếp theo b. Gui bit ACK toi Slave . Chon bank0 .W . xem Transmit da ket t . cho phep RECEIVE Mode (I2C ) .

Dùng để chọn Slave nào hoạt động. Quá trình truyền một byte dữ liệu từ Master qua slave ( transmit ) Nguyên tắc truyền một byte dữ liệu gồm có các bước cơ bản sau ( tôi ko muốn đề cập đến việc dùng ngắt để xử lý vì rất phức tạp ) Gửi bít Start từ Master tới slave. đợi cho đến khi truyền xong Tiếp tục gửii dữ liệu .Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04.. Truyền và nhận dữ liệu dùng I2C 4.. Đợi cho đến khi truyền xong Gửi địa chỉ cần lưu dữ liệu tới . Đợi cho đên khi truyền xong Gửi dữ liệu cần truyền tới Slave. Đợi cho đến khi truyền xong Gửi địa chỉ của slave lên đường truyền.. 8 .1..02 8/15 Hình 1: Xung của quá trình truyền và nhận Pic16F877A 4..

.. IN ACC: dulieu...Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04.. Load CONTROL BYTE (input mode) ADDRESS. Xuat du lieu ra I2C . Xuat du lieu ra I2C .... Ket thuc qua trinh viet du lieu len EEPROM Lưu ý : ADDR_RTC là địa chỉ của Slave và bit 0 của nó phải bằng 0 ( báo cho Slave biết quá trình là Write ) còn ACC là biến dữ liệu... Khai bao Ram 9 ..W WRITE_I2C ACC........ Dia chi ... ADDRESS là biến đia chỉ ta cần dưa vào Như vậy để truyền một byte dữ liệu là 0x15 có địa chỉ 0x05 tới EEPROM 24C01C ( địa chỉ 0xA0 ) ta chỉ việc ADDR_RTC EQU 0xA0 ADDRESS EQU 0x20 ACC EQU 0x21 ...W WRITE_I2C STOPBit 0x00 ... MOVLW MOVWF MOVLW MOVWF CALL 0x06 ADDRESS 0x15 ACC WRITE_BYTE ..02 9/15 - Khi muốn kết thúc gửi bít Stop lên đường truyền Tuân thủ lần lượt các bước trên ta có module truyền dữ liệu của một byte WRITE_BYTE CALL MOVLW CALL MOVF CALL MOVF CALL CALL RETLW STARTBit ADDR_RTC WRITE_I2C ... ADDR dia chi can truy nhap ..

. Đợi cho đên khi truyền xong Đọc dữ liệu từ Slave . Set bit 0 = 1 bao cho slave biet qua trinh doc lan sau 10 ..W WRITE_I2C STOPBit STARTBit .. Đợi cho đến khi truyền xong Gửi địa chỉ của dữ liệu cần nhận Đợi cho đên khi truyền xong Gửi bit Restart......... Qua trinh restart ADR_RTC 0x01 . Dùng để chọn Slave nào hoạt động. OUT: W) STARTBit ADDR_RTC WRITE_I2C ADDRESS... Đợi cho đên khi đọc xong Phát bít NACK báo rằng qua trình nhận dữ liệu đã kết thúc ...02 10/15 4. Đợi cho đến khi truyền xong Gửi địa chỉ của slave( bit 0 = 0 ) lên đường truyền. Đợi cho đên khi truyền xong . Load ADDRESS Byte vao W . - Quá trình nhận dữ liệu từ slave Quá trình nhận dữ liệu từ slave phải tuân thủ theo các bước sau: Gửi bít Start từ Master tới slave.. Gui bit Start . Đợi cho đên khi đọc xong Phát bít ACK báo tiếp tục nhận dữ liệu . Đợi cho đên khi truyền xong Phát bít Stop để kết thúc Tuân thủ theo các bước trên ta sẽ có quá trình đọc một byte dữ liệu READ_BYTE CALL MOVLW du lieu ) CALL MOVF CALL CALL CALL MOVLW ADDLW .2.. Đợi cho đên khi đọc xong Phát bít ACK báo tiếp tục nhận dữ liệu . ( In:ADDRESS (dia chi can truy nhap).. Load CONTROL BYTE ( cho viec xuat .Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04. Đợi cho đến khi truyền xong Gửi địa chỉ của slave lên đường truyền ( bit 0 =1 báo rằng hoạt động sắp tới là đọc). Đọc dữ liệu từ Slave . Đợi cho đến khi truyền xong Đọc dữ liệu từ Slave .

W .thanh ghi W . kiem tra bit R/W .2 $-1 SSPCON2 SSPCON2. Bây gờ các bạn có thể hoàn toàn tự truy suất EEPROM một cách vô tư.02 11/15 CALL BSF BTFSC GOTO BANKSEL BSF CALL BCF BCF CALL CALL BANKSEL MOVF .Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04.RP0 PIR1. Ket thuc qua trinh doc ghi . .SSPIF NACKBit STOPBit SSPBUF SSPBUF.RP0 SSPSTAT. Cho phep RECEIVE Mode (I2C ) Như vây để đọc giá tri tại địa chỉ 0x05 của EEPROM 24C01C và lưu dũ liệu vào thanh ghi ACC ta làm như sau MOVLW MOVWF CALL MOVWF 0x05 ADDRESS READ_BYTE ACC Thật đơn giản phải ko nào.Luu gia tri doc duoc tu EEPROM vao . tuỳ ý rồi đây 11 . Phat bit NACKBit ket thuc qua trinh nhan . RETURN WRITE_I2C STATUS.RCEN WaitMSSP STATUS.

096HZ. hour. ngày. Đây là chân cho xung ra của DS1307 có 4 chế độ 1Hz. year vây ta cần phải đặt 7 biếnt dữ liệu trong chương trình trong việc xử lý dữ liệu. 8.. họ đã tự chuyển cho ta về dạng số BCD. biến địa chỉ này tự động tăng lên một cho đến khi gặp bit Stop thì thôi Trở lại với Project của chúng ta biến chúng ta cần truy suất ở đây cả thảy có 7 địa chỉ đó là Second. Day. Sau đây là đặt biền và chương trình con để đọc dữ liệu từ RTC 12 . Date.. và 56 byte lưu trữ ( dành cho người sủ dụng ) Khi xử lý dữ liệu từ DS1307...768 Khz làm bộ tạo dao động Sử dụng Pin 3V đề đề phòng khi mất điện Có 56 byte Ram cho người sử dụng. 1 byte điểu khiển. ví dụ như ta đọc đựoc dữ liệu từ địa chỉ 0x04 ( tưong ứng với Day. các chế độ này đuợc quy định bởi các bít của thanh ghi Control Register ( địa chỉ 0x07 ) Địa chỉ của DS1307 là 0xD0 • • • Quay lại với phần trên có lẽ có nhiều bạn thắc mắc tại sao chúng ta có thể đọc ghi một cách liên tục và địa chỉ sẽ như thế nào. minute.. và sau mỗi lần đọc/ghi dữ liệu. DS1307 có các đặc tính sau: • • • • • Dùng chuẩn giao tiếp I2C Hiển thị giờ phút giây. 4.. Giao tiếp với DS1307 real time clock dùng PIC16F877A DS1307 là con Real Time clock của háng Dallas và đựoc dùng khá phổ biến hiện nay. Cũng giống như các RTC khác. Month.Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04. Thật đơn giản địa chỉ truy suất phụ thuộc vào dịa chỉ ban đầu mà ta đưa vào.192Hz. 0x11 như thế có nghĩa là lúc đó là ngày 15-11 chứ ko phải là ngày 21 tháng 17 Lưu ý đến vai trò của chân SQW/OUT. tháng năm ( đến tận năm 2099 ) Dùng thạch anh 32.ngày trong tháng) và tại 0x05 (th áng ) là 0x15. Một số đặc điểm mà các bạn cần phải chú ý: • DS1307 có 7 byte dữ liệu nằm từ địa chỉ 0x00 tới 0x06.02 12/15 5.768Hz.. 32.

RP0 BTFSC SSPSTAT. Cho phep RECEIVE Mode (I2C ) CALL WaitMSSP . Doc du lieu SECOND MOVWF RAM_SEC CALL READ_I2C . Doc du lieu DAY MOVWF RAM_DAY CALL READ_I2C . Doc du lieu MON MOVWF RAM_MON BSF STATUS. Doi cho den khi I2C thuc hien xong 13 . kiem tra bit R/W GOTO $-1 BSF SSPCON2. Doc du lieu HOUR MOVWF RAM_HOU CALL READ_I2C . Doc du lieu MINUTE MOVWF RAM_MIN CALL READ_I2C . Chon che do dia chi read CALL WRITE_I2C . Gui bit Start MOVLW ADDR_RTC .02 13/15 CBLOCK 0x20 . Load CONTROL BYTE ( cho viec xuat du lieu ) CALL WRITE_I2C MOVLW 0x00 .Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04.RCEN .2 . Doc du lieu DATE MOVWF RAM_DAT CALL READ_I2C .start of general purpose registers ADDRESS ACC RAM_SEC RAM_MIN RAM_HOU RAM_DAY RAM_DAT RAM_MON RAM_YEA endc READ_RTC CALL STARTBit . Qua trinh doc du lieu tu RTC CALL READ_I2C . Load ADDRESS Byte vao W CALL WRITE_I2C CALL STOPBit CALL STARTBit MOVLW 0xD1 .

Ket thuc qua trinh doc ghi Với chương trình đọc dữ liệu trên ta hoàn toàn có thể truy suất vào RTC bất cứ lúc nào để biết giờ hệ thống.Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04. vì trong thời gian chờ đợi ta có thể làm việc khác chứ ko phải là chỉ có việc đọc dữ liệu từ RTC.7K kéo lên nguồn và mắc vào chân RB0 của PIC16F877. tôi nghĩ rằng nguyên nhân ở chỗ các bạn đọc dữ liệu một cách liên tục. Rõ ràng cách này là hoàn toàn ko tối ưu. Bao cho SLAVE ket thuc qt nhap du lieu .7M U2 1 2 3 4 5 34 35 36 37 6 7 8 9 10 13 14 MCLR/VPP RB0/INT RC4/SDA RC3/SCL RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 RB7 RB6 RB5 RC7 RC6 RC5 RC2 RC0 RC1 33 23 18 30 29 28 27 22 21 20 19 40 39 38 26 25 24 17 15 16 8 7 5 6 VDD SQW SDA SCL X1 X2 VBAT GND 1 2 3 4 U3 1 2 VDD VSS RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3/VREF+ RB1 RB2 RB3 RB4 RA4/TOCKI RA5/AN4 RE0 RE1 RE2 OSC1/CLK1 OSC2/CLK0 DS 1307 battery So do ket noi DS1307 PIC16F877A Hình 2: Sơ đồ kết nối DS1307 Các bạn có thấy vai trò của chân SQW ở trên ko. Tôi nghĩ cách này rất tối ưu. Nhưng ở đây lại có một bài toán đặt ra là nên chọn thời điểm nào để đọc hay đọc như thế nào. Giải pháp như thế nào cho hợp lý +5V U4 U5 U6 4. Những bạn nào đã từng làm về RTC chăc hẳn đã gặp phải trường hợp là kim giây nhảy lung tung lên. nó co một chế độ phát xung 1Hz như vậy nếu như ta nối chân này với một trở 4.02 14/15 CALL BANKSEL MOVF MOVWF CALL RETLW NACKBit SSPBUF SSPBUF. Doc du lieu year ( du lieu cuoi cung ) . Như vậy chương trình ngắt sẽ là 14 .W RAM_YEA STOPBit 0x00 . và cho sử dụng ngắt ngoài Như vậy cứ mỗi khi có ngắt thì ta mới tiến hành đọc dũ liệu.

w status_temp PCLATH. save off contents of PCLATH register .02 15/15 movwf movf movwf movf movwf w_temp STATUS.. save off current W register contents .. retrieve copy of STATUS register .w STATUS w_temp. hay bằng LCD như thế nào là tuỳ thuộc ở các bạn Chúc các bạn sẽ tự tạo được cho mình một chiếc đồng hồ hiển thị ngày giờ cho chính gia đình mình. return from interrupt Việc xử lý dữ liệu và truy suất dữ liệu bằng Led 7 đoạn..1 GOTO NEXT_INTERUPT BANKSEL PORTB CALL READ_RTC .w .****************************************************************************** movf movwf movf movwf swapf swapf retfie pclath_temp. ..f w_temp.w pclath_temp .. save off contents of STATUS register ..Người báo cáo: Ngày: Phạm Đức Mạnh 2/17/2006 Tài liệu: Trang: TUT04.****************************************************************************** . retrieve copy of PCLATH register . Qua trinh xu ly du lieu va xuat du lieu tai day BCF INTCON. 15 . BTFSS INTCON. restore pre-isr STATUS register contents . move status register into W register ..w PCLATH status_temp.. move pclath register into w register . restore pre-isr W register contents .1 NEXT_INTERUPT . restore pre-isr PCLATH register contents .

Sign up to vote on this title
UsefulNot useful