Đọc và ghi vào bộ nhớ dữ liệu EEPROM

Một phần của tài liệu Đồ án:Thiết Kế Hệ Thống Thước Đo Tuyến Tính doc (Trang 28 - 75)

Để đọc một vị trớ bộ nhớ dữ liệu, ta phải ghi địa chỉ vào thanh ghi EEADR xoỏ bớt điều khiển EEPGD (EECON1<7>) sau đú đặt bit điều khiển RD (EECON1<0>). Dữ liệu cú thể được đọc bởi lệnh tiếp theo. EEDATA sẽ giữ giỏ trị này cho tới khi cú hoạt động đọc dữ liệu khỏc hoặc tới khi được ghi.

Ghi vào bộ nhớ dữ liệu EEPROM thỡ đầu tiờn địa chỉ phải được ghi vào thanh ghi EEADR và dữ liệu ghi vào thanh ghi EEDATA.

1.2.7. Đọc và ghi chƣơng trỡnh FLASH.

Đọc một vị trớ bộ nhớ chương trỡnh cú thể thực hiện bởi việc ghi 2 byte địa chỉ vào thanh ghi EEADR và EEADRH, đặt bit điều khiển EEPGD (EECON1<7>) và sau đú đặt bit điều khiển RD (EECON1<0>). Chỉ khi bit điều khiển đọc được đặt, vi xử lý sẽ sử dụng chu trỡnh lệnh thứ hai để đọc dữ liệu.

Dữ liệu đú sẽ cú trong chu trỡnh thứ 3, trong cỏc thanh ghi EEDATA và EEDATH, do đú nú cú thể được đọc là 2 byte trong cỏc lệnh tiếp theo. Dữ liệu cú thể được đưa ra ngoài của EEDATH, EEDATA bắt đầu với lệnh thứ 3 sau lệnh BSF EECON1, RD. Và thanh ghi EEDATA và EEDATH sẽ giữ giỏ trị này cho tới khi cú hoạt động đọc một giỏ trị khỏc hoặc cú hoạt động ghi.

Ghi một vị trớ bộ nhớ chương trỡnh cú thể được thực hiện bởi việc ghi thanh ghi 2 byte địa chỉ vào cỏc thanh ghi EEADR và EEADRH, ghi dữ liệu 13 bit vào thanh ghi EEDATA và EEDATH.

1.2.8. Cổng vào ra.

Một số chõn của cỏc cổng vào/ra được tớch hợp với những thiết bị ngoại vi. Nhỡn chung khi thiết bị ngoại vi hoạt động, cỏc chõn cú thể khụng sử dụng với mục đớch làm chõn vào ra.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

29

1.2.8.1. Cổng A và thanh ghi TRISA.

Cổng A là cổng hai chiều với độ rộng đường truyền là 6 bit. Để điều khiển việc truy xuất dữ liệu người ta dựng thanh ghi TRISA. Nến đặt bit TRISA=1 thỡ lỳc này cổng A sẽ cú cỏc chõn là chõn vào. Và ngược lại sẽ là cỏc chõn xuất. Việc đọc cổng A chớnh là đọc trạng thỏi cỏc chõn, trong đú việc xuất phải qua việc xuất cỏc chốt của cổng. Cỏc chõn của cổng A chủ yếu được sử dụng với mục đớch chớnh là nhận tớn hiệu tương tự hoặc làm chõn vào/ra. Riờng chõn RA4 cú thể đa hợp với chõn vào bộ Timer0 và khi đú nú trở thành chõn RA4/TOCKI. Chõn này như một đầu vào Schmitt Trigger và nú mở một đầu ra. Cỏc chõn khỏc của cổng A là chõn vào với bộ TTL. Việc điều khiển cỏc chõn này thụng qua việc đặt hay xoỏ cỏc bit của thanh ghi ADCON1. Thanh ghi TRISA điều khiển trực tiếp cỏc chõn của cổng A, khi sử dụng cỏc chõn này để nhận tớn hiệu tương tự vào ta phải chắc chắn rằng cỏc bit của thanh ghi TRISA đó được đặt rồi.

Sơ đồ khối chõn RA3ữRA0, chõn RA5 và của chõn RA4/TOCKI của cổng A( hỡnh 1.6 ).

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

30

1.2.8.2 Cổng B và thanh ghi TRISB.

Cổng B là cổng hai chiều với độ rộng đường truyền là 8 bit. Tương ứng với nú để điều khiển trực tiếp dữ liệu ta sử dụng thanh ghi TRISB. Nếu đặt bit TRISB=1 thỡ lỳc này cỏc chõn của cổng B được định nghĩa là chõn vào. Nếu xoỏ bit TRISB=0 thỡ lỳc này cỏc chõn của cổng B được định nghĩa là chõn ra. Nội dung của chốt ra cú thể chọn trờn mỗi chõn.

Cỏc chõn của cổng B cú thể đa hợp với cỏc chương trỡnh vận hành bằng điện ỏp thấp. Đú là cỏc chõn sau: RB3/PGM, RB6/PGC, RB7/PGD. Sự thay đổi hoạt động của những chõn này được miờu tả ở trong phần đặc tớnh nổi bật. Mỗi chõn của cổng B sẽ cú một khả năng dừng bờn trong nhưng yếu. Điều này được trỡnh bày ở việc xoỏ bớt RBPU (bit 7 của thanh ghi OPTION_REG). Khả năng dừng này sẽ tự động tắt đi khi cỏc chõn của cổng được định nghĩa là chõn ra. Khả năng dừng này sẽ tự động mất khi ta RESET. Bốn chõn của cổng B, từ RB7 đến RB4 cú đặc tớnh là ngắt khi thay đổi trạng thỏi. Chỉ những chõn được định dạng là những chõn vào thỡ ngắt này mới tồn tại. Một vài chõn RB7ữRB4 được định dạng như chõn ra, nú thi hành ngắt trờn sự thay đổi so sỏnh. Chõn vào RB7ữRB4 được so sỏnh với giỏ trị cũ của chốt ở lần đọc cuối cựng của cổng B. Sự ghộp đụi khụng khớp chõn ra của RB7ữRB4 bằng lệnh OR làm phỏt ra ngắt với cờ bớt RBIF của thanh ghi INTCON. Ngắt này cú thể khởi động thiết bị từ trạng thỏi SLEEP.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

31

Hỡnh 1.7. Sơ đồ khối của chõn RB3 đến RB0, chõn RB7:RB4 của cổng B.

1.2.8.3 Cổng C và thanh ghi TRISC.

Cổng C là cổng hai chiều với độ rộng đường truyền là 8 bit. Tương ứng với việc điều khiển nú là thanh ghi TRISC. Nếu đặt bit TRISC=1 thỡ tương ứng với chõn của cổng C là chõn vào. Nếu ta xoỏ bit TRISC=0 thỡ tương ứng với nú chõn của cổng C là chõn ra. Đặt nội dung của chốt ra cú thể đặt trờn chõn chọn. Cổng C đa hợp với việc vận hành thiết bị ngoại vi. Chõn của cổng C thụng qua bộ đệm Schmitt Trigger đầu vào.Khi chế độ I2C hoạt động, thỡ cỏc chõn của cổng PORTC<4:3> cú thể được sắp xếp với mức I2C thường hoặc với mức SMBUS bằng cỏch sử dụng bit CKE (SSPSTAT<6>) là bit 6 của thanh ghi SSPSTAT.Khi vận hành cỏc thiết bị ngoại vi bằng việc xỏc định bit TRIS của mỗi chõn cổng C. Một số phần phụ cú thể ghi đố lờn bit TRIS làm cho chõn này sẽ trở thành chõn ra, trong khi đú thỡ một số phần phụ khỏc lại ghi đố lờn bit TRIS làm cho chõn này trở thành chõn vào. Từ khi những bit TRIS ghi đố thỡ trong việc tỏc động trong cỏc thiết bị ngoại vi là cú thể, những lệnh đọc - sửa - ghi (BSF, BCF, XORWF) với thanh ghi TRISC như là nơi gửi tới sẽ được trỏnh.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

32

Người sử dụng nờn đề cập tới việc phõn chia kết nối cỏc thiết bị ngoại vi cho việc đặt chớnh xỏc cỏc bit TRIS.

Hỡnh 1.8. Sơ đồ khối chõn RC <0:2> RC <5:7> và chõn RC <3:4> cổng C.

1.2.8.4 Cổng D và thanh ghi TRISD.

Cổng D cú 8 bit cú bộ đệm đầu vào Schmitt Trigger. Mỗi chõn được sắp xếp riờng lẻ như đầu vào hoặc đầu ra. Cổng D cũng cú thể được sắp xếp như là một cổng vi xử lý 8 bớt (cổng phụ song song) bằng việc đặt bit điều khiển PSPMODE (TRISE<4>) và trong chế độ này vựng đệm đầu vào là TTL.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

33

Hỡnh 1.9. Sơ đồ khối cổng D.

1.2.8.5. Cổng E và thanh ghi TRISE.

Cổng E cú 3 chõn là RE0/RD/AN5, RE1/WR/AN6, RE2/CS/AN7. Cỏc chõn này cú thể sắp xếp riờng lẻ là cỏc đầu vào hoặc đầu ra, và cỏc chõn cú vựng đệm đầu vào là cỏc mạch Schmitt Trigger.

Cổng vào/ra E trở thành đầu vào điều khiển cho cổng vi xử lý khi bit PSPMODE (TRISE<4>) được đặt. Và trong chế độ này phải chắc chắn rằng cỏc bit TRISE<2:0> được đặt (cỏc chõn được định dạng là cỏc đầu vào số), thanh ghi ADCON1 phải được định dạng cho việc số vào/ra và vựng đệm đầu vào là TTL.

Cỏc chõn cổng E cũng được tớch hợp với cỏc đầu vào tương tự và trong trường hợp này cỏc chõn sẽ đọc là “0”.

Thanh ghi TRISE điều khiển trực tiếp cỏc chõn RE, ngay cả khi chỳng được dựng là cỏc đầu vào tương tự.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

34

Hỡnh 1.10. Sơ đồ khối của cổng E.

1.2.9. Cỏc bộ Timer của chip.

Bộ vi điều khiển PIC16F87X cú 3 bộ Timer đú là: Timer0, Timer1, Timer2

1.2.9.1. Bộ Timer0.

Là bộ định thời hoặc bộ đếm cú những ưu điểm nổi bật sau: + 8 bớt cho Timer hoặc bộ đếm

+ Cú khả năng đọc và viết

+ Cú thể dựng đồng hồ bờn trong hoặc bờn ngoài + Cú thể chọn sườn xung của xung đồng hồ

+ Cú hệ số chia cho xung đầu vào cú thể lập trỡnh lại bằng phần mềm + Ngắt tràn

Hoạt động của Timer0:

Timer 0 cú thể hoạt động như một bộ định thời hoặc một bộ đếm. Việc chọn bộ định thời hoặc bộ đếm cú thể được xỏc lập bằng việc xoỏ hoặc đặt bit TOCS của thanh ghi OPTION_REG<5>.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

35

Nếu dựng hệ số chia xung đầu vào thỡ xoỏ bit PSA của thanh ghi OPTION_REG<3>.

Trong chế độ bộ định thời được lựa chọn bởi việc xoỏ bit T0CS (OPTION_REG<5>), nú sẽ được tăng giỏ trị sau một chu kỳ lện nếu khụng chọn hệ số chia xung đầu vào. Và giỏ trị của nú được viết tới thanh ghi TMR0.

Chế độ đếm được lựa chọn bởi việc đặt bit T0CS (OPTION_REG<5>). Trong chế độ bộ đếm, nú sẽ được tăng ở xung đi xuống nếu xoỏ bit T0SE (OPTION_REG<4>) hoặc ở xung đi lờn nếu đặt bit T0SE. Và giỏ trị của nú được viết tới thanh ghi TMR0.

Khi dựng xung clock bờn ngoài cho bộ định thời Timer0 và khụng dựng hệ số chia clock đầu vào Timer0 thỡ phải đỏp ứng cỏc điều kiện cần thiết để cú thể hoạt động đú là phải bảo đảm xung clock bờn ngoài cú thể đồng bộ với pha xung clock bờn trong (Tosc).

*) Cỏc hệ số chia.

Hệ số chia dựng cho Timer0 hoặc bộ WDT. Cỏc hệ số này khụng cú khả năng đọc và khả năng viết. Để chọn hệ số chia xung vào Timer0 hoặc cho bộ WDT ta tiến hành xoỏ hoặc đặt bit PSA của thanh ghi OPTION_REG<3>.

Những bit PS2, PS1, PS0 của thanh ghi OPTION_REG<2:0> dựng để xỏc lập cỏc hệ số chia.

*) Ngắt của bộ Timer 0.

Ngắt của bộ Timer 0 được phỏt sinh ra khi thanh ghi TMR0 bị tràn tức từ FFh quay về 00h. Khi đú bit T0IF của thanh ghi INTCON<2> sẽ được đặt. Bit này phải được xoỏ bằng phần mềm nếu cho phộp ngắt bit T0IE của thanh ghi INTCON<5> được đặt. Timer0 bị dừng hoạt động ở chế độ SLEEP ngắt Timer 0 khụng đỏnh thức bộ xử lý ở chế độ SLEEP.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

36

Hỡnh 1.11. Sơ đồ khối của Timer0 và WDT.

Hỡnh 1.12. Thanh ghi OPTION_REG. Bớt 5 TOCS lựa chọn nguồn clock

1 = Clock ngoài từ chõn T0CKI 0 = Clock trong Focs/4

Bớt 4 T0SE lựa chọn sườn xung clock

1 = Timer 0 tăng khi chõn T0CKI từ cao xuống thấp(sườn xuống) 0 = Timer 0 tăng khi chõn T0CKI từ thấp lờn cao(sườn xuống)

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

37

Bit 3 PSA gỏn bộ chia xung đầu vào 1 = gỏn bộ chia Prescaler cho WDT 0 = gỏn bộ chia Prescaler cho Timer 0

Bit 2ữ0 PS2ữPS1 lựa chọn hệ số chia xung vào theo bảng sau Bảng 1.2. Lựa chọn hệ số chia xung.

PS2ữPS0 Timer0 WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 1.2.9.2. Bộ Timer1.

Bộ Timer1 cú thể là bộ đếm hoặc bộ định thời với ưu điểm sau:

+ 16 bit cho bộ đếm hoặc bộ định thời (gồm hai thanh ghi TMR1H, TMR1L).

+ Cú khả năng đọc và viết

+ Cú thể chọn xung đồng hồ bờn trong hoặc bờn ngoài + Cú thể ngắt khi tràn FFFFh về 0000h

Timer1 cú một thanh ghi điều khiển, đú là thanh ghi T1C0N. Bộ Timer1 cú hoạt động hay khụng hoạt động là nhờ việc đặt hoặc xoỏ bit TMR1ON (T1CON<0>).

*) Hoạt động của bộ Timer1.

Nú cú thể hoạt động ở một trong cỏc chế độ sau: + Là một bộ định thời 16 bit.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

38

+ Là một bộ đếm cú đồng bộ.

+ Là một bộ đếm khụng cú đồng bộ.

Phương thức hoạt động của bộ này được xỏc định bởi việc chọn nguồn xung vào Timer1. Nguồn xung đồng hồ được chọn bởi việc đặt hoặc xoỏ bit TMR1CS (T1CON<1>). Ở chế độ bộ định thời, đầu vào là clock trong Fosc/4, bit đồng bộ T1SYNC (T1CON<2>) khụng cú tỏc dụng vỡ clock trong luụn đồng bộ. Chế độ bộ đếm hoạt động hai chế độ: Cú đồng bộ xung vào xoỏ bit T1SYNC (T1CON<2>), khụng đồng bộ xung vào đặt bit T1SYNC (T1CON<2>) Timer1 tăng ở sườn khi xung đầu vào.

Hỡnh 1.13. Sơ đồ khối TIMER1.

Khi bộ dao động Timer1 cho phộp hoạt động thỡ cỏc chõn RC/T1OSI/CCP2, RC0/T1OSO/T1CKI trở thành chõn vào.

Ở chế độ đếm cú đồng bộ, bộ đếm tăng mỗi khi sườn lờn ở chõn RC0 hoặc ở chõn RC1 nếu bit T1OSCEN xoỏ và xung vào phải đồng bộ với clock trong, ở chế độ này bộ đếm khụng tăng trong trong trạng thỏi SLEEP.

Ở chế độ bộ đếm khụng đồng bộ Timer1 tăng mỗi khi sườn lờn ở chõn RC0 hoặc ở chõn RC1 nếu bit T1OSCEN xoỏ, ở chế độ này bộ đếm tiếp tục tăng

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

39

trong trạng thỏi SLEEP và cú khả năng tràn gõy ra ngỏt khi đú bộ xử lý được đỏnh thức.

*) Dao động của Timer1.

Mạch dao động thạch anh được xõy dựng giữa 2 chõn T1OSI và T1OS0. Khi dao động được cung cấp ở chế độ cụng suất thấp thỡ tần số cực đại của nú sẽ là 200KHz và ở chế độ SLEEP nú cung cấp ở tần số 32KHz.

*) Ngắt của bộ Timer1.

Hỡnh 1.14. Thanh ghi điều khiển Timer1.

Cặp thanh ghi TMR1H và TMR1L tăng từ giỏ trị 0000h đến giỏ trị FFFFh đến giỏ trị này tiếp tục tăng thỡ tràn và quay lại giỏ trị 0000h. Và ngắt xuất hiện khi tràn quỏ giỏ trị FFFFh khi này cờ ngắt TMR1IF sẽ được đặt. Ngắt cú thể hoạt động hoặc khụng hoạt động nhờ việc đặt xoỏ bớt TMR1IF.

*) Thanh ghi điều khiển Timer1 T1CON: Bit 7, 6 khụng sử dụng.

Bit 5, 4 T1CKPS1ữT1CKPS0 lựa chọn hệ số chia xung vào. Bảng 1.3. Lựa chọn hệ số chia xung.

T1CKPS1ữT1CKPS0

00 1:xử lý ngẫu nhiên ổn định

01 1:2

10 1:4

11 1:8

Bớt 3 T1OSCEN bớt điều khiển bộ dao động Timer1. 1 = Bộ dao động hoạt động.

0 = Bộ dao động khụng hoạt động.

Bit 2 bit điều khiển xung clock ngoài đồng bộ khi TMR1CS = 1. Bit2 = 0 cú đồng bộ clock ngoài.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

40

Bit2 = 1 khụng đồng bộ clock ngoài khi TMR1CS = 0 bit này khụng cú tỏc dụng.

Bit 1 TMR1CS lựa chọn nguồn xung clock vào.

TMR1CS = 1 clock từ chõn RC0/T1OSO/T1CKI (sườn lờn). Bit 0 bit bật tắt Timer.

1 = Timer 1 enable. 0 = Timer 1 disable.

1.2.9.3. Bộ Timer2.

Bộ Timer 2 cú những đặc tớnh sau đõy: + 8 bit cho bộ định thời (thanh ghi TMR2). + 8 bit vũng lặp (thanh ghi PR2).

+ Cú khả năng đọc và viết ở cả hai thanh ghi núi trờn. + Cú khả năng lập trỡnh bằng phần mềm tỷ lệ trước. + Cú khả năng lập trỡnh bằng phần mềm tỷ lệ sau.

Chế độ SSP dựng đầu ra của TMR2 để tạo xung clock. Timer2 cú một thanh ghi điều khhiển đú là thanh ghi T2CON. Timer2 cú thể tắt bằng việc xoỏ bit TMR2CON của thanh ghi T2CON

*) Hoạt động của bộ Timer2.

Timer2 được dựng chủ yếu ở phần điều chế xung của bộ CCP, thanh ghi TMR2 cú khả năng đọc và viết, nú cú thể xoỏ bằng việc reset lại thiết bị. Đầu vào của xung cú thể chọn cỏc tỷ lệ sau: 1:1, 1:2 hoặc 1:16 việc chọn cỏc tỷ này cú thể điều khiển cỏc bit sau T2CKPS1 và bớt T2CKPS0.

*) Ngắt của bộ Timer2.

Bộ Timer2 cú 1 thanh ghi 8 bớt PR2. Timer2 tăng từ giỏ trị 00h cho đến khớp với PR2 và tiếp theo nú sẽ reset lại giỏ trị 00h và lệnh kế tiếp thực hiện. Thanh ghi PR2 là một thanh ghi cú khả năng đọc và khả năng viết. Thanh ghi PR2 bắt đầu từ giỏ trị FFh đầu ra của TMR2 là đường dẫn của cổng truyền thụng đồng bộ, nú được dựng để phỏt cỏc xung đồng hồ.

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

41

Hỡnh 1.15. Sơ đồ khối bộ TIMER2.

Hỡnh 1.16. Thanh ghi điều khiển timer2.

*) Thanh ghi TCON2. Bit 7 khụng sử dụng.

Bit 6ữ3 TOUTPS3ữTOUTPS0 bit lựa chọn hệ số đầu ra Timer2 0000 = 1:1

0001 = 1:2 0010 = 1:3

1111 = 1:16

Bớt 2 TMR2ON bit bật tắt hoạt động Timer2 1= enable

Sinh viờn: Nguyễn Thị Phương Thảo_ĐT901

42

Bit 1-0 T2CKPS1-T2CKPS0 chọn hệ chia đầu vào

Một phần của tài liệu Đồ án:Thiết Kế Hệ Thống Thước Đo Tuyến Tính doc (Trang 28 - 75)

Tải bản đầy đủ (PDF)

(75 trang)