Bộ nhớ dữ liệu:

Một phần của tài liệu điều khiển thiết bị bằng tin nhắn sms dùng module sim 900 (Trang 28)

Bộ nhớ dữ liệu của Pic là bộ nhớ EEPROM được chia ra làm nhiều bank.Đối với PIC16F877A, bộ nhớ dữ liệu chia làm 4 bank. Mỗi bank có dung lượng 12 bytes, bao gồm các thanh ghi có chức năng đặc biệt SFR (Special Function Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose Register) nằm ở vùng địa chỉ còn lại trong bank. Các thanh ghi SFR thường xuyên sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cả các bank của bộ nhớ dữ liệu giúp thuận tiện

trong quá trình truy xuất và làm giảm bớt lệnh của chương trình.Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau:

Hình 4.4 : Bộ nhớ dữ liệu của PIC

 TIMER0 :

Đây là 1 trong 3 bộ đếm hoặc bộ định thời của vi điều khiển PIC16F877A. Timer0 là bộ đếm 8 bit được kết nối với bộ chia tần số(prescaler)8 bit. Cấu trúc của timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock. Ngắt timer0 sẽ xuất hiện khi timer0 bị tràn.

Hình 4.5 : Sơ đồ khối timer0

Muốn timer0 hoạt động ở chế độ timer ta clear bitTOSC(OPTION_REG<5>), Khi đó giá trị cuả thanh ghi TMR0 sẽ tăng theo từng chu kì xung đồng hồ (tần số vào timer0 bằng ¼ tần số oscillator). Khi giá trị thanh ghi TMR0 từ FFh trở về 00h, ngắt Timer0 xuất hiện một cách linh động. Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG<5>). Khi đó xung tác động lên bộ đếm được lấy từ chân

RA4/TOCK1.Bit TOSE (OPTION_REG<4>) cho phép lựa chọn cạnh tác động vào bộ đếm. Cạnh tác động sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1. Khi thanh ghi TMR0 bi tràn, bit TMR0IF (INTCON<2>) sẽ được set. Đây chính là cờ ngắt của Timer0, cờ ngắt này sẽ được xóa bằng chương trình trước khi bộ đếm bắt đầu thực hiện lại quá trình đếm.Ngắt timer0 không thể “đánh thức” vì điều khiển từ chế độ sleep.Các lệnh tác động lên giá trị của thanh ghi TMR0 sẽ xóa chế độ hoạt động

Khi đối tượng tác động là timer0, tác động lên giá trị thanh ghi TMR0 sẽ xóa presscaler nhưng không làm thay đổi đối tượng tác động của prescaler.Khi đối tượng tác động là WDT, lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler sẽ ngừng tác vụ hổ trợ cho WDT.

- Các thanh ghi điều khiển liên quan đến Timer0 bao gồm :

• TMR0( địa chỉ 01h,101h): chứa giá trị đếm của timer0

• INTCON( địa chỉ 0Bh,8Bh,10Bh,18Bh): cho phép ngắt hoạt động(GIE và PEIE).

• OPTION_REG( địa chỉ 81h,181h): điều khiển prescaler  TIMER 1:

Timer1 là bộ định thời 16 bit, giá trị của timer1 sẽ được lưu trong 2 thanh ghi (TMR1H:TMR1L).Cờ ngắt của timer1 là bitTMR1IF(PIR1<0>). Bit điều khiển của timer1 sẽ là TMR1IE(PIE<0>). Tương tự như timer0, timer1 cũng có 2 chế độ hoạt động:chế độ định thời (timer) với xung kích là xung clock của oscillator (tần số của timer bằng ¼ tần số oscillator) và chế độ đếm (counter) với xung kích là xung phản các sự kiện cần đếm lấy từ bên ngoài thông qua chân RC0/T1OSO/T1CKI (cạnh tác động là cạnh lên). Việc lựa chọn xung tác động(tương ứng với việc lựa chọn chế độ hoạt động là timer hay counter) được điều khiển bởi bit TMR1CS (T1CON<1>). Sau đây là sơ đồ khối của timer1:

Hình 4.6:Sơ đồ khối timer1

- Các thanh ghi liên quan đến Timer1 bao gồm:

• INTCON( địa chỉ 0Bh,8Bh,10Bh,18Bh): cho phép ngắt hoạt động(GIE và PEIE).

• PIR1( địa chỉ 0Ch): chứa cờ ngắt timer1(TMR1IF).

• PIE1( địa chỉ 8Ch): chứa cờ ngắt timer1(TMR1IE).

• TMR1H(địa chỉ 0Eh): chứa giá trị 8 bit cao của bộ đếm Timer1.

• T1CON (địa chỉ 10h): xác lập thông số cho Timer1.  TIMER2:

Timer2 là bộ định thời 8 bit và được hổ trợ bởi 2 bộ chia tần số prescaler và postscaler. Thanh ghi chứa giá trị đếm của timer2 là TMR2.Bit cho phép ngắt timer2 tác động là TMR2ON(T2CON<2>). Cờ ngắt của timer2 là

bitTMR2IF(PIR1<1>). Xung ngõ vào (tần số bằng ¼ tần số oscillator) được đưa qua bộ chia tần số prescaler 4 bit (với các tỉ số chia tần số là 1:1, 1:4 hoặc 1:16 và được điều khiển bởi các bit T2CKPS1:T2CKPS0 (T2CON<1:0>)).

Hình 4.7: sơ đồ khối của timer2

Ngoài ra ngõ ra của timer2 còn được kết nối với khối SSP, do đó timer2 còn đóng vai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP.

- Các thanh ghi liên quan đến timer2 bao gồm:

• INTCON( địa chỉ 0Bh,8Bh,10Bh,18Bh): cho phép ngắt hoạt động(GIE và PEIE).

• PIR1( địa chỉ 0Ch): chứa cờ ngắt timer2(TMR2IF).

• PIE1( địa chỉ 8Ch): chứa cờ ngắt timer2(TMR2IE).

• TMR2(địa chỉ 11h): chứa giá trị của Timer2.

• T2CON(địa chỉ 12h): xác lập các thông số cho Timer2.

• PR2 (địa chỉ 92h): thanh ghi hỗ trợ cho Timer2.

Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đa là FFh), trong khi Timer1 là bô5 đếm 16 bit (giá trị đếm tối đa là FFFFh).Timer0,Timer1 và Timer2 đều có 2 chế dộ hoạt động là timer và counter. Xung clock có tần số bằng ¼ tần số oscillator. Xung tác động lên Timer0 được hổ trợ bởi prescaler và có thể được thiết lập ở nhiều chế độ khác nhau (tần số tác động, cạnh tác động ) trong khi

các thông số của xung tác động lên timer1 là cố định . Timer2 được hổ trợ bởi CCP, trong khi timer2 được kết nối với khối SSP.

4.5. ADC :

ADC (Analog Digital Converter) là bộ chuyển đổi tín hiệu giữa 2 dạng tương tự và số. PIC16F877A có 8 ngõ vào analog (RA4 :RA0 và RE2 :RE0). Hiệu điện thế chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thế chuẩn được xác lập trên 2 chân RA2 và RA3. Kết quả chuyển đổi từ tín hiệu tương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong 2 thanh ghi

ADRESH:ADRESL.

- Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm:

• INTCON( địa chỉ 0Bh,8Bh,10Bh,18Bh): cho phép các ngắt (các bit GIE và PEIE).

• PIR1( địa chỉ 0Ch): chứa cờ ngắt AD(bit ADIF).

• PIE1( địa chỉ 8Ch): chứa bit điều khiển AD(ADIE).

• ADRESH(địa chỉ 1Eh)và ADRESL(địa chỉ 9Eh): các thanh ghi chứa kết quả chuyển đổi AD.

• ADCON0(địa chỉ 1Fh) và ADCON1(địa chỉ 9Fh): xác lập các thông số chuyển đổi AD.

• PORTA(địa chỉ 05h) và TRISA(địa chỉ 85h): liên quan đến các ngõ vào analog ở PORTA.

• PORTE(địa chỉ 09h) và TRISE(địa chỉ 89h):liên quan đến các ngõ vào analog ở PORTE.

4.6. Giao tiếp nối tiếp:

USART (Universal Synchronous Asynchronous Receiver Transmitter) là một trong 2 chuẩn giao tiếp nối tiếp. USART còn được gọi là giao diện giao tiếp nối tiếp SCI ( Serial Communication Interface ). Có thể sử dụng giao diện này cho các giao tiếp với các thiết bị ngoại vi, với các vi điều khiển khác hay với máy tính. Các dạng của giao diện USART ngoại vi bao gồm:

o Bất động bộ ( Asynchronous ) . o Đồng bộ_Master mode.

o Đồng bộ_Slave mode.

PIC16F877A được tích hợp sẵn bộ tạo tốc độ boud BRG ( Boud Rate

Genetator ) 8 bít dung cho giao diện USART. BRG thực chất là một bộ đếm có thể được sử dụng cho cả hai dạng đồng bộ và bất đồng bộ và được điều khiển bởi thanh ghi PSBRG. Ở dạng bất đồng bộ, SRG còn được điều khiển bởi bit

BRGH ( TXSTA<2> ). Ở dạng đồng bộ tác động của bit BRGH được bỏ qua. Tốc độ baud do BRG tạo ra được tính theo công thức sau:

Trong đó X là giá trị của thanh ghi RSBRG ( X là số nguyên và 0<X<255 ).

- Các thanh ghi liên quan đến BRG bao gồm:

• TXSTA ( địa chỉ 98h ): chọn chế độ đồng bộ hay bất đồng bộ ( bit SINC ) và chọn mức tốc độ baud ( bit BRGH ).

• RCSTA (địa chỉ 18h ): cho phép hoạt động cổng nối tiếp ( bit SPEN ).

• RSBRG ( địa chỉ 99h ): quyết định tốc độ baud.

- USART bất đồng bộ: Ở chế độ truyền này USART hoạt động theo chuẩn NRZ ( None – Return – to – Zero ), nghĩa là các bit truyền đi sẽ bao gồm 1 bit Start, 8 hay 9 bit dữ liệu ( thông thường là 8 bit ) và một bit Stop. Bit LSB sẽ được truyền đi trước. Các khối truyền và nhận data độc lập với nhau sẽ dung chung tần số tương ứng với tốc độ baud cho quá trình dịch dữ liệu ( tốc độ baud gấp 16 hay 64 lần tốc độ dịch dữ liệu tùy theo giá trị của bit BRGH ), và để đảm bảo tính hiệu quả của dữ liệu thì hai khối truyền và nhận phải dung chung một định dạng dữ liệu.

- Các thanh ghi liên quan đến quá trình truyền dữ liệu bằng giao diệnUSART bất đồng bộ:

• Thanh ghi INTCON( địa chỉ 0Bh,8Bh,10Bh,18Bh): cho phép tất cả các ngắt.

• Thanh ghiPIR1( địa chỉ 0Ch): chứa cờ hiệu TXIF.

• Thanh ghiPIE1( địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE.

• Thanh ghi RCSTA (địa chỉ 18h ): chứa bit cho phép hoạt cổng truyền dữ liệu (hai pin RC6/TX/CK và RC7/RX/DT).

• Thanh ghi TXREG (địa chỉ 19h): thanh ghi chứa dữ liệu cần truyển.

• Thanh ghi TXSTA (địa chỉ 98h): xác lập các thông số cho giao diện.

• Thanh ghi SPBRG (địa chỉ 99h): quyết định tốc độ boud.

- USART đồng bộ: Giao diện USART đồng bộ được kích hoạt bằng cách set bit SYNC. Cổng giao tiếp nối tiếp vẩn là hai chân RC7/RX/DT và RC6/TX/CK và được cho phép bằng cách set bit SPEN. USART cho phép hai chế độ truyền nhận dữ liệu là Master mode và Slave mode. Master mode được kích hoạt bằng cách set bit CSRC (TXSTA<7>), Slave mode được kích hoạt bằng cách clear bit CSRC. Điểm khác biệt duy nhất của hai chế độ này là Master mode sẽ lấy xung clock đồng bộ từ bộ tạo xung boud BRG còn Slave modelấy xung clock đồng bộ từ bên ngoài qua chân RC6/TX/CK. Điều này cho phép Slave mode hoạt động ngay cả khi vi diều khiển đang ở chế độ sleep.

- Các thanh ghi liên quan đến quá trình truyền dữ liệu bằng giao diện USART đồng bộMaster mode:

• Thanh ghi INTCON( địa chỉ 0Bh,8Bh,10Bh,18Bh): cho phép tất cả các ngắt.

• Thanh ghi PIR1( địa chỉ 0Ch): chứa cờ hiệu TXIF.

• Thanh ghi PIE1(địa chỉ 8Ch): chứa bit cho phép ngắt truyền TXIE.

• Thanh ghi RCSTA(địa chỉ 18h): chứa bit cho phép cổng truyền dữ liệu (hai pin RC6/TX/CK và RC7/RX/DT).

• Thanh ghi TXREG(địa chỉ 19h): thanh ghi chứa dữ liệu cần truyền.

• Thanh ghi TXSTA(địa chỉ 98h): xác lập các thông số cho giao diện.

• Thanh ghi SPBRG(địa chỉ 99h): quyết định tốc độ baud.

4.7. Cổng giao tiếp song song PSP(PARALLEL SLAVE PORT):

Ngoài các cổng nối tiếp và các giao diện nối tiếp được trình bày ở phần trên, vi điều khiển píc16F877A còn được hỗ trợ một cổng giao tiếp song song và chuẩn giao tiếp song song thông qua portd và porte, do cổng song song chỉ hoạt động ở chế độ slave mode nên vi điều khiển khi giao tiếp qua giao diện này sẽ chịu sự điều khiển của thiết bị bên ngoài thông qua các pin của porte, trong khi dữ liệu sẽ được đọc hoặc ghi theo dạng bất đồng bộ thông qua 8 pin của portd.

- Các thanh ghi liên quan đến psp bao gồm:

• Thanh ghi portd (địa chỉ 08h): chứa dữ liệu cần đọc hoặc ghi.

• Thanh ghi porte (địa chỉ 09h): chứa giá trị các pin porte.

• Thanh ghi trise (địa chỉ 89h): chứa các bit điều khiển porte và psp.

• Thanh ghi pir1 (địa chỉ 0ch): chứa cờ ngắt pspif.

• Thanh ghi pie1 (địa chỉ 8ch): chứa bit cho phép ngắt psp.

• Thanh ghi adcon1 (địa chỉ 9fh): điều khiển khối adc tại portc.

4.8.Các đặc tính của OSCILLATOR:

- Pic16F877A có khả năng sử dụng một trong 4 loại oscillator, đó là :

• LP: (low power crystal).

• XT: thạch anh bình thường.

• HS: (high-speed crystal).

• RC: (resistor/capacitor) dao động do mạch RC tạo ra đối với các loại oscillator LP, HS, XT, Oscillator được gắn vào vi điều khiển thông qua các pin osc1/clki và Osc2/Clko.Đối với các ứng dụng không cần các loại oscillator tốc độ cao, ta có thể sử dụng mạch dao động RC làm nguồn cung cấp xung hoạt động cho vi điều khiển. Tần số tạo ra phụ thuộc vào giá trị điện áp, giá trị điện trở và tụ đện, bên cạnh đó là sự ảnh hưởng của các yếu tố nhiệt độ, chất lượng của các linh kiện.Các linh kiện sử dụng cho mạch RC oscillator phải bảo đảm các giá trị sau:

• 3k<Rext<100 k; Cext>20 pf

Có nhiều chế độ reset vi điều khiển, bao gồm:

- Power-on Reset Por (Reset khi cấp nguồn hoạt động cho vi điều khiển).

- Reset trong quá trình hoạt động.Từ chế độ sleep.

- WDT reset (reset do khối WDT tạo ra trong quá trình hoạt động).

- WDT wake up từ chế độ sleep.

- Brown-out reset (BOR).

- Power-on reset(POR): Đây là xung reset do vi điều khiển tạo ra khi phát hiện nguồn cung cấp VDD.Khi hoạt động ở chế độ bình thường, vi điều khiển cần được đảm bảo các thông số về dòn điện, điện áp để hoạt động bình thường.Nhưng nếu các tham số này không được đảm bảo, xung reset do POR tạo ra sẽ đưa vi điều khiển về trạng thái reset và chỉ tiếp tục hoạt động khi nào các tham số trên được đảm bảo.

- Power-up Timer (PWRT): đây là bộ định thời hoạt động dựa vào mạch RC bên trong vi điều khiển.Khi PWRT được kích hoạt, vi điều khiển sẽ được đưa về trạng thái reset.PWRT sẽ tạo ra một khoảng thời gian delay( khoảng 72ms) để VDD tăng đến giá trị thích hợp.

- Oscillator Start-up Timer (OST): OST cung cấp một khoảng thời gian delay bằng 1024 chu kì xung của oscillator sau khi PWRT ngưng tác động (vi điều khiển đã đủ điề kiện hoạt động) để đảm bảo sự ổn định của xung do oscillator phát ra.Tác động của OST còn xảy ra đối với POR reset và khi vi điều khiển được đánh thức từ chế độ sleep,OST chỉ tác động đối với các loại oscillator là XT, HS và LP.

- Brown-out reset (BOR): Nếu VDD hạ xuống thấp hơn giá trị VBOR( khoảng 4V) và kéo dài trong khoảng thời gian lớn hơn TBOR( khoảng 100 us).BOR được kích hoạt và vi điều khiển được đưa về trạng thái BOR reset.Nếu điện áp cung cấp cho vi điều khiển hạ xuống thấp hơn VBOR trong khoảng thời gian ngắn hơn TBOR, vi điều khiển sẽ không được reset.Khi điện áp cung cấp cho vi điều khiển hoạt động,PWRT được kích hoạt để tạo ra một khoảng thời gian delay( khoảng 72ms).Nếu trong khoảng thời gian này điện áp cung cấp cho vi điều khiển lại tiếp tục hạ xuống dưới mức điện áp VBOR,BOR reset sẽ lại được kích hoạt khi vi điều khiển đủ điện áp hoạt động.Một điểm càn chú ý là khi BOR reset được cho phép, PWRT cũng sẽ hoạt động bất chấp trạng thái của bit PWRT.

- Tóm lại để vi điều khiển hoạt động được từ khi cấp nguồn cần trải qua các bước sau:

- POR tác động.

- PWRT( nếu được cho phép hoạt động) tạo ra khoảng thời gian delay TPWRT để ổn định nguồn cung cấp.

- OST (nếu được cho phép) tạo ra khoảng thời gian delay bằng 1024 chu kì xung của oscillator để ổn định tần số của oscillator.

Đến thời điểm này vi điều khiển mới bắt đầu hoạt động bình thường.Thanh ghi điều khiển và chỉ thị trạng thái nguồn cung cấp cho vi điều khiển là thanh ghi PCON

Hình 4.8: Sơ đồ các chế độ reset của PIC16F877A

PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON(bit GIE).Bên cạnh có mỗi ngắt còn có một bit điều khiển và cờ ngắt riêng.Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuộc vao bit GIE và các bit điều khiển khác.Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE.Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2.Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2.

Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIE.Khi chương trình ngắt được thực thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ nhớ stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h.Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại.Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép.

CHƯƠNG 5: THIẾT KẾ VÀ THI CÔNG MẠCH 5.1. THIẾT KẾ:

Có 2 phương pháp thiết kế để thực hiện đề tài :

+ Dùng điện thoại di động có chức năng giống với MODULE SIM900 để kết nối với pic16f877a. Việc lập trình cho điện thoại di động cũng gần tương tự như GMS MODULE nhưng có hạn chế hơn vì một số loại điện thoại chỉ hổ trợ lệnh AT ở dạng MODE PDU nên lập trình rất phức tạp.

+ Dùng MODULE SIM900 để kết nối với vi điều khiển PIC16F877A: chi phí và giá thành khá đắt. Nhưng có đầy đủ tính năng cho lập trình với lệnh AT.Ngoài ra còn có thể phát triển ứng dụng sâu them với GPRS ,GPS. Do đó việc lựa chọn thiết kế nối MODULE SIM900 với PIC16F877A sẽ khả thi và dễ thực hiện hơn.

5.2. Sơ đồ khối hoạt động toàn hệ thống.

Một phần của tài liệu điều khiển thiết bị bằng tin nhắn sms dùng module sim 900 (Trang 28)

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

(94 trang)
w