Mọi thuê bao trả trước, trả sau của MobiFone đều có thể đăng ký gói ngắn ngày 3 ngày , 7 ngày sử dụng theo nhu cầu . Tận hưởng 3GB – 7GB dùng hết ngắt kết nối hoặc trừ data vào gói 3G/4G chính

Top 5 gói cước 4G MobiFone được đăng ký nhiều nhất
Các bạn có thể đăng ký các gói cước theo tháng theo các link ĐĂNG KÝ hoặc quét mã QR trong phần bên dưới bảng này để đăng ký nhanh nhất:
Tên gói | Đăng ký nhanh | |
C120T (120.000đ/ 30 ngày) |
ĐĂNG KÝ | |
|
||
HD90 (90.000đ/30 ngày) Áp dụng cho mọi thuê bao |
ĐĂNG KÝ | |
8GB/30 ngày | ||
C90N (90.000đ/30 ngày) |
ĐĂNG KÝ | |
|
||
NCT79 (79.000đ/30 ngày) |
ĐĂNG KÝ | |
|
||
ED60 (60.000đ/ 30 ngày) |
ĐĂNG KÝ | |
|
||
D30 (30.000đ/7 ngày) |
ĐĂNG KÝ | |
7GB/7 ngày |
Danh sách tất cả các gói cước 4G Mobifone
DANH SÁCH GÓI CƯỚC | ||||||
STT | Tên gói cước | Loại gói cước | Giá cước (VNĐ) | Chu kỳ | Giới thiệu | Đăng ký nhanh |
1 | 12C120 | Hot, Data, Thoại & SMS | 1,440,000 | 420 Ngày | 1440GB + Free phút gọi + … | Đăng ký |
2 | C90N | Hot, Data, Thoại & SMS | 90,000 | 30 Ngày | 120GB + 1050 phút gọi … | Đăng ký |
3 | C120 | Hot, Data | 120,000 | 30 Ngày | 120GB + Free phút gọi + … | Đăng ký |
4 | Y60 | Data | 60,000 | 30 Ngày | 60 GB tốc độ cao | Đăng ký |
5 | 12MAX90 | Hot, Trả trước | 1,080,000 | 495 Ngày | 2880GB tốc độ cao | Đăng ký |
6 | FD60 | Hot, Data | 60,000 | 30 Ngày | 60GB tốc độ cao | Đăng ký |
7 | ED60 | Hot, Data | 60,000 | 30 Ngày | 60GB + Tài khoản mobiEdu | Đăng ký |
8 | AG60 | Hot, Data | 60,000 | 30 Ngày | 60GB/chu kì + Tài khoản mobiAgri | Đăng ký |
9 | CF60 | Hot, Data, Thoại & SMS | 60,000 | 30 Ngày | 60 GB data tốc độ cao | Đăng ký |
10 | THAGA60 | Hot, Data | 60,000 | 30 Ngày | 120 GB Tốc độ cao | Đăng ký |
11 | HP2 | Hot, Data, Thoại & SMS | 200,000 | 60 Ngày | 8GB + 40 phút gọi trong nước và quốc tế | Đăng ký |
12 | F200 | Data | 200,000 | 30 Ngày | 20GB tốc độ cao | Đăng ký |
13 | GYM1 | Hot, Data | 100,000 | 30 Ngày | 3GB tốc độ cao | Đăng ký |
14 | 6DIP79 | Data | 474,000 | 180 Ngày | 48GB tốc độ cao | Đăng ký |
15 | 3Z70 | Data | 210,000 | 90 Ngày | 45GB tốc độ cao | Đăng ký |
16 | 3FV99 | Hot, Data | 297,000 | 90 Ngày | 180GB + Free truy cập FPT Play, Viber | Đăng ký |
17 | FV119 | Hot, Data, Thoại & SMS | 119,000 | 30 Ngày | 90GB + 530 phút gọi + … | Đăng ký |
18 | 3C120 | Hot, Data, Thoại & SMS | 360,000 | 90 Ngày | 360GB + Free phút gọi + … | Đăng ký |
19 | 21G12 | Data | 708,000 | 420 Ngày | 1050GB tốc độ cao | Đăng ký |
20 | 3DIP79 | Data | 237,000 | 90 Ngày | 24GB tốc độ cao | Đăng ký |
21 | F150 | Data | 150,000 | 90 Ngày | 9GB tốc độ cao | Đăng ký |
22 | 24GIP | Data | 149,000 | 30 Ngày | 120GB tốc độ cao | Đăng ký |
23 | GV119 | Data, Thoại & SMS | 119,000 | 30 Ngày | 120GB + 530 phút gọi … | Đăng ký |
24 | ON30 | Data | 30,000 | 30 Ngày | 300MB + Free truy cập VTVCab ON | Đăng ký |
25 | CS60 | Hot, Data | 60,000 | 30 Ngày | 6GB tốc độ cao | Đăng ký |
26 | 6CV99 | Hot, Data | 594,000 | 210 Ngày | 420GB tốc độ cao | Đăng ký |
27 | 24GDIP | Data | 219,000 | 30 Ngày | 150GB tốc độ cao | Đăng ký |
28 | 12CS119 | Hot, Data, Thoại & SMS | 1,428,000 | 420 Ngày | 1260GB + 7420 phút gọi … | Đăng ký |
29 | 9GV99 | Data | 891,000 | 330 Ngày | 660GB tốc độ cao/ chu kỳ | Đăng ký |
30 | CS6N | Hot, Data | 540,000 | 180 Ngày | 1080GB tốc độ cao | Đăng ký |
31 | RC2 | Data, Thoại & SMS | 500,000 | 7 Ngày | 1GB + 20 phút gọi đi + 20 SMS + 20 phút nhận cuộc gọi | Đăng ký |
32 | TQT299 | Thoại & SMS | 299,000 | 30 Ngày | 380 phút gọi quốc tế | Đăng ký |
33 | MBH6 | Trả trước | 900,000 | 180 Ngày | Ưu đãi wifi tốc độ cao, ưu đãi truyền hình cap… | Đăng ký |
34 | 6F90N | Hot, Data | 540,000 | 180 Ngày | 54GB tốc độ cao | Đăng ký |
35 | MBH12 | Data | 1,800,000 | 360 Ngày | Ưu đãi wifi tốc độ cao, ưu đãi truyền hình cap… | Đăng ký |
36 | DATA5 | Hot, Data | 50,000 | 30 Ngày | 10GB tốc độ cao | Đăng ký |
37 | 6MAX120 | Hot, Trả trước | 720,000 | 255 Ngày | 2160GB tốc độ cao | Đăng ký |
38 | 3CF120 | Hot, Data, Thoại & SMS | 360,000 | 90 Ngày | 240GB tốc độ cao + 750 phút thoại | Đăng ký |
39 | 6CF120 | Hot, Data, Thoại & SMS | 720,000 | 210 Ngày | 480GB tốc độ cao + 1750 phút thoại | Đăng ký |
40 | ESIM12 | Data | 1,080,000 | 434 Ngày | 2604GB tốc độ cao | Đăng ký |
41 | EVIP12 | Data | 3,480,000 | 434 Ngày | Không giới hạn dung lượng data tốc độ cao | Đăng ký |
42 | C150K | Hot, Data, Thoại & SMS | 150,000 | 30 Ngày | 7GB tốc độ cao/ngày + Free phút gọi… | Đăng ký |
43 | 6FD60 | Hot, Data | 360,000 | 210 Ngày | 420GB tốc độ cao | Đăng ký |
44 | 12FD60 | Hot, Data | 720,000 | 420 Ngày | 840GB tốc độ cao | Đăng ký |
45 | 6NCT99 | Data | 594,000 | 210 Ngày | 840 GB tốc độ cao + 1 tài khoản VIP NCT | Đăng ký |
46 | 3SM90 | Hot, Data, Thoại & SMS | 270,000 | 90 Ngày | 5Gb Data tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | Đăng ký |
47 | ALO50 | Hot, Trả trước, Thoại & SMS | 50,000 | 31 Ngày | 1000 phút thoại nội mạng + 100 phút thoại trong nước | Đăng ký |
48 | 6SM120 | Hot, Data, Thoại & SMS | 720,000 | 180 Ngày | 7 Gb Data tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | Đăng ký |
49 | HDP100 | Hot, Data, Thoại & SMS | 100,000 | 30 Ngày | 3GB + 100 phút nội mạng | Đăng ký |
50 | HD90 | Hot, Data | 90,000 | 30 Ngày | 8GB tốc độ cao | Đăng ký |
51 | MC90 | Hot, Trả trước, Thoại & SMS | 90,000 | 60 Ngày | 5GB + Free phút gọi + … | Đăng ký |
52 | CB3 | Data, Thoại & SMS | 30,000 | 30 Ngày | 2,3GB + 330 phút gọi | Đăng ký |
53 | 6Z70 | Data | 420,000 | 210 Ngày | 105GB tốc độ cao | Đăng ký |
54 | 9FV119 | Hot, Data, Thoại & SMS | 1,071,000 | 270 Ngày | 810GB + 4770 phút gọi + … | Đăng ký |
55 | HD200 | Hot, Data | 200,000 | 30 Ngày | 18GB tốc độ cao | Đăng ký |
56 | HDY | Data | 100,000 | 30 Ngày | 3GB tốc độ cao | Đăng ký |
57 | 6FV99 | Hot, Data | 594,000 | 180 Ngày | 360GB + Free truy cập FPT Play, Viber | Đăng ký |
58 | 3D70 | Data | 210,000 | 90 Ngày | 45GB tốc độ cao | Đăng ký |
59 | 6CS120 | Hot, Data, Thoại & SMS | 720,000 | 180 Ngày | 720GB + 3300 phút gọi … | Đăng ký |
60 | 24GIP12 | Data | 1,788,000 | 420 Ngày | 2100GB tốc độ cao | Đăng ký |
61 | 24GDIP6 | Data | 1,314,000 | 210 Ngày | 1260GB tốc độ cao | Đăng ký |
62 | 12GV99 | Data | 1,188,000 | 450 Ngày | 900GB tốc độ cao/chu kỳ | Đăng ký |
63 | D70 | Data | 70,000 | 30 Ngày | 15GB tốc độ cao | Đăng ký |
64 | TT80 | Hot, Data | 80,000 | 30 Ngày | 3GB tốc độ cao | Đăng ký |
65 | CS119 | Hot, Data, Thoại & SMS | 119,000 | 30 Ngày | 90GB + 530 phút gọi … | Đăng ký |
66 | 6MD100 | Hot, Data | 600,000 | 180 Ngày | 360GB + Tài khoản mobiEdu, mSkill | Đăng ký |
67 | 12CV99 | Hot, Data | 1,188,000 | 420 Ngày | 840GB tốc độ cao | Đăng ký |
68 | 3CV119 | Hot, Data | 357,000 | 90 Ngày | 360GB + 1590 phút gọi … | Đăng ký |
69 | 12CS | Data, Thoại & SMS | 1,080,000 | 420 Ngày | 900GB + 14700 phút gọi … | Đăng ký |
70 | MFY199 | Hot, Data, Thoại & SMS | 199,000 | 30 Ngày | 10GB + 520 phút gọi … | Đăng ký |
71 | 3MD100 | Hot, Data | 300,000 | 90 Ngày | 180GB + Tài khoản mobiEdu, mSkill | Đăng ký |
72 | TQT199 | Thoại & SMS | 199,000 | 30 Ngày | 250 phút gọi quốc tế | Đăng ký |
73 | TQT99 | Thoại & SMS | 99,000 | 30 Ngày | 100 phút gọi quốc tế | Đăng ký |
74 | 12F90N | Hot, Data | 1,080,000 | 360 Ngày | 108GB tốc độ cao | Đăng ký |
75 | 12DATA5 | Hot, Data | 600,000 | 360 Ngày | 120GB tốc độ cao | Đăng ký |
76 | MAX90 | Hot, Trả trước | 90,000 | 30 Ngày | 150GB tốc độ cao | Đăng ký |
77 | 6MAX90 | Hot, Trả trước | 540,000 | 255 Ngày | 1440GB tốc độ cao | Đăng ký |
78 | 12CF150 | Hot, Data, Thoại & SMS | 1,800,000 | 420 Ngày | 1200GB tốc độ cao + 4900 phút thoại | Đăng ký |
79 | ESIM290 | Data, Thoại & SMS | 290,000 | 31 Ngày | 186GB tốc độ cao + Free gọi nội mạng dưới 10 phút… | Đăng ký |
80 | 3NCT79 | Data | 237,000 | 90 Ngày | 180GB tốc độ cao + 1 tài khoản VIP NCT… | Đăng ký |
81 | 12C120T | Hot, Data, Thoại & SMS | 1,440,000 | 420 Ngày | 6GB Tốc độ cao/ngày + Miễn phí phút gọi + … | Đăng ký |
82 | 6NCT60 | Hot, Data | 360,000 | 210 Ngày | 420 GB tốc độ cao + 1 tk VIP NCT | Đăng ký |
83 | 12CF60 | Hot, Data, Thoại & SMS | 720,000 | 360 Ngày | 720GB data tốc độ cao | Đăng ký |
84 | 6CF60 | Hot, Data, Thoại & SMS | 360,000 | 180 Ngày | 360GB data tốc độ cao | Đăng ký |
85 | F120 | Data | 120,000 | 30 Ngày | 12GB tốc độ cao | Đăng ký |
86 | 6CS100D | Hot, Data | 600,000 | 180 Ngày | 360GB tốc độ cao | Đăng ký |
87 | CB5 | Data, Thoại & SMS | 50,000 | 60 Ngày | 5GB + 550 phút gọi | Đăng ký |
88 | FIKA | Data | 85,000 | 30 Ngày | 8.5GB trong vùng + 1GB ngoài vùng | Đăng ký |
89 | MC299 | Data, Thoại & SMS | 299,000 | 60 Ngày | 12GB + Free phút gọi + … | Đăng ký |
90 | 3KV60 | Hot, Data | 180,000 | 90 Ngày | 15GB tốc độ cao | Đăng ký |
91 | 12D70 | Data | 840,000 | 420 Ngày | 210GB tốc độ cao | Đăng ký |
92 | D15 | Hot, Data | 15,000 | 3 Ngày | 3GB tốc độ cao | Đăng ký |
93 | HDP200 | Hot, Data, Thoại & SMS | 200,000 | 30 Ngày | 6.5GB + 200 phút nội mạng | Đăng ký |
94 | 21G3 | Data | 177,000 | 90 Ngày | 225GB tốc độ cao | Đăng ký |
95 | X30 | Hot, Data | 100,000 | 30 Ngày | 2.5GB tốc độ cao | Đăng ký |
96 | 3CS | Data, Thoại & SMS | 270,000 | 90 Ngày | 225GB + 3150 phút gọi … | Đăng ký |
97 | 6CS | Data, Thoại & SMS | 540,000 | 210 Ngày | 450GB + 7350 phút gọi … | Đăng ký |
98 | 6GV99 | Data | 594,000 | 240 Ngày | 480GB tốc độ cao/chu kỳ | Đăng ký |
99 | Z70 | Data | 70,000 | 30 Ngày | 15GB tốc độ cao | Đăng ký |
100 | 12Y60 | Data | 720,000 | 360 Ngày | 720 GB tốc độ cao | Đăng ký |
101 | MFY99 | Hot, Data, Thoại & SMS | 99,000 | 30 Ngày | 5GB + 260 phút gọi … | Đăng ký |
102 | 24GDIP12 | Data | 2,628,000 | 420 Ngày | 2520GB tốc độ cao | Đăng ký |
103 | 8E | Thoại & SMS | 40,000 | 30 Ngày | 1500 phút nội mạng + 3000 SMS + … | Đăng ký |
104 | 6CS60 | Hot, Data | 360,000 | 210 Ngày | 42GB tốc độ cao | Đăng ký |
105 | 3ED100 | Hot, Data | 300,000 | 90 Ngày | 360GB + Tài khoản mobiEdu, mSkill | Đăng ký |
106 | 6CF100 | Hot, Data, Thoại & SMS | 600,000 | 180 Ngày | 30GB + 1560 phút gọi + 1380 SMS + … | Đăng ký |
107 | 12CS60 | Hot, Data | 720,000 | 420 Ngày | 84GB tốc độ cao | Đăng ký |
108 | CB | Thoại & SMS | 9,000 | 30 Ngày | Dịch vụ chặn cuộc gọi MobiFone | Đăng ký |
109 | GV99 | Data | 99,000 | 30 Ngày | 60GB tốc độ cao | Đăng ký |
110 | 12HD120N | Hot, Data | 1,200,000 | 360 Ngày | 720GB tốc độ cao | Đăng ký |
111 | 3MAX90 | Hot, Trả trước | 270,000 | 105 Ngày | 450GB tốc độ cao | Đăng ký |
112 | R500 | Thoại & SMS | 500,000 | 7 Ngày | 10 phút gọi đi + 10 phút nhận cuộc gọi + 30 SMS | Đăng ký |
113 | RD300 | Data | 300,000 | 7 Ngày | 8MB tốc độ cao | Đăng ký |
114 | RH | Data | 100,000 | 7 Ngày | 200MB tốc độ cao | Đăng ký |
115 | RC1 | Data, Thoại & SMS | 250,000 | 7 Ngày | 300MB + 10 phút gọi đi + 10 SMS + 10 phút nhận cuộc gọi | Đăng ký |
116 | TQT49 | Thoại & SMS | 49,000 | 7 Ngày | 40 phút gọi quốc tế | Đăng ký |
117 | CS3N | Hot, Data | 270,000 | 90 Ngày | 540GB tốc độ cao | Đăng ký |
118 | 3MAX120 | Hot, Trả trước | 360,000 | 105 Ngày | 720GB tốc độ cao | Đăng ký |
119 | ESIM6 | 540,000 | 217 Ngày | 1302GB tốc độ cao | Đăng ký | |
120 | ESIM490 | Data, Thoại & SMS | 490,000 | 31 Ngày | Không giới hạn data tốc độ cao + Free gọi nội mạng dưới 20 phút…. | Đăng ký |
121 | 6NCT79 | Data | 474,000 | 210 Ngày | 360GB tốc độ cao + 1 tài khoản VIP NCT | Đăng ký |
122 | 12NCT99 | Data | 1,188,000 | 420 Ngày | 1680 GB tốc độ cao + 1 tài khoản VIP NCT… | Đăng ký |
123 | 12SM60 | Hot, Data, Thoại & SMS | 720,000 | 360 Ngày | 3 Gb Tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | Đăng ký |
124 | 6SM90 | Hot, Data, Thoại & SMS | 540,000 | 180 Ngày | 5Gb Data tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | Đăng ký |
125 | SM120 | Hot, Data, Thoại & SMS | 120,000 | 30 Ngày | 7 Gb Data tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | Đăng ký |
126 | 3SM120 | Hot, Data, Thoại & SMS | 360,000 | 90 Ngày | 7 Gb Data tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | Đăng ký |
127 | 3DTHN70 | Data | 210,000 | 90 Ngày | 3GB Data tốc độ cao/ngày + Miễn phí data truy cập Clip.tv, Tiktok, … | Đăng ký |
128 | 3CF60 | Hot, Data, Thoại & SMS | 180,000 | 90 Ngày | 180 GB data tốc độ cao | Đăng ký |
129 | SHIP120 | Hot, Data, Thoại & SMS | 120,000 | 31 Ngày | 186GB + Miễn phí truy cập APP vận chuyển, giao hàng + … | Đăng ký |
130 | DP1500 | Hot, Data, Thoại & SMS | 1,500,000 | 90 Ngày | 15GB + 1500 phút gọi + 1500 SMS nội mạng | Đăng ký |
131 | HD400 | Hot, Data | 400,000 | 30 Ngày | 44GB tốc độ cao | Đăng ký |
132 | T59 | Trả trước, Thoại & SMS | 59,000 | 30 Ngày | 30 phút ngoại mạng + 1000 phút nội mạng + … | Đăng ký |
133 | XP30 | Data | 40,000 | 30 Ngày | 400MB + Free xem phim trên iflix | Đăng ký |
134 | D30 | Hot, Data | 30,000 | 7 Ngày | 7GB tốc độ cao | Đăng ký |
135 | HSV50 | Hot, Data | 50,000 | 30 Ngày | 5GB tốc độ cao | Đăng ký |
136 | 12FV99 | Hot, Data | 1,188,000 | 360 Ngày | 720GB + Free truy cập FPT Play, Viber | Đăng ký |
137 | THAGA5 | Hot, Data | 50,000 | 30 Ngày | 100GB trong vùng + 2GB ngoài vùng | Đăng ký |
138 | HSV25 | Hot, Data | 25,000 | 30 Ngày | 2GB tốc độ cao | Đăng ký |
139 | F300 | Data | 300,000 | 30 Ngày | Đăng ký | |
140 | 6Y60 | Data | 360,000 | 180 Ngày | 360GB tốc độ cao | Đăng ký |
141 | 3CF100 | Hot, Data, Thoại & SMS | 300,000 | 90 Ngày | 15GB + 780 phút gọi + 690 SMS + … | Đăng ký |
142 | 24THAGA15 | Data | 600,000 | 360 Ngày | Miễn phí 60 GB truy cập data tốc độ cao/ tháng | Đăng ký |
143 | TS4G | Data | 99,000 | 30 Ngày | Miễn phí 5 GB data tốc độ cao/ ngày (150 GB/ chu kì) | Đăng ký |
144 | MD100 | Hot, Data | 100,000 | 30 Ngày | 60GB + Tài khoản mobiEdu, mSkill | Đăng ký |
145 | CV99 | Hot, Data | 99,000 | 30 Ngày | 60GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-CV99?rf=091ISA |
146 | 6CV119 | Hot, Data | 714,000 | 210 Ngày | 840GB + 3710 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6CV119?rf=091ISA |
147 | MFY99T | Hot, Data, Thoại & SMS | 99,000 | 30 Ngày | 5GB + 260 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MFY99T?rf=091ISA |
148 | 12HD90N | Hot, Data | 900,000 | 360 Ngày | 360GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12HD90N?rf=091ISA |
149 | ED100 | Hot, Data | 100,000 | 30 Ngày | 120GB + Tài khoản mobiEdu, mSkill | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-ED100?rf=091ISA |
150 | CV119 | Hot, Data, Thoại & SMS | 119,000 | 30 Ngày | 120GB + 530 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-CV119?rf=091ISA |
151 | 8P | Trả trước, Thoại & SMS | 80,000 | 30 Ngày | 1500 phút nội mạng + 1500 SMS nội mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-8P?rf=091ISA |
152 | RD500 | Data | 500,000 | 7 Ngày | 15MB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-RD500?rf=091ISA |
153 | 3DATA5 | Hot, Data | 150,000 | 90 Ngày | 30GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3DATA5?rf=091ISA |
154 | DN90 | Hot, Trả trước | 90,000 | 30 Ngày | 150GB tốc độ cao (Trong khu vực … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-DN90?rf=091ISA |
155 | 3DN90 | Hot, Trả trước | 270,000 | 105 Ngày | 525GB tốc độ cao (Trong khu vực… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3DN90?rf=091ISA |
156 | EVIP6 | Data | 1,740,000 | 217 Ngày | Không giới hạn dung lượng data tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-EVIP6?rf=091ISA |
157 | 12NCT79 | Data | 948,000 | 420 Ngày | 720GB tốc độ cao + 1 tài khoản VIP NCT… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12NCT79?rf=091ISA |
158 | 6C150K | Hot, Data, Thoại & SMS | 900,000 | 210 Ngày | 7GB tốc độ cao/ngày + Free phút gọi… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6C150K?rf=091ISA |
159 | 3NCT60 | Hot, Data | 180,000 | 90 Ngày | 180 GB tốc độ cao + 1 tk VIP NCT | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3NCT60?rf=091ISA |
160 | 10BLTS | Hot, Data | 600,000 | 360 Ngày | 2GB data/ ngày + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-10BLTS?rf=091ISA |
161 | C120T | Hot, Data, Thoại & SMS | 120,000 | 30 Ngày | 6GB Tốc độ cao/ngày + Miễn phí phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-C120T?rf=091ISA |
162 | 6SM60 | Hot, Data, Thoại & SMS | 360,000 | 180 Ngày | 3 Gb Tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6SM60?rf=091ISA |
163 | 3SHIP120 | Hot, Data, Thoại & SMS | 360,000 | 93 Ngày | 558GB + Miễn phí truy cập APP vận chuyển, giao hàng + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3SHIP120?rf=091ISA |
164 | NCT60 | Hot, Data | 60,000 | 30 Ngày | 60 GB tốc độ cao + 1 tk VIP NCT | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-NCT60?rf=091ISA |
165 | SM60 | Hot, Data, Thoại & SMS | 60,000 | 30 Ngày | 3 Gb Tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-SM60?rf=091ISA |
166 | HDP120 | Hot, Data, Thoại & SMS | 120,000 | 30 Ngày | 4GB + 120 phút nội mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HDP120?rf=091ISA |
167 | F500 | Data | 500,000 | 360 Ngày | 96GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-F500?rf=091ISA |
168 | 6CS100C | Hot, Data, Thoại & SMS | 600,000 | 180 Ngày | 5GB + 50 phút ngoại mạng + 100 phút nội mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6CS100C?rf=091ISA |
169 | HD120 | Hot, Data | 120,000 | 30 Ngày | 10GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HD120?rf=091ISA |
170 | C190 | 190,000 | 30 Ngày | 60GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-C190?rf=091ISA | |
171 | MC149 | Data, Thoại & SMS | 149,000 | 60 Ngày | 8GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MC149?rf=091ISA |
172 | 9FV99 | Hot, Data | 891,000 | 270 Ngày | 540GB + Free truy cập FPT Play, Viber | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-9FV99?rf=091ISA |
173 | 12Z70 | Data | 840,000 | 420 Ngày | 210GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12Z70?rf=091ISA |
174 | KV60 | Hot, Data | 60,000 | 60 Ngày | 5GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-KV60?rf=091ISA |
175 | HD99FIM | Data | 99,000 | 30 Ngày | 4GB + Free truy cập FIM+ | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HD99FIM?rf=091ISA |
176 | C390 | Data, Thoại & SMS | 390,000 | 30 Ngày | 210GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-C390?rf=091ISA |
177 | HD500 | Hot, Data | 500,000 | 30 Ngày | 55GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HD500?rf=091ISA |
178 | 3GV99 | Data | 297,000 | 120 Ngày | 240GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3GV99?rf=091ISA |
179 | 12GV119 | Data, Thoại & SMS | 1,428,000 | 420 Ngày | 1680GB + 6360 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12GV119?rf=091ISA |
180 | 24G3 | Data | 297,000 | 90 Ngày | 450GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-24G3?rf=091ISA |
181 | 24G6 | Data | 594,000 | 210 Ngày | 1050GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-24G6?rf=091ISA |
182 | 24G12 | Data | 1,188,000 | 420 Ngày | 2100GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-24G12?rf=091ISA |
183 | 3CS119 | Hot, Data, Thoại & SMS | 357,000 | 90 Ngày | 270GB + 1590 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3CS119?rf=091ISA |
184 | 12ED100 | Hot, Data | 1,200,000 | 420 Ngày | 1680GB + Tài khoản mobiEdu, mSkill | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12ED100?rf=091ISA |
185 | 6ED100 | Hot, Data | 600,000 | 210 Ngày | 840GB + Tài khoản mobiEdu, mSkill | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6ED100?rf=091ISA |
186 | 24GIP6 | Data | 894,000 | 210 Ngày | 1050GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-24GIP6?rf=091ISA |
187 | 3TS4G | Data | 297,000 | 90 Ngày | 450GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3TS4G?rf=091ISA |
188 | 6HD120 | Hot, Data | 600,000 | 180 Ngày | 72GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6HD120?rf=091ISA |
189 | 12HD200N | Hot, Data | 2,000,000 | 360 Ngày | 1080GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12HD200N?rf=091ISA |
190 | C120N | Hot, Data, Thoại & SMS | 120,000 | 30 Ngày | 120GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-C120N?rf=091ISA |
191 | B2 | Thoại & SMS | 300,000 | 30 Ngày | 4 phút gọi đi + 4 phút nhận cuộc gọi + 20 SMS | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-B2?rf=091ISA |
192 | MB188 | Hot, Data, Thoại & SMS | 188,000 | 30 Ngày | 188GB + 1888 phút nội mạng + 188 phút ngoại mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MB188?rf=091ISA |
193 | 3F90N | Hot, Data | 270,000 | 90 Ngày | 27GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3F90N?rf=091ISA |
194 | CF150 | Hot, Data, Thoại & SMS | 150,000 | 30 Ngày | 100GB tốc độ cao + 350 phút thoại | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-CF150?rf=091ISA |
195 | CF120 | Hot, Data, Thoại & SMS | 120,000 | 30 Ngày | 80GB tốc độ cao + 250 phút thoại | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-CF120?rf=091ISA |
196 | 12MAX120 | Hot, Trả trước | 1,440,000 | 495 Ngày | 4320GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12MAX120?rf=091ISA |
197 | ESIM1 | Data | 90,000 | 31 Ngày | 186GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-ESIM1?rf=091ISA |
198 | 12C150K | Hot, Data, Thoại & SMS | 1,800,000 | 420 Ngày | Miễn phí 7GB data/ngày + Free phút gọi… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12C150K?rf=091ISA |
199 | C120K | Hot, Data, Thoại & SMS | 120,000 | 30 Ngày | 6GB tốc độ cao/ngày + Free phút gọi… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-C120K?rf=091ISA |
200 | NCT79 | Data | 79,000 | 30 Ngày | 60GB tốc độ cao + 1 tài khoản VIP NCT… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-NCT79?rf=091ISA |
201 | NCT99 | Data | 99,000 | 30 Ngày | 120 GB tốc độ cao + 1 tài khoản VIP NCT… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-NCT99?rf=091ISA |
202 | BLTS | Hot, Data | 60,000 | 30 Ngày | 2GB data/ ngày + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-BLTS?rf=091ISA |
203 | 3OF70 | Data, Thoại & SMS | 210,000 | 90 Ngày | 2GB GB tốc độ cao/ngày + phút thoại nội mạng, ngoại mang, … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3OF70?rf=091ISA |
204 | 12NCT60 | Hot, Data | 720,000 | 420 Ngày | 840 GB tốc độ cao + 1 tk VIP NCT | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12NCT60?rf=091ISA |
205 | 6SHIP120 | Hot, Data, Thoại & SMS | 600,000 | 186 Ngày | 1116GB + Miễn phí truy cập APP vận chuyển, giao hàng + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6SHIP120?rf=091ISA |
206 | 12SM120 | Hot, Data, Thoại & SMS | 1,440,000 | 360 Ngày | 7 Gb Data tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12SM120?rf=091ISA |
207 | 3NCT99 | Data | 297,000 | 90 Ngày | 360 GB tốc độ cao + 1 tài khoản VIP NCT… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3NCT99?rf=091ISA |
208 | 6SHIP99 | Hot, Data, Thoại & SMS | 495,000 | 186 Ngày | 372GB + Miễn phí truy cập APP vận chuyển, giao hàng + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6SHIP99?rf=091ISA |
209 | 6OF70 | Data, Thoại & SMS | 420,000 | 210 Ngày | 2GB GB tốc độ cao/ngày + phút thoại nội mạng, ngoại mang, … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6OF70?rf=091ISA |
210 | 6BLTS | Hot, Data | 360,000 | 210 Ngày | 2GB data/ ngày + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6BLTS?rf=091ISA |
211 | HD70 | Hot, Data | 70,000 | 30 Ngày | 6GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HD70?rf=091ISA |
212 | 6HD200 | Hot, Data | 1,000,000 | 180 Ngày | 132GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6HD200?rf=091ISA |
213 | F90 | Data | 90,000 | 30 Ngày | 9GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-F90?rf=091ISA |
214 | 6CS50 | Hot, Thoại & SMS | 300,000 | 180 Ngày | 50 phút ngoại mạng + 100 phút nội mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6CS50?rf=091ISA |
215 | HDP300 | Hot, Data, Thoại & SMS | 300,000 | 30 Ngày | 10GB + 300 phút nội mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HDP300?rf=091ISA |
216 | K90 | Hot, Thoại & SMS | 90,000 | 30 Ngày | 90 phút ngoại mạng + Free nội mạng < 10 phút | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-K90?rf=091ISA |
217 | 21G6 | Data | 354,000 | 180 Ngày | 450GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-21G6?rf=091ISA |
218 | 24G | Data | 99,000 | 30 Ngày | 150GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-24G?rf=091ISA |
219 | HD79NCT | Data | 79,000 | 30 Ngày | 4GB + Free truy cập Nhạc của tui | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HD79NCT?rf=091ISA |
220 | 6C90N | Hot, Data, Thoại & SMS | 540,000 | 180 Ngày | 720GB + 1050 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6C90N?rf=091ISA |
221 | 12KV60 | Hot, Data | 720,000 | 360 Ngày | 60GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12KV60?rf=091ISA |
222 | 6D70 | Data | 420,000 | 210 Ngày | 105GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6D70?rf=091ISA |
223 | 6FV119 | Hot, Data, Thoại & SMS | 714,000 | 180 Ngày | 540GB + 3180 phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6FV119?rf=091ISA |
224 | 6KV60 | Hot, Data | 360,000 | 180 Ngày | 30GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6KV60?rf=091ISA |
225 | CS | Data, Thoại & SMS | 90,000 | 30 Ngày | 60GB + 1050 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-CS?rf=091ISA |
226 | CS120 | Hot, Data, Thoại & SMS | 120,000 | 30 Ngày | 120GB + 550 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-CS120?rf=091ISA |
227 | 3CS120 | Hot, Data, Thoại & SMS | 360,000 | 90 Ngày | 360GB + 1650 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3CS120?rf=091ISA |
228 | 24GDIP3 | Data | 657,000 | 90 Ngày | 450GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-24GDIP3?rf=091ISA |
229 | 3Y60 | Data | 180,000 | 90 Ngày | 180 GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3Y60?rf=091ISA |
230 | 12MD100 | Hot, Data | 1,200,000 | 360 Ngày | 720GB + Tài khoản mobiEdu, mSkill | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12MD100?rf=091ISA |
231 | 6GV119 | Data, Thoại & SMS | 714,000 | 210 Ngày | 840GB + 3710 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6GV119?rf=091ISA |
232 | SF80 | Data | 80,000 | 30 Ngày | 3GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-SF80?rf=091ISA |
233 | 18WF | Hot, Data | 1,800,000 | 540 Ngày | 180GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-18WF?rf=091ISA |
234 | R300 | Thoại & SMS | 300,000 | 7 Ngày | 5 phút gọi đi + 5 phút nhận cuộc gọi + 15 SMS | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-R300?rf=091ISA |
235 | RC3 | Data, Thoại & SMS | 1,000,000 | 7 Ngày | 2.5GB + 30 phút gọi đi + 30 SMS + 30 phút nhận cuộc gọi | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-RC3?rf=091ISA |
236 | 12WF | Hot, Data | 1,200,000 | 360 Ngày | 120GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12WF?rf=091ISA |
237 | 6WF | Hot, Data | 600,000 | 180 Ngày | Miễn phí 600p nội mạng… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6WF?rf=091ISA |
238 | MB288 | Hot, Data, Thoại & SMS | 288,000 | 30 Ngày | 288GB + 2888 phút nội mạng + 288 phút ngoại mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MB288?rf=091ISA |
239 | 6CF150 | Hot, Data, Thoại & SMS | 900,000 | 210 Ngày | 600GB tốc độ cao + 2450 phút thoại | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6CF150?rf=091ISA |
240 | CF90 | Hot | 90,000 | 30 Ngày | 50GB tốc độ cao + Free truy cập ClipTV, mSkill… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-CF90?rf=091ISA |
241 | 6CF90 | Hot | 540,000 | 210 Ngày | 50GB tốc độ cao + Free truy cập ClipTV, mSkill… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6CF90?rf=091ISA |
242 | 6C120K | Hot, Data, Thoại & SMS | 720,000 | 210 Ngày | 6GB tốc độ cao/ngày + Free phút gọi… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6C120K?rf=091ISA |
243 | 12C120K | Hot, Data, Thoại & SMS | 1,440,000 | 420 Ngày | 6GB tốc độ cao/ngày + Free phút gọi… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12C120K?rf=091ISA |
244 | 12DTHN70 | Data | 840,000 | 420 Ngày | 3GB Data tốc độ cao/ngày + Miễn phí data truy cập Clip.tv, Tiktok, … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12DTHN70?rf=091ISA |
245 | 6DTHN70 | Data | 420,000 | 210 Ngày | 3GB Data tốc độ cao/ngày + Miễn phí data truy cập Clip.tv, Tiktok, … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6DTHN70?rf=091ISA |
246 | 12SHIP120 | Hot, Data, Thoại & SMS | 1,200,000 | 372 Ngày | 2232GB + Miễn phí truy cập APP vận chuyển, giao hàng + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12SHIP120?rf=091ISA |
247 | 9THAGA60 | Hot, Data | 540,000 | 270 Ngày | 1080 GB Tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-9THAGA60?rf=091ISA |
248 | 6ED60 | Hot, Data | 360,000 | 210 Ngày | 420GB + Tài khoản mobiEdu | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6ED60?rf=091ISA |
249 | 12AG60 | Hot, Data | 720,000 | 420 Ngày | 840GB + Tài khoản mobiAgri | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12AG60?rf=091ISA |
250 | DTHN70 | Data | 70,000 | 30 Ngày | 3GB Data tốc độ cao/ngày + Miễn phí data truy cập Clip.tv, Tiktok, … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-DTHN70?rf=091ISA |
251 | 6HD90 | Hot, Data | 450,000 | 180 Ngày | 54GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6HD90?rf=091ISA |
252 | 6HD300 | Hot, Data | 1,500,000 | 180 Ngày | 216GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6HD300?rf=091ISA |
253 | F250 | Data | 250,000 | 180 Ngày | 18GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-F250?rf=091ISA |
254 | DP200 | Hot, Data, Thoại & SMS | 200,000 | 60 Ngày | 4GB + 200 phút nội mạng + 200 SMS nội mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-DP200?rf=091ISA |
255 | HD300 | Hot, Data | 300,000 | 30 Ngày | 33GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HD300?rf=091ISA |
256 | MC99 | Data, Thoại & SMS | 99,000 | 30 Ngày | 2GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MC99?rf=091ISA |
257 | D90 | Hot, Data | 90,000 | 30 Ngày | 30GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-D90?rf=091ISA |
258 | 6C120 | Hot, Data, Thoại & SMS | 720,000 | 210 Ngày | 720GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6C120?rf=091ISA |
259 | 21G | Data | 59,000 | 30 Ngày | 60GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-21G?rf=091ISA |
260 | TIKA | Data | 50,000 | 30 Ngày | 5GB trong vùng + 1GB ngoài vùng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-TIKA?rf=091ISA |
261 | C490 | Data, Thoại & SMS | 490,000 | 30 Ngày | 240GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-C490?rf=091ISA |
262 | C200N | Hot, Data | 200,000 | 30 Ngày | 120GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-C200N?rf=091ISA |
263 | YC30 | Data | 99,000 | 30 Ngày | 3GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-YC30?rf=091ISA |
264 | HD119FIM | Data | 119,000 | 30 Ngày | 6GB + Free truy cập FIM+ | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HD119FIM?rf=091ISA |
265 | FV99 | Hot, Data | 99,000 | 30 Ngày | 60GB + Free truy cập FPT Play, Viber | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-FV99?rf=091ISA |
266 | QT50 | Data | 50,000 | 30 Ngày | 102GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-QT50?rf=091ISA |
267 | 12DIP79 | Data | 948,000 | 360 Ngày | 96GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12DIP79?rf=091ISA |
268 | 3FV119 | Hot, Data, Thoại & SMS | 357,000 | 90 Ngày | 270GB + 1590 phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3FV119?rf=091ISA |
269 | DP300 | Hot, Data, Thoại & SMS | 300,000 | 60 Ngày | 6GB + 300 phút nội mạng + 300 SMS nội mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-DP300?rf=091ISA |
270 | C290 | Hot, Data, Thoại & SMS | 290,000 | 30 Ngày | 180GB + Free phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-C290?rf=091ISA |
271 | F70 | Data | 70,000 | 30 Ngày | 7GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-F70?rf=091ISA |
272 | 24GIP3 | Data | 447,000 | 90 Ngày | 360GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-24GIP3?rf=091ISA |
273 | MFY399 | Hot, Data, Thoại & SMS | 399,000 | 30 Ngày | 20GB + 1040 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MFY399?rf=091ISA |
274 | CF100 | Hot, Data, Thoại & SMS | 100,000 | 30 Ngày | 5GB + 260 phút gọi + 230 SMS + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-CF100?rf=091ISA |
275 | 3CS60 | Hot, Data | 180,000 | 90 Ngày | 18GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3CS60?rf=091ISA |
276 | 6CS119 | Hot, Data, Thoại & SMS | 714,000 | 210 Ngày | 630GB + 3710 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6CS119?rf=091ISA |
277 | 21GP | Data | 59,000 | 30 Ngày | 60GB + Free truy cập ClipTV, Nhac.vn | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-21GP?rf=091ISA |
278 | 9CV99 | Hot, Data | 891,000 | 270 Ngày | 540GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-9CV99?rf=091ISA |
279 | 3CV99 | Hot, Data | 297,000 | 90 Ngày | 180GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3CV99?rf=091ISA |
280 | MFY29T | Hot, Data, Thoại & SMS | 29,000 | 30 Ngày | 1.8GB + 100 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MFY29T?rf=091ISA |
281 | 12CV119 | Hot, Data, Thoại & SMS | 1,428,000 | 420 Ngày | 1680GB + 7420 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12CV119?rf=091ISA |
282 | 12CS120 | Hot, Data, Thoại & SMS | 1,440,000 | 360 Ngày | 1440GB + 6600 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12CS120?rf=091ISA |
283 | 12HD300N | Hot, Data | 3,000,000 | 360 Ngày | 1440GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12HD300N?rf=091ISA |
284 | 3C90N | Hot, Data, Thoại & SMS | 270,000 | 90 Ngày | 360GB + 3150 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3C90N?rf=091ISA |
285 | 12C90N | Hot, Data, Thoại & SMS | 1,080,000 | 360 Ngày | 1440GB + 12600 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12C90N?rf=091ISA |
286 | R1000 | Thoại & SMS | 1,000,000 | 7 Ngày | 25 phút gọi đi + 25 phút nhận cuộc gọi + 60 SMS | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-R1000?rf=091ISA |
287 | RD1000 | Data | 1,000,000 | 7 Ngày | 35MB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-RD1000?rf=091ISA |
288 | MB388 | Hot, Data, Thoại & SMS | 388,000 | 30 Ngày | 388GB + 3888 phút nội mạng + 388 phút ngoại mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MB388?rf=091ISA |
289 | F90N | Hot, Data | 90,000 | 30 Ngày | 9GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-F90N?rf=091ISA |
290 | 6DATA5 | Hot, Data | 300,000 | 180 Ngày | 60GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6DATA5?rf=091ISA |
291 | 3CF150 | Hot, Data, Thoại & SMS | 450,000 | 90 Ngày | 300GB tốc độ cao + 1050 phút thoại | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3CF150?rf=091ISA |
292 | MAX120 | Hot, Trả trước | 120,000 | 30 Ngày | 240GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MAX120?rf=091ISA |
293 | 6DN90 | Hot, Trả trước | 540,000 | 225 Ngày | 1125GB tốc độ cao (Trong khu vực… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6DN90?rf=091ISA |
294 | 12DN90 | Hot, Trả trước | 1,080,000 | 435 Ngày | 2175GB tốc độ cao (Trong khu vực… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12DN90?rf=091ISA |
295 | 3CF90 | Hot | 270,000 | 90 Ngày | 50GB tốc độ cao + Free truy cập ClipTV, mSkill… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3CF90?rf=091ISA |
296 | 12CF120 | Hot, Data, Thoại & SMS | 1,440,000 | 420 Ngày | 960GB tốc độ cao + 3500 phút thoại | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12CF120?rf=091ISA |
297 | EVIP1 | Data | 290,000 | 31 Ngày | Không giới hạn dung lượng data tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-EVIP1?rf=091ISA |
298 | 3FD60 | Hot, Data | 180,000 | 90 Ngày | 180GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3FD60?rf=091ISA |
299 | ESIM990 | Data, Thoại & SMS | 990,000 | 31 Ngày | Không giới hạn data tốc độ cao + Free gọi nội mạng dưới 20 phút…. | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-ESIM990?rf=091ISA |
300 | 12ED60 | Hot, Data | 720,000 | 420 Ngày | 840GB + Tài khoản mobiEdu | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12ED60?rf=091ISA |
301 | 6THAGA60 | Hot, Data | 360,000 | 210 Ngày | 840 GB Tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6THAGA60?rf=091ISA |
302 | 12CF90 | Hot | 1,080,000 | 420 Ngày | 50GB tốc độ cao + Free truy cập ClipTV, mSkill… | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12CF90?rf=091ISA |
303 | 12THAGA60 | Hot, Data | 720,000 | 420 Ngày | 1680 GB Tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12THAGA60?rf=091ISA |
304 | OF70 | Data, Thoại & SMS | 70,000 | 30 Ngày | 2GB GB tốc độ cao/ngày + phút thoại nội mạng, ngoại mang, … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-OF70?rf=091ISA |
305 | 3SHIP99 | Hot, Data, Thoại & SMS | 297,000 | 93 Ngày | 186GB + Miễn phí truy cập APP vận chuyển, giao hàng + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3SHIP99?rf=091ISA |
306 | 12SHIP99 | Hot, Data, Thoại & SMS | 990,000 | 372 Ngày | 744GB + Miễn phí truy cập APP vận chuyển, giao hàng + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12SHIP99?rf=091ISA |
307 | 12BLTS | Hot, Data | 720,000 | 420 Ngày | 2GB data/ ngày + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12BLTS?rf=091ISA |
308 | 3AG60 | Hot, Data | 180,000 | 90 Ngày | 180GB + Tài khoản mobiAgri | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3AG60?rf=091ISA |
309 | G80 | Data | 80,000 | 30 Ngày | Miễn phí 2GB data tốc độ cao/ ngày | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-G80?rf=091ISA |
310 | DIP79 | Data | 79,000 | 30 Ngày | 8GB tốc độ cao | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-DIP79?rf=091ISA |
311 | 8NCT | Data, Thoại & SMS | 50,000 | 30 Ngày | 3GB + 120 phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-8NCT?rf=091ISA |
312 | HD99NCT | Data | 99,000 | 30 Ngày | 6GB + Free truy cập Nhạc của tui | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-HD99NCT?rf=091ISA |
313 | 6CS100T | Hot, Thoại & SMS | 600,000 | 180 Ngày | 100 phút ngoại mạng + 300 phút nội mạng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6CS100T?rf=091ISA |
314 | 12FV119 | Hot, Data, Thoại & SMS | 1,428,000 | 360 Ngày | 1080GB + 6360 phút gọi + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12FV119?rf=091ISA |
315 | MFY49T | Hot, Data, Thoại & SMS | 49,000 | 30 Ngày | 2.5GB + 135 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-MFY49T?rf=091ISA |
316 | 3GV119 | Data, Thoại & SMS | 357,000 | 90 Ngày | 360GB + 1590 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3GV119?rf=091ISA |
317 | 9GV119 | Data, Thoại & SMS | 1,071,000 | 270 Ngày | 1080GB + 4770 phút gọi … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-9GV119?rf=091ISA |
318 | 12CF100 | Hot, Data, Thoại & SMS | 1,200,000 | 360 Ngày | 60GB + 3120 phút gọi + 2760 SMS + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12CF100?rf=091ISA |
319 | 12THAGA15 | Data | 300,000 | 180 Ngày | Miễn phí 60 GB data tốc độ cao/ tháng | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12THAGA15?rf=091ISA |
320 | 6TS4G | Data | 594,000 | 210 Ngày | Miễn phí 5GB data tốc độ cao/ ngày (1050 GB/ chu kì) | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6TS4G?rf=091ISA |
321 | 12TS4G | Data | 1,188,000 | 420 Ngày | Miễn phí 5 GB data tốc độ cao/ tháng (2100GB/ chu kì) | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-12TS4G?rf=091ISA |
322 | 21GP12 | Data | 708,000 | 420 Ngày | 45GB + Free truy cập ClipTV, Nhac.vn | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-21GP12?rf=091ISA |
323 | B3 | Thoại & SMS | 500,000 | 30 Ngày | 8 phút gọi đi + 8 phút nhận cuộc gọi + 20 SMS | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-B3?rf=091ISA |
324 | 3ED60 | Hot, Data | 180,000 | 90 Ngày | 180GB + Tài khoản mobiEdu | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3ED60?rf=091ISA |
325 | 6AG60 | Hot, Data | 360,000 | 210 Ngày | 420GB + Tài khoản mobiAgri | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-6AG60?rf=091ISA |
326 | 3SM60 | Hot, Data, Thoại & SMS | 180,000 | 90 Ngày | 3 Gb Tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | https://congtacvien.mobifone.vn/goi-cuoc-uu-dai/chi-tiet-goi-cuoc-3SM60?rf=091ISA |
327 | 6C120T | Hot, Data, Thoại & SMS | 720,000 | 210 Ngày | 6GB Tốc độ cao/ngày + Miễn phí phút gọi + … | Đăng ký |
328 | SHIP99 | Hot, Data, Thoại & SMS | 99,000 | 31 Ngày | 62GB + Miễn phí truy cập APP vận chuyển, giao hàng + … | Đăng ký |
329 | 12OF70 | Data, Thoại & SMS | 840,000 | 420 Ngày | 2GB GB tốc độ cao/ngày + phút thoại nội mạng, ngoại mang, … | Đăng ký |
330 | 3THAGA60 | Hot, Data | 180,000 | 90 Ngày | 360 GB Tốc độ cao | Đăng ký |
331 | 12SM90 | Hot, Data, Thoại & SMS | 1,080,000 | 360 Ngày | 5Gb Data tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | Đăng ký |
332 | SM90 | Hot, Data, Thoại & SMS | 90,000 | 30 Ngày | 5Gb Data tốc độ cao/ngày + Miễn phí cuộc gọi dưới 10 phút + … | Đăng ký |
Button Shortcode WordPress – cách thêm nút bấm vào WordPress
Bạn đã từng cố gắng thêm button vào trang web WordPress của mình chưa? Nền tảng này không có bất kỳ tính năng mặc định nào cho phép bạn tạo button, chúng ta phải nhờ sự giúp đỡ của các plugin. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng cả plugin WordPress shortcode và plugin non-shortcode để tạo ra các shortcode cho button. Từ đó nhúng shortcode button vào WordPress, bạn sẽ có thể chèn nút vào.
Shortcodes là gì?
Trước khi bắt đầu bài hướng dẫn, chúng ta sẽ tìm hiểu xem shortcodes là gì.
Về cơ bản, shortcode là mã đơn giản được để trong dấu ngoặc vuông – [như thế này] – cho phép bạn thêm chức năng vào các bài đăng và trang WordPress.
Để sử dụng shortcode WordPress button, chỉ cần nhập chúng vào trang biên tập bài viết. WordPress sẽ render code và hiển thị kết quả là nút bấm trên trang web của bạn.
Điều thú vị về WordPress button shortcode là bạn có thể tự làm một cái nếu code có sẵn không đáp ứng được nhu cầu.
Trong trường hợp cụ thể này, chúng tôi sẽ hướng dẫn luôn việc tạo WordPress button shortcode để thêm button trên trang web của bạn. Nhưng vì việc viết code từ đầu sẽ khó với đa số mọi người nên chúng tôi sẽ chỉ bạn cách làm bằng cách sử dụng plugin thay thế.
Sau đó, chúng tôi còn có giải pháp thay thế cho plugin shortcode nếu bạn không thích xài shortcode.
Nào hãy bắt đầu!
Cách thêm WordPress button
Không có nghi ngờ gì về việc các button của trang web đóng vai trò khuyến khích mọi người thực hiện hành động cụ thể như đăng ký, đăng nhập, tải tệp xuống, v.v. Ví dụ, Amazon sử dụng button để giúp khách truy cập dễ dàng thêm mặt hàng vào giỏ hàng của họ và mua hàng.
Bạn cũng có thể chèn button như trong ví dụ trên.
Tạo Button Shortcode bằng cách sử dụng plugin
Trong số nhiều plugin WordPress button shortcode có sẵn, lựa chọn hàng đầu của chúng tôi là MaxButtons với hơn 100.000 bản cài đặt được kích hoạt. Nó tương thích với các phiên bản WordPress khác nhau. Và quan trọng hơn là rất dễ sử dụng nên bất kỳ ai cũng có thể dùng mà không gặp vấn đề gì.
Để bắt đầu, hãy tải xuống và kích hoạt plugin. Sau đó, đến menu MaxButtons. Khi bạn đã ở trong dashboard của plugin, hãy nhấp vào Add new và bạn sẽ được đưa đến Button Editor.
Điều đầu tiên bạn cần điền là thông tin cơ bản như: button name (tên nút, để phân biện các button với nhau), URL (liên kết với button) và button text (text trên button) .
Trong phần đầu tiên này, bạn cũng có thể thay đổi phông chữ, màu text, di chuột màu văn bản và kích thước của button. Bạn có thể nhìn thấy tất cả các thay đổi thực hiện trong bản live preview ở bên phải màn hình.
Cuộn xuống, bạn sẽ thấy nhiều tùy chọn hơn để tùy chỉnh giao diện của các button.
Khi bạn thấy hài lòng với style của button rồi, hãy bấm Save ở đầu trang.
Bây giờ, hãy quay lại dashboard MaxButtons, bạn sẽ thấy shortcode cho button bạn vừa tạo. Trong ví dụ dưới đây, shortcode là .
Chèn Button Shortcode vào WordPress
Khi bạn muốn chèn button vào WordPress Editor, chỉ cần sao chép và dán shortcode. Ngoài ra, bạn có thể nhấp vào Add Button và chọn nút bạn muốn chèn:
Sau đó, sửa đổi button URL và button text theo những gì bạn cần cho bài đăng cụ thể đó. Bằng cách này, bạn không phải tạo ra shortcode khác nhau cho các bài đăng khác nhau.
Và chỉ vậy thôi! Bạn vừa tạo WordPress button đầu tiên của mình! Bạn có thể không thấy kết quả trên trình chỉnh sửa WordPress, vì button thực tế sẽ xuất hiện trên bài đăng khi nó được xuất bản.
Thay thế cho Plugin Shortcode
Hạn chế lớn nhất của plugin WordPress button shortcode như MaxButtons là tính linh hoạt. Nếu bạn muốn thêm button với một chút thay đổi về kiểu dáng, bạn phải truy cập dashboard plugin và chỉnh sửa nó từ đó.
Vậy nên thay vào đó, cách tốt nhất là sử dụng plugin không có shortcode như Forget About Shortcode Buttons.
Giống như tên của nó đã cho thấy, Forget About Shortcode Buttons không dựa vào shortcode. Bạn có thể tạo button ngay lập tức trong trình chỉnh sửa WordPress và tạo mọi kiểu từ đó. Chỉ cần nhấp vào biểu tượng Insert Button và bạn có thể bắt đầu sửa đổi button của mình ngay lập tức.
Các tùy chọn khá giống với MaxButtons – kiểu viền, màu nền và kích thước button. Nhưng có thêm tính năng bổ sung khác mà bạn sẽ hoàn toàn yêu thích: khả năng thêm một icon vào button của bạn. Với tinh chỉnh, nó sẽ khiến button của bạn trở nên độc đáo và đẹp hơn.
Nếu bạn muốn sử dụng lại button hiện tại của bạn trong tương lai, bạn không nên làm lại từ đầu! Chỉ cần lưu nó bằng cách nhấp vào biểu tượng Floppy Disk. Sau này bạn có thể sử dụng lại từ tab Templates bất cứ khi nào bạn cần.
Khi bạn đã hoàn tất, nhấp vào Update để chèn button.
Kết luận
Button rất có lợi cho mọi trang web. Chúng có hiệu quả trong việc thu hút sự chú ý. Quan trọng nhất là nó chứa text call-to-action khuyến khích mọi người thực hiện hành động.
Vì WordPress không cung cấp tính năng mặc định nào để chèn button vào trang web. Bạn sẽ phải sử dụng một số plugin bổ sung. Có các plugin WordPress dựa trên shortcode và non-shortcode. Trong hướng dẫn này, bạn đã học cách sử dụng cả hai. Cái nào là phù hợp nhất với bạn? Tuỳ bạn quyết định thôi!https://www.hostinger.vn/huong-dan/button-shortcode-wordpress#:~:text=B%E1%BA%A1n%20c%C3%B3%20th%E1%BB%83%20t%E1%BA%A1o%20button,n%E1%BB%81n%20v%C3%A0%20k%C3%ADch%20th%C6%B0%E1%BB%9Bc%20button.
Danh sách các gói cước 4G Mobifone Giá Rẻ Nhất Data khủng 2023
Danh sách các gói cước 4G Mobifone Giá Rẻ Nhất Data khủng 2023
Nên lựa chọn gói cước 4G Mobifone tháng, ngày hay chu kỳ dài nào để sử dụng mạng internet trên di động hiệu quả tiết kiệm nhất. Với gói 4G MobiFone đa dạng như hiện nay chắc chắn sẽ có gói cước MobiFone phù hợp cho quý khách hàng với giá rẻ từ 5.000đ, 10.000đ, 50.000đ…
Nhằm mang lại một trải nghiệm mạng di động 4G MobiFone không dây nhanh gấp 10 đến 20 lần so với công nghệ 3G MobiFone trước đây thì nhà mạng đã cung cấp cho khách hàng rất nhiều lựa chọn khi đăng ký gói 4G Mobi với nhiều mức giá cũng như ưu đãi về data tốc độ cao 4G.
» Tham khảo ngay: Các gói cước C120 MobiFone nhận 4GB Data/ngày
Cùng MobiFone.net.vn tìm hiểu cách đăng ký gói 4G Mobifone cho thuê bao của mình và phù hợp với nhu cầu sử dụng mạng 4G MobiFone của mình nhé?
Video tổng hợp các gói 4G MobiFone nhiều khách hàng đăng ký nhất
Các ưu điểm khi sử dụng gói 4G mạng MobiFone là gì?
- Sử dụng gói 4G Mobifone trọn gói không giới hạn giúp cho việc đăng ký 4G Mobi 1 tuần, tháng 1 lần duy nhất sử dụng trong tháng mà không mất thêm chi phí.
- Ưu đãi của gói 4G Mobi theo tháng, chu kỳ dài rất khủng kèm giá rẻ là sự lựa chọn tốt nhất cho khách hàng tiết kiệm chi phí.
- Sử dụng gói 4G MobiFone sẽ giúp cho việc kết nối nhanh, ổn định mọi lúc mọi nơi trên di động.
Hướng dẫn đăng ký gói cước 4G Mobifone cho thuê bao di động, Fast Connect
– Hiện tại nhà mạng Mobifone chia gói cước thành 2 nhóm khách hàng: thuê bao di động (sim nghe gọi) và thuê bao Fast Connect (sim lên mạng). Từng gói cước sẽ có những ưu đãi chuyên biệt để khách hàng có thể lựa chọn dễ dàng hơn.
– Thuê bao có nhu cầu sử dụng gói 4G Mobifone hãy soạn tin nhắn đăng ký theo cú pháp chung như sau:
MO [khoảng trắng] TÊN-GÓI-CƯỚC gửi đến 9084 (Miễn phí SMS)
Ngay khi đăng ký 4G MobiFone thành công, hãy nhanh chóng khởi động lại điện thoại để hệ thống cập nhật lại ưu đãi cho thuê bao di động của mình nhé.
Các gói cước 4G Mobifone giá rẻ được đăng ký nhiều nhất 2023
Gói cước | Cú pháp đăng ký | Đăng ký nhanh | |
Gói HD90 (90.000đ/30 ngày) |
MO HD90 gửi 9084 | Đăng ký | |
Cộng 8GB/tháng | Đăng ký | ||
Gói ED60 (60.000đ/30 ngày) |
MO ED60 gửi 9084 | ||
|
|||
Gói FD60 (60.000đ/30 ngày) |
MO FD60 gửi 9084 | ||
Cộng 2GB/ngày => 60GB/30 ngày | |||
Gói 21G (59.000đ/30 ngày) |
MO 21G gửi 9084 | ||
|
|||
Gói ED100 (100.000đ/30 ngày) |
MO ED100 gửi 9084 | ||
|
|||
Gói C120 (120.000đ/30 ngày) |
MO C120 gửi 9084 | ||
|
Tha hồ lướt nét tốc độ siêu nhanh với gói cước 4G Mobifone
Danh sách các gói cước 4G Mobifone ưu đãi data khủng 2023
1. Các gói 4G MobiFone tháng chỉ ưu đãi data 4G
Tên gói | Cú pháp/Ưu đãi | Đăng ký |
HD70
(70.000đ/30 ngày) |
MO HD70 gửi 9084 | |
6GB Hết data ngưng kết nối |
||
HD90
(90.000đ/ 30 ngày) |
MO HD90 gửi 9084 | |
8GB Hết data ngưng kết nối |
||
HD120
(120.000đ/30 ngày) |
MO HD120 gửi 9084 | |
10GB Hết data ngưng kết nối |
||
HD200
(200.000đ/ 30 ngày) |
MO HD200 gửi 9084 | |
18GB Hết data ngưng kết nối |
Các gói cước 4G Mobifone không giới hạn dành cho thuê bao di động có giá cước dao động từ 70.000đ – 200.000đ và có ưu đãi data KHỦNG từ từ 6GB data. Các gói cước 4G Mobifone khi sử dụng hết ưu đãi sẽ tự động ngắt kết nối nên bạn không cần phải lo lắng về cước phí vượt gói.
2. Các gói 4G Mobi chu kỳ 3 ngày – 7 ngày ưu đãi khủng
Tên gói | Cú pháp/Ưu đãi | Đăng ký nhanh |
D15 (15.000đ/3 ngày) |
MO D15 gửi 9084 | |
3GB | ||
D30 (30.000đ/7 ngày) |
MO D30 gửi 9084 | |
7GB |
3. Danh sách các gói 4G Mobi trọn gói không giới hạn dung lượng
Tên gói/Chu kỳ | Cú pháp sms/Ưu đãi | Đăng ký nhanh |
ED60 (60.000đ/tháng) |
MO ED60 gửi 9084 | |
|
||
ED100 (100.000đ/tháng) |
MO ED100 gửi 9084 | |
|
||
NCT60 (60.000đ/tháng) |
MO NCT60 gửi 9084 | |
|
||
AG60 (60.000đ/ 30 ngày) |
MO AG60 gửi 9084 | |
|
||
21G (59.000đ/tháng) |
MO 21G gửi 9084 | |
|
||
24G (99.000đ/tháng) |
MO 24G gửi 9084 | |
|
||
CF60 (60.000đ/tháng) |
MO CF60 gửi 9084 | |
|
||
CF90 (90.000đ/tháng) |
MO CF90 gửi 9084 | |
|
||
CF120 (120.000đ/tháng) |
MO CF120 gửi 9084 | |
|
||
CF150 (150.000đ/tháng) |
MO CF150 gửi 9084 | |
|
Các gói cước 4G Mobifone trọn gói không giới hạn dung lượng sẽ mang đến cho quý khách hàng ưu đãi trọn vẹn, bởi khi sử dụng hết ưu đãi hệ thống sẽ tự động hạ băng thông, khách hàng được truy cập mạng hoàn toàn miễn phí ở tốc độ thường.
Theo đó, mỗi ngày khách hàng sẽ được tặng một dung lượng data nhất định để truy cập mạng, dùng hết trong ngày hệ thống sẽ hạ băng thông. Nếu không dùng hết hệ thống sẽ tự động xóa ưu đãi và tiếp tục cộng ưu đãi cho ngày mới.
4. Các gói cước 4G của Mobifone ưu đãi data, gọi thoại và SMS siêu hấp dẫn
Tên gói | Cú pháp | Đăng ký |
C120 (120.000đ/tháng) |
MO C120 gửi 9084 | |
|
||
C190 (190.000đ/tháng) |
MO C190 gửi 9084 | |
|
||
C90N (90.000đ/tháng) |
MO C90N gửi 9084 | |
|
Với các gói 4G Mobifone kèm ưu đãi gọi thoại, SMS thường sẽ quy định đối tượng đăng ký. Để biết thuê bao của bạn có thể đăng ký gói cước thành công hay không, hãy soạn tin nhắn KT DSKM gửi 999, hoặc gọi đến tổng đài Mobifone số 9090 để được hỗ trợ tra cứu.
cách đăng ký 4g mobi
5. Gói cước 4G Mobi 1 tháng giá rẻ chỉ từ 10.000đ
Các gói 4G Mobifone giá rẻ đáp ứng các nhu cầu truy cập mạng đột xuất của quý thuê bao một cách tiết kiệm nhất. Đây là lựa chọn cứu cánh khi có nhu cầu kết nối mạng giá chỉ từ 10.000đ quý khách hàng có 30 ngày truy cập mạng thoải mái hơn.
Tên gói | Cú pháp/Ưu đãi | Đăng ký |
M10 (10.000đ/30 ngày) |
MO M10 gửi 9084 | |
500MB | ||
M25 (25.000đ/30 ngày) |
MO M25 gửi 9084 | |
2GB | ||
M50 (50.000đ/30 ngày) |
MO M50 gửi 9084 | |
4GB |
6. Danh sách các gói cước 4G của Mobifone dùng chung cho người thân, bạn bè
Tên gói | Cú pháp SMS | Đăng ký nhanh |
CF50 (50.000đ/30 ngày) |
MO CF50 gửi 9084 | |
|
||
CF90 (90.000đ/30 ngày) |
MO CF90 gửi 9084 | |
|
||
CF120 (120.000đ/30 ngày) |
MO CF120 gửi 9084 | |
|
||
CF150 (150.000đ/30 ngày) |
MO CF150 gửi 9084 | |
|
||
MFY99 (99.000đ/30 ngày) |
MO MFY99 gửi 9084 | |
|
||
MFY199 (199.000đ/30 ngày) |
MO MFY199 gửi 9084 | |
|
||
MFY399 (399.000đ/30 ngày) |
MO MFY399 gửi 9084 | |
|
Với các gói cước 4G Mobifone dùng chung, khi tiến hành đăng ký quý khách hàng được phép thêm số thuê bao Mobifone để có thể dùng chung data, phút gọi nội mạng. Tiến hành thêm số thuê bao dùng chung bạn có thể soạn tin nhắn thêm theo cú pháp:
- Gói CF: Soạn ADM CF [số thuê bao thành viên] gửi 999 (15.000đ/ thành viên/ tháng)
- Gói MFY: Soạn ADM MFY [số thuê bao thành viên] gửi 999 (15.000đ/ thành viên/ tháng)
7. Bảng giá các gói 4G Mobifone miễn phí data học online trên MobiEdu Mobifone
Nếu có con em đang học tập online thì các gói cước 4G Mobifone miễn phí data học trên MobiEdu Mobifone là một giải pháp dành cho bạn. Khi đăng ký gói cước bạn sẽ được miễn phí 1 tài khoản ôn tập, thi thử tại dịch vụ MobiEdu Mobifone.
Tên gói | Cú pháp SMS | Đăng ký nhanh |
ED50 (50.000đ/30 ngày) |
MO ED50 gửi 9084 | |
|
||
ED60 (60.000đ/30 ngày) |
MO ED60 gửi 9084 | — |
|
||
ED100 (100.000đ/30 ngày) |
MO ED100 gửi 9084 | |
|
8. Danh sách các gói 4G Mobi chu kỳ 3 tháng – 6 tháng
Các gói cước 4G của Mobifone chu kỳ 3 tháng, 6 tháng sẽ giúp quý khách hàng có những trải nghiệm truy cập mạng tuyệt vời. Khi chỉ với 1 lần đăng ký quý khách hàng sẽ được dùng data thoải mái trong suốt 3 hoặc 6 tháng.
Bên cạnh đó, khi đăng ký gói 4G Mobifone 6 tháng, một số gói cước còn dành tặng ưu đãi thêm 1 tháng sử dụng cho khách hàng. Với ưu đãi này, khách hàng chỉ cần trả cước 6 tháng nhưng được dùng lên đến 7 tháng.
Tên gói | Cú pháp | Đăng ký |
3FD50 (150.000đ/3 tháng) |
MO 3FD50 gửi 9084 | |
3GB/ngày (270GB/90 ngày) | ||
3C120 (360.000đ/ 3 tháng) |
MO 3C120 gửi 9084 | |
|
||
6C120 (720.000đ/ 7 tháng) |
MO 6C120 gửi 9084 | |
|
||
6C90N (540.000đ/6 tháng) |
MO 6C90N gửi 9084 | |
|
||
6HD70 (350.000đ/7 tháng) |
MO 6HD70 gửi 9084 | |
|
||
6HD90 (450.000đ/7 tháng) |
MO 6HD90 gửi 9084 | |
|
||
6HD120 (600.000đ/7 tháng) |
MO 6HD120 gửi 9084 | |
|
||
6FD50 (300.000đ/6 tháng) |
MO 6FD50 gửi 9084 | |
4GB/ngày (720GB/6 tháng) |
9. Bảng giá các gói 4G Mobifone chu kỳ 12 tháng
Đăng ký 4G Mobifone chu kỳ 12 tháng chỉ với 1 lần đăng ký bạn có 1 năm sử dụng mạng thoải mái, mà không phải đăng ký hay gia hạn. Một số gói cước còn có ưu đãi tặng thêm 2 tháng sử dụng nâng tổng thời gian lên 14 tháng giúp quý khách hàng có thêm thời gian truy cập mạng với data khủng.
Tên gói | Cú pháp | Đăng ký ngay |
12C120 (1.440.000đ/ 14 tháng) (12 tháng tặng 2 tháng) |
MO 12C120 gửi 9084 | |
|
||
12HD70N (500.000đ/12 tháng) |
MO 12HD70N gửi 9084 | |
0,5 GB data/ngày (180GB/ 12 tháng) | ||
12HD90N (900.000đ/12 tháng) |
MO 12HD90N gửi 9084 | |
1GB/ngày (360GB/ 12 tháng) | ||
12ED50 (600.000đ/12 tháng) |
MO 12ED50 gửi 9084 | |
1GB/ngày (360GB/ 12 tháng) | ||
12FD50 (600.000đ/12 tháng) |
MO 12FD50 gửi 9084 | |
5GB/ngày (1.800GB/ 12 tháng) | ||
12CF50 (600.000đ/12 tháng) |
MO 12CF50 gửi 9084 | |
30GB/30 ngày (360GB/ 12 tháng) |
10. Bảng giá các gói cước 4G Mobifone Fast Connect mới nhất năm 2023
Nhà mạng Mobifone mang đến cho các thuê bao Fast Connect Mobifone các gói cước 4G Mobifone theo tháng và chu kỳ dài để khách hàng có thể đa dạng sử dụng. Hãy chọn cho mình gói 4G Fast Connect Mobi phù hợp để tiến hành sử dụng ngay nhé.
10.1 Bảng gói cước 4G của Mobifone Fast Connect chu kỳ tháng
Tên gói | Cú pháp/Ưu đãi | Đăng ký nhanh |
F70 (70.000đ/30 ngày) |
MO F70 gửi 9084 | |
7GB data Cước vượt gói 200đ/MB |
||
F90 (95.000đ/30 ngày) |
MO F90 gửi 9084 | |
9GB data Cước vượt gói 200đ/MB |
||
F120 (120.000đ/30 ngày) |
MO F120 gửi 9084 | |
12GB data Cước vượt gói 200đ/MB |
||
F200 (200.000đ/30 ngày) |
MO F200 gửi 9084 | |
20GB data Cước vượt gói 200đ/MB |
||
F300 (300.000đ/30 ngày) |
MO F300 gửi 9084 | |
30GB data Cước vượt gói 200đ/MB |
*Lưu ý:
- Với gói cước 4G Mobifone cho thuê bao Fast Connect khách hàng có 30 ngày sử dụng.
- Sử dụng hết ưu đãi hệ thống sẽ tính cước vượt gói với mức phí 200đ/MB.
- Gói cước sẽ tự động gia hạn sau 30 ngày sử dụng.
10.2 Bảng giá gói cước 4G Mobifone cho Fast Connect chu kỳ 3 tháng, 6 tháng, 12 tháng
Tên gói | Cú pháp/Ưu đãi | Đăng ký nhanh |
F150 (150.000đ/3 tháng) |
MO F150 gửi 9084 | |
3GB/tháng ⇔ 9GB/ 3 tháng | ||
F250 (250.000đ/6 tháng) |
MO F250 gửi 9084 | |
3GB/tháng ⇔ 18GB/ 6 tháng | ||
F500 (500.000đ/12 tháng) |
MO F500 gửi 9084 | |
5GB/tháng ⇔ 60GB/ 12 tháng |
*Lưu ý:
- Các gói cước 4G Fast Connect Mobifone chu kỳ dài không giới hạn dung lượng. Theo đó, sử dụng hết ưu đãi tốc độ cao trong tháng khách hàng được miễn phí truy cập ở tốc độ thường.
- Ưu đãi tốc độ cao được sử dụng trong vòng 30 ngày, sau 30 ngày hệ thống sẽ tự động cộng lại ưu đãi, không bảo lưu ưu đãi cũ.
- Gói cước cũng có tính năng gia hạn tự động sau chu kỳ 3 tháng, 6 tháng và 12 tháng.
Một số điều bạn cần biết khi sử dụng gói cước 4G của Mobifone
– Khách hàng có nhu cầu đăng ký gói cước 4G Mobifone cần phải sử dụng sim 4G Mobifone. Nếu chưa thực hiện chuyển đổi sim 4G Mobifone hãy để cửa hàng Mobifone, hoặc thực hiện cách chuyển đổi tại nhà nhé.
» Tìm hiểu ngay cách đổi sim 4G Mobifone miễn phí nhanh chóng và đơn giản nhất
– Bên cạnh đó, điện thoại bạn đang dùng phải được hỗ trợ kết nối mạng 4G Mobifone. Nếu điện thoại không có hỗ trợ kết nối 4G, bạn hoàn toàn có thể truy cập mạng ở tốc độ 3G trên các gói 4G của Mobifone đã đăng ký.
- Trong quá trình sử dụng, để kiểm tra dung lượng data gói cước 4G Mobifone miễn phí còn lại của gói cước bằng cách soạn tin nhắn: KT DATA gửi 999 (200đ/tin nhắn).
- Hầu hết các gói cước đều có tính năng gia hạn tự động khi hết chu kỳ, chính vì thế khi không có nhu cầu sử dụng tiếp nữa hãy huỷ gói 4G Mobifone bằng cách soạn tin: HUY TENGOICUOC gửi 999.
- Trường hợp, muốn hủy gia hạn gói cước (tiếp tục sử dụng ưu đãi đến hết chu kỳ nhưng không gia hạn ở chu kỳ sau), bạn có thể soạn tin: KGH gửi 999
Gói cước 4G Mobi giá rẻ cho di động và Fast Connect sẽ giúp khách hàng có những trải nghiệm thoải mái hơn khi có nhu cầu truy cập Internet. Hãy chọn lựa cho mình gói cước thật phù hợp để các nhu cầu truy cập mạng, Facebook, Youtube, Zalo, Check mail… trên di động trở nên dễ dàng nhanh chóng và tiết kiệm hơn. Chúc quý khách hàng chọn được gói cước ưng ý và đăng ký gói cước thành công!
Người dùng tìm kiếm:
- Gói cước 4G Mobi 90k
- Gói cước 4G Mobi 120GB
- Gói cước 4G Mobi
- Gói 4G Mobi
- Gói cước 4G MobiFone
- Các gói 4G Mobi
- Các gói cước 4G Mobi
- ….
Cước phí đăng ký qua tổng đài Mobifone 9084 là Miễn Phí, Cảm ơn Quý Khách đã sử dụng dịch vụ của Mobifone
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
BÀI 1: NH ẬP MÔN VI ĐIỀU KHIỂN PIC I. PHẦN LÝ THUY ẾT
1. Giới thiệu về vi điều khiển PIC
1. 1 Giới thiệu về vi điều khiển
Bộ vi điều khiển viết tắt là Micro-controller là m ạch tích hợp trên một chip có th ể lập trình được, dùng để điều khiển hoạt động của hệ thống .Theo các ậtp lệnh của người lập trình, bộ vi điêu khiển tiến hành đọc, lưu trữ thông tin, x ử lý thông tin, đo thời gian và tiến hành đóng mở một cơ cấu nào đó .
Trong các thiết bị điện và điện tử, các bộ vi điều khiển điều khiển hoạt động của ti vi, máy giặt, đầu đọc lase, lò vi ba, điện thoại …Trong h ệ thống sản xuất tự động, bộ vi điều khiển sử dụng trong robot, các hệ thống đo lường giám sát .Cácệ thống càng thông minh thì vai trò c ủa vi điều khiển ngày càng quan tr ọng. Hiện nay trên thị trường có r ất nhiều họ vi điều khiển như: 6811 của Motorola, 8051 của Intel, Z8 của Zilog, PIC của
Microchip Technology .
1.2 Giới thiệu về vi điều khiển PIC
PIC bắt nguồn từ chữ viết tắt của “Programmable Intelligent Computer” ( Máy tính khả trình thông minh) là s ản phẩm của hãng General Instrument đặt cho dòng s ản
phẩm đầu tiên ủca họ là PIC 1650. Lúc này Pic dùng để giao tiếp với các thiết bị ngoại vi cho máy chủ 16 bit CP1600, vì vậy người ta gọi PIC với tên là “ Peripheral Interface Controller” ( b ộ điều khiển giao tiếp ngoại vi) .
Năm 1985 General Instrument bán bộ phận vi điện tử của họ, và ch ủ sở hữu mới (Microchip Technology) huỷ bỏ hầu hết các dự án – lúc đó đã quá ỗli thời. Tuy nhiên PIC
được bổ sung EEPROM để tạo thành m ột bộ điều khiển vào ra kh ả trình. Ngày nay có r ất nhiều dòng PIC được sản xuất với hàng lo ạt các modul ngoại vi được tích hợp sẵn ( như :USART, PWM, ADC…) v ới bộ nhớ chương trình từ 512 word đến 32k word.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
PIC sử dụng tập lệnh RISC, với dòng PIC low- end (độ dài mã l ệnh 12 Bit ví dụ PIC12Cxxx) và mid- range (độ dài mã l ệnh 14 bit , ví dụ PIC16Fxxx), tập lệnh bao gồm khoảng 35 lệnh, và 70 l ệnh đối với dòng PIC high- end( có độ dài mã l ệnh 16bit PIC18Fxxxx). Tập lệnh bao gồm các ệlnh tính toán trên các thanh ghi, và cácằngh số, hoặc các vị trí ô nh ớ, cũng như có các lệnh điều kiện, nhảy/ gọi hàm, và các lệnh quay trở về, nó c ũng có các chức năng phần cứng khác như ngắt hoặc sleep( chế độ hoạt động tiết kiệm điện ). Microchip cung cấp môi trường lập trình MPLAB0, nó bao g ồm phần mềm mô ph ỏng và trình d ịch ASM
Hiện nay có khá nhiều dòng PIC và có r ất nhiều khác biệt về phần cứng, nhưng chúng ta có thể điểm qua một vài nét như sau :
8/16/24/32 bit CPU, xây d ựng theo kiến trúc Harvard Flash và Rom có th ể tuỳ chọn 256 byte đến 256 kbybe
Bộ nhớ nội EEPROM – có th ể ghi/ xoá lênớ it hàng tri ệu lần
Các ổcng xuất/nhập (mức lôgic thường từ 0v đến 5v, ứng với mức logic 0 và 1,
dòng kho ảng vài ch ục mA) 8/16 bit timer
Modun giao tiếp ngoại vi nối tiếp không đồng bộ: USART Modun giao tiếp ngoại vi song song (kiểu máy in)
Bộ chuyển đổi ADC 10 bit nội gồm 8 kênh đầu vào
Module ngoại vi MSSP dùng cho các giao tiếp I2C, SPI Modul CCP có ch ức năng
o Comparator (so sánh)
o Capture
Một số
o PWM: dùng trong điều khiển động cơ dòng vi điều khiển PIC hỗ trợ thêm:
Hỗ trợ điều khiển động cơ 3 pha, 1 pha
Hỗ trợ giao tiếp USB
Hỗ trợ điều khiển Ethernet
Hỗ trợ giao tiếp CAN
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Hỗ trợ giao tiếp LIN Hỗ trợ giao tiếp IRDA
DSP những tính năng xử lý tín hi ệu số
1.3 Các thành phần cơ bản của một mạch ứng dụng vi điều khiển PIC:
1.4 Các khái ệmni cơ bản:
Cổng xuất nhập I/O:
Trong vi điều khiển PIC16F877A có 5 c ổng:
Cổng A gồm 6 chân: RA0, RA1.. RA5
Cổng B gồm 8 chân: RB0, RB1,..RB7
Cổng C gồm 8 chân: RC0, RC1, ..RC7
Cổng D gồm 8 chân: RD0, RD1,..RD7
Cổng E gồm 3 chân: RE0, RE1, RE2
Mỗi cổng thực chất được quản lý b ởi các thanh ghi PORTA, PORTB, PORTC, PORTD, PORTE nằm trong bộ nhớ RAM của vi điều khiển. Xem hình sau:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Bộ nhớ RAM của vi điều khiển PIC 16F877A gồm 4 bank nhớ. Nhìn vào các bank nhớ ta có th ể thấy các thanh ghi được đặt tên và các thanh ghi đa mục đích (General Purpose
Register).
Các thanh ghi được đặt tên là các thanh ghi đặc biệt dùng để điều khiển, quản lý hoặc thể hiện trạng thái ủca các khối chức năng trong vi điều khiển ví dụ PORTA
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
chân c ủa vi điều khiển có
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
là đại diện cho các chân cổng A, PORTB là đại diện cho các chân cổng B v.v. Các thanh ghi này có địa chỉ xác định và không được dùng cho các mục đích khác
Các thanh ghi đa mục đích được dùng để đặt biến trong một chương trình ứng dụng của vi điều khiển. Nhìn vào b ản đồ bộ nhớ RAM, ta thấy biến có th ể đặt từ
địa chỉ 20F đến 7Fh trong bank nhớ 0, A0h-EFh, 120h-16Fh, 1A0h-1EFh.
Trở lại vấn đề về các cổng, tới đây ta có thể đưa ra nhận xét:
Thanh ghi PORTA phản ánh trạng thái ủca các chân cổng A, nghĩa là mu ốn tín hiệu đầu ra của các chân cổng A như thế nào ta ch ỉ việc đưa giá trị vào các bit tương ứng trên thanh ghi PORTA. Cũng như khi đọc giá trị của thanh ghi PORTA ta sẽ biết được trạng thái ủca các chân cổng A.
Ví dụ:
Muốn RA0 ở mức logic 1 (mức 5V), RA1 ở mức logic 0 (mức 0V), RA2 ở mức logic 1, RA3 ở mức logic 0, RA4 ở mức logic 1, RA5 ở mức logic 1, ta chỉ việc gán giá ịtr 000110101 cho thanh ghi PORTA.
X X 1 1 0 1 0 1
RA5 RA4 RA3 RA2 RA1
RA0
X: không quan tâm.
Tương tự như vậy với PORTB,PORT C,PORTD,PORTE.
Tính đa chức năng của một chân trên vi điều khiển:
Nhìn vào s ơ đồ chân c ủa vi điều khiển, ta có th ể thấy một số
tên gồm nhiều phần với dấu gạch chéo. Ví dụ: RA0/AN0, RC7/RX/DT, RC6/TX/CK Đây chính là tính đa chức năng của một chân trên vi điều khiển hay còn g ọi là s ự dồn
kênh.
Ý ngh ĩa của nó là:
Bình thường nếu không được cài đặt thì tấc cả các chân trên 5 ổcng A, B, C, D, E là các chân vào ra s ố I/O.
Nếu trong chương trình ta có cài đặt một chức năng nào đó như RS232, ADC hoặc PWM v.v thì các chân tương ứng với chức năng đó sẽ hoạt động theo chức năng đó. Khi đó chân này s ẽ không được dùng làm chân vào ra s ố như bình thường nữa.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Ví dụ: bình thường chân RA0/ANO là chân vào ra s ố RA0, nếu chức năng ADC với kênh vào tín hi ệu analog là kênh0 được cài đặt khi đó chân RA0 /AN0 sẽ là chân vào c ủa bộ ADC, tức là ho ạt động theo chức năng AN0.
Tương tự như vậy, khi cài đặt giao tiếp với thiết bị ngoại vi theo chuẩn RS232, chân vào ra số RC7/RX/DT sẽ hoạt động như đầu vào d ữ liệu RS232 tức là ch ức năng RX của chân này.
Cài đặt vào/ra cho các chân vào ra s ố trên cácổ ng:c
Các chân vào/ra số trên vi điều khiển PIC phải được cài đặt là chân vào ho ặc chân ra thì
mới hoạt động đúng chức năng. Việc một chân trên cổng X (X=A,B,..E) được qui định là đầu ra hay đầu vào ph ụ thuộc vào bit tương ứng trên thanh ghi TRISX (X=A,B,..E) là 0 hay 1.
Ví dụ: Muốn 4 chân th ấp (bit thấp) trên ổcng B (RB0-RB3) là chân vào, 4 chân cao (bit
cao) trên ổcng B (RB4-RB7) là chân ra thì giá trị các bit trên thanh ghi TRISBẽ slà:
0 0 0 0 1 1 1 1
Gợi ý d ễ nhớ là:
Để chân RB.m (m=0- 7) là đầu ra, tức Output thì giá trị TRISB.m là 0 Là đầu vào, t ức Input thì giá trị TRISB.m là 1
Tương tự như vậy đối với các chân trên cácổ ngc còn l ại
2. Ngôn ng ữ lập trình cho vi điều khiển PIC- CCS:
2. 1 Các ngôn ngữ lập trình cho vi điều khiển PIC: Ngôn ng ữ lập trình cho vi điều khiển PIC có 2 lo ại:
– Ngôn ng ữ lập trình cấp thấp- Hợp ngữ: có ph ần mềm MPLAB
– Ngôn ng ữ lập trình bậc cao: có nhi ều loại, được phát triển theo ngôn ng ữ C, như: CCS, HTPIC, PIC BASIC v.v
Ưu điểm của hợp ngữ là giúp người học và l ập trình hiểu rõ hơn về cấu trúc bên trong ủca
vi điều khiển PIC, cũng như tối ưu hóa bộ nhớ chương trình. Tuy nhiên, nhìn chung phương pháp tiếp cận hợp ngữ là khó và kh ả năng phát triển ứng dụng là h ạn chế, mất
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
thời gian. Vì vậy, khóa h ọc sẽ tập trung vào s ử dụng ngôn ng ữ bậc cao mà c ụ thể là CCS để nghiên ứcu và phát triển cácứng dụng trên PIC.
Ưu điểm của CCS là:
– Kế thừa tấc cả đặc điểm của ngôn ng ữ C- là ngôn ng ữ cơ bản, quen thuộc mà sinh viên đã được đào tạo
– Xây d ựng sẵn các hàm phục vụ cho việc sử dụng dễ dàng các khối chức năng đặc biệt của Vi điều khiển PIC như khối ADC, PWM, RS232, SPI
– Có kh ả năng kết hợp với ngôn ng ữ hợp ngữ, tạo sự mềm dẻo trong phát triển ứng dụng
– Khả năng phát triển, nâng c ấp ứng dụng là d ễ dàng
– Ngày càng được cập nhật với nhiều tính năng ưu việt và hi ệu quả hơn.
2.2 Cơ bản về ngôn ng ữ lập trình CCS:
2.2.1 Ví dụ về một chương trình viết trên ngôn ngữ CCS:
// Đây là chú thích chương trình
//Bắt đầu các chỉ thị tiền xử lý c ủa chương trình
#include<16f877a.h> // cho file định nghĩa thiết bị 16f877a.h vào chương trình #fuses HS,NOLVP,NOWDT// Cấu hình cho vi điều khiển PIC
#use delay (clock=4000000) // dùng thạch anh tần số 4MHz // Khai báo biến hằng
byte const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //=========================================== //===========================================
// Bắt đầu chương trình con hiển thị
void display(int n)
{
char b; // khai báo biến b
b=((MAP[n/10]) ^ 0x00);
if ((n/10)==(0)) b=0xff;
output_b(b); // sử dụng hàm xu ất giá trị ra cổng B
output_low(PIN_A4);// sử dụng hàm đưa giá trị chân RA4 xu ống mức thấp
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
delay_ms(2);// Sử dụng hàm t ạo trễ 2 ms
output_high(PIN_A4); // sử dụng hàm đưa giá trị chân RA4 lên mức cao
output_b((MAP[n%10]) ^ 0x00);
output_low(PIN_A5);
delay_ms(2);
output_high(PIN_A5);
}
// Kết thúc chương trình con hiển thị
//============================================
// Bắt đầu chương trình chính
// Đây là nơi vi điều khiển bắt đầu chạy lệnh
//============================================
void main()
{
int i,count;
count=0;
while(TRUE)
{
for (i=0;i<=50;i++)
display(count); // dispay 50 times
count=(count==99) ? 1: count+1;
}
}
2.2.2 Cấu trúc của một chương trình viết bằng CCS:
2.2.2.1 Khai báo tiền xử lý:
Bắt đầu một chương trình viết bằng ngôn ng ữ CCS là ph ần khai báo tiền xử lý:
1. Đầu tiên là phần khai báo file header:#include <tên chip dùng.h>
Ví dụ: # include <16f877a.h>
Việc khai báo này thực chất là chép cả file 16f877a.h vào chương trình này.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Vậy nội dung của file .h này là gì? N ội dung của file này s ẽ định nghĩa tấc cả các tên ũngc như định nghĩa các hằng sẽ được dùng trong các hàm chức năng của
CCS.
Ví dụ trong chương trình cho ở trên, trong dòng lệnh :
output_low(PIN_A4);// sử dụng hàm đưa giá trị chân RA4 xu ống mức thấp
thì hằng PIN_A4 được định nghĩa trong file 16f877a.h là #define PIN_A4 44,
CCS hiểu đây là bit thứ 4 của thanh ghi có địa chỉ 04h (thanh ghi PORTA). Có th ể mở file: C:\Program Files\PICC\Devices\16f877a.h để hiểu thêm
2. Thứ hai là ph ần khai báo ấcu hình: #fuses HS,NOLVP,NOWDT
Vi điều khiển PIC có th ể hoạt động ở nhiều chế độ khác nhau, ũngc như cách cấu hình phần cứng của nó c ũng có nhiều chế độ. Mỗi chế độ như vậy được khai báo và dùng s ẽ ảnh hưởng đến hoạt động của các khối chức năng, cũng như các chân của vi điều khiển. Vì vậy, đối với mỗi ứng dụng, ta phải khai báo ấcu hình cho phù hợp.
Trong ví dụ trên, khai báoấuc hình cho bộ dao động kiểu HS, không s ử dụng chức năng Watchdog Timer, và lập trình điện áp thấp.
3. Thứ ba là ph ần khai báo ầtn số của thạch anh dùng cho ứng dụng, tốc độ này ph ải phù hợp với thạch anh ta dùng trong mạch.
# USE Delay(clock=tần số thạch anh)
Ví dụ: # USE Delay(clock=4000000)// Khai báo dùng thạch anh 4 MHz
Điều lưu ý là chúng ta chỉ dùng được hàm t ạo thời gian trễ delay_ms(), delay_us() sau khi có khai báo này trong chương trình.
4. Ngoài ra, khi s ử dụng bất cứ khối chức năng đặc biệt nào trong vi điều khiển PIC ta phải dùng chỉ thị tiền xử lý #USE để khai báo. Các khối chức năng đặc biệt là RS232, PWM, SPI, I2C ..v.v
Ví dụ: #use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)
2.2.2.2 Phần khai báo biến toàn c ục:
Sau phần khai báo tiền xử lý là ph ần khai báo biến toàn c ục nếu có.
Cũng nhắc lại biến toàn c ục là bi ến được sử dụng trong toàn b ộ chương trình, cả chương trình chính và ch ương trình con. Điều này khác với biến cục bộ là bi ến được khai báo
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
trong các chương trình con, hàm con, ch ương trình chính, các biến này ch ỉ được tạo ra và sử dụng trong chính mỗi chương trình khai báo nó.
Nhân đây cũng giới thiệu qua dạng dữ liệu dùng trong CCS. Có m ột số các dạng cơ bản như sau:
Khai báo biến:
Int1,short: dạng logic 1,0
Int,Int8,byte: dạng số nguyên 8 bit, nếu khai báo dạng số nguyên 8 bit có dấu thêm signed
Int16,long: dạng số nguyên 16 bit
Int32: dạng số nguyên 32 bit
Char: dạng kí tự 8 bit
Float: dạng số thực 32 bit
Ví dụ: int8 a; // Khai báo a là biến số nguyên 8 bit
Khai báo hằng số:
Ví dụ: int8 const a=231;
Khai báo mảng hằng số:
Ví dụ: int const a[5]= {1, 23, 3, 4, 5}
2.2.2.3 Phần khai báo, định nghĩa cácchương trình con:
Chương trình con là ch ương trình sẽ được gọi từ chương trình chính ho ặc chương trình con khác.
Chương trình con phải được khai báo và định nghĩa trong một file chương trình ứng dụng.
Phần khai báo phải đặt trước chương trình chính (trong file)
Phần định nghĩa có thể định nghĩa ngay trong khai báo hoặc được đặt bất kì nơi nào sau phần khai báo biến toàn c ục nếu có.
Ngoài các chương trình con bình thường ra, còn có ch ương trình con phục vụ ngắt được đặt sau khai báo tiền xử lý: # int_tên ngắt. Phần này s ẽ được bàn k ĩ hơn trong các bài học
sau.
2.2.2.3 Phần chương trình chính:
Bắt đầu bằng:
void main() {
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
}
Cũng nhắc lại là trong m ột chương trình CCS , vi điều khiển sẽ chạy từ chương trình chính, hay nói cách khác là ừt dòng l ệnh đầu tiên sau void main().
Các chương trình con chỉ được gọi tại các ờli gọi chương trình con trong chương trình chính hoặc từ các chương trình con khác. Chương trình con phục vụ ngắt chỉ được chạy khi có ng ắt xảy ra, và ng ắt đó được cho phép (sẽ bàn k ĩ hơn trong các bài học sau).
2.2.3 Các ấcu trúc thuật toán ủca ngôn ng ữ CCS:
Cấu trúc thuật toán ủca ngôn ng ữ CCS kế thừa 100% từ ngôn ng ữ C. Ở đây xin nhắc lại một số các ấcu trúc hay dùng:
– Cấu trúc IF:
o If (biểu thức) Lệnh1;
Else lệnh2;
Ví dụ: if (x==25)
x=1;
else
x=x+1;
– Cấu trúc lặp While:
o While (biểu thức)
{
Các ệlnh;
}
Ví dụ: While (count<20)
{
Output_B(count);
Count=count+1;
}
Chú ý: while(1) sẽ thực hiện các ệlnh trong khối while này mãi mãi
– Cấu trúc lặp FOR:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
o For (biểu thức 1, biểu thức 2, biểu thức 3)
{
Các ệlnh;
}
Ví dụ: for (i=1;i<=10;++i)
A=a+i;
–
Cấu trúc lựa chọn SWITCH:
o SWITCH (biến)
{
Case giá trị 1: lệnh 1;
Break;
Case giá trị 2: lệnh 2;
Break;
………
Case giá trị n: lệnh n
Break;
[default: lệnh n+1; break;]
}
Ví dụ: switch (cmd)
{ case 0:printf(“cmd 0”);
break;
case 1:printf(“cmd 1”);
break;
default:printf(“bad cmd”);
break;
}
CÔNG TY TNHH CÔNG NGH
Ệ CAO ATECKO
www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Chú ý: lệnh break được dùng để thoát ậlp tức khỏi một vòng l ặp For, While, Switch
2.2.4 Các toánử tcơ bản trong CCS:
Hoàn toàn tương tự trong C.
Nhắc lại một số toán ửt hay dùng:
– += ý ngh ĩa là c ộng thêm một giá trị và l ấy kết quả Ví dụ: a+=2 nghĩa là a= a+2
Tương tự đối với các phép toánừtr,chia, nhân
-++ ý ngh ĩa là c ộng thêm 1 đơn vị vào bi ến
Ví dụ: a++; tức là a=a+1
– &&: phép AND
– ||: phép OR
– !: phép NOT
– !=: không b ằng
– >>n: dịch trái n bit
– <<n: dịch phải n bit
2.2.5 Các hàm số học cơ bản trong CCS:
Hoàn toàn gi ống trong C.
Nhắc lại một số hàm cơ bản:
Abs (): lấy trị tuyệt đối
Ceil(): làm tròn theo h ướng tăng
Floor(): làm tròn theo h ướng giảm
Pow(): lũy thừa
Sqrt(): lấy căn
Chi tiết tra help CCS : trong tab contents, chọn Built-In-Function Chú ý là khi s ử dụng các hàm này c ần khai báo file header tương ứng
2.2.6 Các hàm vào ra cơ bản trong CCS:
– Output_low (chân ): cho chân xuống mức logic thấp (mức điện áp 0V), chân có thể là:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
PIN_A0, PIN_A1, ..PIN_B0, PIN_B1,.. PIN_C0,..v.v Nói chung là các chân có
tên trong file C:\Program Files\PICC\Devices\16f877a.h
Ví dụ: Output_low(PIN_D0) đưa chân RD0 của PIC xuống mức thấp
– Output_high(chân ): cho chân lên mức logic thấp (mức điện áp 0V), chân có thể là:
PIN_A0, PIN_A1, ..PIN_B0, PIN_B1,.. PIN_C0,..v.v Nói chung là các chân có tên trong file C:\Program Files\PICC\Devices\16f877a.h
Ví dụ: Output_high(PIN_a5) đưa chân Ra5 của PIC lên mức cao
– Output_bit(chân,giá trị): là l ệnh tổng hợp 2 lệnh trên, xuất giá trị ra chân. Giá trị có th ể là 0 (m ức thâp) ho ặc là 1 (m ức cao). Tên chân tương tự như 2 lệnh trên Ví dụ: output_bit(PIN_E0,1); đưa chân E0 lên mức 1
– Output_X(giá trị): lệnh này đưa giá trị ra cổng X. X có th ể là A, B, C, D, E.
Ví dụ: Output_A(0x21); đưa giá trị 0x21 ra cổng A
– Biến=Input_X(): đưa giá trị của cổng X vào B iến. X là A, ho ặc B, C, D, E
Ví dụ: bien1= Input_A()
– Biến=Input(chân ): lệnh này đưa giá trị của chân vào bi ến. Chân tương tự như trong các ệlnh.
Ví dụ: bien2= Input(PIN_A2);
2.2.7 Các hàm tạo trễ:
Các hàm tạo trễ gồm delay_cycles(), delay_us(), delay_ms. Tạo một khoảng thời gian trễ từ lúc lệnh được thực hiện. Chú ý là ph ải sử dụng khai báo tiền xử lý # use delay(clock=tần sô) thì m ới dùng được các ệlnh này.
– delay_cycles(số chu kỳ): tạo trễ một khoảng thời gian bằng số chu kỳ. Số chu kỳ=0-255
– delay_us(số micro giây) : tạo trễ số micro giây. S ố micro giây =0-65535
– delay_ms(số mili giây) : tạo trễ số mili giây. S ố mili giây= 0-65535
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
II. PHẦN THỰC HÀNH
Mục tiêu:
– Làm quen v ới ngôn ng ữ lập trình CCS, phần mềm mô ph ỏng Proteus, kit phát
triển
– Hiểu được các phần cơ bản của một mạch thực thi vi điều khiển PIC
– Hiểu được việc xuất nhập dữ liệu trên các chân vi điều khiển
– Ôn l ại tư duy lập trình, thuật toán và cấu trúc một chương trình viết trên C
– Làm quen v ới một số lệnh cơ bản trong CCS
Bài t ập 1.1: Dùng phần mềm mô ph ỏng Proteus thiết kế mạch như hình vẽ sau:
a. Viết chương trình bật đèn led D1
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
b. Viết chương trình bật đèn led D2, tạo trễ 1s, tắt đèn led D2, lặp lại quá trình này
c. Viết chương trình bật đèn D1, D2, …D7 theo giá trị của cổng B từ 0x00 đến 0xFF rồi lặp lại quá trìnhđó.
d. Viết chương trình bật các đèn led theo trình tự như sau: D1 sáng, D1 tắt đồng thời
D2 sáng, D2 ắt đồng thời D3 sáng v.v. Và lặp lại Bài t ập 1.2: Dùng Proteus thiết kế mạch như hình vẽ
Viết chương trình hiển thị các led theo qui luật sau:
– Ban đầu không có đèn nào sang
– Mỗi lần bấm vào phím b ấm nối với chân RD0, đèn sẽ sáng theo ốs lần bấm: bấm
1 lần đèn D1 sáng, bấm 2 lần đèn D2 sáng,… bấm 8 lần đèn D8 sáng, bấm 9 lần
quay lại chu trình trên.
Bài 1.3: Viết chương trình mô ph ỏng hào quang ở chùa trong ngày l ễ.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
BÀI 2: CÁC PHƯƠNG PHÁP HIỂN THỊ TRONG CÁC THIẾT BỊ DÙNG VI ĐIỀU KHIỂN
PHẦN LÝ THUY ẾT:
Hiện nay, trong hầu hết các thiết bị nhúng đều có s ử dụng các khối hiển thị. Mục đích cho người dùng giám sát, cài đặt và hi ển thị các thông số của thiết bị cũng như đối tượng cần giám sát điều khiển.
Có r ất nhiều phương pháp hiển thị, có th ể kể ra như sau:
– Hiển thị cảnh báo, báoỗi:l thông thường dùng led đơn. Có thể hiển thị theo kiểu dùng nhiều màu khác nhau hoặc bật tắt v.v
– Hiển thị số liệu: dùng led 7 đoạn, LCD hoặc LCD đồ họa v.v
– Hiển thị trên máy tính: dùng cácầphnmềm điều khiển giám sát,ếkt nối thiết bị và máy tính thông qua chu ẩn RS232 hoặc các chuẩn mạng (giám sátừ txa)
Trong bài này s ẽ giới thiệu 2 cách hiển thị đầu, phần hiển thị bằng máy tính ẽs được đề cập trong bài h ọc về chuẩn giao tiếp RS232.
2.1 Hiển thị bằng led đơn:
Đây là cách hiển thị đơn giản nhất.
Thông thường cách hiển thị này dùng để báo một trạng thái nào đấy của thiết bị như trạng thái làm vi ệc của nguồn (lỗi hoặc không l ỗi), cũng như các khối chức năng khác.
Có r ất nhiều loại led đơn dùng để hiển thị. Phương pháp đơn giản như sau:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Hình 2.1: Hiển thị led đơn
Các led này sáng khi được cấp áp ỡc 2 V, dòng 10-20mA.
Nếu dùng một chân ra t ừ vi điều khiển để bật tắt led, phải dùng thêm điện trở hạn dòng,h ạn áp.
Tính toán như sau:
Muốn bật đèn, ta cho chân ra vi điều khiển lên mức cao nối với đầu vào c ủa mạch trên. Như ta biết, chân ra vi điều khiển ở mức logic cao có điện áp 5V.
Cho điện áp rơi trên led là 2V, dòng qua là 15mA.
Suy ra, điện áp rơi trên trở là 3V. Dòng qua led chính là dòng qua điện trở và b ằng 15mA.
Suy ra, điện trở dùng: R=3/15mA=200 ohm.
Chọn điện trở tiêu chuẩn 220 ohm
(Điện trở tiêu chuẩn: 10, 11, 12, 13, 15, 16, 18, 20, 22, 24, 27, 30, 33, 36, 39, 43, 47, 51, 56, 62, 68, 72, 82, 91 và các bội số)
2.2 Hiển thị bằng led bảy đoạn- 7 segment led:
2.2.1 Cấu tạo của led 7 đoạn:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Hình 2.2: Led 7 đoạn
Một led 7 đoạn thực ra là g ồm 7 led đơn nối với nhau (8 led đơn nêu có thêm dấu chấm-dp).
Có 2 lo ại:
– Chung catod: các đầu catod (cực âm) được nối chung với nhau và n ối với đất, các đầu anod a,b,c,d,e,f,g,h được đưa ra ngoài (các chân) nhận tín hiệu điều khiển. Khi cấp điện áp 5v cho mỗi đầu anod, led tương ứng với đầu đó sẽ sáng
– Chung anod: các đầu anod (cực âm) được nối chung với nhau và n ối với nguồn, các đầu catod a,b,c,d,e,f,g,h được đưa ra ngoài (các chân) nhận tín hiệu điều khiển. Muốn led đơn nào sáng chỉ việc đưa chân catod của led tương ứng xuống mức 0V.
Hình 2.3: Cấu tạo của 2 loại led 7 đoạn
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
2.2.2 Hiển thị 1 led 7 đoạn dùng vi điều khiển:
Như đã gi ới thiệu ở phần trên, thực chất led 7 đoạn gồm 8 hoặc 7 led đơn nối với nhau. Vì vậy để điều khiển thanh led đơn sáng, cách thực hiện phần cứng như hình 2.1.
Cụ thể hơn, như dùng led chung anod như hình vẽ trên. Mỗi đầu vào a,b,c,d,e,f,g,h được nối với một chân c ủa vi điều khiển, tương ứng là RB0, RB1, ..RB7, thông qua các điện trở phân áp 200 ohm, đầu anod chung được nối với nguồn. Để led đơn sáng đơn giản ta đưa chân vi điều khiển nối với led đó xuống mức thấp.
Như trên hình 2.4 trên,để led 7 đoạn hiển thị số 2 thì các led a,b,d,e,g sáng; các led c,ắtf. tGiá trị sáng tương ứng chân vi điều khiển nối vào ở mức 0, giá trị tắt tương ứng với chân vi điều khiển nối với ở mức 1.
Do đó nội dung của thanh ghi PORTB là:
0 0 1 0 0 1 0 0
Đây là mã led 7 đoạn của số 2
Như vậy, chúng ta lưu ý m ột điều rằng, dữ liệu xuất ra led 7 đoạn là mã led t ương ứng với số cần xuất
Mã led t ương ứng với các ốs từ 0 đến 9 là:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
Cách điều khiển led 7 đoạn chung catod thì ngược lại.
2.2.3 Hiển thị nhiều led 7 đoạn dùng vi điều khiển: Trong thực tế, ta phải dùng nhiều led 7 đoạn để hiển thị. Vậy giải quyết việc hiển thị nhiều led như thế nào?
Ví dụ: để hiển thị số 35 bằng 2 led 7 đoạn.
Đối chiếu với cách hiển thị 1 led 7 đoạn, ta nghĩ đơn giản chỉ là dùng 1 c ổng hiển thị số 3, 1 cổng khác hiển thị số 5.
Như vậy ta mất 2 cổng. Hiển thị 4 led thì mất 4 cổng => toàn b ộ chân trên vi điều khiển dùng cho việc hiển thị led…Không còn chân để giao tiếp với các thiết bị khác như bàn phím, đầu vào s ố khác v.v Không khả thi!
Ta có phương pháp tiết kiệm chân hơn để giải quyết:
Hình 2.5: Hiển thị 2 led 7 đoạn
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Các chân dữ liệu (chân s ẽ nhận mã led t ừ vi điều khiển) được nối tương ứng với nhau và n ối vào 1 cổng của vi điều khiển, chẳng hạn như cổng B
Chân ngu ồn của 2 led được điều khiển bởi 2 chân trên vi điều khiển, chằng hạn chân RA4 và RA5 như trên hình, thông qua c ực B của 2 transistor pnp.
Quá trình hiển thị con số 35 trên 2 led ẽs như sau:
– Cho chân RA4 (chân n ối với led hàng ch ục) xuống mức thấp, transistor thứ nhất mở do tiếp giáp BE thuận, chân RA5 lên mức cao (chân n ối với led hàng đơn vị), transistor thứ hai không m ở. Vậy chỉ có led hàng ch ục được cấp nguồn.
– Cho cổng B xuất dữ liệu mã led c ủa số 3. Chỉ có led hàng ch ục được cấp nguồn nên chỉ có led này sáng
– Tạo thời gian trễ 10-20ms
– Điều khiển tương tự cho led hàng đơn vị được cấp nguồn, led hàng ch ục không c ấp nguồn, xuất dữ liệu mã led s ố 5 ra cổng B. Led đơn vị hiển thị số 5.
– Tạo thời gian trễ 10-20ms
– Quay lại bước thứ nhất
Như vậy, số 3 hiển thị 10ms, số 5 hiển thị 10ms và quay vòng nh ư vậy. Thời gian này r ất nhanh, do hiệu ứng của mắt, ta cảm giác như số 35 hiển thị cùng lúc. Bài toán được giải quyết, ta chỉ mất có 10 chân để điều khiển 2 led.
Cách hiển thị nhiều led cũng tương tự như vậy.
Cũng giải thích thêm lí do dùng transistor nối vào RA4, RA5. Do chân vi điều khiển có dòng khoảng vài ch ục mA, đây là chân cấp nguồn cho led 7 đoạn, mỗi led đơn trong Led 7 đoạn mất 20mA vây c ả led 7 đoạn mất trên 100mA. Vì vậy ta phải dùng transistor để khuếch đại dòng.
2.3 Hiển thị dùng LCD:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
LM016L
VSSVDDVEE RSRWE D0D1D2D3D4D5D6D7
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Hình 2.6: Các chân LCD
2.3.1 Các chân cơ bản của LCD 2 dòng 16 kí t ự:
• VSS: Chân đất
• VCC: Chân ngu ồn
• VEE: Chân hi ệu chỉnh độ sáng ủca LCD
• RS:
–=0: LCD sẽ nhận lệnh từ vi điều khiển
–=1: LCD sẽ nhận kí tự từ vi điều khiển để hiển thị
• R/W:
–=1: Vi điều khiển đọc dữ liệu từ LCD
–=0: Vi điều khiển ghi dữ liệu lên LCD
Thông thường Vi điều khiển chủ yếu ghi dữ liệu lên LCD nên chân này thường nối đất
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
• E: Chân cho phép (Enable). Sau khi lệnh hoặc dữ liệu đã được chuẩn bị trên đường dữ liệu, tạo xung mức cao-mức thấp sẽ bắt đầu quá trình LCD nhận dữ liệu hoặc lệnh từ vi điều khiển.
• D0-D7: các chân dữ liệu, nơi vi điều khiển truyền lệnh hoặc dữ liệu lên LCD.
2.3.2 Khởi tạo LCD:
LCD có nhi ều độ làm vi ệc, có th ể kể ra như sau:
– Chế độ 1 dòng hay 2 dòng
– Chế độ giao tiếp 4 bit hay 8 bit
– Chế độ font 5*8 hoặc 5*10
– Ngoài ra còn có th ể thay đổi vị trí hiển thị kí tự v.v
Vì vậy, trước khi bắt đầu quá trình hiển thị một chuỗi kí tự nào đó, ta cần quá trình khởi tạo để
cài đặt các chế độ này. Vi điều khiển thực hiện quá trình khởi tạo này b ắt cách ghi đến LCD một chuỗi các ệlnh.
Căn cứ vào ch ức năng của các chân vi điều khiển được giới thiệu ở trên, ta đưa ra qui trình của việc gửi một lệnh từ Vi điều khiển đến LCD:
– Cho chân R/W=0 để xác định đây là ghi xuống LCD (thông thường chân này được nối
đất, nên mặc định chân này ở mức 0, ta không c ần quan tâm đến nữa)
– Cho chân RS=0 để xác định đây là lệnh mà vi điều khiển gửi xuống LCD (phân bi ệt với RS=1, gửi kí tự hiển thị)
– Gửi mã l ệnh xuống LCD theo các đường dữ liệu (RD0-RD7 nếu dùng chế độ 8 bit, R4-R7 nếu dùng chế độ 4 bit)
– Đưa chân E (chân cho phép- Enable) lên mức cao, mức 1
– Tạo trễ vài chu kì l ệnh
– Đưa chân E xuống mức thấp, mức 0
Mã l ệnh như đã gi ới thiệu trong phần trên tùy thuộc vào t ừng lệnh, ở đấy giới thiệu một số lệnh cơ bản như sau:
. Lệnh cài đặt chế độ làm vi ệc:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
0 0 1 DL N F – –
• DL:
–= 1: 8 bit
–= 0: 4 bit
• N:
–= 1: 2 dòng
–= 0 1 dòng
• F:
–= 1: font 5×10 dot
–= 0: font 5×8 dot
. Lệnh đặt chế độ tăng giảm địa chỉ:
0 0 0 0 0 1 I/D S
• I/D:
–= 1 tăng địa chỉ
–= 0 giảm địa chỉ
• S:
–=1: Cài đặt di chuyển cùng địa chỉ
. Lệnh đặt chế độ hiển thị:
0 0 0 0 1 D C B
• D: Cho phép hiển thị
• C: cài đặt hiển thị con trỏ
• B: nhấp nháy vị trí kí tự
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
. Lệnh đặt vị trí hiển thị của kí tự:
1 ĐC ĐC ĐC ĐC ĐC ĐC ĐC
• Địa chỉ dòng 1: 00- 0F
• Địa chỉ dòng 2: 40-4F
Vì vậy, muốn hiển thị đầu dòng th ứ nhất, mã l ệnh sẽ là 0x80
muốn hiển thị đầu dòng th ứ hai, mã l ệnh sẽ là 0xC0
. Lệnh xóa màn hình: mã l ệnh 0x01
. Lệnh trở về đầu dòng th ứ nhất: mã l ệnh 0x02
Chi tiết có th ề xem datasheet đi kèm
2.3.2 Ghi kí tự lên LCD để hiển thị:
Sau khi thực hiện quá trình khởi tạo để gửi các ệnhl cài đặt chế độ làm vi ệc cùa LCD, kí tự sẽ được hiển thị lên LCD bất kì khi nào vi điều khiển muốn gửi.
Quá trình gửi kí tự gồm các bước sau:
– Cho chân R/W=0 để xác định đây là ghi xuống LCD (thông thường chân này được nối
đất, nên mặc định chân này ở mức 0, ta không c ần quan tâm đến nữa)
– Cho chân RS=1 để xác định đây là kí tự mà vi điều khiển gửi xuống LCD (phân bi ệt với RS=0, gửi lệnh)
– Gửi mã ascii c ủa kí tự cần hiển thị xuống LCD theo các đường dữ liệu (RD0-RD7 nếu dùng chế độ 8 bit, R4-R7 nếu dùng chế độ 4 bit)
– Đưa chân E (chân cho phép- Enable) lên mức cao, mức 1
– Tạo trễ vài chu kì l ệnh
– Đưa chân E xuống mức thấp, mức 0
2.4 Giới thiệu một thư viện cho LCD 4 bit và bài t ập ứng dụng:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
File: LCD_lib_4bit:
#include <stddef.h>
#define LCD_RS PIN_B2
#define LCD_EN PIN_B3
#define LCD_D4 PIN_B4
#define LCD_D5 PIN_B5
#define LCD_D6 PIN_B6
#define LCD_D7 PIN_B7
#define Line_1 0x80
#define Line_2 0xC0
#define Clear_Scr 0x01
#separate void LCD_Init ();// ham khoi tao LCD
#separate void LCD_SetPosition ( unsigned int cX );//Thiet lap vi tri con tro
#separate void LCD_PutChar ( unsigned int cX );// Ham viet1kitu/1chuoi len LCD
#separate void LCD_PutCmd ( unsigned int cX) ;// Ham gui lenh len LCD
#separate void LCD_PulseEnable ( void );// Xung kich hoat
#separate void LCD_SetData ( unsigned int cX );// Dat du lieu len chan Data
//khoi tao LCD**********************************************
#separate void LCD_Init ()
{
LCD_SetData ( 0x00 );
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
delay_ms(20); /*Cho cho lcd khoi tao */
output_low ( LCD_RS );// che do gui lenh
LCD_SetData ( 0x03 ); /* khoi tao che do 4 bit */
LCD_PulseEnable();
LCD_PulseEnable();
LCD_PulseEnable();
LCD_SetData ( 0x02 ); /* tao giao dien 4 bit */
LCD_PulseEnable(); /* send dual nibbles hereafter, MSN first */
LCD_PutCmd ( 0x2C ); /* function set (all lines, 5×7 characters) */
LCD_PutCmd ( 0x0C ); /* display ON, cursor off, no blink */
LCD_PutCmd ( 0x06 ); /* entry mode set, increment & scroll left */
LCD_PutCmd ( 0x01 ); /* clear display */
// Init for BarGraph
}
#separate void LCD_SetPosition ( unsigned int cX )
{
/* this subroutine works specifically for 4-bit Port A */
LCD_SetData ( swap ( cX ) | 0x08 );
LCD_PulseEnable();
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
LCD_SetData ( swap ( cX ) );
LCD_PulseEnable();
}
#separate void LCD_PutChar ( unsigned int cX )
{
/* this subroutine works specifically for 4-bit Port A */
output_high ( LCD_RS );
LCD_PutCmd( cX );
output_low ( LCD_RS );
}
#separate void LCD_PutCmd ( unsigned int cX )
{
LCD_SetData ( swap ( cX ) ); /* send high nibble */
LCD_PulseEnable();
LCD_SetData ( swap ( cX ) ); /* send low nibble */
LCD_PulseEnable();
}
#separate void LCD_PulseEnable ( void )
{
output_high ( LCD_EN );
delay_us ( 3 ); // was 10
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
output_low ( LCD_EN );
delay_ms ( 3 ); // was 5
}
#separate void LCD_SetData ( unsigned int CX )
{
output_bit ( LCD_D4, CX & 0x01 );
output_bit ( LCD_D5, CX & 0x02 );
output_bit ( LCD_D6, CX & 0x04 );
output_bit ( LCD_D7, CX & 0x08 );
}
Chương trình ứng dụng:
C1
UDK
30pF X1
13 OSC1/CLKIN RB0/INT 33
CRYSTAL 14 OSC2/CLKOUT RB1 34
C2 RB2 35
2 RA0/AN0 RB3/PGM 36
3 RA1/AN1 RB4 37
30pF 4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT 15
8 RC0/T1OSO/T1CKI
16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
R9 RC6/TX/CK 25
RC7/RX/DT 26
4K 19
RD0/PSP0 20
RD1/PSP1 21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4 28
RD5/PSP5 29
RD6/PSP6
30
RD7/PSP7
PIC16F877A
LCD1
LM016L
VSSVDDVEE RSRWE D0D1D2D3D4D5D6D7
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Hình 2.7: Ví dụ về LCD
#include <16f877A.h>
#fuses HS, NOLVP, NOWDT, NOPROTECT
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
#use delay (clock=4000000) //Use built-in function: delay_ms() & delay_us()
#include “LCD_LIB_4BIT.c”
VOID MAIN()
{
LCD_INIT();
LCD_PUTCHAR(‘X’);
DELAY_MS(1000);
LCD_PUTCHAR(‘I’);
DELAY_MS(1000);
LCD_PUTCHAR(‘N’);
DELAY_MS(1000);
LCD_PUTCHAR(‘ ‘);
DELAY_MS(1000);
LCD_PUTCHAR(‘C’);
DELAY_MS(1000);
LCD_PUTCHAR(‘H’);
DELAY_MS(1000);
LCD_PUTCHAR(‘A’);
DELAY_MS(1000);
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
LCD_PUTCHAR(‘O’);
PHẦN THỰC HÀNH:
Bài 2.2: Hi ển thị 1 led 7 đoạn
Bài 2.3: Thi ết kế mạch trên Proteus như hình 2.5
a. Lập trình cho 2 led hiển thị số 35
b. Lập trình hiển thị số đếm từ 0-99
Bài 2.4 Thi ết kế mạch trên Proteus như hình 2.7
Lập trình thực hiển hiển thị họ tên, thayđổi các chế độ hiển thị bằng cách gửi lệnh lên LCD
BÀI 3: B Ộ ĐỊNH THỜI – TIMER
3.1 Giới thiệu:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Trong cácứng dụng của vi điều khiển trong thực tế, việc định thời (tạo một khoảng thời gian giữa 2 sự kiện) các thao tác là việc thường xuyên xảy ra.
Để thực hiện việc này, ta có 2 cách:
– Dùng các ệlnh thực hiện các vòng lặp để tạo ra khoảng thời gian. Nguyên ắtc tạo ra khoảng thời gian này đơn giản như sau: nếu vi điều khiển mất một khoảng thời gian x để thực hiện một lệnh, việc lặp lại một lệnh n lần sẽ mất n*x thời gian.
Trong chương trình, cách này được dùng nhiều với thể hiện là các lệnh Delay_ms(), Delay_us()
– Dùng các bộ định thời Timer để tạo ra khoảng thời gian trễ.
Trong bài này, ta s ẽ đi vào nguyên cứu các bộ timer. Một chế độ quan trọng nữa của Timer là khi nó ho ạt động như bộ đếm. Trong ứng dụng này, timer ho ạt động như một bộ đếm, có nhi ệm vụ đếm số các xung đi vào một chân c ụ thể trên vi điều khiển. Chế độ bộ đếm này có nhi ều ứng dụng trong thực tế như đếm số vòng quay c ủa động cơ (phản hồi từ bộ đo tốc độ động cơ-encoder), đếm số sản phẩm trên một dây chuy ền v.v.
Vi điều khiển PIC16F877A có 3 b ộ Timer:
– Timer0: 8 bit (số đếm tối đa của nó là 255), ho ạt động ở 2 chế độ định thời và b ộ đếm.
– Timer1: 16 bit (số đếm tối đa của nó là 65535), ho ạt động ở 2 chế độ định thời và b ộ
đếm.
– Timer2: 8 bit, hoạt động phục vụ chức năng PWM (Pulse Width Modulation- Điều chế
độ rộng xung)
Trong bài này ta đi vào khảo sát 2 bộ Timer0 và Timer1, Timer2 s ẽ được khảo sát trong bài về PWM.
Để tiện cho việc khảo sát, ta đi vào nguyên lý ho ạt động cơ bản của các bộ timer ở hai chế độ:
định thời và b ộ đếm.
3.2 Nguyên lý hoạt động cơ bản của một bộ Timer:
3.2.1 Chế độ định thời:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Mỗi bộ timer có m ột hoặc nhiều thanh ghi chứa giá trị đếm của nó (tùy thu ộc vào độ dài c ủa
timer), ta giả sử tên thanh ghi là TMR có độ dài là n byte, hay giá trị đếm tối đa là . Khi giá trị của TMR đạt đến giá trị này, vi điều khiển sẽ set bit cờ của bộ timer đó lên mức 1. Người dùng sẽ biết được thời điểm này b ằng cách kiểm tra bit cờ. Đồng thời TMR sẽ tự động xóa về giá trị 0.
Khi được cài đặt hoạt động trong chế độ định thời, Giá trị của thanh ghi TMR sẽ tự động tăng lên 1 đơn vị sau mỗi chu kì lệnh của vi điều khiển. Khi giá trị của TMR đạt đến giá trị tối đa, bit cờ của Timer sẽ được set lên mức 1 và TMR b ị xóa, TMR=0.
Giả sử vi điều khiển dùng thạch anh tần số 4MHz, như vậy:
Chu kỳ lệnh= 4 chu kì thạch anh= =1µs
Vậy TMR sẽ tự động tăng lên 1 đơn vị sau 1µs.
Nếu ban đầu ta cho TMR= x. Thì sau khoảng thời gian (µs) giá trị TMR sẽ đạt giá trị
tối đa của nó là . Thời điểm này được xác định thông qua trạng thái của bit cờ.
Ngược lại, ta muốn thực hiện định thời khoảng thời gian t sau một sự kiện 1 như sau:
– Sự kiện 1
– Tạo khoảng thời gian trễ t
– Sự kiện 2
Ta làm các bước:
– Sự kiện 1
– Gán giá ịtrban đầu cho TMR =
– Kiểm tra bit cờ
– Khi bit cờ = 1, thực hiện sự kiện 2.
Thật vậy, sau 1 (µs) TMR tăng lên 1 đơn vị, để tăng giá trị cho TMR từ đến giá trị
tối đa (khi bit cờ được set lên 1) mất -t) = t (µs)
Vậy khoảng thời gian từ sau sự kiện 1 (khi TMR bắt đầu được gán) đến sự kiện 2 (ngay sau khi bit cờ được set) là t đúng như yêu cầu của ta.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Ví dụ: Để định thời 200 (µs) dùng Timer0 (8 bit; n=1; giá trị tối đa là 255) ta cho TMR0= 255-200=55 rồi bắt đầu cho đếm lên.
3.2.2 Chế độ bộ đếm:
Khi được cài đặt trong này, m ột chân ch ức năng trên vi điều khiển sẽ trở thành chân đầu vào xung của bộ đếm. Ví dụ: chân RA4 đối với Timer0 và RC0 đối với Timer1. Hoạt động của nó có nét giống với chế độ định thời.
Khi được cài đặt hoạt động trong chế độ bộ đếm, Giá trị của thanh ghi TMR sẽ tự động tăng lên 1 đơn vị khi có một xung vào chân đầu vào xung c ủa timer đó. Khi giá trị của TMR0 đạt đến giá trị tối đa, bit cờ của Timer sẽ được set lên mức 1 và TMR b ị xóa, TMR=0.
Như vậy, về cách hoạt động trong chế độ này ch ỉ khác với chế độ định thời ở chỗ, thay vì TMR tự động tăng lên sau mỗi chu kì lệnh, thì TMR tăng lên khi có một xung đi vào chân đầu vào xung của Timer đó.
Dạng xung được xác định là sườn âm hay sườn dương phụ thuộc vào vi ệc cài đặt bit chọn dạng xung tương ứng trên thanh ghi ủac vi điều khiển.
Nguyên lý hoạt động định thời và b ộ đếm này c ũng đúng với các bộ vi điều khiển, vi xử lý khác.
Ta đi vào khảo sát ục thể 2 Timer0 và Timer1 c ủa vi điều khiển PIC.
3.3 Timer 0:
3.3.1 Nguyên lý hoạt động:
Timer 0 có độ dài 8 bit – Thanh ghi ch ứa giá trị đếm là TMR0 (s ố đếm tối đa là 255). Hoạt động
ở 2 chế độ là định thời và b ộ đếm.
Đẻ hoạt động ở chế độ định thời, ta cho bit T0CS (bit 5 của thanh ghi Option_Reg) ở mức 0. Khi đó, giá trị của thanh ghi TMR0 sẽ tự động tăng lên 1 đơn vị sau mỗi chu kì lệnh của vi điều khiển.
Đẻ hoạt động ở chế độ bộ đếm, ta cho bit T0CS (bit 5 của thanh ghi Option_Reg) ở mức 1. Khi đó, giá trị của thanh ghi TMR0 sẽ tự động tăng lên 1 đơn vị sau khi có m ột xung đi vào chân RA4 của vi điều khiển. Việc chọn xung là d ạng sườn lên hay sườn xung phụ thuộc vào bit T0SE (bit 4 của thanh ghi Option_Reg là 0 hay 1.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Khi giá trị TMR0 đạt đến giá trị tối đa 255 (0xFF) nó sẽ bị xóa v ề 0 đồng thời bit cờ TMR0IF (bit 5 của thanh ghi INTCON ) được set lên 1, báo cho chương trình biết đã có s ự tràn TMR.
Lưu ý là ng ười lập trình phải xóa TMR0IF b ằng chương trình (để ghi nhận đúng các lần tràn k ế tiếp).
Ngoài ra, để tăng thời gian định thời hoặc số xung đếm đầu vào t ối đa của Timer 0, vi điều khiển còn cho phép việc lựa chọn tỉ lệ Prescale cho đầu vào c ủa Timer 0 bằng 3 bit PS2-PS0 (bit 2-0 của thanh ghi
Option_ Reg). Tỉ lệ như sau:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Ta có th ể hiểu đơn giản như sau:
Nếu tỉ lệ Prescale là 1:64 thì:
– Trong chế độ định thời, TMR0 sẽ tăng lên 1 đơn vị sau 64 chu kì lệnh
– Trong chế độ định thời, TMR0 sẽ tăng lên 1 đơn vị sau khi có 64 xung đi vào chân RA4
Như vậy, thời gian định thời tối đa cũng như số xung đếm được khi TMR0 tràn s ẽ tăng lên 64 lần.
Tương tự với các ỉt lệ khác.
Thực ra, Timer 0 chia sẻ bộ chia tần số Prescale với một chế độ khác ủac vi điều khiển- chế độ Watchdog Timer. Việc chọn chế độ này được thực hiện khi cho bit PSA (bit 3 của thanh ghi Option_Reg) giá trị 0. Chế độ này s ẽ được nghiên ứcu sau. Ở đây ta chỉ quan tâm đến bộ chia tần số dành cho Timer 0 khi PSA=1. Vì v ậy trong sơ đồ trên ta chỉ quan tâm đến cácđường đến ghi chú thêm ằngb đường thẳng mỏng.
3.3.2 Các thanh ghi liên quan:
Thanh ghi TMR0 (Địa chỉ 01h):
Chứa giá trị đếm hiện tại của Timer 0
Thanh ghi Option_Reg (Địa chỉ 81h):
T0CS: Bit chọn chế độ
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
= 0: TMR0 hoạt động chế độ định thời
= 1: TMR0 hoạt động chế độ bộ đếm
T0SE: Bit chọn dạng xung cho chế độ bộ đếm
= 0: Xung sườn lên
= 1: Xung sườn xuống
PSA: Bit chọn chế độ cho bộ chia tần số PresCale là WatchDog_Timer hay Timer 0.
= 0: Bộ chia tần số dành cho Timer 0
= 1: Bộ chia tần số dành cho Watch_Dog Timer
PS2-PS0: 3 bit chọn tỉ lệ chia tần số như đã gi ới thiệu ở phần trên
Thanh ghi INTCON (0Bh):
Bit TMR0IE: Bit này b ằng 1 cho phép ngắt Timer 0. Sự kiện ngắt xảy ra khi có s ự tràn TMR0 từ 255 xuống 0.
Bit TMR0IF: Bit cờ xác nhận giá trị TMR0 đã b ị tràn t ừ 255 về 0
3.3.3 Các ệlnh CCS dùng cho thanh ghi Timer 0:
Lệnh cài đặt chế độ: Setup_timer_0 (chế độ|tỉ lệ chia tần số)
Chế độ có th ể là m ột trong những từ sau:
– RTCC_INTERNAL: chế độ định thời
– RTCC_EXT_L_TO_H: chế độ bộ đếm với xung dạng sườn lên
– RTCC_EXT_H_TO_L: chế độ bộ đếm với xung dạng sườn xuống
Tỉ lệ chia tần số là m ột trong những từ sau:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
– RTCC_DIV_2, RTCC_DIV_4, RTCC_DIV_8, RTCC_DIV_16, RTCC_DIV_32,
RTCC_DIV_64, RTCC_DIV_128, RTCC_DIV_256: tương ứng với tỉ lệ chia
Lệnh gán giá ịtrđầu cho thanh ghi TMR0: Set_timer_0 (giá trị)
Giá trị nằm trong khoảng từ 0-255
Lệnh đọc giá trị hiện tại của thanh ghi TMR0: biến = Get_timer_0()
3.4 Timer 1:
3.4.1 Nguyên lý hoạt động:
Timer 1 có độ dài 16 bit. Giá trị của bộ đếm timer 1 được lưu trong 2 thanh ghi 8 bit TMR1H và
TMR1L. Timer 1 cũng có 2 chế độ được cài đặt bởi bit TMR1CS (bit 1 của thanh ghi T1CON):
– TMR1CS = 0: Chế độ định thời
– TMR1CS = 1: Chế độ bộ đếm. Có 2 d ạng được phân bi ệt bởi bit T1SYNC (bit 2 của T1CON)
o T1SYNC = 0: Bộ đếm đồng bộ
o T1SYNC = 1: Bộ đếm không đồng bộ
Trong chế độ bộ đếm, đầu vào cho xung có th ể nối vào chân RC0 ho ặc RC1 tùy thuộc vào bit T1OSCEN (bit 3 của T1CON)
– T1OSCEN = 1: Đầu vào xung n ối với RC1
– T1OSCEN = 0: Đầu vào xung n ối với RC0
Chú ý là khác với Timer 0, đầu vào xung ở Timer 1 phải có d ạng sườn xuống.
Chế độ đồng bộ của chế độ bộ đếm nghĩa là n ếu như vi điều khiển đang ở chế độ ngủ thì giá trị của thanh ghi TMR1L và TMR2L không tăng lên.
Tỉ lệ bộ chia tần số Prescal của timer 1 được chọn bởi 2 bit T1CKPS1-T1CKPS0 (Bit 5-4 của T1CON). Tỉ lệ chia lớn nhất là 1:8.
3.4.2 Các thanh ghi liên quan:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Thanh ghi TMR1L (Địa chỉ 0Eh) và TMR1H (Địa chỉ 0Fh):
Thanh ghi chứa 8 bit thấp và 8 bit cao c ủa giá trị đếm 16 bit của timer 1.
Thanh ghi điều khiển Timer 1- T1CON (Địa chỉ 10h):
– – T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON T1CKPS1-T1CKPS0: Chọn tỉ lệ bộ chia tần số:
T1CKPS1-T1CKPS0 Tỉ lệ chia tần số
00 1:1
01 1:2
10 1:4
11 1:8
T1OSCEN: bit chọn đầu vào xung là RC1 hay RC0
– =1: RC1
– =0: RC0
T1SYNC: bit chọn chế độ bộ đếm đồng bộ
– =1: Không đồng bộ
– =0: Không đồng bộ
TMR1CS: bit chọn chế độ định thời hay chế độ bộ đếm
– =1: Chế độ bộ đếm
– =0: Chế độ bộ định thời
TMR1ON: bit bật hay tắt Timer 1
– =1: Bật Timer 1
– =0: Tắt Timer 1
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Thanh ghi PIR1:
Kqt Kqt kqt kqt Kqt kqt kqt TMR1IF
Bit TMR1IF là bit c ờ của timer 1. Bit được set lên giá ịtr1 khi xảy ra tràn 2 thanh ghi TMR1L và TMR2H từ 65535 về 0.
3.4.3 Các ệnhl CCS liên quan đến Timer 1:
Lệnh cài đặt chế độ: Setup_timer_1 (chế độ|tỉ lệ chia tần số)
Chế độ có th ể là m ột trong những từ sau:
– T1_DISABLE: không s ử dụng, tắt Timer 1
– T1_INTERNAL: chế độ định thời
– T1_EXTERNAL: chế độ bộ đếm không đồng bộ
– T1_EXTERNAL_SYNC: chế độ bộ đồng bộ
Tỉ lệ chia tần số là m ột trong những từ sau:
– T1_DIV_1, T1_DIV_2, T1_DIV_4, T1_DIV_8: tương ứng với tỉ lệ chia
Lệnh gán giá ịtrđầu cho cặp thanh ghi TMR1L và TMR1H: Set_timer_1 (giá trị)
Giá trị nằm trong khoảng từ 0-65535
Lệnh đọc giá trị hiện tại của cặp thanh ghi TMR1L và TMR1H: bi ến = Get_timer_1()
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
BÀI T ẬP:
3.1 Cho sơ đồ mạch như sau:
C1
30pF
X1
C2 CRYSTAL
30pF
U1
13 OSC1/CLKIN RB0/INT 33
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT 15
RC0/T1OSO/T1CKI
8 16
9 RE0/AN5/RD RC1/T1OSI/CCP2 17
10 RE1/AN6/WR RC2/CCP1 18
RE2/AN7/CS RC3/SCK/SCL 23
R9 RC4/SDI/SDA
1 MCLR/Vpp/THV RC5/SDO 24
4K RC6/TX/CK 25
26
RC7/RX/DT 19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2 22
RD3/PSP3 27
RD4/PSP4
28
RD5/PSP5 29
RD6/PSP6 30
RD7/PSP7
PIC16F877A
R1
268
R2
220
R3
222
R4
220
R5
220
R6
220
R7
220
R8 Q1
PNP
4K
R10 Q2
PNP
10k
a. 2 led 7 đoạn hiển thị số đếm, giá trị số đếm tự động tăng lên từ 0-99 sau khoảng thời gian định thời bởi Timer 0
b. Tăng thời gian định thời bằng cách ửs dụng Timer 1
c. Định thời 1 s dùng Timer 1
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
3.2 Cho sơ đồ mạch như sau:
C1
30pF
X1
C2 CRYSTAL
30pF
U1
13 OSC1/CLKIN RB0/INT 33
14 34
OSC2/CLKOUT RB1
35
RB2
2 RA0/AN0 RB3/PGM 36
3 37
RA1/AN1 RB4
RC 4 RA2/AN2/VREF-/CVREF RB5 38
5 RA3/AN3/VREF+ RB6/PGC 39
4K 6 RA4/T0CKI/C1OUT RB7/PGD 40
7
RA5/AN4/SS/C2OUT 15
8 RC0/T1OSO/T1CKI 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/W R RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL 23
R9 1 RC4/SDI/SDA 24
MCLR/Vpp/THV RC5/SDO
25
4K RC6/TX/CK 26
RC7/RX/DT 19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2 22
RD3/PSP3 27
RD4/PSP4
28
RD5/PSP5 29
RD6/PSP6 30
RD7/PSP7
PIC16F877A
R1
268
R2
220
R3
222
R4
220
R5
220
R6
220
R7
220
R8 Q1
PNP
4K
R10 Q2
PNP
10k
Trong đó phím bấm nối với chân đầu vào xung c ủa Timer 0, RA4.
2 led bảy đoạn hiển thị số lần bấm phím
3.3 Cho sơ đồ mạch đo tốc độ động cơ như sau:
C1
30pF
X1
C2 CRYSTAL
30pF
U1
13 OSC1/CLKIN RB0/INT 33 +12v
14 34
OSC2/CLKOUT RB1
RB2 35 +12v
2 36
RA0/AN0 RB3/PGM
3 RA1/AN1 RB4 37
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 RA4/T0CKI/C1OUT RB7/PGD 40
7
RA5/AN4/SS/C2OUT 15 RV?
8 RC0/T1OSO/T1CKI 16
RE0/AN5/RD RC1/T1OSI/CCP2 1k
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL 23
1 RC4/SDI/SDA 24 +88.8
R9 MCLR/Vpp/THV RC5/SDO
RC6/TX/CK 25
26
4K RC7/RX/DT
RD0/PSP0 19
RD1/PSP1 20
21
RD2/PSP2
RD3/PSP3 22
RD4/PSP4 27
RD5/PSP5 28
RD6/PSP6 29
RD7/PSP7 30
PIC16F877A
LCD1
LM016L
VSSVDDVEE RSRWE D0D1D2D3D4D5D6D7
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Động cơ được thay đổi tốc độ nhờ biến trở. Tốc độ động cơ được đo bởi encoder nằm ngay trong động cơ và tín hiệu được truyền tới chân RA4 , chân đầu vào xung c ủa Timer
0. Dùng Timer 0 chế độ bộ đếm, Timer 1 chế độ định thời để đọc tốc độ động cơ. Giá trị đọc được hiển thị lên LCD.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
BÀI 4: NG ẮT
4.1 Ngắt là gì:
Ngắt hiểu theo nghĩa đơn giản là các sự kiện ngẫu nhiên làm gián đoạn quá trình của một sự kiện đang xảy ra. Để có th ể dễ hiểu khái niệm mới này ta cùng đưa ra một ví dụ trong thực tế như sau:
Ví dụ: Trong giờ học trên ớp,l ta đang học bài, có chuông điện thoại hoặc có b ạn gọi, ta phải dừng hoạt động học bài l ại để trả lời điện thoại hoặc ra gặp bạn. Sự kiện điện thoại reo chuông, hay bạn bè gọi được gọi là sự kiện ngắt, việc ta trả lời điện thoại hay ra gặp bạn là chương trình phục vụ ngắt. Việc đang học bài được xem là chương trình chính.
Ngắt được thực hiện khi và ch ỉ khi cài đặt cho phép nó. Như trong ví dụ trên, nếu sự kiện ngắt-điện thoại reo xảy ra, nếu giáo viên và ảbn thân ta cho phép mình trả lời điện thoại khi đang học bài thì khi có điện thoại ta mới nghe.
Vi điều khiển cũng có ngắt. Cách xử lý c ủa nó c ũng tương tự như ví dụ trên.
Cụ thể hoạt động của vi điều khiển khi có s ự kiện ngắt xảy ra và ng ắt đó đã được cho phép:
– Thực hiện nốt lệnh đang thực hiện
– Dừng chương trình đang thực hiện
– Lưu lại địa chỉ của lệnh kế tiếp trong chương trình đang thực hiện vào b ộ nhớ stack
– Nhảy tới địa chỉ 0x04 trong bộ nhớ chương trình
– Tại đây, vi điều khiển sẽ thực hiện chương trình con phục vụ ngắt do người lập trình đã lập trình từ trước.
– Sau khi thực hiện xong chương trình con phục vụ ngắt, vi điều khiển lấy lại địa chỉ của lệnh kế tiếp đã được lưu và thực hiện tiếp chương trình đang thực hiện dở lúc chưa có ngắt
Như vậy, cách phản ứng của vi điều khiển là khá tương đồng với cách xử lý c ủa con người trong thực tế. Như trong ví dụ trên, khi ta đang học bài, khi có ng ắt, tức có điện thoại-sự kiện ngắt, ta đọc nốt từ cuối cùng, nhớ dòng đang đọc ở trang thứ mấy, đánh dấu, trả lời điện thoại (chương trình con phục vụ ngắt), trả lời xong ta trở lại học bài ở dòng, trang đã được đánh dấu.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Tới đây ta tổng hợp lại các thuật ngữ dùng cho xử lý ng ắt trong vi điều khiển:
– Nguồn ngắt: nguồn ngắt là nguyên nhân gây ra ng ắt. Như trong ví dụ trên, nguồn ngắt có thể
Là điện thoại gọi hoặc bạn gọi
– Sự kiện ngắt: khi nguồn ngắt xảy ra
– Chương trình con phục vụ ngắt: là chương trình vi điều khiển xử lý khi có s ự kiện ngắt xảy ra do người lập trình lập trình ra
Ví dụ như ta trả lời hoặc chạy ra khỏi phòng g ặp bạn
– Vecto ngắt: tức địa chỉ 0x04 nơi vi điều khiển chạy tới sau khi lưu địa chỉ trả về
– Bit cho phép ngắt: tức việc cho phép vi điều khiển chạy chương trình con phục vụ ngắt khi có s ự kiện ngắt xảy ra. Trong vi điều khiển PIC, mỗi ngắt có bit cho phép của nó. Bit này t ận cùng bằng chữ E (enable), nằm trong các thanh ghi chuyênụdng. Muốn cho phép ngắt đó, ta phải đưa bit cho phép ngắt tương ứng lên giá ịtr1. Ngắt chỉ thực sự được cho phép ngắt khi ta cho bit cho phép ngắt toàn c ục GIE (Global Interrupt Enable) lên mức 1. Ta hình dùng như sau: khi có sự kiện ngắt- điện thoại gọi, nếu ta cho phép mình nghe điên thoại (tức bit cho phép ngắt của ngắt đó được set lên1) đồng thời thầy giáo cho phép (bit cho phép ngắt toàn c ục GIE được lên mức 1) thì ta mới nghe điện thoại (cho chương trình con phục vụ ngắt hoạt động).
Một số các ngắt khác, như các ngắt ngoại vi bao gồm ADC, PWM v.v Muốn cho phép nó còn ph ải đưa bit cho phép ngắt ngoại vi lên mức 1.
– Cờ ngắt: là bit ph ản ánh trạng thái ủca sự kiện ngắt. Mỗi ngắt có m ột bit cờ. Khi bit cờ này b ằng 1 nghĩa là s ự kiện ngắt tương ứng với cờ đó xảy ra. Ta hình dung như tiếng chuông c ủa điện thoại là c ờ ngắt, chuông rung báo có sự kiện ngắt- có điện thoại xảy ra. Các bit này tận cùng bằng từ F (Flag- cờ). Lưu ý là dù m ột ngắt có được cho phép hay
không thì c ờ ngắt vẫn được set lên 1 khi có sự kiện ngắt xảy ra. (Dù ta có được phép nghe điện thoại hay không thì chuông điện thoại vẫn cứ reo).
4.2 Các ngắt trong vi điều khiển PIC16F877A:
Vi điều khiển PIC16F877A có 15 ngu ồn ngắt. Được chia làm 2 l ớp ngắt:
– Lớp ngắt cơ bản: bao gồm các ngắt cơ bản như ngắt tràn timer 0, ng ắt ngoài, ng ắt thay đổi trạng thái ủca các chân PortB (RB4-RB7). Bit cho phép ngắt và bit c ờ tương ứng là
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
TMR0IE,TMR0IF; INTE, INTF; RBIE và RBIF. Để ý là để cho phép ngắt thực sự xảy ra phải có bit cho phép ngắt toàn c ục GIE.
– Lớp ngắt ngoại vi: bao gồm các ngắt ngoại vi như ngắt tràn timer 1 (TMR1IE, TMR1IF), ngắt tràn Timer 2(TMR2IE, TMR2IF), ng ắt hoàn thành vi ệc chuyển đổi ADC (ADCIE, ADCIF), ngắt hoàn thành vi ệc nhận kí tự trong truyền thông RS232 (RCIE, RCIF), ngắt hoàn thành vi ệc truyền kí tự trong truyền thông RS232 (TXIE, TXIF) v.v Để
ý là mu ốn thực sự cho phép các ngắt này ngoài bit cho phép ng ắt toàn c ục được set phải set cả bỉt cho phép ngắt ngoại vi PEIE.
4.3 Viết chương trình xử lý ng ắt bằng CCS:
Ví dụ một chương trình có ng ắt như sau:
#INCLUDE <16F877A.H>
#FUSES NOLVP, NOWDT, HS
#USE DELAY(CLOCK=8000000)
BYTE CONST MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
VOID HIENTHI(INT A);
INT SODEM;
//CHUONG TRINH CON PHUC VU NGAT DAT SAU #INT_EXT
#INT_EXT
VOID NGATNGOAI()
{
// XOA CO NGAT NGOAI CLEAR_INTERRUPT(INT_EXT);
// CAM NGAT TRONG CHUONG TRINH CON PHUC VU NGAT DISABLE_INTERRUPTS(GLOBAL);
SODEM++;
// CHO PHEP NGAT TOAN CUC
ENABLE_INTERRUPTS(GLOBAL);
}
VOID HIENTHI(INT A)
{
INT HC, HDV;
HC=A/10;
HDV=A%10;
OUTPUT_LOW(PIN_A4);
OUTPUT_D(MAP[HC]);
DELAY_MS(15);
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
OUTPUT_HIGH(PIN_A4);
OUTPUT_LOW(PIN_A5);
OUTPUT_D(MAP[HDV]);
DELAY_MS(15);
OUTPUT_HIGH(PIN_A5);
}
VOID MAIN()
{
// CAI DAT VAO RA CHO CONG B SET_TRIS_B(0xFF);
// CHO PHEP NGAT NGOAI ENABLE_INTERRUPTS(INT_EXT);
// CAI DAT SUON NGAT
EXT_INT_EDGE(H_TO_L);
// CHO PHEP NGAT TOAN CUC ENABLE_INTERRUPTS(GLOBAL);
// VONG LAP DOI NGAT WHILE(1)
{
HIENTHI(SODEM);
}
}
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Như vậy, lúc viết chương trình có dùng ng ắt bằng CCS, ta có nh ững lưu ý sau:
– Trong chương trình chính (main), chúng ta cài đặt ngắt: cho phép ngắt cụ thể, cho phép ngắt toàn c ục. Đợi ngắt
– Chương trình con xử lý ng ắt là chương trình con nằm ngay sau chỉ thị biên dịch
#INT_XXX, trong đó XXX là tên của ngắt cụ thể. Ví dụ: #INT_EXT: ngắt ngoài
– Trong chương trình con xử lý ng ắt: xóa c ờ ngắt, cấm ngắt toàn c ục đề phòng khi đang xử lý ng ắt có ng ắt xảy ra. Sau khi xử lý d ữ liệu trong chương trình con xử lý ng ắt, ta cho phép ngắt toàn c ục lại.
Tên một số ngắt của PIC như sau:
– INT_EXT: ngắt ngoài
– INT_TIMER0: ngắt timer 0
– INT_TIMER1: ngắt timer 1
– INT_TIMER2: ngắt timer 2
– INT_RDA: ngắt nhận đủ kí tự trong truyền thông máy tính
– INT_RB: ngắt thay đổi trạng thái các chân RB7-RB4
Trong phần tiếp theo, ta sẽ khảo sát một số ngắt tiêu biểu như ngắt ngoài INT, ng ắt thay đổi trạng thái các chân cao PORTB, ngắt tràn Timer 0, ng ắt tràn Timer 1. Các ngắt ngoại vi khác ẽs được nhắc đến khi nghiên ứcu các modun ngoại vi này.
4.4 Ngắt ngoài:
4.4.1 Hoạt động:
– Nguồn ngắt: là xung đi vào chân RB0 c ủa vi điều khiển PIC
– Sự kiện ngắt: sự kiện ngắt xảy ra khi có xung đi vào chân RB0 của vi điều khiển. Xung là xung sườn dương hay sườn âm ph ụ thuộc bit cài đặt chọn dạng xung, bit INTEDG ( bit 6 của thanh ghi PTION_REG) là 1 hay không.
– Bit cho phép ngắt: Để cho phép ngắt ngoài, bit cho phép ngắt ngoài INTIE (bit 4 c ủa thanh ghi INTCON) phải được set lên 1. Ngoài ra, bit cho phép ngắt toàn c ục GIE (bit 7 của thanh ghi INTCON) cũng phải được set lên 1.
– Cờ ngắt: bit cờ ngắt ngoài là bit INTIF (bit 1 c ủa thanh ghi INTCON) được tự động set lên 1 khi có sự kiện ngắt ngoài x ảy ra. Cờ này ph ải được xóa b ằng chương trình (cụ thể là
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
trong chương trình con phục vụ ngắt) để vi điều khiển quản lý chính xác cácầln ngắt kế tiếp.
4.4.2 Quản lý ng ắt ngoài trong c hương trình CCS:
Trong chương trình chính, cài đặt ngắt:
– Cài đặt chân RB0 là chân vào: SET_TRIS_B(0x01)
– Cài đặt dạng xung đầu vào là sườn dương hay sườn âm: EXT_INT_EDGE(H_TO_L) hoặc EXT_INT_EDGE(L_TO_H)
– Cho phép ngắt ngoài: ENABLE_INTERRUPTS(INT_EXT)
– Cho phép ngắt toàn c ục: ENABLE_INTERRUPTS(GLOBAL)
Chương trình con phục vụ ngắt đặt sau chỉ định biên dịch #INT_EXT:
#INT_EXT
Định nghĩa chương trình con
Trong chương trình con phục vụ ngắt:
– Xóa c ờ ngắt: CLEAR_INTERRUPT(INT_EXT)
– Cấm ngắt toàn c ục, đề phòng lúc đang xử lý ng ắt, lại có ng ắt xảy ra:
DISABLE_INTERRUPTS(GLOBAL)
– Xử lý ng ắt đó: tùy thuộc vào ý đồ của người lập trình
– Cho phép ngắt toàn c ục: ENABLE_INTERRUPTS(GLOBAL)
4.5 Ngắt Thay Đổi Trạng Thái Các Chân RB7-RB4:
4.5.1 Hoạt động:
– Nguồn ngắt: là tr ạng thái ủca một trong các chân RB7-RB4 của vi điều khiển PIC
– Sự kiện ngắt: sự kiện ngắt xảy ra khi có s ự thay đổi trạng thái (1-0 hay 0-1) ủca một trong các chân RB7-RB4 của PortB
– Bit cho phép ngắt: Để cho phép ngắt này, bit cho phép ngắt RBIE (bit 3 của thanh ghi INTCON) phải được set lên 1. Ngoài ra, bit cho phép ngắt toàn c ục GIE (bit 7 của thanh ghi INTCON) cũng phải được set lên 1.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
– Cờ ngắt: bit cờ ngắt ngoài là bit RBIF (bit 0 c ủa thanh ghi INTCON) được tự động set lên 1 khi có sự kiện ngắt ngoài x ảy ra. Cờ này ph ải được xóa b ằng chương trình (cụ thể là trong chương trình con phục vụ ngắt) để vi điều khiển quản lý chính xác cácầln ngắt kế tiếp.
Lưu ý quan tr ọng: Khi sử dụng ngắt này trong các ứng dụng xử lý các xung đầu vào RB4-RB7, ví dụ như phím bấm chẳng hạn, ta cần lưu ý điểm sau. Giả sử như ban đầu phím bấm chưa bấm, đầu vào RB ở mức 1, khi bấm phím RB xuống mức 1, như vậy có 1 s ự kiện ngắt xảy ra. Tuy nhiên, khi thả phím bấm ra, RB lên mức 1, tức cũng có một sự thay đổi trạng thái ủca chân RB7-RB4, nên ũngc có ngắt xảy ra. Vì vậy, việc ấn và nh ả phím bấm được tính 2 lần ngắt. Cần để ý điều này khi lập trình.
Vấn đề thứ 2 là c ần sử dụng một lệnh đọc cổng B để loại bỏ trạng thái mismatch lúc ảxy ra ngắt ở các chân này.
4.5.2 Quản lý ng ắt RB trong chương trình CCS:
Trong chương trình chính, cài đặt ngắt:
– Cài đặt chân RB4-RB7 là chân vào: SET_TRIS_B(0xF0)
– Cho phép ngắt RB: ENABLE_INTERRUPTS(INT_RB)
– Cho phép ngắt toàn c ục: ENABLE_INTERRUPTS(GLOBAL)
Chương trình con phục vụ ngắt đặt sau chỉ định biên dịch #INT_RB:
#INT_RB
Định nghĩa chương trình con
Trong chương trình con phục vụ ngắt:
– Xóa c ờ ngắt: CLEAR_INTERRUPT(INT_RB)
– Cấm ngắt toàn c ục, đề phòng lúc đang xử lý ng ắt, lại có ng ắt xảy ra:
DISABLE_INTERRUPTS(GLOBAL)
– Đoc cổng B để loại bỏ trạng thái mismatch
– Xử lý ng ắt đó: tùy thuộc vào ý đồ của người lập trình, chú ý đến số lần ngắt
– Cho phép ngắt toàn c ục: ENABLE_INTERRUPTS(GLOBAL)
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
4.6 Ngắt Timer 0:
4.6.1 Hoạt động:
– Nguồn ngắt: là tr ạng thái tràn của thanh ghi bộ đếm timer 0, TMR0 vi điều khiển PIC
– Sự kiện ngắt: sự kiện ngắt xảy ra khi có s ự tràn c ủa TMR0, tức là khi TMR0=255 r ồi bị xóa
– Bit cho phép ngắt: Để cho phép ngắt này, bit cho phép ngắt TMR0IE (bit 5 của thanh ghi INTCON) phải được set lên 1. Ngoài ra, bit cho phép ngắt toàn c ục GIE (bit 7 của thanh ghi INTCON) cũng phải được set lên 1.
– Cờ ngắt: bit cờ ngắt ngoài là bit TMR0IF (bit 2 c ủa thanh ghi INTCON) được tự động set lên 1 khi có sự kiện ngắt ngoài x ảy ra. Cờ này ph ải được xóa b ằng chương trình (cụ thể là trong chương trình con phục vụ ngắt) để vi điều khiển quản lý chính xác cácầln ngắt kế tiếp.
4.6.2 Quản lý ng ắt Timer 0 trong chương trình CCS:
Trong chương trình chính, cài đặt ngắt:
– Gán giá ịtrban đầu cho thanh ghi TMR0, tùy thuộc vào th ời gian mà người lập trình muốn (xem lại bài 3): SET_TIMER0(giá trị)
– Cho phép ngắt timer 0: ENABLE_INTERRUPTS(INT_TIMER0)
– Cho phép ngắt toàn c ục: ENABLE_INTERRUPTS(GLOBAL)
Chương trình con phục vụ ngắt đặt sau chỉ định biên dịch #INT_TIMER0:
#INT_TIMER0
Định nghĩa chương trình con
Trong chương trình con phục vụ ngắt:
– Xóa c ờ ngắt: CLEAR_INTERRUPT(INT_TIMER0)
– Cấm ngắt toàn c ục, đề phòng lúc đang xử lý ng ắt, lại có ng ắt xảy ra:
DISABLE_INTERRUPTS(GLOBAL)
– Xử lý ng ắt đó: tùy thuộc vào ý đồ của người lập trình, chú ý đến số lần ngắt
– Gán ạli giá trị ban đầu cho thanh ghi TMR0 (tùy thuộc vào ý đồ của người lập trình):
SET_TIMER0(giá trị)
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
– Cho phép ngắt toàn c ục: ENABLE_INTERRUPTS(GLOBAL)
BÀI T ẬP:
4.1 Cho sơ đồ mạch như hình vẽ:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
R11
10K
13 U1 33 R1
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1 35
RB2 268
2 RA0/AN0 RB3/PGM 36
3 RA1/AN1 RB4 37
4 RA2/AN2/VREF-/CVREF RB5 38 R2
5 RA3/AN3/VREF+ RB6/PGC 39
6 RA4/T0CKI/C1OUT RB7/PGD 40 220
7
RA5/AN4/SS/C2OUT 15
8 RC0/T1OSO/T1CKI 16 R3
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
10 RE1/AN6/W R RC2/CCP1 18
RE2/AN7/CS RC3/SCK/SCL 222
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO R4
RC6/TX/CK 25
26
RC7/RX/DT
RD0/PSP0 19 220
20
RD1/PSP1
21 R5
RD2/PSP2
22
RD3/PSP3 27
RD4/PSP4 220
28
RD5/PSP5
RD6/PSP6 29 R6
RD7/PSP7 30
PIC16F877A 220
R7
220
R8 Q1
PNP
4K
R10 Q2
PNP
10k
Lập trình để mạch hoạt động như sau: 2 led 7 đoạn hiển thị số lần phím bấm
4.2 Cho sơ đồ mạch như sau:
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
C1 R11 R12
10K 10K
30pF X1
C2 CRYSTAL
30pF 13 U1 33
R1
14 OSC1/CLKIN RB0/INT 34
OSC2/CLKOUT RB1 35
2 RB2 36 268
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38 R2
RA2/AN2/VREF-/CVREF RB5
5 39
6 RA3/AN3/VREF+ RB6/PGC 40
7 RA4/T0CKI/C1OUT RB7/PGD 220
RA5/AN4/SS/C2OUT 15
8 RC0/T1OSO/T1CKI 16 R3
RE0/AN5/ RD RC1/T1OSI/CCP2
9 17
10 RE1/AN6/WR RC2/CCP1 18
222
RE2/AN7/CS RC3/SCK/SCL
R9 RC4/SDI/SDA 23
1 RC5/SDO 24
MCLR/Vpp/THV R4
4K RC6/TX/CK 25
26
RC7/RX/DT
RD0/PSP0 19 220
20
RD1/PSP1
21 R5
RD2/PSP2 22
RD3/PSP3
RD4/PSP4 27 220
28
RD5/PSP5 29 R6
RD6/PSP6 30
RD7/PSP7
PIC16F877A 220
R7
220
2 led 7 đoạn hiển thị số lần phím bấm
4.3 Làm l ại các bài tập 3.1, 3.2, 3.3 nhưng sử dụng ngắt.
D1
LED-RED
D2
LED-RED
D3
LED-RED
D4
LED-RED
D5
LEDD6-RED
LED-RED
D7
LED-RED
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
BÀI 5: ĐIỀU CHẾ ĐỘ RỘNG XUNG-PWM
5.1 Nguyên lý hoạt động:
Bộ điều chế độ rộng xung tạo xung hình chữ nhật trên 2 chân RC1/CCP2 và RC2/CCP1-giá trị xung ở 2 chân là ngược nhau (bù nhau). Thực ra đây là một chức năng của modun CCP gồm 3 chức năng: Comparation, Capture, PWM.
Nguyên lý tạo xung như sau:
Khi Thanh ghi bộ đếm của bộ định thời Timer 2 đạt giá trị bằng giá trị của thanh ghi PR2, đầu ra xung RC2/CCP1 được set lên mức cao. TMR2 được reset về 0, sau đó đếm lên, khi TMR2 đạt giá trị bằng độ rộng xung, chân RC2/CCP1 được reset về 0. TMR2 tiếp tục đếm lên cho đến khi bằng giá trị PR2 thì chu trình sẽ lặp lại như lúc đầu. Xung ra ở chân RC1/CC21 là bù c ủa xung trên chân RC2/CCP1 .
5.2 Chu kỳ xung:
Để xác định chu kỳ xung ta đưa ra phân tích như sau:
Như đã tìm hi ểu về cách làm việc của các bộ timer, ta biết: sau mỗi chu kì lệnh giá trị của TMR2 sẽ tăng lên 1 đơn vị. Nếu dùng bộ chia tần số, giả sử là 1: N thì sau N chu kì l ệnh giá trị của TMR2 mới tăng lên 1 đơn vị.
Mỗi chu kì lệnh gồm 4 chu kì xung.
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Chu kì xung chính là kho ảng thời gian từ lúc TMR2=0 cho đến khi TMR2=PR2. Suy ra, để tăng PR2 đơn vị, hay chính là chu kì xung s ẽ bằng:
Ở đây, Tosc là chu kì xung c ủa vi điều khiển hay chu kì của thạch anh N là t ỉ lệ chia tần số.
Ví dụ: với thạch anh Fosc=4Mhz, N=4, ta có chu kì xung tối đa đạt được là khi PR2=255 (PR2 là thanh ghi 8 bit)
T=(255+1)*4*(1/4Mhz)*4=1024µs
Tức tần số xung là: F=1/T=976Hz= 1KHz.
5.3 Độ rộng xung:
Độ rộng xung là giá trị 10 bit : trong đó 8 bit cao được ghi vào thanh ghi CCPR1L, và 2 bit thấp ghi vào 2 bit 5 và 4 c ủa thanh ghi CCP1CON :
Độ rộng xung PWM được xác định theo công thức:
PWM Duty Cycle= (CCPR1L:CCP1CON<5:4>)*Tosc*N
Trong đó, CCPR1L là thanh ghi 8 bit, CCP1CON<5:4> là 2 bit 5 và 4 của thanh ghi điều khiển CCP1CON. N là t ỉ lệ chia tần số.
5.4 Qui trình thực hiện xuất xung PWM:
Gồm các bước:
– Cài đăt modun CCP chức năng PWM: setup_CCP1(CCP_PWM)
– Cài đặt Timer 2: setup_timer_2 (mode, period, 1)
Trong đó, mode có thể là: T2_DISABLED, T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16, nghĩa là t ắt Timer2 hoặc định tỉ lệ bộ chia tần số
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
Period chính là giá trị của thanh ghi PR2 để xác định chu kì của xung
– Cài đặt độ rộng xung: set_pwm1_duty(value);
Trong đó, value là giá trị CCPR1L:CCP1CON<5:4>
Và độ rộng xung được tính theo công thức:
PWM Duty Cycle= value*Tosc*N
5.5 Ứng dụng PWM trong điều khiển tốc độ động cơ 1 chiều:
C1
30pF X1
UDK
C2 CRYSTAL
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
30pF 2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 LCD1
5 39
RA3/AN3/VREF+ RB 6/PGC
6 40 LM016L
RA4/T0CKI/C1OUT RB 7/PGD
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
+5V RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA VSSVDDVEE
1 MCLR/Vpp/THV 24 RS RWE D0D1 D2D3 D4D5 D6 D7
RC5/SDO
RC6/TX/CK 25
26
RC7/RX/DT 12 3 4 56 78 910 1112 1314
R9
RD0/PSP0 19
20
RV1 4K RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
10K PIC16F877A
+12V
R6 U2
2K2
1 6
5
2
4 R5 Q5
NPN
OPTOCOUPLER-NPN 1K
Q2
NPN
R7
10k
+12V
R1 U1 D32
2K2
DIODE
1 6
R11 5 + 12V
10k R2
2 Q?
4 MPSA05
1K
OPTOCOUPLER-NPN
R3
10K
D1
DIODE
+88.8
BÀI T ẬP:
1. Lập trình để xuất xung PWM có tần số là 1KHZ, độ rộng xung là 50%
2. Ứng dụng PWM
RL?
OMI-SH-205D
CHƯƠNG TRÌNH BÀN PHÍM
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device *=16 adc=10
#use delay(clock=4000000)
#include <lcd_lib_4bit.c>
//#INCLUDE <KBD.C>
#define col0 PIN_B4
#define col1 PIN_B5
#define col2 PIN_B6
#define col3 PIN_B7
#define row0 PIN_B0
#define row1 PIN_B1
#define row2 PIN_B2
#define row3 PIN_B3
// Keypad layout:
char const KEYS[4][4] = {{‘0′,’1′,’2′,’3’},
{‘4′,’5′,’6′,’7’},
{‘8′,’9′,’A’,’B’},
{‘C’,’D’,’E’,’F’}
};
#define KBD_DEBOUNCE_FACTOR 100 // Set this number to apx n/333 where // n is the number of times you expect
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
// to call kbd_getc each second
#SEPARATE void kbd_init() {
}
short int ALL_ROWS (void)
{
if (input (row0) & input (row1) & input (row2) & input (row3))
return (0);
else
return (1);
}
char kbd_getc( ) {
static byte kbd_call_count;
static short int kbd_down;
static char last_key;
static byte col;
byte kchar;
byte row;
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
kchar=’\0′;
if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) { switch (col) {
case 0 :
output_low(col0);
output_high(col1);
output_high(col2);
output_high(col3);
//DELAY_MS(1000);
break;
case 1 : output_high(col0);
output_low(col1);
output_high(col2);
output_high(col3);
break;
case 2 : output_high(col0);
output_high(col1);
output_low(col2);
output_high(col3);
break;
case 3 : output_high(col0);
output_high(col1);
output_high(col2);
output_low(col3);
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
break;
}
if(kbd_down)//NEU LAN TRUOC DO DA CO MOT PHIM DUOC BAM
{
if(!ALL_ROWS())//DOI CHO DEN KHI PHIM DUOC NHA RA
{
kbd_down=false;
kchar=last_key;
last_key=’\0′;
}
}
else //NEU KHONG CO PHIM NAO BAM TRUOC DO
{
if(ALL_ROWS())//NEU CO PHIM BAM
{
if(!input (row0))
row=0;
else if(!input (row1))
row=1;
else if(!input (row2))
row=2;
else if(!input (row3))
row=3;
last_key =KEYS[row][col];
kbd_down = true;
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
}
else // NEU KHONG CO PHIM NAO BAM, CHUYEN SANG QUET COT TIEP THEO
{
++col;
if(col>=4)
col=0;
}
}
kbd_call_count=0;//SAU 1 LAN QUET RESET KBD_CALL_COUNT VE 0, DE DOI LAN QUET TIEP
}
return(kchar);
}
void main()
{
INT C;
INT16 value;
SET_TRIS_D(0X00);
SET_TRIS_B(0X0F);
lcd_putcmd(0x80);
lcd_init();
delay_ms(200);
OUTPUT_B(0XF0);
PRINTF(LCD_PUTCHAR,”PHIM BAM: “);
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
while( TRUE )
{
C=KBD_GETC();
IF (C!=’\0′)
{
LCD_PUTCMD(0X01);
PRINTF(LCD_PUTCHAR,”%C”,C);
}
}
}
Chương trình nhập số:
void main()
{
INT C;
INT16 DAT_THU;
INT16 value;
SET_TRIS_D(0X00);
SET_TRIS_B(0X0F);
lcd_putcmd(0x80);
lcd_init();
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
delay_ms(200);
PRINTF(LCD_PUTCHAR,”PHIM BAM: “);
WHILE( TRUE )
{
DAT_THU=0;
DO
{
C=KBD_GETC();
IF (C!=’\0’& c!=’A’&C!=’B’& c!=’C’&C!=’D’&=’D’&C!=’E’&C!=’F’)c!
{
DAT_THU =DAT_THU*10;
DAT_THU=DAT_THU+C-0X30;
LCD_PUTCHAR(C);
}
}WHILE(C!=’E’);
LCD_PUTCMD(0X01);
PRINTF(LCD_PUTCHAR,”GIA TRI PHIM BAM:”);
LCD_PUTCMD(0XC2);
PRINTF(LCD_PUTCHAR,”%6LU”,DAT_THU);
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
HƯỚNG DẪN LẬP TRÌNH VI ĐIỀU KHIỂN PIC VỚI PHẦN MỀM CCS
CÔNG TY TNHH CÔNG NGH Ệ CAO ATECKO www.atecko.com.vn
GIỚI THIỆU VỀ PIC 16F877A
PIC16F877A là gì
PIC16F877A là một Vi điều khiển PIC 40 chân và được sử dụng hầu hết trong các dự án và ứng dụng nhúng. Nó có năm cổng bắt đầu từ cổng A đến cổng E. Nó có ba bộ định thời trong đó có 2 bộ định thời 8 bit và 1 bộ định thời là 16 Bit. Nó hỗ trợ nhiều giao thức giao tiếp như giao thức nối tiếp, giao thức song song, giao thức I2C. PIC16F877A hỗ trợ cả ngắt chân phần cứng và ngắt bộ định thời.
Thông số kỹ thuật PIC16F877A
CPU | PIC 8 bit |
Cấu trúc | 8 |
Kích thước bộ nhớ chương trình (Kbyte) | 14 |
RAM (bytes) | 368 |
EEPROM/HEF | 256/HEF |
Số chân | 40 |
Tốc độ CPU tối đa (MHz) | 20 |
Chọn chân ngoại vi (PPS) | Không |
Bộ tạo dao động bên trong | Không |
Số bộ so sánh | 2 |
Số opamp | Không |
Số kênh ADC | 14 |
Độ phân giải ADC tối đa (bit) | 10 |
ADC với tính toán | Không |
Số bộ chuyển đổi DAC | 0 |
Độ phân giải DAC tối đa | 0 |
Tham chiếu điện áp nội bộ | Có |
Zero Cross Detect | Không |
Số bộ định thời 8 bit | 2 |
Số bộ định thời 16 bit | 1 |
Bộ định thời đo tín hiệu | 0 |
Bộ định thời giới hạn phần cứng | 0 |
Số đầu ra PWM | 0 |
Độ phân giải PWM tối đa | 10 |
Bộ định thời góc | Không |
Bộ tăng tốc toán học | Không |
Số module UART | 1 |
Số module SPI | 1 |
Số module I2C | 1 |
Số module USB | 0 |
Bộ định thời giám sát có cửa sổ (WWDT) | Không |
CRC/Scan | Không |
Bộ tạo dao động được điều khiển bằng số | 0 |
Cap. Touch Channels | 11 |
LCD phân đoạn | 0 |
Nhiệt độ hoạt động tối thiểu (* C) | -40 |
Nhiệt độ hoạt động tối đa (* C) | 125 |
Điện áp hoạt động tối thiểu (V) | 2 |
Điện áp hoạt động tối đa (V) | 5.5 |
Điện áp cao có thể | Không |
Sơ đồ chân PIC16F877A
Hình dưới đây là Sơ đồ chân PIC16F877A. Ngoài ra còn có bảng thông tin chi tiết đi kèm số thứ tự của chân, tên tương ứng và mô tả sơ lược về chân.
STT chân | Tên chân | Mô tả |
1 | MCLR / Vpp | MCLR được sử dụng trong quá trình lập trình, chủ yếu được kết nối với programer như PicKit |
2 | RA0 / AN0 | Chân analog 0 hoặc chân 0 của PORTA |
3 | RA1 / AN1 | Chân analog 1 hoặc chân 1 của PORTA |
4 | RA2 / AN2 / Vref- | Chân analog 2 hoặc chân 2 của PORTA |
5 | RA3 / AN3 / Vref + | Chân analog 3 hoặc chân 3 của PORTA |
6 | RA4 / T0CKI / C1out | Chân 4 của PORTA |
7 | RA5/AN4/SS/C2out | Chân analog 4 hoặc chân 5 của PORTA |
8 | RE0 / RD / AN5 | Chân analog 5 hoặc chân 0 của PORTE |
9 | RE1 / WR / AN6 | Chân analog 6 hoặc chân 1 của PORTE |
10 | RE2/CS/AN7 | Chân 7 của PORTE |
11 | Vdd | Chân nối đất của MCU |
12 | Vss | Chân dương của MCU (+5V) |
13 | OSC1 / CLKI | Bộ dao động bên ngoài / chân đầu vào clock |
14 | OSC2 / CLKO | Bộ dao động bên ngoài / chân đầu vào clock |
15 | RC0 / T1OSO / T1CKI | Chân 0 của PORT C |
16 | RC1 / T1OSI / CCP2 | Chân 1 của POCTC hoặc chân Timer / PWM |
17 | RC2 / CCP1 | Chân 2 của POCTC hoặc chân Timer / PWM |
18 | RC3 / SCK / SCL | Chân 3 của POCTC |
19 | RD0 / PSP0 | Chân 0 của POCTD |
20 | RD1 / PSPI | Chân 1 của POCTD |
21 | RD2 / PSP2 | Chân 2 của POCTD |
22 | RD3 / PSP3 | Chân 3 của POCTD |
23 | RC4 / SDI / SDA | Chân 4 của POCTC hoặc chân Serial Data vào |
24 | RC5 / SDO | Chân 5 của POCTC hoặc chân Serial Data ra |
25 | RC6 / Tx / CK | Chân thứ 6 của POCTC hoặc chân phát của Vi điều khiển |
26 | RC7 / Rx / DT | Chân thứ 7 của POCTC hoặc chân thu của Vi điều khiển |
27 | RD4 / PSP4 | Chân 4 của POCTD |
28 | RD5/PSP5 | Chân 5 của POCTD |
29 | RD6/PSP6 | Chân 6 của POCTD |
30 | RD7/PSP7 | Chân 7 của POCTD |
31 | Vss | Chân dương của MCU (+5V) |
32 | Vdd | Chân nối đất của MCU |
33 | RB0/INT | Chân thứ 0 của POCTB hoặc chân ngắt ngoài |
34 | RB1 | Chân thứ 1 của POCTB |
35 | RB2 | Chân thứ 2 của POCTB |
36 | RB3/PGM | Chân thứ 3 của POCTB hoặc kết nối với programmer |
37 | RB4 | Chân thứ 4 của POCTB |
38 | RB5 | Chân thứ 5 của POCTB |
39 | RB6/PGC | Chân thứ 6 của POCTB hoặc kết nối với programmer |
40 | RB7/PGD | Chân thứ 7 của POCTB hoặc kết nối với programmer |
Bạn có thể thấy trong hình trên các chân của Vi điều khiển PIC có nhiều hơn một tên, vì mỗi chân của PIC có thể thực hiện nhiều nhiệm vụ.
Ví dụ, Chân số 25, nó có thể được sử dụng như một chân số 6 cổng C kỹ thuật số (RC6) và cũng có thể được sử dụng như một Bộ phát (TX) cho giao tiếp nối tiếp.
Vì vậy nó sẽ tùy thuộc vào cách bạn muốn sử dụng từng chân. Trong bài hướng dẫn này chúng ta sẽ kiểm tra hầu hết các chức năng của chân.
Mạch cơ bản PIC16F877A
Mỗi vi điều khiển PIC có một mạch cơ bản và nếu bạn không thiết kế mạch cơ bản thì nó sẽ không hoạt động.
Nó giống như cấp nguồn cho vi điều khiển PIC và nó hoạt động ở mức + 5V.
Nếu bạn muốn bật quạt thì bạn sẽ làm gì? Bạn chỉ cần cung cấp điện cho nó và đó là những gì chúng ta sẽ làm với PIC nhưng trong trường hợp của PIC, chúng ta cũng cần cung cấp tần số mà nó sẽ hoạt động.
Chúng ta cần thiết kế mạch cơ bản và mạch cơ bản này chứa công suất cũng như tần số mà nó sẽ hoạt động.
Để cung cấp tần số cho vi điều khiển PIC, chúng ta sử dụng bộ dao động tinh thể và đối với PIC 16F877a, bạn có thể sử dụng bộ dao động tinh thể dải tần từ 4MHz đến 40MHz.
Đây là Mạch cơ bản PIC16F877a mà bạn cần thiết kế:
Giải thích mạch trên
Chân số 1: Chân này được gọi là MCLR (Master Clear) và chúng ta cần cấp 5V cho chân này thông qua điện trở 10k-ohm.
Chân số 11 và chân số 32: Các chân này được ký hiệu là Vdd nên chúng ta cũng cần cấp cho nó + 5V và bạn có thể thấy các đường này có màu đỏ trong hình trên.
Chân số 12 và chân số 31: Các chân này là Vss, vì vậy chúng ta cấp GND (nối đất) tại chân này và các đường của nó có màu đen.
Chân số 13 và 14: Các chân này được đặt tên là OSC1 (Bộ tạo dao động 1) và OSC2 (Bộ tạo dao động 2), bây giờ chúng ta phải gắn bộ tạo dao động tinh thể (16MHz) tại các chân này trên đường màu cam. Sau bộ dao động tinh thể, chúng ta có tụ điện 33pF và sau đó được nối đất.
Chúng ta đã thiết kế mạch cơ bản và bây giờ vi điều khiển PIC đã sẵn sàng hoạt động và bạn cũng có thể thấy một LED được gắn ở chân số 21, đó là bởi vì chúng ta cũng cần kiểm tra xem nó có đang chạy hay không để chúng ta có thể bật hoặc tắt đèn LED này.
Các cổng PIC16F877A
Trong mạch cơ bản, chúng ta đã sử dụng tất cả các chân nguồn của vi điều khiển PIC, trong khi tất cả các chân cổng vẫn còn chưa được sử dụng.
Vì vậy, bây giờ khi chúng ta đã cấp nguồn cho bộ vi điều khiển PIC, điều tiếp theo chúng ta cần làm là thiết kế một số code và sử dụng các cổng vi điều khiển PIC. Đầu tiên chúng ta hãy xem xét các Cổng PIC16F877a.
PIC16F877a có tổng cộng 5 Cổng là:
Cổng A: có tổng cộng 6 chân bắt đầu từ chân số 2 đến chân số 7. Các chân cổng A được ký hiệu từ RA0 đến RA5 trong đó RA0 là ký hiệu của chân đầu tiên của Cổng A.
Cổng B: có tổng cộng 8 chân bắt đầu từ chân số 33 đến chân số 40. Các chân cổng B được ký hiệu từ RB0 đến RB7 trong đó RB0 là ký hiệu của chân đầu tiên của cổng B.
Cổng C: có tổng cộng 8 Chân. Các chân của nó không được thẳng hàng với nhau. Bốn chân đầu tiên của cổng C nằm ở chân số 15 đến chân số 18, còn bốn chân cuối cùng nằm ở chân số 23 đến chân số 26.
Cổng D: có tổng cộng 8 chân. Các chân của nó cũng không thẳng hàng với nhau. Bốn chân đầu tiên của cổng D nằm ở chân số 19 đến chân số 22, trong khi bốn chân cuối cùng nằm ở chân số 27 đến chân số 30.
Cổng E: có tổng cộng 3 chân bắt đầu từ chân số 8 đến chân số 10. Các chân cổng E được ký hiệu từ RE0 đến RE2 trong đó RE0 là ký hiệu của chân đầu tiên của cổng E.
Trước hết những gì bạn cần quyết định là bạn muốn các chân cổng là đầu vào hay đầu ra.
Giả sử bạn có một số cảm biến và bạn muốn nhận giá trị của nó thì bạn phải kết nối cảm biến này với vi điều khiển PIC. Trong trường hợp này, chân PIC sẽ hoạt động như chân đầu vào vì nó sẽ nhập giá trị từ cảm biến. Cảm biến gửi giá trị và PIC nhận nó.
Trong trường hợp bạn có động cơ DC và bạn muốn di chuyển động cơ DC đó bằng vi điều khiển PIC. Bạn phải gửi lệnh từ bộ vi điều khiển PIC đến động cơ DC để chân PIC hoạt động như chân đầu ra.
Mỗi cổng của vi điều khiển PIC được liên kết với hai thanh ghi (register), ví dụ các thanh ghi cổng D là PortD và TRISD.
Cả hai thanh ghi này đều có 8 bit vì cổng D có 8 chân.
TRISD quyết định cổng là đầu ra hay đầu vào và chúng ta cũng có thể gán giá trị cho từng chân riêng biệt. Nếu chúng ta đã gán 0 thì nó sẽ là đầu ra và nếu chúng ta đã gán 1 thì nó sẽ là đầu vào.
Ví dụ: nếu chúng ta gán TRISD = 0x01, thì 7 chân đầu tiên của cổng D sẽ là đầu ra nhưng chân cuối cùng sẽ là đầu vào vì 0x01 là 00000001 trong hệ nhị phân.
Thanh ghi PortD chứa giá trị thực và giá trị này là sự kết hợp của tất cả 8 chân.
Trình biên dịch PIC16F877a
Trình biên dịch chính thức của vi điều khiển PIC là trình biên dịch MPLAB C18, có trên trang web chính thức của Microchip.
Chúng ta viết code trong trình biên dịch PIC và sau đó biên dịch nó. Sau khi biên dịch, một file hex được tạo và chúng ta sẽ tải lên trong bộ vi điều khiển PIC.
Cổng nối tiếp PIC16F877a
PIC16F877a có một cổng nối tiếp trong đó được sử dụng để giao tiếp dữ liệu.
Chân số 25 cũng hoạt động như TX vì vậy nếu bạn muốn thực hiện giao tiếp nối tiếp thì nó sẽ được sử dụng để gửi dữ liệu nối tiếp.
Chân 26 cũng hoạt động như RX, vì vậy nếu bạn muốn thực hiện giao tiếp nối tiếp thì nó sẽ được sử dụng để nhận dữ liệu nối tiếp.
Giao tiếp I2C PIC16F877a
PIC16F877a cũng có một cổng I2C có thể dễ dàng thực hiện giao tiếp I2C.
Chân số 18 hoạt động như SCL, viết tắt của Serial Clock Line.
Chân số 23 hoạt động như SDA, là chữ viết tắt của Serial Data Line.
Bây giờ bạn có thể thấy chúng ta có cổng nối tiếp và cổng I2C trong cổng C, vì vậy chúng ta có thể sử dụng cổng C như một cổng đơn giản nhưng cũng có thể thực hiện hai giao tiếp này với các chân của nó, vì vậy nó hoàn toàn phụ thuộc vào lập trình viên.
Ngắt PIC16F877a
PIC16F877a có tổng cộng 8 nguồn ngắt. Nguồn ngắt là một số sự kiện tạo ra ngắt, nguồn này có thể là bộ đếm thời gian như các ngắt được tạo sau mỗi 1 giây hoặc cũng có thể là sự kiện thay đổi trạng thái chân, chẳng hạn như nếu trạng thái chân bị thay đổi sau đó ngắt sẽ được tạo ra.
Vì vậy, ngắt PIC16F877a có thể được tạo ra bằng 8 cách sau:
- Ngắt ngoài.
- Ngắt bộ định thời (Timer0 / Timer1).
- Thay đổi trạng thái cổng B.
- Cổng Slave Song song Đọc / Ghi.
- Bộ chuyển đổi A / D.
- Nhận / Truyền nối tiếp.
- PWM (CCP1 / CCP2).
- Thao tác ghi EEPROM.
Ngắt PIC16F877a được liên kết với 5 thanh ghi dưới đây:
- INTCON
- PIE1
- PIR1
- PIE2
- PIR2
Vi điều khiển PIC
PIC là một họ vi điều khiển RISC được sản xuất bởi công ty Microchip Technology. Dòng PIC đầu tiên là PIC1650 được phát triển bởi Microelectronics Division thuộc General Instrument.
PIC bắt nguồn là chữ viết tắt của “Programmable Intelligent Computer” (Máy tính thông minh có thể lập trình được) là một sản phẩm của hãng General Instrument đặt cho dòng sản phẩm đầu tiên của họ là PIC1650. Lúc này, PIC1650 được dùng để giao tiếp với các thiết bị ngoại vi cho máy chủ 16bit CP1600, vì vậy, người ta cũng gọi PIC với cái tên “Peripheral Interface Controller” (Bộ điều khiển giao tiếp ngoại vi). CP1600 là một CPU tốt, nhưng lại kém về các hoạt động xuất nhập, và vì vậy PIC 8-bit được phát triển vào khoảng năm 1975 để hỗ trợ hoạt động xuất nhập cho CP1600. PIC sử dụng microcode đơn giản đặt trong ROM, và mặc dù, cụm từ RISC chưa được sử dụng thời bây giờ, nhưng PIC thực sự là một vi điều khiển với kiến trúc RISC, chạy một lệnh một chu kỳ máy (4 chu kỳ của bộ dao động).
Năm 1985 General Instrument bán bộ phận vi điện tử của họ, và chủ sở hữu mới hủy bỏ hầu hết các dự án – lúc đó đã quá lỗi thời. Tuy nhiên PIC được bổ sung EEPROM để tạo thành 1 bộ điều khiển vào ra khả trình. Ngày nay rất nhiều dòng PIC được xuất xưởng với hàng loạt các module ngoại vi tích hợp sẵn (như USART, PWM, ADC…), với bộ nhớ chương trình từ 512 Word đến 32K Word.
Hiện nay, tại Việt Nam, đã có một cộng đồng nghiên cứu và phát triển PIC, dsPIC và PIC32.
Lập trình cho PIC[sửa | sửa mã nguồn]
PIC sử dụng tập lệnh RISC, với dòng PIC low-end (độ dài mã lệnh 12 bit, ví dụ: PIC12Cxxx) và mid-range (độ dài mã lệnh 14 bit, ví dụ: PIC16Fxxxx), tập lệnh bao gồm khoảng 35 lệnh, và 70 lệnh đối với các dòng PIC high-end (độ dài mã lệnh 16 bit, ví dụ: PIC18Fxxxx). Tập lệnh bao gồm các lệnh tính toán trên các thanh ghi, với các hằng số, hoặc các vị trí bộ nhớ, cũng như có các lệnh điều kiện, lệnh nhảy/gọi hàm, và các lệnh để quay trở về, nó cũng có các tính năng phần cứng khác như ngắt hoặc sleep (chế độ hoạt động tiết kiện điện). Microchip cung cấp môi trường lập trình MPLAB, nó bao gồm phần mềm mô phỏng và trình dịch ASM.
Một số công ty khác xây dựng các trình dịch C, Basic, Pascal cho PIC. Microchip cũng bán trình dịch “C18” (cho dòng PIC high-end) và “C30” (cho dòng dsPIC30Fxxx). Họ cũng cung cấp các bản “student edition/demo” dành cho sinh viên hoặc người dùng thử, những version này không có chức năng tối ưu hoá code và có thời hạn sử dụng giới hạn. Những trình dịch mã nguồn mở cho C, Pascal, JAL, và Forth, cũng được cung cấp bởi PicForth.
GPUTILS là một kho mã nguồn mở các công cụ, được cung cấp theo công ước về bản quyền của GNU General Public License. GPUTILS bao gồm các trình dịch, trình liên kết, chạy trên nền Linux, Mac OS X, OS/2 và Microsoft Windows. GPSIM cũng là một trình mô phỏng dành cho vi điều khiển PIC thiết kế ứng với từng module phần cứng, cho phép giả lập các thiết bị đặc biệt được kết nối với PIC, ví dụ như LCD, LED…
Một vài đặc tính[sửa | sửa mã nguồn]
Hiện nay có khá nhiều dòng PIC và có rất nhiều khác biệt về phần cứng, nhưng chúng ta có thể điểm qua một vài nét như sau:
- 8/16 bit CPU, xây dựng theo kiến trúc Harvard có sửa đổi
- FLASH và ROM có thể tuỳ chọn từ 256 byte đến 256 Kbyte
- Các cổng Xuất/Nhập (I/O ports) (mức logic thường từ 0V đến 5.5V, ứng với logic 0 và logic 1)
- 8/16 Bit Timer
- Công nghệ Nanowatt
- Các chuẩn Giao Tiếp Ngoại Vi Nối tiếp Đồng bộ/Không đồng bộ USART, AUSART, EUSARTs
- Bộ chuyển đổi ADC Analog-to-digital converters, 10/12 bit
- Bộ so sánh điện áp (Voltage Comparators)
- Các module Capture/Compare/PWM
- LCD
- MSSP Peripheral dùng cho các giao tiếp I²C, SPI, và I²S
- Bộ nhớ nội EEPROM – có thể ghi/xoá lên tới 1 triệu lần
- FLASH (dùng cho bộ nhớ chương trình) có thể ghi/xóa 10.000 lần (tiêu biểu) [1]
- Module Điều khiển động cơ, đọc encoder
- Hỗ trợ giao tiếp USB
- Hỗ trợ điều khiển Ethernet
- Hỗ trợ giao tiếp CAN
- Hỗ trợ giao tiếp LIN
- Hỗ trợ giao tiếp IrDA
- Một số dòng có tích hợp bộ RF (PIC16F639, và rfPIC)
- KEELOQ Mã hoá và giải mã
- DSP những tính năng xử lý tín hiệu số (dsPIC)
Họ vi điều khiển PIC 8/16-bit[sửa | sửa mã nguồn]
Các link này được lấy từ trang chủ www.microchip.com, tuy nhiên hiện nay trang này đang rất thường bị chết, có thể do lượng truy cập quá nhiều, và các đường dẫn luôn thay đổi, vì vậy, có thể link sẽ bị chết.
Vi điều khiển 8-bit
Vi điều khiển 16-bit
Bộ điều khiển xử lý tín hiệu số 16-bit (dsPIC)
Bộ điều khiển xử lý tín hiệu số 32-bit (PIC32)
- PIC32 (công bố ngày 05/11/2007)
Gỡ lỗi[sửa | sửa mã nguồn]
In-circuit debugging[sửa | sửa mã nguồn]
Toàn bộ các thiết bị PIC mới nhất ngày nay đều hỡ trợ một giao diện ICD (in-circuit debugging) trong CPU, để hỗ trợ việc gỡ lỗi trong chương trình với MPLAB IDE.
GIỚI THIỆU VỀ STM32F103C8T6
Giới thiệu sơ lược
STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng như F0,F1,F2,F3,F4….. Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3. STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz. Giá thành cũng khá rẻ so với các loại vi điều khiển có chức năng tương tự. Mạch nạp cũng như công cụ lập trình khá đa dạng và dễ sử dụng.
Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển ứng dụng thông thường, thiết bị cầm tay và thuốc, máy tính và thiết bị ngoại vi chơi game, GPS cơ bản, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến tần, máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…
Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như IAR Embedded Workbench, Keil C… Ở đây mình sử dụng Keil C nên các bài viết sau mình chỉ đề cập đến Keil C.
Thư viện lập trình: có nhiều loại thư viện lập trình cho STM32 như: STM32snippets, STM32Cube LL, STM32Cube HAL, Standard Peripheral Libraries, Mbed core. Mỗi thư viện đều có ưu và khuyết điểm riêng, ở đây mình xin phép sử dụng Standard Peripheral Libraries vì nó ra đời khá lâu và khá thông dụng, hỗ trợ nhiều ngoại vi và cũng dễ hiểu rõ bản chất của lập trình.
Mạch nạp: có khá nhiều loại mạch nạp như : ULINK, J-LINK , CMSIS-DAP, STLINK… ở đây mình sử dụng Stlink vì giá thành khá rả và debug lỗi cũng tốt.
Board để lập trình: các bạn có thể mua sẵn 1 số kit ra chân đã có sẵn trên thị trường hoặc thiết kế 1 cái board dành riêng cho bản thân mình. Ở đây mình đã thiết kế 1 board đã tích hợp sẵn mạch nạp, mình cũng đã test và chạy khá ổn, debug bằng Keil C khá giống với phiên bản STlink V2 trên thị trường. Nói chung là sử dụng đồ tự làm khá thú vị. Đây là board của mình:
Sơ lược về Board trên:
- 1 cổng Mini USB dùng để cấp nguồn, nạp cũng như debug.
- 2 MCU bao gồm 1 MCU nạp và 1 MCU dùng để lập trình.
- Có chân Output riêng cho các chân mạch nạp trên MCU1.
- Có chân Output đầy đủ cho các chân MCU2.
- Chân cấp nguồn ngoài riêng cho MCU2 nếu không sử dụng nguồn từ USB.
- Thạch anh 32,768khz dùng cho RTC và Backup.
- Chân nạp dùng cho chế độ nạp boot loader.
- Nút Reset ngoài và 1 led hiển thị trên chân PB9, 1 led báo nguồn cho MCU2.
Cấu hình chi tiết của STM32F103C8T6:
- ARM 32-bit Cortex M3 với clock max là 72Mhz.
- Bộ nhớ:
- 64 kbytes bộ nhớ Flash(bộ nhớ lập trình).
- 20kbytes SRAM.
- Clock, reset và quản lý nguồn.
- Điện áp hoạt động 2.0V -> 3.6V.
- Power on reset(POR), Power down reset(PDR) và programmable voltage detector (PVD).
- Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz.
- Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz.
- Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC.
- Trong trường hợp điện áp thấp:
- Có các mode :ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ.
- Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử dụng lưu trữ data khi mất nguồn cấp chính.
- 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ.
- Khoảng giá trị chuyển đổi từ 0 – 3.6V.
- Lấy mẫu nhiều kênh hoặc 1 kênh.
- Có cảm biến nhiệt độ nội.
- DMA: bộ chuyển đổi này giúp tăng tốc độ xử lý do không có sự can thiệp quá sâu của CPU.
- 7 kênh DMA.
- Hỗ trợ DMA cho ADC, I2C, SPI, UART.
- 7 timer.
- 3 timer 16 bit hỗ trợ các mode IC/OC/PWM.
- 1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ như ngắt input, dead-time..
- 2 watdog timer dùng để bảo vệ và kiểm tra lỗi.
- 1 sysTick timer 24 bit đếm xuống dùng cho các ứng dụng như hàm Delay….
- Hỗ trợ 9 kênh giao tiếp bao gồm:
- 2 bộ I2C(SMBus/PMBus).
- 3 bộ USART(ISO 7816 interface, LIN, IrDA capability, modem control).
- 2 SPIs (18 Mbit/s).
- 1 bộ CAN interface (2.0B Active)
- USB 2.0 full-speed interface
- Kiểm tra lỗi CRC và 96-bit ID.
Kit Phát Triển STM32F103C8T6 BluePill

KIT STM32F103C8T6 Mini thuộc loại kit phát triển là Kit phát triển được thiết kế với đơn giản, kít ra đầy đủ chân của vi điều khiển, có cổng giao tiếp USB và cổng nạp SWD, sử dụng dòng vi điều khiển 32 Bit của dòng ST. Thích hợp với những người tiếp cận dòng STM 32 Bit.

Thông số kỹ thuật:
- Vi điều khiển: STM32F103C8T6.
- Điện áp cấp 5VDC qua cổng Micro USB sẽ được chuyển đổi thành 3.3VDC qua IC nguồn và cấp cho Vi điều khiển chính.
- Tích hợp sẵn thạch anh 8Mhz.
- Tích hợp sẵn thạnh anh 32Khz cho các ứng dụng RTC.
- Ra chân đầy đủ tất cả các GPIO và giao tiếp: CAN, I2C, SPI, UART, USB,…
- Tích hợp Led trạng thái nguồn, Led PC13, Nút Reset.
- Kích thước: 53.34 x 15.24mm
- Sử dụng với các mạch nạp:
- ST-Link Mini
- J-link
- USB TO COM
- Kết nối chân khi nạp bằng ST-Link Mini
- Nạp theo chuẩn SWD
- TCK — SWCLK
- TMS — SWDIO
- GND — GND
- 3.3V — 3.3V
Lưu ý : khi sử mạch nạp ST Link dùng nguồn 3.3v
Nguồn: http://laptrinharmst.blogspot.com/
RISC là gì? RISC V là gì? Chúng khác nhau như thế nào?
Khi nói về bộ vi xử lý, x86 và ARM là hai thuật ngữ xuất hiện nhiều nhất, đặc biệt nếu nói về các thiết bị gần đây. Nhưng có rất nhiều kiến trúc khác ngoài kia. Ví dụ, bạn có thể đã nghe tên RISC và RISC-V thỉnh thoảng xuất hiện.
Mặc dù có tên giống nhau, nhưng chúng là những khái niệm khác nhau. Vậy RISC là gì và RISC-V là gì? Và sự khác biệt giữa chúng ra sao? Cùng Quantrimang.com tìm hiểu qua bài viết sau đây nhé!
RISC là gì?
Bảng mạch Raspberry Pi màu xanh lá cây và xám
RISC là một thuật ngữ rộng, viết tắt của “Reduced Instruction Set Computer”. Về cơ bản, một máy tính RISC được thiết kế để chạy các lệnh riêng lẻ, đơn giản. So với CISC (Complex Instruction Set Computer), bộ xử lý RISC sử dụng độ dài lệnh thống nhất cho hầu hết các lệnh. Ngược lại, các lệnh CISC phức tạp hơn và có thể thực hiện những hoạt động ở mức thấp và nhiều bước.
Để đơn giản hóa, bộ xử lý RISC có thể thực hiện các lệnh đơn giản hơn, thống nhất, trong khi CISC có thể thực hiện các lệnh với độ phức tạp và phạm vi khác nhau. Mỗi lệnh RISC chỉ có thể thực hiện một việc tại một thời điểm, trong khi các lệnh CISC có thể làm nhiều việc đồng thời. Bởi vì các lệnh được viết bằng code và có bản chất đơn giản hơn, bộ xử lý RISC thường cần nhiều hướng dẫn hơn để đạt được các nhiệm vụ tương tự như bộ xử lý CISC. Sự khác biệt này được bù đắp bằng cách tăng tốc độ mà CPU RISC có thể thực hiện thông qua việc sử dụng pipelining. Vì chúng đơn giản hơn, nên bộ xử lý RISC cũng có thể được thiết kế nhanh hơn bộ xử lý CISC và chúng có thể chạy code hiệu quả hơn.
Vì RISC không phải là một kiến trúc mà là một thuật ngữ rộng, nhiều kiến trúc CPU có thể được coi là RISC. Một trong những kiến trúc bộ xử lý RISC nổi tiếng nhất là ARM, cung cấp năng lượng cho điện thoại thông minh và gần đây là một số laptop và máy tính mà chúng ta sử dụng. Những thứ khác bao gồm PowerPC, đã được sử dụng trong máy tính Apple và game console trong một thời gian dài. Trong khi đó, x86 có thể được coi là một thiết kế CISC vì nó phức tạp hơn.
Thuật ngữ RISC được đặt ra bởi dự án nghiên cứu Berkeley RISC do David Patterson đứng đầu tại Đại học California, Berkeley, từ năm 1980 đến năm 1984. Hóa ra, dự án đã thực sự thành công và thuật ngữ “RISC” sẽ tiếp tục bao gồm tất cả các máy tính với tập lệnh đơn giản hóa – ngay cả một dự án MIPS cạnh tranh do Đại học Stanford phát triển cùng thời gian cuối cùng cũng được gọi là kiến trúc RISC. Đối với dự án Berkeley cụ thể đó, nó tiếp tục được sử dụng bởi vi kiến trúc SPARC do Sun Microsystems phát triển – kiến trúc cuối cùng sẽ đóng vai trò là nguồn cảm hứng cho kiến trúc ARM trong điện thoại thông minh.
RISC-V là gì?
Bảng mạch
Bản thân RISC không phải là một kiến trúc cụ thể, bạn có thể đã bị nhầm lẫn bởi một kiến trúc lấy và sử dụng tên RISC. Đó là RISC-V – một kiến trúc tập lệnh (ISA) được phát triển bởi Đại học California, Berkeley, nhằm thể hiện các nguyên tắc của bộ xử lý RISC đồng thời là một tiêu chuẩn nguồn mở. Trong khi ARM, kiến trúc RISC được biết đến nhiều nhất, là độc quyền và cần được cấp phép bởi các nhà sản xuất chip, RISC-V có nghĩa là miễn phí bản quyền và nói chung, được sử dụng miễn phí cho tất cả mọi người.
RISC-V bắt đầu được phát triển vào năm 2010 và được phát hành cho cộng đồng mở vào năm 2015. Tất nhiên, khi RISC-V được phát hành, ARM đã có trong hàng triệu điện thoại thông minh trên toàn thế giới. Nhưng không giống như ARM, RISC-V được phát triển và phát hành với mục đích đưa một thiết kế CPU ra ngoài có mã nguồn mở, có thể mở rộng và được triển khai trên bất kỳ thiết bị nào mà không cần tiền bản quyền dưới bất kỳ hình thức nào. Theo các nhà thiết kế, có một kiến trúc CPU sử dụng miễn phí có thể giảm đáng kể chi phí của phần mềm bằng cách cho phép tái sử dụng nhiều hơn và cho phép cạnh tranh nhiều hơn.
RISC-V không phải là một kiến trúc đang được triển khai rộng rãi trên điện thoại thông minh hoặc bất cứ thứ gì tương tự – xét cho cùng, hầu hết chúng đều sử dụng ARM hoặc x86. Tuy nhiên, nó vẫn được sử dụng. Cụ thể hơn, RISC-V đã được sử dụng trong điện toán đám mây, máy chủ và các ứng dụng nhúng. Các thiết kế dựa trên RISC-V đã biết bao gồm chip bảo mật Titan M2 được sử dụng bởi điện thoại thông minh Pixel. Có nhiều trường hợp sử dụng được lên kế hoạch cho kiến trúc RISC-V trong tương lai, bao gồm cả những trường hợp sử dụng từ các công ty tên tuổi như NVIDIA và Seagate. Vì được miễn phí bản quyền, nó làm giảm chi phí và khiến tất cả mọi người dùng cảm thấy hài lòng.
RISC khác biệt như thế nào so với RISC-V?
Bộ xử lý máy tính hiển thị hình ảnh
Thoạt nhìn, một số người có thể nghĩ rằng RISC-V là một biến thể của RISC và RISC là một kiến trúc tập lệnh. Rốt cuộc, vì chúng có tên tương tự, nên chẳng ngạc nhiên khi có sự nhầm lẫn. Như đã trình bày chi tiết trước đây, sự khác biệt nằm ở chỗ RISC là một kiến trúc tập lệnh thực tế, trong khi RISC-V là một thuật ngữ tổng quát bao gồm nhiều kiến trúc CPU.
Như đã đề cập trước đây, RISC là một thuật ngữ rộng được sử dụng để nói về các máy tính với tập lệnh đơn giản hóa – thuật ngữ này bao gồm một loạt các kiến trúc CPU với những thiết kế và khả năng đơn giản hơn, một số trong đó được sử dụng tích cực bởi hàng tỷ thiết bị và vài kiến trúc khác đã được không dùng nữa theo thời gian. Và thuật ngữ này tồn tại để phân biệt các loại máy tính này với CISC, hoặc máy tính tập lệnh phức tạp, một thuật ngữ được sử dụng để mô tả kiến trúc x86 được sử dụng bởi hầu hết các PC trên toàn thế giới, cũng như một số ít thiết bị khác.
Và sau đó, RISC-V là kiến trúc tập lệnh dựa trên thiết kế RISC, nhưng so với các kiến trúc RISC khác như ARM, RISC-V là mã nguồn mở thay vì độc quyền, có nghĩa là bất kỳ nhà sản xuất chip nào cũng có thể tạo thiết kế dựa trên RISC-V mà không phải trả tiền tiền bản quyền hoặc phí cấp phép cho bất kỳ ai. Nó được thiết kế để sử dụng cho nhiều mục đích khác nhau và được nhiều nhà sản xuất silicon cũng như nhiều hệ điều hành mã nguồn mở hỗ trợ.
Một mô tả một loại CPU, trong khi cái kia là kiến trúc CPU theo đúng nghĩa là một sự thay thế cho ARM và các CPU RISC khác.
RISC-V và RISC không giống nhau
Thuật ngữ RISC được sử dụng để nói về một số loại bộ xử lý nhất định và nó là thuật ngữ xác định một loạt các kiến trúc. Tuy nhiên, một số người lầm tưởng rằng RISC là một kiến trúc CPU. Những người này có lẽ đang nghĩ về RISC-V và nhầm nó với thuật ngữ RISC. Bây giờ, bạn đã biết sự khác biệt và hy vọng bạn sẽ không còn nhầm lẫn hai thuật ngữ này trong tương lai nữa.
Chip U, P và H của Intel khác nhau như thế nào?
CPU HEDT là gì?
CPU Intel Core và Intel Core X có gì khác nhau?
KVM switch là gì? Khi nào nên sử dụng?
Tổng quan về kiến trúc ARM và họ vi điều khiển STM32
KIT STM32F4Discovery – Bài 1. Tổng quan về kiến trúc ARM và họ vi điều khiển STM32
Sơ lược về kiến trúc ARM
Các thế hệ vi điều khiển ngày càng phát triển không ngừng nhằm đáp ứng các yêu cầu điều khiển, xử lý dữ liệu ngày càng lớn. Các vi điều khiển 8 bit rất phổ biến trong các ứng dụng điều khiển trong công nghiệp cũng như các sản phẩm dân dụng, các vi điều khiển 16 bit được nâng cấp hơn, có khả năng đáp ứng cao hơn so với dòng vi điều khiển 8 bit, tuy nhiên với các yêu cầu điều khiển, khối lượng dữ liệu xử lý như hình ảnh trong các thiết bị điều khiển sinh học, các thiết bị giải trí như máy chụp ảnh kỹ thuật số, máy tính bảng, máy định vị dẫn đường, … thì các vi điều khiển 8 bit và 16 bit sẽ không đáp ứng được do không đủ không gian bộ nhớ để chứa dữ liệu, không đủ nhanh để xử lý dữ liệu,… để đáp ứng được các yêu cầu đó thì các thế hệ vi điều khiển 32 bit đã ra đời, dòng vi điều khiển phổ biến nhất là ARM.
Vi xử lý ARM là thành phần chủ lực làm nên thành công lớn của các hệ thống nhúng 32-bit. Các vi xử lý ARM được ứng dụng rộng rãi trong các điện thoại di động, máy tính bảng và các thiết bị di động khác. ARM có kiến trúc RISC, cho phép tiêu hao năng lượng thấp nên là một lựa chọn lý tưởng cho các hệ thống nhúng.
Sơ lược về họ vi điều khiển STM32
Tham khảo cuốn “Kiến trúc cơ bản của STM32 ARM Cortex M3” (trên trang web http://arm.vn)
Giới thiệu KIT STM32F4 Discovery
STM32F4Discovery là board vi điều khiển dành cho người mới học lập trình nhúng hoặc dành cho những người muốn làm quen với lập trình trên vi điều khiển 32-bit dòng ARM… Board được tích hợp chip ARM Cortex-M4 cùng với bộ tính toán số thực (FPU), hoạt động với tần số rất cao 168 MHz, tỷ suất DMIPS/MHZ cao 1.25 giúp cho hệ thống có thể đạt được hiệu năng 210 DMIPS, board rất thích hợp cho các ứng dụng với yêu cầu tính toán xử lý nhanh, ví dụ như DSP, điều khiển robot… Với STM32F4Discovery, người dùng sẽ không cần phải lo lắng và không cần phải bỏ tiền ra để mua mạch nạp đắt tiền như các loại board MCU thông thường. Điểm nổi bật nhất của board là có nhiều tính năng trong khi giá thành rất rẻ.
Các đặc điểm của KIT STM32F4Discovery:
Sử dụng vi điều khiển lõi ARM Cortex-M4 32-bit STM32F407VGT6, 1 MB Flash, 192 KB RAM đóng gói LQFP100 (100 chân)
Tích hợp sẵn mạch nạp ST-LINK/V2
Nguồn cung cấp cho board: qua USB bus hoặc từ nguồn điện ngoài 5V
Cấp nguồn cho ứng dụng ngoài: 3V và 5V
Cảm biến chuyển động ST MEMS LIS302DL
Cảm biến âm thanh ST MEMS MP45DT02
Audio DAC CS43L22 với driver loa lớp D tích hợp
8 đèn LED:
+ LD1 (red/green) dùng cho giao tiếp USB
+ LD2 (red) báo hiệu nguồn 3.3 V đang bật
+ 4 đèn LED người dùng: LD3 (orange), LD4 (green), LD5 (red) và LD6 (blue)
+ 2 đèn LED cho USB OTG: LD7 (green) VBus và LD8 (red) over-current
2 nút bấm (user và reset)
USB OTG FS với micro-AB connector
KIT STM32F4Discovery
KIT STM32F4Discovery
Một số linh kiện trên KIT STM32F4 Discovery
Kích thước cơ khí của KIT STM32F4 Discovery
https://www.dientuhello.com/chuong-1-tong-quan-ve-kien-truc-arm-va-ho-vi-dieu-khien-stm32/
ADC với STM32
I. Lý thuyết
ADC (Analog-to-Digital Converter) là 1 mạch điện tử lấy điện áp tương tự làm đầu vào và chuyển đổi nó thành dữ liệu số (1 giá trị đại diện cho mức điện áp trong mã nhị phân). Ảnh dưới mô tả sơ đồ khối của 1 ADC.
Các khái niệm cần biết:
Độ phân giải (resolution): dùng để chỉ số bit cần thiết để chứa hết các mức giá trị số (digital) sau quá trình chuyển đổi ở ngõ ra. Bộ chuyển đổi ADC của STM32F103C8T6 có độ phân giải mặc định là 12 bit, tức là có thể chuyển đổi ra 212= 4096 giá trị ở ngõ ra số.
Thời gian lấy mẫu (sampling time): là khái niệm được dùng để chỉ thời gian giữa 2 lần số hóa của bộ chuyển đổi, thời gian lấy mẫu càng lâu độ chính xác càng cao. Nhìn vào đồ thị dưới ta sẽ thấy ADC cần 1 khoảng thời gian ổn định tSTAB trước khi bắt đầu chuyển đổi. Sau khi chuyển đổi xong cờ EOC sẽ được set, và kết quả được lưu vào thanh ghi. Trước khi bắt đầu quá trình chuyển đổi tiếp theo thì cờ EOC clear.
Để hiểu quá trình số hóa trong STM32 diễn ra như thế nào ta theo dõi ví dụ sau. Giả sử ta cần đo điện áp tối thiểu là 0V và tối đa là 3.3V, trong STM32 sẽ chia 0 → 3.3V thành 4096 khoảng giá trị (từ 0 → 4095, do 212 = 4096), giá trị đo được từ chân IO tương ứng với 0V sẽ là 0, tương ứng với 1.65V là 2047 và tương ứng 3.3V sẽ là 4095.
Các mode hoạt động của ADC:
Single conversion mode: Trong chế độ này, ADC sẽ chỉ thực hiện 1 chuyển đổi cho tới khi người dùng cho phép chuyển đổi tiếp.
Continuous Conversion Mode: ở chế độ này, ADC sẽ ngay lập tức thực hiển 1 chuyển đổi khác khi chuyển đổi trước vừa kết thúc.
Scan Mode: Chế độ này được sử dụng để quét 1 nhóm các kênh. 1 chuyển đổi duy nhất được thực hiện cho mỗi kênh. Sau khi 1 kênh chuyển đổi xong, kênh tiếp theo sẽ tự động chuyển đổi.
Discontinuous Mode: Chế độ này được sử dụng để chuyển đổi n lần (n <= 8). Giá trị của n được xác định tại bit DISCNUM[2:0] trong thanh ghi ADC_CR1.
II. Lập trình ADC trên STM32:
Ở ví dụ này ta sẽ Dùng bộ ADC để đọc giá trị của biến trở thông qua điện áp. Sử dụng 2 chế độ continuos mode và scan mode.
Đấu nối mạch theo sơ đồ: (với ADC 0 là PA0, ADC1 là PA1)
CONTINOUS MODE:
1. Khởi tạo project với CubeMx
Bước 1: Bước đầu tiên ta sẽ làm tương tự như bài 1 (cấu hình thạch anh, debug, …)
Bước 2: Cấu hình ADC: (đối với continous mode).
Ở đây ta chỉ sử dụng ADC1 chennel 0 (PA0).
Enable continous mode (biến đổi liên tục).
Chọn Sampling Time = 239.5 (để tối ưu độ chính xác).
Kích hoạt ngắt trong NVIC settings. Chọn mức ưu tiên = 2.
Bước 3: Đặt tên project và GENERATE CODE.
2. Giải thích 1 số hàm quan trọng
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
Sau khi ADC chuyển đổi xong giá trị thì chương trình sẽ thực thi các lệnh trong câu lệnh này.
Tham số:
hadc: trỏ tới adc được kích hoạt ngắt (&hadc1 hoặc &hadc2).
HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc)
Kích hoạt ADC ở chế độ ngắt.
Tham số:
hadc: trỏ tới adc được start ở chế độ ngắt
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc)
Kích hoạt ADC ở chế độ normal
Tham số:
hadc: trỏ adc được start ở chế đọ normal.
HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc)
Stop ADC ở chế độ normal
Tham số:
hadc: trỏ tới adc được stop.
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)
Đọc giá trị ADC, giá trị trả về chính là kết quả sau khi biến đổi xong.
Tham số:
hadc: trỏ tới adc được lấy giá trị.
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)
Chuyển đổi ADC.
Tham số:
hadc: trỏ tới adc chờ chuyển đổi.
Timeout: thời gian chuyển đổi tối đa.
3. Lập trình trên Keil C
B1: khai báo giá trị ADC trả về:
B2: kích hoạt ADC ta sẽ thực hành trên cả 2 chế độ: Normal, ngắt.
Normal: Đọc giá trị ADC với chu kỳ 100ms.
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
HAL_ADC_Start(&hadc1);
while (1)
{
ADC_value = HAL_ADC_GetValue(&hadc1);
HAL_Delay(100);
}
}
Ngắt: Sau khi chuyển đổi xong, chương trình sẽ thực hiện các câu lệnh trong hàm HAL_ADC_ConvCpltcallback().
uint32_t ADC_value;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
HAL_ADC_Start_IT(&hadc1);
while (1)
{
}
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if(hadc->Instance == hadc1.Instance) // kiểm tra ADC nào gây ra ngắt
{
ADC_value = HAL_ADC_GetValue(&hadc1);
}
}
B3: bật chế độ Debug để theo dõi giá trị ADC trả về:
Click chọn vào biểu tượng Debug session.
Add ADC_value vào watch 1 để theo dõi:
Sau đó sẽ click chọn Run để theo dõi Debug.
SCAN MODE:
1. Khởi tạo project với CubeMx
B1: Cấu hình lại ADC
Ta dùng 2 kênh ADC nên là chọn number of conversion = 2
Enable scan mode và continuous mode, đồng thời chọn thời gian chuyển đổi.
B2: Gen code.
2. Lập trình trên Keil C
B1: Tách phần init 2 kênh ADC trong hàm MX_ADC1_Init() thành 2 hàm riêng biệt.
// khởi tạo ADC1 channel 0
void ADC_Select_CH0 (void)
{
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
// khởi tạo ADC1 channel 1
void ADC_Select_CH1 (void)
{
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
B2: Thực hiện việc đọc giá trị lần lượt ở 2 kênh ADC.
uint32_t ADC_VAL[2];
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
while (1)
{
ADC_Select_CH0();
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 1000);
ADC_VAL[0] = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
HAL_Delay(10);
ADC_Select_CH1();
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 1000);
ADC_VAL[1] = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
HAL_Delay(10);
}
}
B3: nạp chương trình và chạy ở chế độ debug để theo dõi giá trị ADC đọc về
1 số lưu ý:
Ở đây giá trị ta đọc được chỉ là giá trị của điện áp trả về. Muốn biết
được giá trị điện trở ta phải xem mạch nguyên lý.
Cụ thể ở đây : Từ giá trị đo được ta sẽ tính điện trở theo công
thức:
Timer với STM32
I. Giới thiệu về Timer:
Có thể hiểu 1 cách đơn giản: timer là 1 mạch digital logic có vai trò đếm mỗi chu kỳ clock (đếm lên hoặc đếm xuống).
Dưới đây là 1 bộ timer 16 bit cơ bản, nó có thể đếm từ 0 -> 65535 (216-1). Mỗi chu kỳ clock, giá trị của bộ đếm được tăng thêm 1. Và như các bạn có thể thấy, tần số của timer ftimer = tần số APB của timer / (Prescaler+1) (fAPBx / (PSC+1)).
Vì khi PSC = 0 nghĩa là hệ số chia 1:1.
Timer còn có thể hoạt động ở chế độ counter, nó sẽ nhận xung clock từ các tín hiệu ngoài. Có thể là từ 1 nút nhấn, bộ đếm sẽ được tăng sau mỗi lần bấm nút (sườn lên hoặc sườn xuống tùy vào cấu hình). Như các bạn có thể thấy, ở chế độ này tín hiệu của xung clock sẽ được điều khiển bằng nút nhấn và đồng thời PSC = 1 (bấm bao nhiêu thì đếm bấy nhiêu).
Ngoài ra còn các chế độ khác (ở đây mình chỉ liệt kê, sau này sẽ có bài viết riêng về các chế độ này):
· PWM Mode
· Advanced PWM Mode
· Output Compare Mode
· One-Pulse Mode
· Input Capture Mode
· Encoder Mode
· Timer Gate Mode
· Timer DMA Burst Mode
· IRTIM Infrared Mode
Dưới đây là sơ đồ khối timer của STM32f103C8T6.
Bao gồm 1 bộ đếm auto-reaload 16 bit. Có thể hoạt động ở các mode: timer, counter, PWM, input capture, output compare…
II. Giải thích các hàm mới dùng trong chương trình:
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
· Start timer ở chế độ mặc định
Tham số:
· htim: trỏ đến timer được start (htim1 -> htim4).
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
· Khi timer tràn, chương trình sẽ chạy các câu lệnh trong hàm này
Tham số:
· htim: trỏ đến timer sinh ra ngắt (htim1 -> htim4).
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
· Start timer ở chế độ ngắt
Tham số:
· htim: trỏ đến timer được start (htim1 -> htim4).
III. Lập trình timer trên STM32:
Ở phần này ta sẽ lấy 2 ví dụ về mode counter và timer để nháy led.
1. Ngắt Timer:
Bước 1: Khởi tạo project với cubeMx: Cấu hình clock, debug mode,.. như những phần trước.
Bước 2: Cấu hình timer (sử dụng timer 2)
· Clock suorce: chọn Internal clock.
· Prescaler: 35999
· Counter Period: 1999
*Giải thích: Vì tần số của bộ APBx là 72Mhz, Prescaler là hệ số chia, từ đó ta có được tần số của timer là 72Mhz/(3599+1) = 20Khz. Counter Period là giá trị đếm max, khi đếm hơn giá trị này thì sẽ bị tràn -> kích hoạt ngắt. Counter Period = 19999: đếm từ 0 -> 19999, khi đếm lên 20000 thì tràn, vậy chu kỳ tràn là 20000*(1/20Khz) = 1s.
· Vào NVIC để kích hoạt ngắt và set mức ưu tiên ngắt = 2.
Bước 3: Cấu hình các chân GPIO để nháy led. (sử dụng 1 led và 1 trở 330ohm đấu nối theo sơ đồ sau)
· Chân katot của led nối vào chân PB0
· Cấu hình chân theo như ảnh dưới.
Bước 4: Đặt tên project và GEN code.
Lập trình trên Keil C:
Cách 1: Dùng ngắt timer sau mỗi 1 giây.
Bước 1: Sử dụng HAL_TIM_Base_IT() để Khởi tạo ngắt Timer2.
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_TIM1_Init();
HAL_TIM_Base_Start_IT(&htim2);
while (1)
{
}
}
Bước 2: Cho nháy led trong hàm HAL_TIM_PeriodElapsedCallback().
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == htim2.Instance)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
}
}
Bước 3: nạp chương trình và chạy.
Cách 2: tạo hàm delay sử dụng timer.
Bước 1: tạo hàm delay 1ms.
void delay_1ms(void)
{
__HAL_TIM_SetCounter(&htim2, 0);
while (__HAL_TIM_GetCounter(&htim2)<20);
}
Bước 2: tạo hàm delay x ms.
void delay_ms(int time)
{
int i = 0;
for(i = 0; i < time; i++)
{
delay_1ms();
}
}
Bước 3: Khởi động timer và cho nháy led.
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_TIM1_Init();
HAL_TIM_Base_Start(&htim2);
while (1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
delay_ms(1000);
}
}
Bước 4: nạp Code và theo dõi kết quả
GIAO TIẾP UART LÀ GÌ
UART hay bộ thu-phát không đồng bộ đa năng là một trong những hình thức giao tiếp kỹ thuật số giữa thiết bị với thiết bị đơn giản và lâu đời nhất. Bạn có thể tìm thấy các thiết bị UART trong một phần của mạch tích hợp (IC) hoặc dưới dạng các thành phần riêng lẻ. Các UART giao tiếp giữa hai nút riêng biệt bằng cách sử dụng một cặp dẫn và một nối đất chung.
Hướng dẫn giao tiếp UART
Vì nó là thiết lập phổ quát nên chúng ta có thể định cấu hình UART để hoạt động với nhiều loại giao thức nối tiếp khác nhau. UART đã được điều chỉnh thành các đơn vị chip đơn vào đầu những năm 1970, bắt đầu với Western Digital’s WD1402A.
Trong một sơ đồ giao tiếp UART:
Chân Tx (truyền) của một chip kết nối trực tiếp với chân Rx (nhận) của chip kia và ngược lại. Thông thường, quá trình truyền sẽ diễn ra ở 3.3V hoặc 5V. UART là một giao thức một master, một slave, trong đó một thiết bị được thiết lập để giao tiếp với duy nhất một thiết bị khác.
Dữ liệu truyền đến và đi từ UART song song với thiết bị điều khiển (ví dụ: CPU).
Khi gửi trên chân Tx, UART đầu tiên sẽ dịch thông tin song song này thành nối tiếp và truyền đến thiết bị nhận.
UART thứ hai nhận dữ liệu này trên chân Rx của nó và biến đổi nó trở lại thành song song để giao tiếp với thiết bị điều khiển của nó.
UART truyền dữ liệu nối tiếp, theo một trong ba chế độ:
– Full duplex: Giao tiếp đồng thời đến và đi từ mỗi master và slave
– Half duplex: Dữ liệu đi theo một hướng tại một thời điểm
– Simplex: Chỉ giao tiếp một chiều
Dữ liệu truyền qua UART được tổ chức thành các gói. Mỗi gói chứa 1 bit bắt đầu, 5 đến 9 bit dữ liệu (tùy thuộc vào UART), một bit chẵn lẻ tùy chọn và 1 hoặc 2 bit dừng.
Bit bắt đầu
Đường truyền dữ liệu UART thường được giữ ở mức điện áp cao khi không truyền dữ liệu. Để bắt đầu truyền dữ liệu, UART truyền sẽ kéo đường truyền từ mức cao xuống mức thấp trong một chu kỳ clock. Khi UART nhận phát hiện sự chuyển đổi điện áp cao xuống thấp, nó bắt đầu đọc các bit trong khung dữ liệu ở tần số của tốc độ truyền.
Khung dữ liệu
Khung dữ liệu chứa dữ liệu thực tế được chuyển. Nó có thể dài từ 5 bit đến 8 bit nếu sử dụng bit chẵn lẻ. Nếu không sử dụng bit chẵn lẻ, khung dữ liệu có thể dài 9 bit. Trong hầu hết các trường hợp, dữ liệu được gửi với bit ít quan trọng nhất trước tiên.
Module điện tử 932*50
Bit chẵn lẻ
Bit chẵn lẻ là một cách để UART nhận cho biết liệu có bất kỳ dữ liệu nào đã thay đổi trong quá trình truyền hay không. Bit có thể bị thay đổi bởi bức xạ điện từ, tốc độ truyền không khớp hoặc truyền dữ liệu khoảng cách xa. Sau khi UART nhận đọc khung dữ liệu, nó sẽ đếm số bit có giá trị là 1 và kiểm tra xem tổng số là số chẵn hay lẻ. Nếu bit chẵn lẻ là 0 (tính chẵn), thì tổng các bit 1 trong khung dữ liệu phải là một số chẵn. Nếu bit chẵn lẻ là 1 (tính lẻ), các bit 1 trong khung dữ liệu sẽ tổng thành một số lẻ. Khi bit chẵn lẻ khớp với dữ liệu, UART sẽ biết rằng quá trình truyền không có lỗi. Nhưng nếu bit chẵn lẻ là 0 và tổng là số lẻ; hoặc bit chẵn lẻ là 1 và tổng số là chẵn, UART sẽ biết rằng các bit trong khung dữ liệu đã thay đổi.
Bit dừng
Để báo hiệu sự kết thúc của gói dữ liệu, UART gửi sẽ điều khiển đường truyền dữ liệu từ điện áp thấp đến điện áp cao trong ít nhất khoảng 2 bit.
Có thể tóm tắt lại như sau. Quá trình truyền dữ liệu diễn ra dưới dạng các gói dữ liệu, bắt đầu bằng một bit bắt đầu, đường mức cao được kéo xuống đất. Sau bit bắt đầu, năm đến chín bit dữ liệu truyền trong khung dữ liệu của gói, theo sau là bit chẵn lẻ tùy chọn để xác minh việc truyền dữ liệu thích hợp. Cuối cùng, một hoặc nhiều bit dừng được truyền ở nơi đường đặt ở mức cao. Như vậy là kết thúc một gói.
UART là giao thức không đồng bộ, do đó không có đường clock nào điều chỉnh tốc độ truyền dữ liệu. Người dùng phải đặt cả hai thiết bị để giao tiếp ở cùng tốc độ. Tốc độ này được gọi là tốc độ truyền, được biểu thị bằng bit trên giây hoặc bps. Tốc độ truyền thay đổi đáng kể, từ 9600 baud đến 115200 và hơn nữa. Tốc độ truyền giữa UART truyền và nhận chỉ có thể chênh lệch khoảng 10% trước khi thời gian của các bit bị lệch quá xa.
Mặc dù UART là giao thức cũ và chỉ có thể giao tiếp giữa một master và slave duy nhất, nhưng nó dễ thiết lập và cực kỳ linh hoạt. Do đó, bạn có thể gặp nó khi làm việc với các dự án vi điều khiển. UART có thể là một phần của hệ thống mà bạn sử dụng hàng ngày, mà có thể bạn không nhận ra.
Ưu và nhược điểm của UART
Không có giao thức truyền thông nào là hoàn hảo, nhưng UART thực hiện khá tốt công việc của nó. Dưới đây là một số ưu và nhược điểm để giúp bạn quyết định xem nó có phù hợp với nhu cầu của bạn hay không:
Ưu điểm
Chỉ sử dụng hai dây
Không cần tín hiệu clock
Có một bit chẵn lẻ để cho phép kiểm tra lỗi
Cấu trúc của gói dữ liệu có thể được thay đổi miễn là cả hai bên đều được thiết lập cho nó
Phương pháp có nhiều tài liệu và được sử dụng rộng rãi
Nhược điểm
Kích thước của khung dữ liệu được giới hạn tối đa là 9 bit
Không hỗ trợ nhiều hệ thống slave hoặc nhiều hệ thống master
Tốc độ truyền của mỗi UART phải nằm trong khoảng 10% của nhau
CHUẨN GIAO TIẾP I2C LÀ GÌ
Giới thiệu giao tiếp I2C
I2C kết hợp các tính năng tốt nhất của SPI và UART. Với I2C, bạn có thể kết nối nhiều slave với một master duy nhất (như SPI) và bạn có thể có nhiều master điều khiển một hoặc nhiều slave. Điều này thực sự hữu ích khi bạn muốn có nhiều hơn một vi điều khiển ghi dữ liệu vào một thẻ nhớ duy nhất hoặc hiển thị văn bản trên một màn hình LCD.
Giống như giao tiếp UART, I2C chỉ sử dụng hai dây để truyền dữ liệu giữa các thiết bị:
SDA (Serial Data) – đường truyền cho master và slave để gửi và nhận dữ liệu.
SCL (Serial Clock) – đường mang tín hiệu xung nhịp.
I2C là một giao thức truyền thông nối tiếp, vì vậy dữ liệu được truyền từng bit dọc theo một đường duy nhất (đường SDA).
Giống như SPI, I2C là đồng bộ, do đó đầu ra của các bit được đồng bộ hóa với việc lấy mẫu các bit bởi một tín hiệu xung nhịp được chia sẻ giữa master và slave. Tín hiệu xung nhịp luôn được điều khiển bởi master.
Cách hoạt động của I2C
Với I2C, dữ liệu được truyền trong các tin nhắn. Tin nhắn được chia thành các khung dữ liệu. Mỗi tin nhắn có một khung địa chỉ chứa địa chỉ nhị phân của địa chỉ slave và một hoặc nhiều khung dữ liệu chứa dữ liệu đang được truyền. Thông điệp cũng bao gồm điều kiện khởi động và điều kiện dừng, các bit đọc / ghi và các bit ACK / NACK giữa mỗi khung dữ liệu:
Điều kiện khởi động: Đường SDA chuyển từ mức điện áp cao xuống mức điện áp thấp trước khi đường SCL chuyển từ mức cao xuống mức thấp.
Điều kiện dừng: Đường SDA chuyển từ mức điện áp thấp sang mức điện áp cao sau khi đường SCL chuyển từ mức thấp lên mức cao.
Khung địa chỉ: Một chuỗi 7 hoặc 10 bit duy nhất cho mỗi slave để xác định slave khi master muốn giao tiếp với nó.
Bit Đọc / Ghi: Một bit duy nhất chỉ định master đang gửi dữ liệu đến slave (mức điện áp thấp) hay yêu cầu dữ liệu từ nó (mức điện áp cao).
Bit ACK / NACK: Mỗi khung trong một tin nhắn được theo sau bởi một bit xác nhận / không xác nhận. Nếu một khung địa chỉ hoặc khung dữ liệu được nhận thành công, một bit ACK sẽ được trả lại cho thiết bị gửi từ thiết bị nhận.
Địa chỉ
I2C không có các đường Slave Select như SPI, vì vậy cần một cách khác để cho slave biết rằng dữ liệu đang được gửi đến slave này chứ không phải slave khác. Nó thực hiện điều này bằng cách định địa chỉ. Khung địa chỉ luôn là khung đầu tiên sau bit khởi động trong một tin nhắn mới.
Master gửi địa chỉ của slave mà nó muốn giao tiếp với mọi slave được kết nối với nó. Sau đó, mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó. Nếu địa chỉ phù hợp, nó sẽ gửi lại một bit ACK điện áp thấp cho master. Nếu địa chỉ không khớp, slave không làm gì cả và đường SDA vẫn ở mức cao.
Bit đọc / ghi
Khung địa chỉ bao gồm một bit duy nhất ở cuối tin nhắn cho slave biết master muốn ghi dữ liệu vào nó hay nhận dữ liệu từ nó. Nếu master muốn gửi dữ liệu đến slave, bit đọc / ghi ở mức điện áp thấp. Nếu master đang yêu cầu dữ liệu từ slave, thì bit ở mức điện áp cao.
Module điện tử 932*50
Khung dữ liệu
Sau khi master phát hiện bit ACK từ slave, khung dữ liệu đầu tiên đã sẵn sàng được gửi.
Khung dữ liệu luôn có độ dài 8 bit và được gửi với bit quan trọng nhất trước. Mỗi khung dữ liệu ngay sau đó là một bit ACK / NACK để xác minh rằng khung đã được nhận thành công. Bit ACK phải được nhận bởi master hoặc slave (tùy thuộc vào cái nào đang gửi dữ liệu) trước khi khung dữ liệu tiếp theo có thể được gửi.
Sau khi tất cả các khung dữ liệu đã được gửi, master có thể gửi một điều kiện dừng cho slave để tạm dừng quá trình truyền. Điều kiện dừng là sự chuyển đổi điện áp từ thấp lên cao trên đường SDA sau khi chuyển tiếp từ thấp lên cao trên đường SCL , với đường SCL vẫn ở mức cao.
Các bước truyền dữ liệu I2C
Master gửi điều kiện khởi động đến mọi slave được kết nối bằng cách chuyển đường SDA từ mức điện áp cao sang mức điện áp thấp trước khi chuyển đường SCL từ mức cao xuống mức thấp.
Master gửi cho mỗi slave địa chỉ 7 hoặc 10 bit của slave mà nó muốn giao tiếp, cùng với bit đọc / ghi.
Mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó. Nếu địa chỉ trùng khớp, slave sẽ trả về một bit ACK bằng cách kéo dòng SDA xuống thấp cho một bit. Nếu địa chỉ từ master không khớp với địa chỉ của slave, slave rời khỏi đường SDA cao.
Master gửi hoặc nhận khung dữ liệu.
Sau khi mỗi khung dữ liệu được chuyển, thiết bị nhận trả về một bit ACK khác cho thiết bị gửi để xác nhận đã nhận thành công khung.
Để dừng truyền dữ liệu, master gửi điều kiện dừng đến slave bằng cách chuyển đổi mức cao SCL trước khi chuyển mức cao SDA.
Một master với nhiều slave
Vì I2C sử dụng định địa chỉ nên nhiều slave có thể được điều khiển từ một master duy nhất. Với địa chỉ 7 bit sẽ có 128 (2 mũ 7) địa chỉ duy nhất. Việc sử dụng địa chỉ 10 bit không phổ biến, nhưng nó cung cấp 1.024 (2 mũ 10) địa chỉ duy nhất. Để kết nối nhiều slave đến một master duy nhất, bạn có thể đấu dây như thế này, với điện trở kéo lên 4,7K Ohm kết nối đường SDA và SCL với Vcc:
Nhiều master với nhiều slave
Nhiều master có thể được kết nối với một slave hoặc nhiều slave. Sự cố với nhiều master trong cùng một hệ thống xảy ra khi hai master cố gắng gửi hoặc nhận dữ liệu cùng một lúc qua đường SDA. Để giải quyết vấn đề này, mỗi master cần phải phát hiện xem đường SDA thấp hay cao trước khi truyền tin nhắn. Nếu đường SDA thấp, điều này có nghĩa là một master khác có quyền điều khiển bus và master đó phải đợi để gửi tin nhắn. Nếu đường SDA cao thì có thể truyền tin nhắn an toàn. Để kết nối nhiều master với nhiều slave, hãy sử dụng sơ đồ sau, với các điện trở kéo lên 4,7K Ohm kết nối các đường SDA và SCL với Vcc:
Ưu điểm và nhược điểm của I2C
Có rất nhiều điều ở I2C có thể khiến nó nghe có vẻ phức tạp so với các giao thức khác, nhưng có một số lý do chính đáng khiến bạn có thể muốn hoặc không muốn sử dụng I2C để kết nối với một thiết bị cụ thể:
Ưu điểm
Chỉ sử dụng hai dây
Hỗ trợ nhiều master và nhiều slave
Bit ACK / NACK xác nhận mỗi khung được chuyển thành công
Phần cứng ít phức tạp hơn so với UART
Giao thức nổi tiếng và được sử dụng rộng rãi
Nhược điểm
Tốc độ truyền dữ liệu chậm hơn SPI
Kích thước của khung dữ liệu bị giới hạn ở 8 bit
Cần phần cứng phức tạp hơn để triển khai so với SPI
CHUẨN GIAO TIẾP SPI LÀ GÌ
Giới thiệu về giao tiếp SPI
SPI là một giao thức giao tiếp phổ biến được sử dụng bởi nhiều thiết bị khác nhau. Ví dụ, module thẻ SD, module đầu đọc thẻ RFID và bộ phát / thu không dây 2,4 GHz đều sử dụng SPI để giao tiếp với vi điều khiển.
Lợi ích duy nhất của SPI là dữ liệu có thể được truyền mà không bị gián đoạn. Bất kỳ số lượng bit nào cũng có thể được gửi hoặc nhận trong một luồng liên tục. Với I2C và UART, dữ liệu được gửi dưới dạng gói, giới hạn ở một số bit cụ thể. Điều kiện bắt đầu và dừng xác định điểm bắt đầu và kết thúc của mỗi gói, do đó dữ liệu bị gián đoạn trong quá trình truyền.
Các thiết bị giao tiếp qua SPI có quan hệ master – slave. Master là thiết bị điều khiển (thường là vi điều khiển), còn slave (thường là cảm biến, màn hình hoặc chip nhớ) nhận lệnh từ master. Cấu hình đơn giản nhất của SPI là hệ thống một slave, một master duy nhất, nhưng một master có thể điều khiển nhiều hơn một slave.
MOSI (đầu ra master / đầu vào slave) – đường truyền cho master gửi dữ liệu đến slave.
MISO (đầu vào master / đầu ra slave) – đường cho slave gửi dữ liệu đến master.
SCLK (clock) – đường cho tín hiệu xung nhịp.
SS / CS (Slave Select / Chip Select) – đường cho master chọn slave nào để gởi tín hiệu.
Cách hoạt động cuả SPI
Xung nhịp
Tín hiệu xung nhịp đồng bộ hóa đầu ra của các bit dữ liệu từ master để lấy mẫu các bit của slave. Một bit dữ liệu được truyền trong mỗi chu kỳ xung nhịp, do đó tốc độ truyền dữ liệu được xác định bởi tần số của tín hiệu xung nhịp. Giao tiếp SPI được khởi tạo bởi master kể từ khi master cấu hình và tạo ra tín hiệu xung nhịp.
Bất kỳ giao thức giao tiếp nào mà các thiết bị chia sẻ tín hiệu xung nhịp thì đều được gọi là đồng bộ. SPI là một giao thức giao tiếp đồng bộ. Ngoài ra còn có các phương thức không đồng bộ không sử dụng tín hiệu xung nhịp. Ví dụ, trong giao tiếp UART, cả hai bên đều được đặt thành tốc độ truyền được cấu hình sẵn để chỉ ra tốc độ và thời gian truyền dữ liệu.
Tín hiệu xung nhịp trong SPI có thể được sửa bằng cách sử dụng các thuộc tính của phân cực xung nhịp và pha xung nhịp. Hai thuộc tính này làm việc cùng nhau để xác định khi nào các bit được xuất ra và khi được lấy mẫu. Phân cực xung nhịp có thể được thiết lập bởi master để cho phép các bit được xuất ra và lấy mẫu trên cạnh lên hoặc xuống của chu kỳ xung nhịp. Pha xung nhịp có thể được đặt để đầu ra và lấy mẫu xảy ra trên cạnh đầu tiên hoặc cạnh thứ hai của chu kỳ xung nhịp, bất kể nó đang tăng hay giảm.
Slave Select
Master có thể chọn slave mà nó muốn giao tiếp bằng cách đặt đường CS / SS của slave ở mức điện áp thấp. Ở trạng thái idle, không truyền tải, dòng slave select được giữ ở mức điện áp cao. Nhiều chân CS / SS có thể có sẵn trên thiết bị master cho phép đấu dây song song nhiều slave. Nếu chỉ có một chân CS / SS, nhiều slave có thể được kết nối với master bằng cách nối chuỗi.
Nhiều slave
Module điện tử 932*50
SPI có thể thiết lập để hoạt động với một master và một slave duy nhất, và nó có thể được thiết lập với nhiều slave do một master duy nhất điều khiển. Có hai cách để kết nối nhiều slave với master. Nếu master có nhiều chân slave select, các slave có thể được nối dây song song như thế này:
Nếu chỉ có một chân slave select, các slave có thể được nối chuỗi như sau:
MOSI và MISO
Master gửi dữ liệu đến slave từng bit, nối tiếp qua đường MOSI. Slave nhận dữ liệu được gửi từ master tại chân MOSI. Dữ liệu được gửi từ master đến slave thường được gửi với bit quan trọng nhất trước.
Slave cũng có thể gửi dữ liệu trở lại master thông qua đường MISO nối tiếp. Dữ liệu được gửi từ slave trở lại master thường được gửi với bit ít quan trọng nhất trước.
Các bước truyền dữ liệu SPI
Master ra tín hiệu xung nhịp.
Master chuyển chân SS / CS sang trạng thái điện áp thấp, điều này sẽ kích hoạt slave.
Master gửi dữ liệu từng bit một tới slave dọc theo đường MOSI. Slave đọc các bit khi nó nhận được.
Nếu cần phản hồi, slave sẽ trả lại dữ liệu từng bit một cho master dọc theo đường MISO. Master đọc các bit khi nó nhận được.
Ưu và nhược điểm của SPI
Có một số ưu và nhược điểm khi sử dụng SPI và nếu được lựa chọn giữa các giao thức giao tiếp khác nhau, bạn nên biết khi nào sử dụng SPI theo yêu cầu của dự án:
Ưu điểm
Không có bit bắt đầu và dừng, vì vậy dữ liệu có thể được truyền liên tục mà không bị gián đoạn
Không có hệ thống định địa chỉ slave phức tạp như I2C
Tốc độ truyền dữ liệu cao hơn I2C (nhanh gần gấp đôi)
Các đường MISO và MOSI riêng biệt, vì vậy dữ liệu có thể được gửi và nhận cùng một lúc
Nhược điểm
Sử dụng bốn dây (I2C và UART sử dụng hai)
Không xác nhận dữ liệu đã được nhận thành công (I2C có điều này)
Không có hình thức kiểm tra lỗi như bit chẵn lẻ trong UART
Chỉ cho phép một master duy nhất
GPIO là gì?
GPIO là viết tắt của General Purpose Input Output là một trong những thuật ngữ phổ biến nhất mà bạn có thể đã gặp. Khi bạn bắt đầu công việc trong một hệ thống nhúng, đây là từ đầu tiên bạn phải nghe nói đến. Nhưng bạn có nghĩ rằng bạn đã nắm vững tất cả các khái niệm liên quan đến GPIO? Tín hiệu trên các chân GPIO cho phép chúng ta đạt được chức năng cuối của mình và cho phép chúng ta nói chuyện với thế giới bên ngoài. Trong bài viết này, tôi sẽ đi sâu về các khái niệm khác nhau liên quan đến GPIO. Ở cuối bài viết này, bạn sẽ có thể trả lời gpio là gì, các loại GPIO có thể được sử dụng là gì, cách cấu hình gpio để tiết kiệm điện năng, ảnh hưởng của tốc độ GPIO đến phát xạ EMI của bo mạch, khóa gpio để ngăn việc cấu hình lại ngẫu nhiên,… Là một kỹ sư phần mềm, bạn phải nắm vững các khái niệm này vì hầu hết công việc của bạn sẽ là viết mã bare metal hoặc mã driver và là một nhà phát triển ứng dụng nhúng, bạn nên biết các khái niệm này theo thứ tự để hiểu các chức năng cốt lõi được cung cấp bởi GPIO API và nếu có gì đó bị hỏng, bạn có thể nhanh chóng sửa chữa ở cấp driver.
GPIO là gì?
GPIO là một chân tín hiệu kỹ thuật số trên mạch tích hợp mà hành vi của nó (đầu vào hoặc đầu ra) được điều khiển bởi phần mềm ứng dụng. GPIO về cơ bản là một chân có thể được cấu hình làm đầu vào hoặc đầu ra. Nếu chúng ta cấu hình chân như một đầu ra, chúng ta có thể ghi 0 (LOW) hoặc 3,3 / 5 V (VDD) vào chân đó. Khi được cấu hình làm đầu vào, chúng ta có thể đọc tín hiệu trên chân đó. GPIO là giao diện tiêu chuẩn mà qua đó vi điều khiển có thể giao tiếp với thế giới bên ngoài. Nó có thể được sử dụng để đọc các giá trị từ cảm biến analog hoặc kỹ thuật số, điều khiển đèn LED, điều khiển đồng hồ cho giao tiếp I2C,…
Bản đồ bộ nhớ của ngoại vi GPIO
Như chúng ta đã biết rằng vi điều khiển hiện đại sử dụng kỹ thuật bản đồ bộ nhớ để ánh xạ tất cả các thiết bị ngoại vi trong một không gian bộ nhớ thống nhất. Vì bộ điều khiển STM32F446RE là bộ vi điều khiển dựa trên ARM Cortex M4 nên không gian bộ nhớ cho các thiết bị ngoại vi được ARM dành riêng như thể hiện trong hình:
Đị
a chỉ bộ nhớ trong khoảng từ 0x40000000 đến 0x600000000 có thể được nhà cung cấp vi điều khiển sử dụng để ánh xạ các thiết bị ngoại vi khác nhau của họ. Vùng này được chia thành nhiều vùng phụ, mỗi vùng được ánh xạ tới một thiết bị ngoại vi cụ thể, như thể hiện trong hình bên dưới. Từ góc độ lập trình viên, chúng ta cần tìm ra địa chỉ mà một thiết bị ngoại vi cụ thể được ánh xạ trong dải địa chỉ này. Datasheet của vi điều khiển sẽ cung cấp địa chỉ một thiết bị ngoại vi cụ thể được ánh xạ. Trong trường hợp của chúng ta, như chúng ta có thể thấy trong hình bên dưới, thiết bị ngoại vi GPIO được ánh xạ trong dải địa chỉ 0x40020000 đến 0x40021FFF. Đây cũng là vùng băng tần bit (chúng ta sẽ tìm hiểu về điều này sau).
Như chúng ta thấy, GPIO ngoại vi được chia thành GPIO A, GPIO B, GPIO C, GPIO D, GPIO E, GPIO F, GPIO G, GPIO H và mỗi cổng chứa tối đa 16 chân. Ngoại vi GPIOA được ánh xạ từ địa chỉ 0x40020000 đến 0x400203FF và nó quản lý tất cả các chân kết nối với PORT-A.
Mẫu vi xử lý ARM Cortex M-4 có bus dữ liệu rộng 32 bit, bus địa chỉ và tập thanh ghi rộng 32 bit. Trên thực tế, mỗi từ có kích thước 32-bit. Biết được bus dữ liệu, bus địa chỉ và chiều rộng thanh ghi là rất quan trọng vì nó sẽ giúp hiểu mọi thứ ở cấp độ rất thấp (cơ bản) tức là cấp độ trình điều khiển. Vì chúng ta biết rằng kích thước từ là 4 byte, do đó chúng ta có thể nói rằng mọi thanh ghi của ngoại vi GPIO dài 4 byte.
Cho đến bây giờ, chúng ta đã tìm ra địa chỉ cơ sở của các thiết bị ngoại vi GPIO. Đó là điều đầu tiên bạn sẽ làm với tư cách là một lập trình viên bất cứ khi nào bạn định lập trình bất kỳ thiết bị ngoại vi nào là tìm địa chỉ cơ sở của thiết bị ngoại vi. Bây giờ, chúng ta cần biết địa chỉ thanh ghi chính xác để lập trình các thanh ghi. Trước khi bắt đầu lập trình các thanh ghi, chúng ta phải hiểu mục đích của các thanh ghi này. Hãy đi sâu vào tập hợp thanh ghi GPIO!
Thanh ghi GPIO
Tất cả các GPIO có trong vi điều khiển được nhóm lại thành Cổng X trong đó X là A, B, C, D …
Mỗi cổng trong STM32F446RE bao gồm 16 chân. Mỗi chân có nhiều thanh ghi khác nhau được liên kết với nó, bằng cách thay đổi nội dung của các thanh ghi, chúng ta có thể kiểm soát hành vi của một chân cụ thể.
Trong STM32F446RE, hành vi của mỗi chân có thể được kiểm soát bằng cách sử dụng:
Thanh ghi chế độ GPIO
Thanh ghi loại đầu ra GPIO
Thanh ghi tốc độ GPIO
Thanh ghi kéo lên / kéo xuống GPIO
Thanh ghi dữ liệu đầu vào GPIO
Thanh ghi dữ liệu đầu ra GPIO
Thanh ghi set / reset bit GPIO
Thanh ghi khóa cấu hình GPIO
Thanh ghi chức năng thay thế GPIO
Chúng ta sẽ xem xét các chức năng được phục vụ bởi từng thanh ghi này trong bài viết này. Hiểu chức năng của các thanh ghi này là rất quan trọng vì nó sẽ giúp bạn kiểm soát chân theo yêu cầu của bạn. Ngoài ra, nếu bạn muốn viết driver GPIO của riêng mình, bạn sẽ chủ yếu viết các hàm cốt lõi để lập trình các thanh ghi này và cung cấp API trừu tượng cho các ứng dụng người dùng sử dụng driver của bạn.
Chi tiết về thanh ghi GPIO
Thanh ghi chế độ GPIO – Thanh ghi này được sử dụng để chọn chế độ của chân cắm. Có bốn chế độ có thể được lập trình vào thanh ghi này: Chế độ đầu vào, Chế độ đầu ra mục đích chung, Chế độ chức năng thay thế và Chế độ analog. Khi phần mềm muốn đọc bất kỳ dữ liệu nào từ bên ngoài như cảm biến, nó đã định cấu hình chân cắm làm đầu vào. Mỗi chân có một bộ đệm đầu vào tương ứng mà phần mềm có thể đọc được khi chân đó đang hoạt động ở Chế độ INPUT. Chế độ Đầu ra Mục đích Chung được sử dụng khi chúng ta muốn ghi giá trị THẤP hoặc CAO vào chân. Ví dụ: nếu chúng ta kết nối một đèn LED với một chân và chúng ta muốn bật đèn LED, phần mềm sẽ cấu hình chân đó là đầu ra và ghi HIGH (VDD) vào chân. Mỗi chân có một bộ đệm đầu ra tương ứng có thể được ghi bởi phần mềm, trong trường hợp này, chúng ta đang ghi 1 vào bộ đệm đầu ra. Chế độ chức năng thay thế được sử dụng khi chúng ta muốn gán một chân cụ thể cho bất kỳ thiết bị ngoại vi nào khác. Hãy chia nhỏ ra một cách đơn giản dễ hiểu với một ví dụ đơn giản. Ví dụ: Nếu bạn muốn sử dụng giao tiếp I2C, bạn sẽ cần hai chân là SDA và SCL. Bạn cần chọn một số chân cụ thể do nhà cung cấp vi điều khiển cung cấp, có thể được sử dụng như dòng I2C SDA và SCL. Bạn có thể lấy thông tin này từ datasheet thiết bị. Trong bảng dưới đây, bạn có thể thấy rằng đối với SCL ngoại vi I2C1, bạn có thể sử dụng Cổng B Chân 6 trong Chức năng Thay thế (AF) 4.
Từ sơ đồ trên, bạn có thể thấy rằng nhà sản xuất thiết bị đã ánh xạ một số chân cụ thể nhất định sẽ được sử dụng bởi các thiết bị ngoại vi khác nhau. Do đó, trong ví dụ của chúng ta, Cổng B Chân 6 nên được cấu hình ở chế độ chức năng Thay thế để nó có thể được sử dụng bởi thiết bị ngoại vi I2C1. Nếu bạn muốn gán các chân cho thiết bị ngoại vi ADC (Analog to Digital Converter) hoặc DAC (Digital to Analog convertor), bạn nên định cấu hình chế độ là chế độ Analog.
Thanh ghi loại đầu ra GPIO – Thanh ghi này được viết bởi phần mềm để cấu hình loại đầu ra của chân. Có thể có hai loại đầu ra: Đầu ra push-pull và Đầu ra open-drain. Để hiểu sự khác biệt giữa đầu ra push-pull và đầu ra open-drain, chúng ta cần hiểu cách chân gpio được thực hiện về mặt cổng transistor. Là một kỹ sư nhúng, bạn nên hiểu rõ về sự khác biệt giữa hai cấu hình này.
Hãy tìm hiểu cách thức hoạt động của chế độ đầu vào và đầu ra ở cấp độ mạch. Hình dưới đây cho thấy cách thực hiện đơn giản của chân GPIO trong vi điều khiển.
Mỗi chân bao gồm hai bộ đệm – bộ đệm đầu vào và đầu ra cùng với một dòng enable. Khi dòng enable là 0, bộ đệm đầu ra được kích hoạt và bộ đệm đầu vào sẽ bị vô hiệu hóa. Bộ đệm đầu ra về cơ bản là hai transistor CMOS được kết nối theo kiểu bên dưới.
Khi chúng ta ghi 1 từ phần mềm, inverter đầu tiên sẽ đặt nó là 0 và mạch PMOS (T1) sẽ hoạt động (NMOS (T2) sẽ bị vô hiệu hóa) do đó chân sẽ được kéo lên VCC. Khi chúng ta ghi 0 từ phần mềm, biến tần đầu tiên sẽ đặt nó là 1 và NMOS sẽ được kích hoạt do đó chân sẽ được kéo xuống 0. Đây là cấu hình mặc định của chân GPIO và còn được gọi là đầu ra push-pull.
Nếu chúng ta đặt dòng enable là 1, thì chân sẽ được cấu hình ở chế độ đầu vào bằng cách kích hoạt bộ đệm đầu vào. Bộ đệm đầu vào bao gồm hai transistor CMOS được kết nối theo kiểu dưới đây:
Khi chân đọc 1 (CAO), inverter sẽ đảo mức logic cao này về 0 và transistor T1 PMOS sẽ BẬT. Vì nó được kéo lên VCC, phần mềm đọc logic là 1. Khi chân đọc 0 (LOW), inverter đảo mức logic thấp này thành 1 và T2 NMOS sẽ được kích hoạt và nó sẽ được kéo xuống 0, do đó phần mềm đọc 0. Dòng kích hoạt này được cấu hình bởi phần mềm.
Trong chế độ open-drain đầu ra, transistor PMOS trên cùng không có mặt. Sơ đồ trông giống như sau:
Khi T2 bật, chân sẽ được kéo xuống mức thấp (gnd). Khi T2 tắt, drain (D) của transistor sẽ nổi hoặc mở, do đó đầu ra sẽ nổi. Do đó, cấu hình open-drain chỉ có thể kéo chân xuống, không thể kéo chân lên. Vì open-drain chỉ có hai mức logic, logic 0 hoặc nổi, bạn cần cung cấp khả năng kéo lên cho chân này bằng cách kích hoạt điện trở kéo lên bên trong (có thể được thực hiện thông qua thanh ghi GPIO) hoặc đưa điện trở kéo lên bên ngoài. Trong một số thiết bị ngoại vi, GPIO được định cấu hình là open-drain, ví dụ, thiết bị ngoại vi I2C định cấu hình các chân SDA và SCL trong cấu hình open-drain.
Thanh ghi tốc độ GPIO – Tốc độ này không liên quan gì đến tần số chuyển mạch. Tốc độ nhanh hơn không có nghĩa là tốc độ chuyển đổi GPIO cao hơn (số lần một chân chuyển từ BẬT sang TẮT theo đơn vị thời gian). Tham số tốc độ này chỉ đơn giản xác định tốc độ quay của GPIO, tức là tốc độ nó có thể đi từ mức 0V đến mức VDD và ngược lại.
Làn sóng màu đỏ là đường cong chuyển đổi lý tưởng từ 0 sang 1 nhưng trong thực tế, chúng ta chỉ nhận được làn sóng màu xanh lá cây. Tăng thông số tốc độ sẽ di chuyển đường cong màu xanh lá cây sang trái sang đường màu đỏ. Lưu ý: Việc điều khiển chân ở tốc độ cao hơn cũng ảnh hưởng đến sự phát xạ EMI tổng thể của bo mạch.
Thanh ghi kéo lên / kéo xuống GPIO – Sử dụng thanh ghi này, chúng ta có thể bật / tắt điện trở kéo lên và kéo xuống của một chân nhất định.
Thanh ghi dữ liệu đầu vào GPIO – Chúng ta có thể sử dụng thanh ghi này để đọc trạng thái đầu vào (logic) trên chân. Tuy nhiên, nó chỉ có thể được đọc dưới dạng 4 byte, do đó chúng ta cần phải che tất cả các bit khác để trích xuất bit quan tâm của chúng ta.
Thanh ghi dữ liệu đầu ra GPIO – Thanh ghi này được sử dụng để thiết lập / thiết lập lại logic trên chân đầu ra. Để đẩy chân lên cao, phần mềm ghi 1 vào bit cụ thể của thanh ghi này tương ứng với chân cụ thể.
Thanh ghi set / reset bit GPIO – Thanh ghi này cho phép ứng dụng thiết lập và đặt lại từng bit riêng lẻ trong thanh ghi dữ liệu đầu ra GPIO. Sử dụng thanh ghi này để thay đổi giá trị của các bit riêng lẻ trong thanh ghi dữ liệu đầu ra là một hiệu ứng “một lần” tức là nó cung cấp một cách thực hiện xử lý theo từng bit nguyên tử.
Thanh ghi khóa cấu hình GPIO – Thanh ghi này được sử dụng để khóa cấu hình của chân port cho đến lần thiết lập lại tiếp theo. Có một trình tự cụ thể trong đó thanh ghi này cần được ghi để kích hoạt khóa.
Thanh ghi chức năng thay thế GPIO – Thanh ghi này được sử dụng để định cấu hình các chân gpio làm các chức năng thay thế, tức là các chân này có thể được sử dụng bởi các thiết bị ngoại vi khác trong bộ vi điều khiển. Tuy nhiên, một chân cụ thể chỉ có thể được liên kết với một thiết bị ngoại vi tại một thời điểm. Hầu hết các chân I / O được kết nối với các thiết bị ngoại vi trên bo mạch thông qua một bộ ghép kênh cho phép chỉ một chức năng thay thế của một thiết bị ngoại vi được kết nối với một chân I / O tại một thời điểm, đảm bảo rằng không thể có xung đột giữa các thiết bị ngoại vi chia sẻ cùng một chân I / O . Mỗi chân I / O có một bộ ghép kênh với 16 đầu vào chức năng thay thế (AF0 đến AF15) có thể được chọn bằng cách sử dụng thanh ghi chức năng thay thế GPIO. Sau khi đặt lại, tất cả I / O được kết nối với chức năng thay thế AF0 của hệ thống, đây là hoạt động mặc định. Các chức năng thay thế của thiết bị ngoại vi được ánh xạ từ AF1 đến AF13.
Vì vậy, nếu bạn muốn sử dụng một chân cụ thể làm thiết bị ngoại vi I2C1 (miễn là chân đó hỗ trợ chức năng I2C1), bạn sẽ chọn AF4 bằng cách viết thanh ghi chức năng thay thế gpio này với giá trị tương ứng.
Làm thế nào để truy cập thanh ghi GPIO trong chương trình?
Khi bạn đã xác định được địa chỉ cơ sở của thiết bị ngoại vi GPIO nhất định và hiểu các chức năng của các thanh ghi khác nhau để định cấu hình các chân, bây giờ chúng ta có thể tiếp tục và hiểu cách truy cập và lập trình các thanh ghi này. Xin lưu ý rằng mỗi port sẽ có một tập hợp tất cả 9 thanh ghi mà chúng ta đã thảo luận ở trên.
Giả sử bạn muốn lập trình thanh ghi chế độ của GPIOA. Một cách để lập trình các thanh ghi này là tìm ra địa chỉ chính xác của thanh ghi chế độ GPIOA và lấy một con trỏ đến địa chỉ thực đó, tham khảo con trỏ này, chỉnh sửa các giá trị và ghi lại vào vị trí này bằng cách sử dụng cùng một con trỏ. Đây là một cách tiếp cận dài dòng vì bạn cần tìm ra địa chỉ thực của mọi thanh ghi để đọc / ghi từ đó.
Cách tiếp cận khác đơn giản hơn là trừu tượng hóa ánh xạ ngoại vi cụ thể. Điều này được thực hiện bằng cách xác định một số bộ xử lý cho mỗi thiết bị ngoại vi. Một trình xử lý là một cấu trúc C, có các tham chiếu được sử dụng để trỏ đến các địa chỉ ngoại vi thực.
Đoạn mã trên là cấu trúc C và mỗi trường rộng 32 bit tương ứng với các thanh ghi mà chúng ta đã thấy ở trên. Nếu chúng ta trỏ cấu trúc GPIO_TypeDef đến địa chỉ cơ sở của thiết bị ngoại vi GPIOA, và vì mỗi trường này rộng 32 bit, mỗi trường có thể trỏ đến địa chỉ thanh ghi tương ứng trong bộ nhớ.
Do đó, bằng cách viết như thế này GPIOA ((GPIO_TypeDef *) GPIOA_BASE) trong đó GPIOA_BASE tương ứng với địa chỉ GPIOA thực là 0x40020000, mỗi trường bên trong cấu trúc này trỏ đến địa chỉ thanh ghi tương ứng thực tế trong bộ nhớ. Do đó, bằng cách viết GPIOA-> MODER, chúng ta có thể truy cập nội dung của thanh ghi chế độ của thiết bị ngoại vi GPIOA.
Trạng thái của GPIO ngay sau khi khởi động lại nguồn là gì?
Trong và ngay sau khi thiết lập lại bật nguồn, hầu hết các chân GPIO I / O (Đầu vào / Đầu ra) được cấu hình ở chế độ nổi đầu vào. Tuy nhiên, các chân gpio dành riêng cho mạch debug, tức là các chân debug được định cấu hình ở chế độ chức năng thay thế. Sau mỗi lần thiết lập lại thiết bị, các chân JTAG / SWD (mạch debug) này được chỉ định làm các chân chuyên dụng có thể sử dụng ngay lập tức bởi máy chủ debug. Điều này có ý nghĩa vì bạn muốn mạch debug hoạt động trong và ngay sau khi reset.
Tổng hợp các gói cước 4G 2023 của VinaPhone được nhiều người đăng ký nhất
Tổng hợp các gói cước 4G 2023 của VinaPhone được nhiều người đăng ký nhất
Được triển khai tại Việt Nam từ năm 2015, đến nay, công nghệ 4G đã ngày càng trở nên phổ biến hơn bao giờ hết. Hãy cùng tổng hợp tất tần tật các gói cước 4G 2023 đến từ nhà mạng VinaPhone, để xem bạn có những sự lựa chọn thích hợp nào nhé!
Trải nghiệm giải trí cực đỉnh khi đăng ký gói cước 4G VinaPhone
- Danh sách các gói cước chu kỳ ngày được yêu thích nhất
Nhóm các gói cước chu kỳ ngày ra đời đáp ứng nhu cầu sử dụng mạng đột xuất, hoặc người không thường xuyên truy cập Internet 4G. Với các gói cước này, bạn dễ dàng đăng ký chỉ trong vài giây, nhận ưu đãi nhanh chóng, giá cước tương đối rẻ và sử dụng trong 24 giờ.
Dưới đây là một số gói cước 4G ngày phổ biến nhất năm 2023 đến từ VinaPhone:
Tên gói | Cú pháp đăng ký | Giá cước (đồng) | Thời hạn sử dụng | Ưu đãi |
VD2 | MI_VD2 P0309950 gửi 900 | 2.000 | Đến 24h ngày đăng ký | – 500MB dung lượng data
– 20 phút gọi nội mạng |
D3K | MI_D3K P0309950 gửi 9114 | 3.000 | 1 ngày | 250MB dung lượng data. |
D5K | MI_D5K P0309950 gửi 9114 | 5.000 | 1 ngày | 500MB dung lượng data. |
D7 | MI_D7 P0309950 gửi 9114 | 7.000 | 1 ngày | 1,2GB dung lượng data |
D2 | MI_D2 P0309950 gửi 9114 | 10.000 | 1 ngày | 2GB dung lượng data |
D15 | MI_D15 P0309950 gửi 9114 | 15.000 | 1 ngày | 5GB dung lượng data |
D3 | MI_D3 P0309950 gửi 9114 | 15.000 | 3 ngày | Data 3GB/3 ngày |
- Gói cước 4G chu kỳ tuần tiện dụng, hấp dẫn
Nếu bạn tìm kiếm những gói cước ngắn ngày, phục vụ cho việc đi công tác, du lịch trong khoảng một tuần, các gói cước dưới đây sẽ là lựa chọn không thể nào phù hợp hơn. Bạn sẽ đăng ký duy nhất một lần để được nhận ưu đãi data cả tuần và không cần gia hạn nhiều lần.
Hai gói cước DT20 và DT30 hiện đang là 2 gói tuần được yêu thích nhất từ người dùng VinaPhone.
Tên gói | Cú pháp đăng ký | Giá cước (đồng) | Điều kiện đăng ký | Ưu đãi |
DT20 | MI_DT20 P0309950 gửi 9114 | 20.000 | Thuê bao trả trước nằm trong danh sách khuyến mãi | Data 1GB/7 ngày. |
DT30 | MI_DT30 P0309950 gửi 9114 | 30.000 | Mọi thuê bao VinaPhone trả trước, trả sau và ezCom. | Data 7GB/7 ngày. |
- Các gói 4G chu kỳ tháng phổ biến nhất năm 2023 của VinaPhone
Nếu bạn có nhu cầu dùng mạng thường xuyên, ổn định trong suốt cả tháng thì các gói cước chu kỳ tháng chính là sự lựa chọn cực kỳ tiết kiệm dành cho bạn. Không chỉ sở hữu ưu đãi khủng, các gói cước này còn có giá cực tốt, phù hợp với từng đối tượng hoặc khu vực riêng biệt. Với dung lượng data giới hạn mỗi ngày lên đến 6GB, bạn hoàn toàn có thể dùng mạng cho mọi mục đích sử dụng của mình.
Dưới đây là danh sách 13+ gói cước 4G VinaPhone được dùng nhiều nhất năm 2023:
Tên gói | Cú pháp đăng ký | Giá cước (đồng) | Điều kiện đăng ký | Ưu đãi |
MAX | MI_MAX P0309950 gửi 9114 | 70.000 | Mọi thuê bao trả trước, trả sau và ezCom. | – Data 9GB/tháng, hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Ưu đãi data xem truyền hình trên di động qua MyTV OTT. |
MAX100 | MI_ MAX100 P0309950 gửi 9114 | 100.000 | Mọi thuê bao trả trước và trả sau | – Data 30GB/tháng, hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
MAX200 | MI_ MAX200 P0309950 gửi 9114 | 200.000 | Mọi thuê bao trả trước và trả sau | – Data 60GB/tháng, hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
MAX300 | MI_ MAX300 P0309950 gửi 9114 | 300.000 | Mọi thuê bao trả trước và trả sau | – Data 100GB/tháng, hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG70 | MI_ BIG70 P0309950 gửi 9114 | 70.000 | Mọi thuê bao trả trước, trả sau và ezCom. | – Data 500MB/ngày (15GB/tháng), hết dung lượng ngừng truy cập Internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG90 | MI_ BIG90 P0309950 gửi 9114 | 90.000 | Mọi thuê bao trả trước, trả sau và ezCom. | – Data 1GB/ngày (30GB/tháng), hết dung lượng ngừng truy cập Internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG120 | MI_ BIG120 P0309950 gửi 9114 | 120.000 | Mọi thuê bao trả trước và trả sau. | – Data 2GB/ngày (60GB/tháng), hết dung lượng ngừng truy cập internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG200 | MI_ BIG200 P0309950 gửi 9114 | 200.000 | Mọi thuê bao trả trước và trả sau. | – Data 4GB/ngày (120GB/tháng), hết dung lượng ngừng truy cập internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG300 | MI_ BIG300 P0309950 gửi 9114 | 300.000 | Mọi thuê bao trả trước và trả sau. | – Data 6GB/ngày (180GB/tháng), hết dung lượng ngừng truy cập internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
D15G | MI_D15G P0309950 gửi 9114 | 70.000 | Áp dụng cho thuê bao có trong danh sách khuyến mãi. | Data 500MB/ngày (15GB/tháng), hết dung lượng ngừng truy cập Internet. |
D30G | MI_D30G P0309950 gửi 9114 | 90.000 | Áp dụng cho thuê bao có trong danh sách khuyến mãi. | Data 1GB/ngày (30GB/tháng), hết dung lượng ngừng truy cập Internet. |
- Nhóm gói cước chu kỳ dài 6 tháng, 12 tháng cho mọi thuê bao
Những thuê bao muốn sử dụng mạng 4G lâu dài và ổn định có thể cân nhắc lựa chọn các gói cước chu kỳ 6 tháng, 12 tháng. Với gói 6 tháng, bạn sẽ tiết kiệm 1 tháng giá cước so với đăng ký gia hạn từng tháng thông thường. Với gói 12 tháng, bạn sẽ được ưu đãi 2 tháng giá cước. Đây là mức chi phí vừa tiết kiệm, vừa giúp bạn không phải lo hết data đột xuất hay tài khoản không đủ số dư để tiếp tục gia hạn mỗi tháng.
Tên gói | Cú pháp đăng ký | Giá cước (đồng) | Thời hạn sử dụng | Ưu đãi |
MAX_6M | MI_MAX_6M P0309950 gửi 9114 | 350.000 | 180 ngày | – Data 9GB/tháng trong 6 tháng, hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Ưu đãi data xem truyền hình trên di động qua MyTV OTT. |
MAX100_6M | MI_MAX100_6M P0309950 gửi 9114 | 500.000 | 180 ngày | – Data 30GB/tháng trong 6 tháng, hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
MAX200_6M | MI_MAX200_6M P0309950 gửi 9114 | 1.000.000 | 180 ngày | – Data 60GB/tháng trong 6 tháng, hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
MAX300_6M | MI_MAX300_6M P0309950 gửi 9114 | 1.500.000 | 180 ngày | – Data 100GB/tháng trong 6 tháng, hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
MAX_12M | MI_MAX_12M P0309950 gửi 9114 | 700.000 | 360 ngày | – Data 9GB/tháng (108GB/12 tháng), hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Ưu đãi data xem truyền hình trên di động qua MyTV OTT. |
MAX100_12M | MI_MAX100_12M P0309950 gửi 9114 | 1.000.000 | 360 ngày | – Data 30GB/tháng (360GB/12 tháng), hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
MAX200_12M | MI_MAX200_12M P0309950 gửi 9114 | 2.000.000 | 360 ngày | – Data 60GB/tháng (720GB/12 tháng), hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
MAX300_12M | MI_MAX300_12M P0309950 gửi 9114 | 3.000.000 | 360 ngày | – Data 100GB/tháng(1200GB/12 tháng), hết tốc độ cao truy cập miễn phí ở tốc độ thường.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG70_6M | MI_ 6BIG70 P0309950 gửi 9114 | 350.000 | 180 ngày | – Data 500MB/ngày (90GB/6 tháng), hết dung lượng ngừng truy cập internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG90_6M | MI_ 6BIG90 P0309950 gửi 9114 | 450.000 | 180 ngày | – Data 1GB/ngày (180GB/6 tháng), hết dung lượng ngừng truy cập internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG120_6M | MI_ 6BIG120 P0309950 gửi 9114 | 600.000 | 180 ngày | – Data 2GB/ngày (360GB/6 tháng), hết dung lượng ngừng truy cập internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG200_6M | MI_ 6BIG200 P0309950 gửi 9114 | 1.000.000 | 180 ngày | – Data 4GB/ngày (720GB/6 tháng), hết dung lượng ngừng truy cập internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG300_6M | MI_ 6BIG300 P0309950 gửi 9114 | 1.500.000 | 180 ngày | – Data 6GB/ngày (1080GB/6 tháng), hết dung lượng ngừng truy cập internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG70_12M | MI_BIG70_12M P0309950 gửi 9114 | 700.000 | 360 ngày | – Data 500MB/ngày (180GB/12 tháng), hết dung lượng ngừng truy cập Internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG90_12M | MI_BIG90_12M P0309950 gửi 9114 | 900.000 | 360 ngày | – Data 1GB/ngày (360GB/12 tháng), hết dung lượng ngừng truy cập Internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG120_12M | MI_BIG120_12M P0309950 gửi 9114 | 1.200.000 | 360 ngày | – Data 2GB/ngày (720GB/12 tháng), hết dung lượng ngừng truy cập Internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG200_12M | MI_BIG200_12M P0309950 gửi 9114 | 2.000.000 | 360 ngày | – Data 4GB/ngày (1440GB/12 tháng), hết dung lượng ngừng truy cập Internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
BIG300_12M | MI_BIG300_12M P0309950 gửi 9114 | 3.000.000 | 360 ngày | – Data 6GB/ngày (2160GB/12 tháng), hết dung lượng ngừng truy cập Internet.
– Miễn phí data xem truyền hình trên di động qua MyTV OTT. |
Để sử dụng mạng 4G Vina tốt nhất, bạn đừng quên ghi nhớ hai cú pháp quen thuộc:
- Hủy gói cước: HUY TENGOI gửi 9114.
- Kiểm tra dung lượng còn lại: DATA gửi 9114.
Đây là hai cú pháp tin nhắn quan trọng để bạn chủ động trong việc dùng phân chia sử dụng data Internet, cũng như tránh lãng phí số dư khi không còn nhu cầu sử dụng 4G.
Trên đây là tổng hợp toàn bộ những gói cước 4G 2023 được yêu thích nhất từ nhà mạng VinaPhone. Nếu bạn đã có sự lựa chọn cho riêng mình, đừng ngần ngại đăng ký trải nghiệm ngay hôm nay! Nếu bạn vẫn còn những thắc mắc chưa thể giải đáp, liên lạc ngay tổng đài 1800.1091 để nhận hỗ trợ nhanh nhất, tháo gỡ mọi vướng mắc của bạn!
Nguồn: vnpt.com.vn

Cuộc sống tươi đẹp
Cứ bình thường mà sống không đâu phải vội vàng cho mệt vì vốn dĩ cuộc sống vẫn tuyệt vời mà.
IC LM317 là gì? Sơ đồ chân, thông số kỹ thuật và những ứng dụng

IC LM317 là gì?
Chắc hẳn, những người yêu thích linh kiện điện tử không quá xa lạ với IC LM317 sử dụng trong các mạch điều chỉnh điện áp. Và để hiểu rõ hơn về dòng IC này, dientusangtaovn sẽ cung cấp cho bạn những thông tin chi tiết về sơ đồ chân, cách sử dụng LM317. Hãy cùng tham khảo nhé.
IC LM317 là gì?

LM317 là một IC điều chỉnh điện áp dương được dùng rộng rãi trong ccs mạch điện tử cả ở thương mại, dân sinh đến trường học. Đây cũng là một trong dòng vi mạch nổi tiếng trong ngành điện và điện tử.
Lý do mà LM317 được sử dụng rộng rãi đó là nó chứa toàn bộ mạch cấp điện ổn áp có thể điều chỉnh đặt trong một con chip duy nhất. Bởi vậy, bạn có thể tạo ra một bộ nguồn với chi phí thấp ở mức điện áp DC từ 1.2V đến 37V, dòng đầu ra lên đến 1.5A và ít cần linh kiện bên ngoài.
LM317 còn có một số tính năng khác được tích hợp sẵn như bảo vệ ngắn mạch, quá nhiệt, khu vực an toàn nên giúp nó có khả năng năng chống chọi tốt, hoạt động ổn định và lâu dài.
Tính năng và các thông số kỹ thuật của LM317
- IC có thể điều chỉnh điện áp từ 1.2V đến 37V
- Dòng điện đầu ra tối đa là 1.5A
- Điện áp đầu vào tối đa là 40V DC
- Điện áp vào phải lớn hơn 3V so với điện áp đầu ra
- Không yêu cầu nhiều linh kiện bên ngoài
- Chỉ yêu cầu hai điện trở bên ngoài để điều chỉnh đầu ra.
- Có khả năng bảo vệ ngắn mạch
- Chức năng tắt quá nhiệt, ngắn mạch
- Giá thấp, tiết kiệm chi phí
- Đáng tin cậy để sử dụng trong các ứng dụng thương mại
- Dòng điện chờ thấp
Sơ đồ chân của IC LM317

Nhìn từ mặt trước thì sơ đồ chân IC LM317 theo thứ tự từ trái qua phải lần lượt là chân 1 là chân điều chỉnh Adj, chân 2 là chân đầu ra Output, chân 3 là chân đầu vào Input.
Datasheet của LM317: https://cdn.datasheetspdf.com/pdf-down/L/M/3/LM317_ONSemiconductor.pdf
Công thức tính điện áp đầu ra của mạch đó là: Vout = 1.25 x (1 + R2/R1) (V)
Sơ đồ mạch bên trong của LM317:
Trong đó, diode Zener dùng làm điện áp tham chiếu 1.25V chính là điện áp nhỏ nhất trong dải điện áp điều chỉnh khi ta nối chân Adj với chân Vout, muốn thay đổi điện áp đầu ra thì ta mắc thêm các trở ngoài như hình bên trên.
Mạch ứng dụng của IC LM317
Mạch ứng dụng trong hình ở trên có thể được sử dụng để tạo nguồn cấp với LM317. Điện áp vào tối đa có thể đặt vào mạch đó là 40VDC với cường độ 2 đến 3A. Lưu ý, điện áp đầu vào không bắt buộc ở 40V mà bạn có thể thay đổi trong dải điện áp từ 3 – 40V tùy theo yêu cầu sử dụng thực tế.
Đầu ra có thể điều chỉnh từ 1.2V đến 37VDC với dòng điện đầu ra có cường tối đa là 1.5A. Điện áp đầu ra có thể được điều chỉnh khi thay đổi giá trị của biến trở 5K. Bạn có thể áp dụng công thức tính điện áp đầu ra Vout = 1.25 x (1 + R2/R1) để có được sự điều chỉnh phù hợp nhất.
Ví dụ: Nguồn điện có thể điều chỉnh 1,2V đến 12V thì hãy cấp cao hơn 3V so với điện áp đầu ra tối đa của mạch điện. Khi đó, với yêu cầu nguồn từ 1,2V đến 12V thì điện áp đầu vào không được thấp hơn 12V + 3V = 15V.
Những ứng dụng của LM317

Hiện nay, IC LM317 được ứng dụng khá rộng rãi trong các mạch điện tử, đặc biệt là bộ điều khiển điện áp. Một số ứng dụng nổi bật sử dụng LM317 đó là:
- Mạch giảm điện áp
- Các loại dụng cụ cầm tay
- Nguồn điện phòng thí nghiệm
- Nguồn cung cấp năng lượng mặt trời
- Các ứng dụng liên quan đến vi điều khiển
- Bộ chuyển đổi DC sang DC
- Bộ sạc pin thiết bị di động
Những IC thay thế cho LM317
Bạn có thể lựa chọn một số loại IC sau để thay thế cho LM317 trong mạch điện: LM117, LM217, LM338, LT1117-ADJ, LM1086-ADJ, LT1086-ADJ, B29150, LM1084-ADJ.
Hướng dẫn sử dụng LM317 an toàn và lâu dài
Để có được hiệu suất ổn định và lâu dài từ LM317 thì bạn cần phải tuân thủ các tiêu chuẩn kỹ thuật của IC này.
- Không cung cấp điện áp đầu vào quá 40V DC,
- Không tải quá 1,5A
- Luôn sử dụng bộ tản nhiệt phù hợp với IC
- Luôn để LM317 hoạt động ở nhiệt độ trên -55 độ C và dưới +150 độ C.
- Bảo quản IC ở nhiệt độ từ -65 độ C đến +150 độ C.
Trên đây là những thông tin chi tiết về sơ đồ chân, tính năng, thông số kỹ thuật và ứng dụng của IC LM317. Mong rằng những thông tin trong bài viết sẽ giúp bạn có được nhiều kiến thức bổ ích.
Bài viết được copy từ ;https://dientusangtaovn.com/ic-lm317/