Tải bản đầy đủ (.doc) (18 trang)

thiết kế mạch đồng hồ thời gian thực sử dụng ds1307 và pic16f877a và hiển thị lên lcd

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (500.53 KB, 18 trang )

TRƯỜNG ĐẠI HỌC MỎ HÀ NỘI
KHOA :
BÀI TẬP LỚN VI XỬ LÝ
Đề tài : Thiết kế mạch đồng hồ thời gian thực sử dụng DS1307 và
PIC16F877A và hiển thị lên LCD
Giáo viên hướng dẫn :
Sinh viên thực hiện :
Lớp :
MSSV :
Hà Nội : 26/03/2012.
1
Mục Lục
Mục Lục 2
1. Mô tả hệ thống :
Đề tài nhằm thiết kế 1 bộ đồng hồ thời gian thực đảm bảo tự cập nhật thời gian
của hệ thống và hiển thị giá trị lên LCD . Với thiết kế sử dụng cả nguồn ngoài và PIN
VBat làm cho hệ thống hoạt động cả khi mất điện thì hệ thống thời gian thực vẫn hoạt
động.
Ngoài ra đề tài còn có tương tác với phím bấm nhằm Reset hệ thống.
2. Sơ đồ mô phỏng trên PROTEUS
2
RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7


RB0/AN12/INT
33
RB1/AN10/C12IN3-
34
RB2/AN8
35
RA7/OSC1/CLKIN
13
RA6/OSC2/CLKOUT
14
RD5/P1B
28
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40

RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
5
RD4
27
RB3/AN9/PGM/C12IN2-
36

RA0/AN0/ULPW U/C12IN0-
2
U1
PIC16F887
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2

VEE
3
LCD1
LM016L
X1
CRYSTAL
R1
4.7k
R2
4.7k
D1
LED-YELLOW
R3
4.7k
R4
4.7k
R5
1k
VBAT
3
X1
1
X2
2
SCL
6
SDA
5
SOUT
7

U2
DS1307
3. Tổng quan về các khối :
a. Tổng quan về PIC16F877A :
Sơ đồ chân của Pic16f877a :
3
Pic16f877a có 5 cổng vào ra: PortA(RA0-RA5), PortB(RB0-RB7), PortC(RC0-
RC7), PortD(RD0-RD7), PortE(RE0-RE2). Có 3 bộ định thời: Timer0, Timer1,
Timer2. 8K bộ nhớ chương trình flash.
Tổ chức bộ nhớ :
Có 3 khối bộ nhớ trong pic16F877A: bộ nhớ chương trình ,bộ nhớ dữ liệu và
khối bộ nhớ
EEPROM. Bộ nhớ chương trình và bộ nhớ dữ liệu có đường bus riêng vì
vậy có thể truy cập vào từng bộ nhớ một cách riêng rẽ.
Bộ đếm chương trình có 13 bit vì vậy không gian địa chỉ sẽ là 8k word x 8bit.
Truy cập ngoài vùng không gian trên sẽ gây lỗi.
Bộ nhớ dữ liệu được chia thành 4 bank (Bank0÷Bank3) ,trong các bank chứa các
thanh ghi thường và các thanh ghi chức năng đặc biệt. Bank được chọn phụ thuộc vào
bit RP1 và RP0 (bit thứ 6 và bit thứ 5) của thanh ghi trạng thái status.
4
RP1:RP0 Bank
00 0
01 1
10 2
11 3
Các thanh ghi chức năng đặc biệt được CPU và bộ ngoại vi sử dụng để điều khiển các
thiết bị. Các thanh ghi này hoạt động như một thanh RAM tĩnh.
Thanh ghi trạng thái chứa trạng thái số học của ALU,trạng thái Reset và các bit
chọn bank ở bộ nhớ dữ liệu.
Các cổng vào ra của pic:

+ Port A: có 6 bit (tương ứng với 6 chân RA0÷RA5) các chân của cổng A có tích hợp
một số chức năng ngoại vi, nếu một thiết bị ngoại vi được enable thì cổng này sẽ không
hoạt động như một cổng vào ra .
Bình thường Port A sẽ là một cổng vào ra 2 chiều. Thanh ghi xác đinh chiều tương ứng
của các chân port A là thanh ghi TrisA. Các bit ở thanh ghi TrisA bằng 1 sẽ xác định
các chân ở port A là đầu vào ngược lại sẽ là đầu ra.
+ Port B: rộng 8 bit(tương ứng với 8 chân RB0÷RB7), là một cổng vào ra 2 chiều.
Thanh ghi qui đinh chiều của cổng B là thanh ghi Tris B. Thiết lập các bit ở thanh ghi
TrisB bằng 1 sẽ làm cho cổng B là cổng vào ngược lại sẽ là cổng ra.
+ Port C: rộng 8 bit(tương ứng với các chân RC0÷RC7), bình thường nó là một cổng
vào ra 2 chiều, thanh ghi qui định chiều của cổng là thanh ghi TrisC. Các chân
RC3,RC4 dùng để kết nối truyền nhân thông tin với các thiết bị ngoại vi.
+ Port D: rộng 8 bit (RD0÷RD7),nó có thể là cổng vào hoặc cổng ra. Port D có thể
5
được cấu hình
như một cổng vi xử lý rộng 8 bit (cổng slave song song) bằng cách
thiêt lập bit điều khiển
PSPSTATUS (TrisE.4). Ở chế độ này thì đầu vào la tín hiệu
TTL.
+ Port E: rộng 3 bit(RE0÷RE2), được cấu hình là đầu ra hoặc đầu vào. Port E có thể là
đầu vào điều khiển I/O khi bit PSPSTATUS (TrisE.4) được thiết lập.
Từ hình vẽ ta có thể thấy, pic16F877A có 2 chân Vcc và 2 chân GND, để pic có
thể hoạt động được ta phải cấp nguồn cho tất cả các chân này.
Ngoài cấp nguồn cung cấp ta phải cấp nguồn xung dao động để cho vi điều khiển hoạt
động. ta sẽ dùng một thạch anh 20MHz để cấp xung dao động. nguồn dao động được cấp
thông qua 2 chân 13 và 14 của pic.
Mạch reset cho vi điều khiển là một công tắc để hở thông qua chân MCLR của vi điều
khiển. mạch sẽ thực hiện reset khi chân này từ mức logic 1 xuống logic 0. khi công tắc
để hở thì chân này luôn mang mức logic 1 do luôn được nối với nguồn thông qua một
điện trở hạn dòng R1, điện trở này phải có giá trị nhỏ hơn hoặc bằng 10k để đảm bảo

điện áp cung cấp cho vi điều khiển.
b. Khối thời gian thực DS1307:
DS1307 là chip thời gian thực hay RTC (Read time clock). Ðây là một IC tích
hợp cho thời gian bởi vì tính chính xác về thời gian tuyệt đối cho thời gian : Thứ,
ngày,tháng, nãm, giờ, phút, giây. Chip này có 7 thanh ghi 8 bit mỗi thanh ghi này
chứa : Thứ , ngày, tháng, nãm, giờ , phút, giây. Ngoài ra DS1307 còn chứa 1 thanh
ghi điều khiển ngõ ra phụ và 56 thanh ghi trống các thanh ghi này có thể dùng như là
RAM. DS1307 được đọc thông qua chuẩn truyền thông I2C nên do đó để đọc được và
6
ghi từ DS1307 thông qua chuẩn truyền thông này. Do nó được giao tiếp chuẩn I2C
nên cấu tạo bên ngoài nó rất đơn giản.
X1
CRYSTAL
D1
LED-YELLOW
R3
4.7k
R4
4.7k
R5
1k
VBAT
3
X1
1
X2
2
SCL
6
SDA

5
SOUT
7
U2
DS1307
- DS1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thời
gian và ngày tháng với 56 bytes SRAM. Địa chỉ và dữ liệu được truyền nối tiếp qua 2
đường bus 2 chiều. Nó cung cấp thông tin về giờ, phút, giây, thứ, ngày, tháng,
năm.Ngày cuối tháng sẽ tự động được điều chỉnh với các tháng nhỏ hơn 31 ngày, bao
gồm cả việc tự động nhảy năm. Đồng hồ có thể hoạt động ở dạng 24h hoặc 12h với
chỉ thị AM/PM. DS1307 có một mạch cảm biến điện áp dùng để dò các điện áp lỗi và
tự động đóng ngắt với nguồn pin cung cấp.
- DS 1307 hoạt động với vai trò slave trên đường bus nối tiếp. Việc truy cập được thi
hành với chỉ thị START và một mã thiết bị nhất định được cung cấp bởi địa chỉ các
thanh ghi. Tiếp theo đó các thanh ghi sẽ được truy cập liên tục đến khi chỉ thị STOP
được thực thi.
Mô tả hoạt động của các chân:
7
+ X1 và X2 là đầu vào dao động cho DS1307. Cần dao động thạch anh 32.768Khz.
Vbat là nguồn nuôi cho chip. Nguồn này từ ( 2V- 3.5V) ta lấy pin có nguồn 3V.
Ðây là nguồn cho chip hoạt động liên tục khi không có nguồn Vcc mà DS1307 vẫn
hoạt động theo thời gian.
+ Vcc là nguồn cho giao tiếp I2C. Ðiện áp cung cấp là 5V chuẩn và được dùng
chung với vi điều khiển. Nếu Vcc không có mà Vbat có thì DS1307 vẫn hoạt động
bình thường nhưng mà không ghi và đọc dữ liệu được.
+) GND là nguồn MASS chung cho V
cc
và V
BAT
+ SCL(serial clock input): SCL được sử dụng để đồng bộ sự chuyển dữ liệu

trên đường dây nối tiếp.
+ SDA(serial data input/out): là chân vào ra cho 2 đường dây nối tiếp. Chân
SDA thiết kế theo kiểu cực máng hở , đòi hỏi phải có một điện trở kéo trong khi
hoạt động.
+ SQW/OUT(square wave/output driver)- khi được kích hoạt thì bit SQWE
được thiết lập 1, chân SQW/OUT phát đi 1 trong 4 tần số
(1Hz,4kHz,8kHz,32kHz). Chân này cũng được thiết kế theo kiểu cực máng hở
vì vậy nó cũng cần có một điện trở kéo trong. Chân này sẽ hoạt động khi cả Vcc
và Vbat được cấp.
c. Khối màn hình LCD1602.
8
RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
4
RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RB0/AN12/INT
33
RB1/AN10/C12IN3-
34
RB2/AN8
35
RA7/OSC1/CLKIN
13
RA6/OSC2/CLKOUT

14
RD5/P1B
28
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2

21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
5
RD4
27
RB3/AN9/PGM/C12IN2-
36
RA0/AN0/ULPW U/C12IN0-
2
U1
PIC16F887
D7
14
D6
13
D5

12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
R1
4.7k
R2
4.7k
Để hiển thị các thông số trong quá trình giao tiếp giữa người điều khiển với hệ

thống như xem ngày giờ và xem các thông số khi thực hiện điều khiển hệ thống
(Active).Sử dụng LCD text 16x2.
Sơ đồ chân của LCD 1602a
9
Chức năng các chân:
Chân số Tên Chức năng
1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với
GND của mạch điều khiển
2 Vdd Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với
VCC=5V của mạch điều khiển
3 Vee Chân này dùng để điều chỉnh độ tương phản của LCD.
4 RS Chân chọn thanh ghi (Register select). Nối chân RS với logic “0”
(GND) hoặc logic“1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của
LCD (ở chế độ “ghi” -write) hoặc nối với bộ đếm địa chỉ của
LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên
trong LCD.
5 R/W Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic
“0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để
LCD ở chế độ đọc.
6 E Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép
của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp
nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-
low transition) của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát
hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ
10

ở bus đến khi nào chân E xuống mức thấp.
7-14 DB0-
DB7
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU.
Có 2 chế độ sử dụng 8 đường bus này :
+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit
MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới
DB7, bit MSB là DB7.
15 Lamp+ Đèn LCD
16 Lamp- Đèn LCD
d. Code của chương trình mô phỏng :
1. #include "16F887.h"
2. #include "def_877a.h"
3. #include "lcd.c" //File nay co san trong CCS
4. int8 second, minute, hour, date, day, month, year;
5. int16 year1;
6. int i;
7.
8. // Chuyen du lieu mã BINARY cua MASTER -> du lieu mã BCD cho
DS1307
9. int DECIMALtoBCD(int data) // MASTER -> DS1307
10. {
11. // x -> y trong do x la du lieu cua MASTER, y la du lieu sau
khi chuyen doi
12. // Thuat toan thuc hien bien doi tu ma DECIMAL sang ma BCD
he 10
13. int x, y, z;
14. x = data;
15. if(x<10) // vd: (x=9) -> (y=9) = 0x09

16. {
17. y = x;
18. }
19. else if(x>=10) // vd: (x=29) -> (y=41) = 0x29
20. {
21. y = (x/10 * 6) + x;
11
22. }
23. return y;
24. }
25.
26. // Chuyen du lieu mã BCD cua DS1307 -> du lieu mã BINARY
cho MASTER
27. int BCDtoDECIMAL(int data) // MASTER <- DS1307
28. {
29. // x <- y trong do y la du lieu cua SLAVE, x la du lieu sau
khi chuyen doi
30. // Thuat toan thuc hien bien doi tu ma BCD he 10 sang ma
DECIMAL
31. int x,y,z;
32. y = data;
33. i=0;
34. if(y<10) // vd: (x=9) <- (y=9) = 0x09
35. {
36. x = y;
37. }
38. else if(y>=10) // vd: (x=10) <- (y=16) = 0x10
39. {
40. do
41. {

42. x = y - (6 * i);
43. z = (x/10 * 6) + x;
44. i++;
45. }
46. while(z!=y);
47. }
48. return x;
49. }
50.
51. #int_EXT
52. void set_time()
53. {
54. // Khoi tao hien thi ban dau: SAT, 15-10-2011,
07:30:00
55. second = 0; //Giay: 00
56. minute = 30; //Phut: 30
57. hour = 7; //Gio: 07 (che do 24h)
58. day = 7; //Thu 7: SAT (SATURDAY)
59. date = 15; //Ngay: 15
60. month = 10; //Thang: 10
61. year = 11; //Nam: 11
62.
63. // Ghi gia tri vao slave
64. i2c_start(); // Bat dau ghi du lieu vao Slave
65. i2c_write(0xD0); // Truyen dia chi cua DS1307 len duong truyen
I2C ( 0xD0 = Slave Address OR Write bit hay (0x68 OR 0) )
66. i2c_write(0x00); // Truyen dia chi thanh ghi 0x00 cua DS1307
12
67. i2c_write(DECIMALtoBCD(second)); // Ghi gia tri BCD giay vao
thanh ghi 0x00

68. i2c_write(DECIMALtoBCD(minute)); // Ghi gia tri BCD phut vao
thanh ghi 0x01
69. i2c_write(DECIMALtoBCD(hour)); // Ghi gia tri BCD gio vao
thanh ghi 0x02
70. i2c_write(DECIMALtoBCD(day)); // Ghi gia tri BCD thu vao
thanh ghi 0x03
71. i2c_write(DECIMALtoBCD(date)); // Ghi gia tri BCD ngay vao
thanh ghi 0x04
72. i2c_write(DECIMALtoBCD(month)); // Ghi gia tri BCD thang vao
thanh ghi 0x05
73. i2c_write(DECIMALtoBCD(year)); // Ghi gia tri BCD nam vao
thanh ghi 0x06
74. i2c_write(0x10); // Ghi gia tri vao thanh ghi 0x07 de
tao xung vuong 1Hz
75. i2c_stop(); // Ket thuc ghi du lieu
76. }
77.
78. void update_time()
79. {
80. // Doc du lieu tu Slave
81. i2c_start(); // Bat dau doc du lieu tu Slave
82. i2c_write(0xD0); // Truyen dia chi cua DS1307 len duong truyen
I2C ( 0xD0 = Slave Address OR Write bit hay (0x68 OR 0) )
83. i2c_write(0x00); // Truyen dia chi thanh ghi 0x00 cua DS1307
84. i2c_start(); // Dieu kien Restart
85. i2c_write(0xD1);
86. second = BCDtoDECIMAL(i2c_read()); // Doc gia tri giay tu thanh
ghi 0x00 cua DS1307
87. minute = BCDtoDECIMAL(i2c_read()); // Doc gia tri phut tu thanh
ghi 0x01 cua DS1307

88. hour = BCDtoDECIMAL(i2c_read()); // Doc gia tri gio tu thanh
ghi 0x02 cua DS1307
89. day = BCDtoDECIMAL(i2c_read()); // Doc gia tri thu tu thanh
ghi 0x03 cua DS1307
90. date = BCDtoDECIMAL(i2c_read()); // Doc gia tri ngay tu thanh
ghi 0x04 cua DS1307
91. month = BCDtoDECIMAL(i2c_read()); // Doc gia tri thang tu
thanh ghi 0x05 cua DS1307
92. year = BCDtoDECIMAL(i2c_read(0)); // Doc gia tri nam tu thanh
ghi 0x06 cua DS1307
93. i2c_stop(); // Ket thuc doc du lieu
94. }
95.
96. void display_LCD()
97. {
98. // Hàng 1 cua LCD: hien thi thu. ngay - thang -
nam
99.
13
100. lcd_gotoxy(1,1); // Bat dau o hang 1, cot 1
101. if(day==2) lcd_putc("Mon"); // Hien thi thu o hang 1, cot 1
102. else if(day==3) lcd_putc("Tue");
103. else if(day==4) lcd_putc("Wed");
104. else if(day==5) lcd_putc("Thu");
105. else if(day==6) lcd_putc("Fri");
106. else if(day==7) lcd_putc("Sat");
107. else if(day==1) lcd_putc("Sun");
108.
109. lcd_gotoxy(4,1); // Nhay sang hang 1, cot 4
110. lcd_putc("."); // Hien thi dau "." o hang 1, cot 4

111.
112. lcd_gotoxy(6,1); // Nhay sang hang 1, cot 6
113. if(date<10)
114. {
115. lcd_putc("0"); // Hien thi so 0 o hang 1, cot 6
116. lcd_gotoxy(7,1); // Nhay sang hang 1, cot 7
117. printf(lcd_putc,"%d", date); // Hien thi thang o hang 1,
cot 7
118. }
119. else if(date>=10)
120. {
121. printf(lcd_putc,"%d", date);
122. }
123.
124. lcd_gotoxy(8,1); // Nhay sang hang 1, cot 8
125. lcd_putc("-"); // Hien thi dau "-" o hang 1, cot 8
126.
127. lcd_gotoxy(9,1); // Nhay sang hang 1, cot 9
128. if(month==1) lcd_putc("Jan"); // Hien thi thang o hang 1, cot 9
129. else if(month==2) lcd_putc("Feb");
130. else if(month==3) lcd_putc("Mar");
131. else if(month==4) lcd_putc("Apr");
132. else if(month==5) lcd_putc("May");
133. else if(month==6) lcd_putc("Jun");
134. else if(month==7) lcd_putc("Jul");
135. else if(month==8) lcd_putc("Aug");
136. else if(month==9) lcd_putc("Sep");
137. else if(month==10) lcd_putc("Oct");
138. else if(month==11) lcd_putc("Nov");
139. else if(month==12) lcd_putc("Dec");

140.
141. lcd_gotoxy(12,1); // Nhay sang hang 1, cot 12
142. lcd_putc("-"); // Hien thi dau "-" o hang 1, cot 12
143.
144. lcd_gotoxy(13,1); // Nhay sang hang 1, cot 13
145. year1 = 2000 + year;
146. printf(lcd_putc,"%ld", year1); // Hien thi nam o cac cot
13,14,15,16
147.
14
148. // Hàng 2 cua LCD: hien thi gio : phut : giay

149.
150. lcd_gotoxy(6,2); // Nhay xuong hang 2, cot 6
151. if(hour<10) // Gio
152. {
153. lcd_putc("0");
154. lcd_gotoxy(7,2);
155. printf(lcd_putc,"%d", hour);
156. }
157. else if(hour>=10)
158. {
159. printf(lcd_putc,"%d", hour);
160. }
161.
162. lcd_gotoxy(8,2);
163. lcd_putc(":");
164.
165. lcd_gotoxy(9,2); // Nhay sang hang 2, cot 9
166. if(minute<10) // Phut

167. {
168. lcd_putc("0");
169. lcd_gotoxy(10,2);
170. printf(lcd_putc,"%d", minute);
171. }
172. else if(minute>=10)
173. {
174. printf(lcd_putc,"%d", minute);
175. }
176.
177. lcd_gotoxy(11,2);
178. lcd_putc(":");
179.
180. lcd_gotoxy(12,2); // Nhay sang hang 2, cot 12
181. if(second<10) // Giay
182. {
183. lcd_putc("0");
184. lcd_gotoxy(13,2);
185. printf(lcd_putc,"%d", second);
186. }
187. else if(second>=10)
188. {
189. printf(lcd_putc,"%d", second);
190. }
191. }
192.
193. void main()
194. {
195. setup_adc_ports(NO_ANALOGS|VSS_VDD);
196. setup_adc(ADC_OFF);

15
197. setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
198. setup_timer_1(T1_DISABLED);
199. setup_timer_2(T2_DISABLED,0,1);
200. setup_comparator(NC_NC_NC_NC);// This device COMP currently
not supported by the PICWizard
201. enable_interrupts(INT_EXT);
202. enable_interrupts(GLOBAL);
203. //Setup_Oscillator parameter not selected from Intr Oscillator
Config tab
204.
205. // TODO: USER CODE!!
206.
207. lcd_init();
208. delay_ms(10);
209.
210. while(TRUE)
211. {
212. update_time();
213. display_LCD();
214. }
215. }
4. Kết quả mô phỏng :
16
RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
4

RA4/T0CKI/C1OUT
6
RA5/AN4/SS/C2OUT
7
RB0/AN12/INT
33
RB1/AN10/C12IN3-
34
RB2/AN8
35
RA7/OSC1/CLKIN
13
RA6/OSC2/CLKOUT
14
RD5/P1B
28
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16

RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
5

RD4
27
RB3/AN9/PGM/C12IN2-
36
RA0/AN0/ULPW U/C12IN0-
2
U1
PIC16F887
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4

VSS
1
VDD
2
VEE
3
LCD1
LM016L
X1
CRYSTAL
R1
4.7k
R2
4.7k
D1
LED-YELLOW
R3
4.7k
R4
4.7k
R5
1k
VBAT
3
X1
1
X2
2
SCL
6

SDA
5
SOUT
7
U2
DS1307
5. Mức độ hoàn thành công việc :
Nhìn chung dự án đã hoàn thành về mạch mô phỏng và chạy ổn định khâu của
bài tập lớn.
6. Các phần mềm đã sử dụng trong quá trình mô phỏng :
17
MPlab Ver 8.4 , Proteus ver 7.7 :
7. Tài liệu tham khảo :
Website : Google.com
Picvietnam.com
Dientuvietnam.net
Ebook : Tutorial PIC 16F877A
Library Microchip
Datasheet Pic16f877a , DS1307 , LCD 1602.
18

×