text:
CẢM NHẬN LỚP GIÁM ĐỐC CHIẾN LƯỢC INTETNET MARKETING
Tôi có khoảng thời gian nhìn nhận lại những gì đang làm hệ thống và những kiến thức mình đang có. Tiếp nhận thêm những kiến thức mới. có nhiều ý tưởng cho những chiến lược kinh doanh của công ty. Làm thế nào để thu hút khách hàng, giữ chân khách hàng và mang đến cho khách hàng ngày càng nhiều giá trị.
Tôi tin rằng sau khóa học sẽ là những “thành công nối tiếp thành công”
Cảm ơn thầy Duy, cảm Ơn Be Training!
Giám Đốc Nguyễn Thị Phương Trang
Công Ty Thời Trang Phong Cách
Tuy chưa học lớp “Giám ĐốcHệ Thống Ineternet Marketing” nhưng tôi cảm nhận mình đã trưởng thành và biết thêm một lĩnh vực mới để áp dụng cho công việc của mình. tôi tin rằng dưới sự hướng dẫn của thầy Duy, tôi thấy tự tin và quyết định sẽ hành động ngay sau khi hoàn thành lớp “Giám Đốc Hệ Thống Internet Marketing”. Dù có bất cứ giá nào, dù bất cứ khó khăn nào như đòi hỏi vật chất, tôi cũng nghỉ mình phải làm để không uổng phí những gì thầy đã dạy cũng như sự cố gắn nỗ lực của mình.
Nguyễn Thị Hà
Rất cảm ơn thầy đã truyền đạt nhưng kiến thức hết sức hữu ích và ý nghĩa.
Nguyễn Thị Thanh Hương
Qua khóa học “Giám Đốc Chiến Lược Ineternet Marketing CIM” đã làm tôi thay đổi về các chiến lược kinh doanh của mình. Khóa học này mở ra cho tôi một chân trời mói, một niềm tin hy vọng mới, một giá trị mới để phát triển bạn thân và phát triển công ty của mình tối ưu và tiết kiệm chi phí tối đa.
Và chắc chắn tôi sẽ thành công lớn trong tương lai qua chương trình này.
Tôi chân thành cảm ơn Thầy Duy.
Cảm ơn các Trợ giảng của Be Training
Chủ Tịch Hội Đồng Quản Trị Võ Thị Ngọc Dung
Công Ty TNHH Thẩm Mỹ Viện Ngọc Dung
Cảm ơn thầy Duy đã tạo ta chương trình “Giám Đốc Chiến Lược Internet Marketing CIM” rất cụ thể, thiết thực và thú vị.
Phan Thị Hồng Cúc
Rất cảm ơn thầy vì sự nhiệt tình thân thiện đã có khóa học “Giám Đốc Chiến Lược Internet Marketing CIM” nhiều điều bổ ích của khóa học.
Không biết nói gì hơn bằng 2 từ”
Cảm ơn, cảm ơn cảm ơn!
Lê Tùng Lâm
Tahitian NoNi
Không có nhận xét nào:
Đăng nhận xét

markdown:
![ ](http://1.bp.blogspot.com/-HinllN26joE/Tf7MBOO4w3I/AAAAAAAAAJs/lwxXCEBL7PY/s400/IMG_3828.JPG)
**CẢM NHẬN LỚP GIÁM ĐỐC CHIẾN LƯỢC INTETNET MARKETING**
Tôi có khoảng thời gian nhìn nhận lại những gì đang làm hệ thống và những kiến thức mình đang có. Tiếp nhận thêm những kiến thức mới. có nhiều ý tưởng cho những chiến lược kinh doanh của công ty. Làm thế nào để thu hút khách hàng, giữ chân khách hàng và mang đến cho khách hàng ngày càng nhiều giá trị.
Tôi tin rằng sau khóa học sẽ là những “thành công nối tiếp thành công”
Cảm ơn thầy Duy, cảm Ơn
**Be Training** **Giám Đốc Nguyễn Thị Phương Trang** **Công Ty Thời Trang Phong Cách**
Tuy chưa học lớp “
[” nhưng tôi cảm nhận mình đã trưởng thành và biết thêm một lĩnh vực mới để áp dụng cho công việc của mình. tôi tin rằng dưới sự hướng dẫn của thầy Duy, tôi thấy tự tin và quyết định sẽ hành động ngay sau khi hoàn thành lớp “ Giám ĐốcHệ Thống Ineternet Marketing](http://clbmarketingonline.com) [”. Dù có bất cứ giá nào, dù bất cứ khó khăn nào như đòi hỏi vật chất, tôi cũng nghỉ mình phải làm để không uổng phí những gì thầy đã dạy cũng như sự cố gắn nỗ lực của mình.](http://marketingonlinepowerful.com) **Giám Đốc Hệ Thống Internet Marketing** **Nguyễn Thị Hà**
Rất cảm ơn thầy đã truyền đạt nhưng kiến thức hết sức hữu ích và ý nghĩa.
**Nguyễn Thị Thanh Hương**
Qua khóa học “
[” đã làm tôi thay đổi về các chiến lược kinh doanh của mình. Khóa học này mở ra cho tôi một chân trời mói, một niềm tin hy vọng mới, một giá trị mới để phát triển bạn thân và phát triển công ty của mình tối ưu và tiết kiệm chi phí tối đa. Giám Đốc Chiến Lược Ineternet Marketing CIM](http://betraining.org)
Và chắc chắn tôi sẽ thành công lớn trong tương lai qua chương trình này.
Tôi chân thành cảm ơn
[. Thầy Duy](http://nguyenthaiduy.com)
Cảm ơn các Trợ giảng của
**Be Training** **Chủ Tịch Hội Đồng Quản Trị Võ Thị Ngọc Dung** **Công Ty TNHH Thẩm Mỹ Viện Ngọc Dung**
Cảm ơn thầy Duy đã tạo ta chương trình “
[” rất cụ thể, thiết thực và thú vị. Giám Đốc Chiến Lược Internet Marketing CIM](http://betraining.org/giam-doc-chien-luoc-internet-marketing/)
Phan Thị Hồng Cúc
Rất cảm ơn thầy vì sự nhiệt tình thân thiện đã có khóa học “
[” nhiều điều bổ ích của khóa học. Giám Đốc Chiến Lược Internet Marketing CIM](http://betraining.org/giam-doc-he-thong-internet-marketing/)
Không biết nói gì hơn bằng 2 từ”
Cảm ơn, cảm ơn cảm ơn!
**Lê Tùng Lâm ** **Tahitian NoNi**
## Không có nhận xét nào:
## Đăng nhận xét

WARC-Type: response

Content-Type: application/http; msgtype=response

Content-Type: text/html; charset=UTF-8

Cache-Control: private, max-age=0

Content-Encoding: gzip

X-Content-Type-Options: nosniff

X-XSS-Protection: 1; mode=block

Server: GSE


text:
Đặt mua sản phẩm ‣
CÔNG DỤNG
Diệt tất cả các loài virus, vi khuẩn, mycoplasma, nấm và mốc nhờ khả năng oxy hóa mạnh; an toàn cho người, vật nuôi và môi trường; dùng sát trùng chuồng trại, dụng cụ chăn nuôi, nước, không khí khi có vật nuôi; diệt trùng nhanh, hiệu lực ổn định ngay cả trong nước mặn, nước cứng và trong môi trường có tạp chất hữu cơ.
LIỀU LƯỢNG VÀ CÁCH DÙNG
Mức an toàn: thuốc sử dụng rất an toàn trên mọi loại gia súc, gia cầm, người sử dụng và môi trường. Có thể sử dụng cho tất cả các hình thức chăn nuôi, nhà ấp trứng, xưởng chế biến thức ăn gia súc.
Lưu ý: Mang kính, găng tay và quần áo bảo hộ khi thao tác với sản phẩm để tránh thuốc dính vào da, mắt. Không ăn, uống hay hít ngửi thuốc. Để thuốc xa trẻ em. Dùng theo sự chỉ dẫn.
BẢO QUẢN: Để nơi khô, thoáng mát và đóng kín bao bì sau khi dùng.
ĐÓNG GÓI: 10g; 100g; 500g; 7,5kg

markdown:
|
|
|
|![]()
|
|
(Nguồn: Ngân hàng vietcombank)
Kết quả
![]()
|
|![]()
|Số lượt truy cập:||1.121.029|
|Tổng số Thành viên:||72|
|Số người đang xem:||4|
![]()
|
|![]()
Đơn giá bán: |Liên hệ|
|
|![]()
VAT: |Liên hệ|
|
|![]()
Model: |2012|
|
|![]()
Hãng SX: |Bayer- Đức|
|
|![]()
Tình trạng: |Còn hàng||
|![]()
Bảo hành: |12 Tháng|
|
|![]()
|097 731 1712 hoặc 04 6681 1712|
|
|![]()
|
|
|
|![]()
|
|
|
|
|
|![]()
|
|
|
|

Content-Type: text/html

Connection: close

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Vary: Accept-Encoding,User-Agent


text:
lượt xem -Được tổng hợp dựa trên số liệu lượt xem của người dùng trên cả desktop, mobile và smart TV
Video này không tải được vì lý do bản quyền
Xem và tải MV chất lượng HD tốc độ cao với tài khoản Zing MP3 VIP.
Vui lòng chọn cụ thể các mục bên dưới để thông báo cho Zing Mp3 biết vấn dề bạn gặp phải đối với bài hát này.
Để thông báo vi phạm bản quyền, vui lòng click vào đây (To file a copyright infringement notification, please click here)
Trưởng nhóm M4U - Một Boys Band đang được khán giả trẻ yêu thích Hiện Minh Vương đang là sinh viên Cao Đẳng Nghệ Thuật Hà Nội khoa Guitar cổ điển. Người dàn dựng phối bè và mixer chuyên nghiệp cho 8X Studio Ít nói, giản dị, dễ gần, lãng mạn, yêu âm nhạc, đam mê ca hát... Thành... Xem toàn bộ
Trưởng nhóm M4U - Một Boys Band đang được khán giả trẻ yêu thích
Hiện Minh Vương đang là sinh viên Cao Đẳng Nghệ Thuật Hà Nội khoa Guitar cổ điển. Người dàn dựng phối bè và mixer chuyên nghiệp cho 8X Studio
Ít nói, giản dị, dễ gần, lãng mạn, yêu âm nhạc, đam mê ca hát...
Thành tích:
- Đồng sáng tác Hát Cho Màn Đêm (BHV05),
- Giải Bài Hát Ấn Tượng và giải Bài Hát của tháng "Giấc mơ bình yên" (BHV12/07).
Ngoài ra Vương đã sáng tác rất nhiều ca khúc hay như Nhớ Em, Nỗi Nhớ Mang Tên Em, Vì Sao Cuối Trời, Giấc Mơ Bình Yên... và thể hiện một số bài hát của tác giả khác như: Nỗi Đau Xót Xa, Ước, Đi Qua Bóng Tối...
Sản phẩm: Mini Album Nỗi Nhớ Mang Tên Em (2011)
Bình luận ()

markdown:
**lượt xem** -Được tổng hợp dựa trên số liệu lượt xem của người dùng trên cả desktop, mobile và smart TV
Video này không tải được vì lý do bản quyền
Xem và tải MV
**chất lượng HD** tốc độ cao với tài khoản **Zing MP3 VIP**.
Vui lòng chọn cụ thể các mục bên dưới để thông báo cho Zing Mp3 biết vấn dề bạn gặp phải đối với bài hát này.
Để thông báo vi phạm bản quyền, vui lòng
[click vào đây](http://mp3.zing.vn/copyright/report) (To file a copyright infringement notification, please [click here](http://mp3.zing.vn/copyright/report))
Trưởng nhóm M4U - Một Boys Band đang được khán giả trẻ yêu thích Hiện Minh Vương đang là sinh viên Cao Đẳng Nghệ Thuật Hà Nội khoa Guitar cổ điển. Người dàn dựng phối bè và mixer chuyên nghiệp cho 8X Studio Ít nói, giản dị, dễ gần, lãng mạn, yêu âm nhạc, đam mê ca hát... Thành...
[Xem toàn bộ](#)
Trưởng nhóm M4U - Một Boys Band đang được khán giả trẻ yêu thích
Hiện Minh Vương đang là sinh viên Cao Đẳng Nghệ Thuật Hà Nội khoa Guitar cổ điển. Người dàn dựng phối bè và mixer chuyên nghiệp cho 8X Studio
Ít nói, giản dị, dễ gần, lãng mạn, yêu âm nhạc, đam mê ca hát...
Thành tích:
- Đồng sáng tác Hát Cho Màn Đêm (BHV05),
- Giải Bài Hát Ấn Tượng và giải Bài Hát của tháng "Giấc mơ bình yên" (BHV12/07).
Ngoài ra Vương đã sáng tác rất nhiều ca khúc hay như Nhớ Em, Nỗi Nhớ Mang Tên Em, Vì Sao Cuối Trời, Giấc Mơ Bình Yên... và thể hiện một số bài hát của tác giả khác như: Nỗi Đau Xót Xa, Ước, Đi Qua Bóng Tối...
Sản phẩm: Mini Album Nỗi Nhớ Mang Tên Em (2011)
## Bình luận ()

Vary: Accept-Encoding

Cache-Control: private

X-Cache: MISS from Cache-2297


text:
Từ khóa hot:
Nhạc Mp3
,
Buông Đôi Tay Nhau Ra
,
Quang Le
,
Son Tung MTP
Hai au Ca sĩ Hải Âu
Nghe và tải download nhanh album của ca sĩ
Hải Âu.
Bài hát
Hai au MP3
mới nhất tại nhac.vui.vn
Đăng nhập
/
Đăng ký
Thể loại
Nhạc Việt Nam
Nhạc Trẻ
Nhạc Hot Nhất
Nhạc Hải Ngoại
Nhạc Quê Hương
Nhạc Trữ Tình
Dance Việt
Rap Việt
Nhạc Đỏ
Nhạc Trịnh
Nhạc Vàng
Nhạc Thiếu Nhi
Cải Lương
Rock Việt
Quan Họ Bắc Ninh
Nhạc Nước Ngoài
Nhạc Hot Nhất
Nhạc Hàn Quốc
Dance Hot
Nhạc Âu Mỹ
Nhạc Hoa
Rock
Nhạc Nhật Bản
Nhạc Đồng Quê
Hip-Hop/Rap
Nhạc Spa & Massage
Clip tổng hợp
Clip Hài
Clip Games
Nhạc Trong Phim
Phim Nước Ngoài
Phim Việt Nam
Thể Loại Khác
Nhạc Không Lời
Nhạc Game
Beats / Karaoke
Nhạc Giáng Sinh
Nhạc Bà Bầu
Bảng xếp hạng
Việt Nam
Bài hát
Video
Album
Âu Mỹ
Bài hát
Video
Album
Hàn Quốc
Bài hát
Video
Album
Video Clip
Việt Nam
Âu Mỹ
Hàn Quốc
Giải Trí
Sao Vui
Nhạc tuyển chọn
Hôm nay nghe gì?
Gửi người phụ nữ tôi yêu
Ngày cưới
Khúc ca tặng cha
Bài hát tặng mẹ
Các ca khúc nhạc Hàn bất hủ
Nhạc Phim Hàn Quốc
Old Songs Collection
Love Songs Collection
Wedding Songs Collection
Nhạc Hoa bất hủ
Nhạc Nga trong lòng người Việt
Nhạc Dance hay nhất
Các ca khúc Quốc Tế bất hủ
Ca sỹ cần đăng bài hát hoặc hợp tác, liên hệ Mr.Hiếu – 0979905003
Nhac.vui.vn - Nghe & Tải Nhạc Chất Lượng Cao
Nhạc Chế làm Vợ Anh Nhé khiến Chi Dân Sốc
Ca sĩ không tồn tại
Bài hát cùng ca sĩ Hải Âu
> Tất cả
Sắp xếp bài hát theo:
Thời gian
Lượt nghe
8888
Hải Âu
Đánh Thức Tiếng Hát Em
Hải Âu
,
Tuấn Hưng
Album cùng ca sĩ Hải Âu
> Tất cả
Bờ Vai Lạ
Hải Âu
Bờ Vai Lạ (Mp3)
Hải Âu
Chia sẻ cảm nhận về ca sĩ của bạn tại đây
Nhac.vui.vn
Bình luận Facebook
BXH Bài Hát
Việt Nam
Âu Mỹ
Hàn Quốc
BXH tuần 47 (16/11 - 23/11)
|
Hôm nay
1
4
Con Nợ Mẹ
Trịnh Đình Quang
2
6
Vợ Tuyệt Vời Nhất
Vũ Duy Khánh
3
-1
Thế Giới Ảo Tình Yêu Thật
Trịnh Đình Quang
4
9
Yêu Em Nhưng Không Với Tới
Bùi Vĩnh Phúc
5
4
Vợ Người Ta
Phan Mạnh Quỳnh
6
1
Nếu Không Thể Đến Với...
Trịnh Đình Quang
7
7
Nếu Em Còn Tồn Tại
Trịnh Đình Quang
8
9
Không Yêu Cũng Đừng Làm...
Khắc Việt
9
1
Hãy Cho Anh Cơ Hội Sửa Sai
Châu Khải Phong
10
6
Anh Không Sao Đâu
Chi Dân
> Tất cả
BXH Album
Việt Nam
Âu Mỹ
Hàn Quốc
BXH tuần 47 (16/11 - 23/11)
|
Hôm nay
1
Đớn Đau Anh Vẫn Yêu
Châu Khải Phong
2
Em Là Của Anh
Hồ Quang Hiếu
3
Con Nợ Mẹ (Single)
Trịnh Đình Quang
2
4
Vợ Tuyệt Vời Nhất
Vũ Duy Khánh
-1
5
Một Ngày Làm Con Gái
Nguyễn Đình Vũ
8
> Tất cả
BXH Video
Việt Nam
Âu Mỹ
Hàn Quốc
BXH tuần 47 (16/11 - 23/11)
|
Hôm nay
1
Làm Vợ Anh Nhé
Chi Dân
1
2
Nếu Em Còn Tồn Tại
Trịnh Đình Quang
1
3
Người Thứ Ba
Cao Thái Sơn
14
4
Mẹ Là Vô Giá
Giang Bích Ngọc
5
Nhìn Lại Dấu Chân
Hồ Quang Hiếu
> Tất cả
Vương Quốc Âm Nhạc trên Fb
Album Hot tháng 9
Video hot
Playlist nổi bật
Nhạc trẻ
Nhạc quốc tế
Nhạc dance
Nhac Viet nam
,
Mp3
,
Nhac dance
,
Nhạc
,
Nhac tre
,
Quang Le
,
Nhac hot 2015
,
Nhac thieu nhi
,
Phuong My Chi
,
Karaoke
,
Hoai Lam
,
Son Tung MTP
,
Nhac Tru Tinh
,
Nhac xuan
,
Nhac vang
,
Nhac vang hai ngoai
,
Giong hat viet nhi 2015
,
Nhac phim
,
Nhac khong loi
,
Nhac che
,
Nhac Au My
,
Le Quyen
,
nhac hai ngoai
,
Nghe nhac
,
Nhac hay
,
nhac
,
zing mp3
,
Ca nhac
,
Nhac san
,
nghe nhạc hot
,
Buông Đôi Tay Nhau Ra
Hải Âu | Album nhạc Hai au Video Clip
Chính sách sở hữu trí tuệ
© Copyright 2004-2015 NHAC.VUI.VN, all rights reserved - Powered by OCM 10
Cơ quan chủ quản: Công ty cổ phần dịch vụ phát triển người dùng MKO.
Trụ sở: Lô NV-B57 khu đô thị Trung Hoà Nhân Chính , phường Nhân Chính , quận Thanh Xuân , thành phố Hà Nội.
Tel : (84-4) 7 300 2828 - Fax : (84-4) 7 300 2828.
Giấy phép mạng xã hội số 523/GP-BTTTT ngày cấp 09/10/2015 BỘ THÔNG TIN VÀ TRUYỀN THÔNG.
Người chịu trách nhiệm xuất bản : Nguyễn Thị Quỳnh Phương
Thứ năm, 07-11-2013 17:18 PM (GMT+7)

X-Cache: QuickCache vv2.1.1rc1 - file

X-CacheDebug-1: Cache scriptkey is set to /index.php

X-CacheDebug-2: Cache varkey is set to GET=a:2:{s:13:"SERVER_REGION";s:2:"US";s:7:"web_url";s:17:"hai-au-p2748.html";}

X-CacheDebug-3: Cachekey is set to 04a7864b1f1e54b1c2eb7cc1f7fdba17

X-CacheDebug-4: No (valid) cachedata for 04a7864b1f1e54b1c2eb7cc1f7fdba17

X-CacheDebug-5: Callback happened

X-CacheDebug-6: Writing cached data to storage

X-CacheDebug-7: Starting wrote cachefile /home/nhacvui/cache/quickcache/45/04/qcc-04a7864b1f1e54b1c2eb7cc1f7fdba17

X-CacheDebug-8: quickcache_filewrite wrote cachefile /home/nhacvui/cache/quickcache/45/04/qcc-04a7864b1f1e54b1c2eb7cc1f7fdba17

X-CacheDebug-10: Successfully wrote cachefile /home/nhacvui/cache/quickcache/45/04/qcc-04a7864b1f1e54b1c2eb7cc1f7fdba17


text:
Không tìm thấy kết quả với từ khóa : Sex Hoc Sinh Chau Au 6260.html
Bạn có thể yêu cầu post phim này Tại Đây. Chúng tôi sẽ đáp ứng yêu cầu của bạn một cách nhanh nhất!
Copyright © 2013 PhimDoc.Net, All Rights Reserved.
Tất cả video clip được sưu tầm từ Google, Youtube, DailyMotion... Chúng tôi sẽ gở bỏ những phim vi phạm pháp luật và bản quyền theo yêu cầu của nhà sản xuất nhà nước.
PhimDoc.Net luôn cập nhật những bộ phim mới nhất và Xem Phim hd online chất lượng cao và nhanh nhất do thành viên đóng góp. Xem Phim Online không giới hạn.
TextLink: xem phim online
Liên hệ: [email protected]

WARC-Truncated: length

X-Powered-By: PleskLin

Server: cloudflare-nginx


text:
10 giờ đêm 30 Tết, Hân ngồi ở bàn giấy đặt trong phòng trực của một cơ quan. Trên bàn có một máy đánh chữ, điện thoại. Cạnh đó là bộ xa-lông, bàn tiếp khách có bày một cặp dưa hấu xanh mướt, một khay mứt, một ấm trà. Những cành mai vàng rực, nở kịp vào đêm Giao thừa. Không khí có vẻ ấm cúng và rất xuân.
Nhưng hình như trái ngược lại không khí đó, cơ quan rất vắng vẻ. Những người bạn, người khách quen, nhân viên của cơ quan không lại chơi vào một buổi tối đầy thi vị như thế này. Hân nhìn ra ngoài đường. Tiếng xe gắn máy vút nhanh, chiếc nọ nối chiếc kia làm vang một chuỗi dài âm thanh đến khó chịu. Những cặp trai gái, trong những bộ quần áo mới cắt đủ kiểu, đang dập dìu đi qua lại trước cơ quan, nơi có con đường dẫn ra nhà thờ Đức Bà.
Hân cầm đàn lên hát nghêu ngao vài câu. Xong bỏ xuống, lại chúi mũi vào quyển sách dang dở trước mặt. Ca trực của anh nhận bắt đầu từ 18 giờ chiều 30 Tết đến 6 giờ sáng ngày mồng Một.
Hân vụt cầm lấy máy điện thoại.
Hân: Alô, tổng đài số 10 đó phải không? Dạ, cô ơi, cô làm ơn cho tôi nói chuyện với 7007, Campuchia…
Tiếng trong điện thoại: Số máy anh số mấy?
Hân: 99999, cơ quan của báo X.
Tiếng trong điện thoại: Anh cảm phiền nhé, đường dây Campuchia bận rồi.
Hân: Buồn ghê.
Đ.T.: Sao anh buồn?
Hân: Định nói chuyện với đứa em gái trong đêm Giao thừa. Trực cơ quan một mình buồn quá!
Đ.T.: À, anh ơi, anh làm ơn cho hỏi chút… Truyện ngắn về cô thanh niên xung phong trên báo xuân năm nay của ai vậy anh?
Hân: Chắc chắn là không phải tôi viết rồi. Nói chơi vậy chứ, đó là của nhà văn Nguyễn Xuân Miên, người ở cơ quan chúng tôi.
Đ.T.: Ông đó viết hay quá… Lời của ông ấy dí dỏm, dễ thương ghê. Mà hay nhất là viết đúng tâm trạng của con gái thanh niên xung phong.
Hân: Chị đừng có gọi ông ấy bằng ông. Nó trẻ măng hà! Năm nay được 29 đó. Nó rành về tâm lý mấy cô gái thanh niên xung phong, vì nó có vợ là thanh niên xung phong …
Đ.T.: Và có nhiều bồ nữa.
Hân: Cái đó tôi không biết. Ai nhiều bồ chứ tôi thì đang… ế.
Đ.T.: Tội nghiệp chưa. Anh qua tổng đài tôi giới thiệu cho mấy đứa bạn. Còn trẻ, yêu nghề, nhưng có tật hay nói nhiều vì lý do nghề nghiệp.
Hân: Dạ thưa chị, “em” không dám.
Đ.T.: Nói vậy chứ “chị” sợ mấy ông làm báo lắm “em ơi”…
Hân: Thôi, chị đừng giỡn. Sao lại sợ?
Đ.T.: Mấy ông đó có cái miệng dẻo quẹo nhiều bồ lắm.
Hân: Bảo đảm có giấy giới thiệu của cơ quan, giấy chứng nhận độc thân của công đoàn.
Đ.T.: Đúng là cái miệng của nhà báo. Anh viết mục gì vậy?
Hân: Gỡ rối tơ lòng… thòng. Giỡn chơi vậy chứ tôi đâu có làm phóng viên.
Đ.T.: Chứ anh làm cái gì?
Hân: Đánh máy kiêm giao liên.
Đ.T.: Xin lỗi anh một chút. Anh chờ máy chút nghe.
Hân vẫn cầm ống điện thoại. Anh nở nụ cười nhẹ nhàng, khẽ nhún vai. Tiếng vang ra từ đầu ống nghe rất rõ… – Alô, chị tổng đài ơi, Hà Nội bắt được chưa? – Ông chịu khó chờ một lát, đường dây bận rồi! – Cô làm ơn cho tôi nói chuyện nhanh nhanh lên nhé! Cám ơn cô. – Không có chi… Hân lại đặt ống nghe lên tai, chăm chú nhìn vào 10 chữ số xếp hình vòng cung trên chiếc máy vô tri, nhưng bây giờ là một nhịp cầu tâm hồn ấm áp trong đêm Giao thừa cô đơn của anh.
Đ.T.: Alô. Anh… anh gì đó hả?
Hân: Anh Hân.
Đ.T.: À, anh Hân. Làm nghề báo chắc vui lắm hả anh?
Hân: Vui lắm.
Đ.T.: Anh đánh máy chắc vui lắm hả?
Hân: Vui cái gì. Buồn gần chết. Tối ngày cứ gõ lọc cọc, lọc cọc như tiếng của một chiếc xe ngựa, mà là một con ngựa già.
Đ.T.: Sao anh nói có vẻ chua chát vậy?
Hân: Con trai mà ngồi đánh máy… chán lắm. Cứ ngồi lì một chỗ không hà. Nhưng có cái vui nhất là mình đi sửa văn của mấy ông nhà báo trong cơ quan mình.
Đ.T.: Sửa văn?
Hân: Chứ sao! Nói cho oai chứ sửa văn cái gì. Nhiều khi mấy ổng viết gấp, không để ý, trật chính tả, mình sửa lại thôi.
Đ.T.: Nói vậy chứ thấy một cái bài mình đánh máy đăng báo thì vui lắm chứ.
Hân: Mình vui thì ít mà tác giả vui thì nhiều.
Đ.T.: Sao vậy?
Hân: Mấy ổng vui vì mấy ổng lãnh tiền nhuận bút, còn mình thì có lãnh cái gì đâu. Chắc… xin lỗi, nãy giờ nói chuyện với… mà không biết tên… Chắc tên của… đẹp lắm. Nghe giọng nói dễ thương hết sức!
Đ.T.: Ghê! Tên xấu lắm, xấu như người vậy đó.
Hân: Chỉ cần làm quen với một người xấu mà có giọng nói như chim sơn ca như thế này là hên cả năm rồi, mong ước gì hơn.
Đ.T.: Ghê. Mấy anh chỉ giỏi tán.
Hân: Thì nghề của nhà báo mà.
Đ.T.: Hoàng. Minh Hoàng.
Hân: Chắc nghề của Hoàng cũng vui lắm? Nghe người ta nói chuyện muôn nơi.
Đ.T.: Nghe hoài cũng chán anh ơi. Tối ngày cứ nghe chuyện, nói chuyện, cầm phích không cũng đủ mệt. Hết giờ làm việc không muốn nói chuyện với ai hết.
Hân: Ngay cả với người yêu?
Đ.T.: Ghê. Người ta còn nhỏ chứ bộ.
Hân: Thì sau này. Vậy, ông nào có tán Hoàng chắc cũng chỉ cần im lặng. Đúng im lặng là vàng mà.
Hân ngưng nói một lát. Đầu dây bên kia cũng im lặng chờ đợi. Hân khẽ lấy tay nhón một miếng mứt, bỏ từ từ vào miệng.
Đ.T.: Alô, tại sao anh ngưng nói vậy?
Hân (cười): Thì như tôi vừa mới nói phải im lặng.
Đ.T. (vang lên tiếng cười): Ghê. Cái anh này.
Hân: Có khi nào Hoàng cắm lộn phích không?
Đ.T.: Có chứ. Lúc ấy mắc cười lắm. Hai người nói hai chuyện không ăn nhập gì với nhau hết. Nhưng bây giờ hết rồi, lúc mới vào thôi.
Hân: Hoàng làm được mấy năm rồi?
Đ.T.: Mới khoảng chừng năm anh ạ.
Hân: Trước đó, Hoàng làm gì?
Đ.T.: Thanh niên xung phong! Thanh niên xung phong chuyển ngành.
Hân: Thanh niên xung phong chuyển ngành hả? Xin bắt tay một cái. Đều là bồ nhà cả. Mình cũng là thanh niên xung phong chuyển ngành đây.
Đ.T.: Anh chờ Hoàng chút nghe! Alô, dạ tổng đài đây… Dạ, đường dây Đà Nẵng hư rồi. (Tiếng vang trong máy, một giọng đàn ông). Nếu Đà Nẵng hư thì cho nói chuyện với tổng đài chút – Dạ, tổng đài đây. – Năm nay tổng đài bao nhiêu tuổi? – Dạ, năm nay vừa tròn 50 tuổi. Dạ, tổng đài đang bận, ông cảm phiền nghe…
Đ.T.: Làm nghề này cũng vui, nhưng hơi bực. Cứ bị mấy ông phá hoài, nửa đêm như vậy cũng có người gọi điện đến phá.
Hân: Bây giờ thêm một người khách lạ đêm giao thừa nữa.
Đ.T.: Trước kia anh ở tổng đội nào?
Hân: Tổng đội 3 biên giới.
Đ.T.: Hả? Tổng đội 3 biên giới hả? Trời ơi, lúc trước Hoàng cũng ở tổng đội đó. Nhưng từ Tổng đội 5 sát nhập vào.
Hân: Còn tôi thì ở Tổng đội 1. Có lẽ vì thế mà ta không quen nhau.
Đ.T.: Nhiều khi tụi mình gặp nhau rồi cũng không biết chừng nữa. Nhưng Hoàng công tác ở tuyến sau không, nên… chưa gặp anh.
Hân: Thì bây giờ gặp cũng được rồi. Đi dâu cũng gặp thanh niên xung phong cả.
Đ.T.: Không biết anh có còn nhớ Giao thừa năm 1979 không? Năm đó vui ghê. Anh biết không, Hoàng cũng lên diễn kịch nữa.
Hân: Hoàng đóng vai gì? Có phải vai “Em, cô gái tổng đài” không?
Đ.T.: Không, vai sư nữ trong tuồng cải lương “Cây bắp chuối trổ bông”. Tại vác B.40 hoài, với lại nghe B.40 tụi K. giã như pháo Tết diễn tuồng đó. Anh em cười bò lăn…
Hân: Còn tụi này có màn thi giật cúp. Giải nhất một gói Hoa Mai, giải nhì một gói cà phê, giải ba bánh in.
Đ.T.: Thi nữa hả? Thi cái gì vậy?
Hân: Thi coi ông nào vá quần áo lẹ nhất và bắt được nhiều rệp của đứa khác bỏ vào túi mình. Rồi sau đó, anh em nảy ra sáng kiến bắt rệp đá với nhau.
Đ.T.: Mấy anh có cà phê với bánh in nữa à? Sang ghê ta.
Hân: Sang nỗi gì! Bánh in làm bằng sữa bột trộn đường, hấp cách thủy… ăn ngán thấy bà cố tổ. Còn cà phê là bo bo rang cho khét rồi đem xay. Nhưng vẫn ngon như thường.
Đ.T.: Lúc đó anh làm công tác gì vậy?
Hân: Được xông pha ra “miền khói lửa” giết bọn “giặc cá” nên thỉnh thoảng cũng bị đổ máu vì làm ẩu đứt tay…
Đ.T.: Trời ơi, gian nan ghê há. Đúng là kiểu: “Chồng người đi đánh sông Lô – Chồng em ngồi bếp rang ngô cháy quần…”.
Hân: Thôi đừng có nói như vậy, nghe dễ xa nhau lắm, bạn ơi.
Đ.T.: Tại vì… Tại vì… anh không chịu nói thiệt làm chi.
Hân: Thì… thì mình cũng làm những công chuyện như anh em khác thôi.
Đ.T.: À, chắc anh còn nhớ Thìn… Thìn C phó C5 đó.
Hân (giọng bùi ngùi): Nhớ chứ. Hôm trước tôi có đi ngang nghĩa trang liệt sĩ ở ngà ba Kà-tum, Xa-mát và có rẽ vào thăm mộ anh ấy. (Bên đầu dây kia Hoàng im lặng một lát).
Hân: Alô, alô…
Đ.T.: Alô, Hoàng đây…
Hân: Tôi còn nhớ lần gặp Thìn cuối cùng là lúc ở trạm xá của một đơn vị bộ đội. Khi tôi về mấy ngày thì trạm xá đó bị pháo kích trúng… Anh Thìn chết ở đó, nhưng nói cho cùng, nếu trạm xá không bị pháo kích trúng thì anh Thìn cũng khó qua nổi… Anh ấy bị thương ở phổi nặng lắm.
Đ.T.: Thôi… gần Giao thừa rồi, anh đừng nhắc tới chuyện buồn ấy nữa…
(Bỗng dưng tiếng pháo nổ hàng loạt, kéo dài… Tiếng còi tàu hụ vang lên từ bến cảng mà hai người – dù ở hai đầu dây – vẫn nghe rõ mồn một. Đâu đó tiếng chuông nhà thờ Đức Bà vang lên thánh thót…).
Đ.T.: Giao thừa rồi đó anh!
Hân: Ừ, Giao thừa rồi. Nhớ những cái Tết năm xưa quá. Xin chúc mừng Hoàng một năm mới đầy hạnh phúc.
Đ.T.: Anh Hân ơi, anh hát cho Hoàng nghe một bản đi.
Hân: Tôi mà hát cái gì, giọng nghe như vịt chui đầu vào ống lon sữa bò mà gào vậy…
Đ.T.: Hoàng không cần nghe giọng hát hay đâu… Alô, xin lỗi chờ Hoàng một chút. Alô, tổng đài đây (tiếng Hân nghe được trong ống điện thoại). – Alô, tổng đài đó hả? Xin chúc một năm mới hạnh phúc! – Dạ cám ơn ông. – Tổng đài ơi, cô tên gì vậy? – Dạ thưa ông, tổng đài đi ngủ rồi. Mai ông gọi lại nghe. – Thôi… mà, người đẹp… – Dạ thưa ông, tổng đài đi ngủ rồi. Ông cảm phiền nghe… Alô, anh Hân đó hả, anh hát cho Hoàng nghe một bản nào của thanh niên xung phong đi.
Hân: Thôi kệ, mình hát bài “Những bông hoa trên tuyến lửa” của Đỗ Trung Quân và Nguyễn Cửu Dũng nghe. Hai thằng cha nội đó là thanh niên xung phong thứ thiệt đó.
(Hân cầm đàn và hát vào máy điện thoại. Giọng của anh hát không hay lắm, mặc dầu rất trúng nhịp. Tuy nhiên, người ta vẫn nghe được một cái gì đó thật lắng của tâm hồn. Hình hư đôi lúc, giọng của Hân có nước mắt).
Đ.T.: Anh hát hay ghê! Hay vì tình cảm chứ không phải vì giọng hát.
Hân: Hoàng ơi, nhà Hoàng ở đâu?
Đ.T.: Bí mật. Hoàng sắp đi xa rồi. Không gặp được đâu.
Hân: Nghĩa là nghỉ làm luôn?
Đ.T.: Chưa chắc. Đâu phải đi xa nghĩa là nghỉ làm việc.
Hân: Sang năm, chắc mình nghỉ việc ở đây quá.
Đ.T.: Sao vậy?
Hân: Buồn chán!
Đ.T.: Ghê. Buồn chán!
Hân: Khi là thanh niên xung phong mình làm công tác đâu đến nỗi tệ, nhưng bây giờ chuyển ngành rồi, mà làm cái gì đâu á, không trúng với sở thích của mình.
Đ.T.: Ghê, làm ở nhà báo cũng thích lắm chớ bộ. Được đọc bản thảo trước của mấy ông nhà văn, nhà báo, được tiếp xúc với những người làm văn nghệ. Đâu phải như nghề của mình, chung quanh toàn là những ổ cắm phích, dây điện và tiếng nói của những người xa lạ. Mình có chán đâu.
Hân: Nhưng Hoàng là con gái, và sự đóng góp của Hoàng trong thời gian qua làm sao bằng được những người con trai. Họ hi sinh đâu phải là để làm những công việc như… như mình đang làm chẳng hạn.
Đ.T. (im lặng một lát): Anh Hân này, Hoàng nghĩ nếu mà anh có thích một công việc nào đó thì cũng có thể tự phấn đấu học thêm ngoài giờ. À, biết đâu chừng sau này anh sẽ trở thành một nhà văn. Cứ ngồi đánh máy bản thảo riết rồi anh viết văn hay hồi nào mà anh không biết đó. Như một nhà văn nổi tiếng nào đó của nước Anh, ông ta chỉ là thợ sắp chữ thôi, mà sau này nổi tiếng cả thế giới.
Hân: Mình đâu dám mơ làm nhà văn. Không có khiếu, không có vốn sống…
Đ.T.: Thì anh cứ viết chuyện anh sống ở thanh niên xung phong, hoặc là câu chuyện đêm nay chẳng hạn…
Hân: Con trai gì mà cứ ngồi đánh máy. Chán lắm.
Đ.T.: Chứ anh Hân muốn làm gì nào?
Hân: Làm gì thì cũng chưa biết.
Đ.T.: Chính anh còn chưa biết chọn cho mình công việc gì nữa thì làm sao người ta phân công cho anh được. Thôi, nếu chưa được làm việc mình thích thì hãy cố gắng thích công việc của mình đang làm vậy.
Hân: Cha, đầu năm mình lại được một người lên lớp.
Đ.T.: Cho nó mau lớn. Thôi, Hoàng buồn ngủ quá rồi. Nãy giờ mình nói chuyện cũng lâu. Thôi, Hoàng đi ngủ đây. Chúc anh một năm đầy hạnh phúc và sớm trở thành nhà văn.
Hoàng cúp máy. Hân ngẩn ngơ cứ cầm máy chờ đợi. Đầu dây không có tiếng trả lời. Anh gác máy. Cầm lấy đàn, anh dạo một vài nốt nhạc đầu của bài “Trên đường đời”. Anh khẽ nhún vai lẩm bẩm: “Chưa bằng ai mà bày đặt lên lớp…”.
oOo
Mồng ba Tết, Hân là người vào cơ quan sớm nhất. Những cánh mai rơi lả tả trong phòng khách. Những trái dưa hấu không còn ở đó nữa. Vội vã, Hân đi lại chiếc máy điện thoại, quay số 10.
Hân: Alô. Tổng đài đó phải không ạ? Hoàng đó hả?
Đ.T.: Không phải đâu ông ơi.
Hân: Xin lỗi, cô làm ơn cho tôi gặp cô Hoàng một chút.
Đ.T.: Ông ơi, ở đây không có cô nào tên Hoàng hết.
Hân: Có mà, cô giấu tôi hoài, tôi mới nói chuyện với cô ấy hôm Giao thừa mà…
Đ.T.: Đêm Giao thừa? Ông để tôi xem lại lịch trực.
Hân: Cô Hoàng mới chuyển về làm, trước là thanh niên xung phong đó.
Đ.T.: Ở đây không có cô nào là thanh niên xung phong chuyển ngành hết. A, đêm trực Giao thừa là cô Hồng. Hoàng là tên chồng sắp cưới của cô ấy. À, rất xui cho ông là cô ấy nghỉ phép để chuẩn bị lấy chồng.
Hân: Chắc không phải đâu, cô Hoàng là thanh niên xung phong mà.
Đ.T.: Ông biết bằng tôi làm sao được. Có phải cô Hồng là một cô bộ đội mới chuyển ngành không? TRước kia, cô đi bộ đội, làm y tá và có chiến đấu ở biên giới nữa. Cô ấy có một người yêu tên Thìn, anh này là thanh niên xung phong. Tôi nghe nói hai người trước kia là bạn học cùng trường. Nhưng anh Thìn thì đi thanh niên xung phong, còn cô ấy thì đi bộ đội. Oái oăm một chỗ là hai người gặp nhau tại chiến trường, lúc anh ấy bị thương nặng. Tội nghiệp, khi trạm xá bị pháo kích, cô ấy không nề hà thân mình, dìu anh ấy ra khỏi trận pháo. Nhưng không may, cô ấy bị miểng pháo cắt đứt một chân, còn anh Thìn thì hi sinh ngay trong vòng tay của…
Hân (hỏi dồn dập): Nhưng… nhưng sao bây giờ cô ấy lại đi lấy chồng?
Đ.T.: Anh này kỳ chưa. Cô ấy đi lấy chồng là chuyện của cô ấy. Không lẽ anh bắt người ta ở giá. Nhưng đó là chuyện của quá khứ. Hãy bắt đầu làm lại tương lai anh ạ. Tội nghiệp, Hồng phấn đấu ghê lắm trong công tác này, kể từ khi cô ấy được giải ngũ.
Hân: Dạ cảm ơn chị. Nếu chị gặp cô Hồng xin nhắn là Hân gửi lời thăm hỏi và chúc cô ấy hạnh phúc.
Hân gác máy, mặt bần thần. Tiếng cười nói vang rân của bạn đồng nghiệp như báo hiệu một ngày mới đã bắt đầu. Anh gắn những tờ giấy vào ru-lô máy chữ, đánh vài dòng, nhưng hình như trí óc anh đang cố hình dung ra một người con gái thương tật, đang xoay xở chung quanh những hàng dài ổ phích và liến thoắng “Alô, alô, đây tổng đài, đây tổng đài…”.
oOo
Không biết Hân có nghe theo lời khuyên của giọng nói Giao thừa năm trước phấn đấu để trở thành nhà văn hay không, nhưng trên một tờ báo xuân năm sau, người ta có đọc được một truyện ngắn mang tên: “Câu chuyện đêm Giao thừa”. Và tên tác giả là…
(1982)
Gửi phản hồi

markdown:
10 giờ đêm 30
[Tết](http://thanghe.com/tag/tet), Hân ngồi ở bàn giấy đặt trong phòng trực của một cơ quan. Trên bàn có một máy đánh chữ, điện thoại. Cạnh đó là bộ xa-lông, bàn tiếp khách có bày một cặp dưa hấu xanh mướt, một khay mứt, một ấm trà. Những cành mai vàng rực, nở kịp vào đêm Giao thừa. Không khí có vẻ ấm cúng và rất xuân.
Nhưng hình như trái ngược lại không khí đó, cơ quan rất vắng vẻ. Những người bạn, người khách quen, nhân viên của cơ quan không lại chơi vào một buổi tối đầy thi vị như thế này. Hân nhìn ra ngoài đường. Tiếng xe gắn máy vút nhanh, chiếc nọ nối chiếc kia làm vang một chuỗi dài âm thanh đến khó chịu. Những cặp trai gái, trong những bộ quần áo mới cắt đủ kiểu, đang dập dìu đi qua lại trước cơ quan, nơi có con đường dẫn ra nhà thờ Đức Bà.
Hân cầm đàn lên hát nghêu ngao vài câu. Xong bỏ xuống, lại chúi mũi vào quyển sách dang dở trước mặt. Ca trực của anh nhận bắt đầu từ 18 giờ chiều 30
[Tết](http://thanghe.com/tag/tet) đến 6 giờ sáng ngày mồng Một.
Hân vụt cầm lấy máy điện thoại.
Hân: Alô, tổng đài số 10 đó phải không? Dạ, cô ơi, cô làm ơn cho tôi nói chuyện với 7007, Campuchia…
Tiếng trong điện thoại: Số máy anh số mấy?
Hân: 99999, cơ quan của báo X.
Tiếng trong điện thoại: Anh cảm phiền nhé, đường dây Campuchia bận rồi.
Hân: Buồn ghê.
Đ.T.: Sao anh buồn?
Hân: Định nói chuyện với đứa em gái trong đêm Giao thừa. Trực cơ quan một mình buồn quá!
Đ.T.: À, anh ơi, anh làm ơn cho hỏi chút…
[Truyện ngắn](http://thanghe.com/category/truyen-ngan) về cô thanh niên xung phong trên báo xuân năm nay của ai vậy anh?
Hân: Chắc chắn là không phải tôi viết rồi. Nói chơi vậy chứ, đó là của nhà văn Nguyễn Xuân Miên, người ở cơ quan chúng tôi.
Đ.T.: Ông đó viết hay quá… Lời của ông ấy dí dỏm, dễ thương ghê. Mà hay nhất là viết đúng tâm trạng của con gái thanh niên xung phong.
Hân: Chị đừng có gọi ông ấy bằng ông. Nó trẻ măng hà! Năm nay được 29 đó. Nó rành về tâm lý mấy cô gái thanh niên xung phong, vì nó có vợ là thanh niên xung phong …
Đ.T.: Và có nhiều bồ nữa.
Hân: Cái đó tôi không biết. Ai nhiều bồ chứ tôi thì đang… ế.
Đ.T.: Tội nghiệp chưa. Anh qua tổng đài tôi giới thiệu cho mấy đứa bạn. Còn trẻ, yêu nghề, nhưng có tật hay nói nhiều vì lý do nghề nghiệp.
Hân: Dạ thưa chị, “em” không dám.
Đ.T.: Nói vậy chứ “chị” sợ mấy ông làm báo lắm “em ơi”…
Hân: Thôi, chị đừng giỡn. Sao lại sợ?
Đ.T.: Mấy ông đó có cái miệng dẻo quẹo nhiều bồ lắm.
Hân: Bảo đảm có giấy giới thiệu của cơ quan, giấy chứng nhận độc thân của công đoàn.
Đ.T.: Đúng là cái miệng của nhà báo. Anh viết mục gì vậy?
Hân: Gỡ rối tơ lòng… thòng. Giỡn chơi vậy chứ tôi đâu có làm phóng viên.
Đ.T.: Chứ anh làm cái gì?
Hân: Đánh máy kiêm giao liên.
Đ.T.: Xin lỗi anh một chút. Anh chờ máy chút nghe.
Hân vẫn cầm ống điện thoại. Anh nở nụ cười nhẹ nhàng, khẽ nhún vai. Tiếng vang ra từ đầu ống nghe rất rõ… – Alô, chị tổng đài ơi, Hà Nội bắt được chưa? – Ông chịu khó chờ một lát, đường dây bận rồi! – Cô làm ơn cho tôi nói chuyện nhanh nhanh lên nhé! Cám ơn cô. – Không có chi… Hân lại đặt ống nghe lên tai, chăm chú nhìn vào 10 chữ số xếp hình vòng cung trên chiếc máy vô tri, nhưng bây giờ là một nhịp cầu tâm hồn ấm áp trong đêm Giao thừa cô đơn của anh.
Đ.T.: Alô. Anh… anh gì đó hả?
Hân: Anh Hân.
Đ.T.: À, anh Hân. Làm nghề báo chắc vui lắm hả anh?
Hân: Vui lắm.
Đ.T.: Anh đánh máy chắc vui lắm hả?
Hân: Vui cái gì. Buồn gần chết. Tối ngày cứ gõ lọc cọc, lọc cọc như tiếng của một chiếc xe ngựa, mà là một con ngựa già.
Đ.T.: Sao anh nói có vẻ chua chát vậy?
Hân: Con trai mà ngồi đánh máy… chán lắm. Cứ ngồi lì một chỗ không hà. Nhưng có cái vui nhất là mình đi sửa văn của mấy ông nhà báo trong cơ quan mình.
Đ.T.: Sửa văn?
Hân: Chứ sao! Nói cho oai chứ sửa văn cái gì. Nhiều khi mấy ổng viết gấp, không để ý, trật chính tả, mình sửa lại thôi.
Đ.T.: Nói vậy chứ thấy một cái bài mình đánh máy đăng báo thì vui lắm chứ.
Hân: Mình vui thì ít mà tác giả vui thì nhiều.
Đ.T.: Sao vậy?
Hân: Mấy ổng vui vì mấy ổng lãnh tiền nhuận bút, còn mình thì có lãnh cái gì đâu. Chắc… xin lỗi, nãy giờ nói chuyện với… mà không biết tên… Chắc tên của… đẹp lắm. Nghe giọng nói dễ thương hết sức!
Đ.T.: Ghê! Tên xấu lắm, xấu như người vậy đó.
Hân: Chỉ cần làm quen với một người xấu mà có giọng nói như chim sơn ca như thế này là hên cả năm rồi, mong ước gì hơn.
Đ.T.: Ghê. Mấy anh chỉ giỏi tán.
Hân: Thì nghề của nhà báo mà.
Đ.T.: Hoàng. Minh Hoàng.
Hân: Chắc nghề của Hoàng cũng vui lắm? Nghe người ta nói chuyện muôn nơi.
Đ.T.: Nghe hoài cũng chán anh ơi. Tối ngày cứ nghe chuyện, nói chuyện, cầm phích không cũng đủ mệt. Hết giờ làm việc không muốn nói chuyện với ai hết.
Hân: Ngay cả với người yêu?
Đ.T.: Ghê. Người ta còn nhỏ chứ bộ.
Hân: Thì sau này. Vậy, ông nào có tán Hoàng chắc cũng chỉ cần im lặng. Đúng im lặng là vàng mà.
Hân ngưng nói một lát. Đầu dây bên kia cũng im lặng chờ đợi. Hân khẽ lấy tay nhón một miếng mứt, bỏ từ từ vào miệng.
Đ.T.: Alô, tại sao anh ngưng nói vậy?
Hân (cười): Thì như tôi vừa mới nói phải im lặng.
Đ.T. (vang lên tiếng cười): Ghê. Cái anh này.
Hân: Có khi nào Hoàng cắm lộn phích không?
Đ.T.: Có chứ. Lúc ấy mắc cười lắm. Hai người nói hai chuyện không ăn nhập gì với nhau hết. Nhưng bây giờ hết rồi, lúc mới vào thôi.
Hân: Hoàng làm được mấy năm rồi?
Đ.T.: Mới khoảng chừng năm anh ạ.
Hân: Trước đó, Hoàng làm gì?
Đ.T.: Thanh niên xung phong! Thanh niên xung phong chuyển ngành.
Hân: Thanh niên xung phong chuyển ngành hả? Xin bắt tay một cái. Đều là bồ nhà cả. Mình cũng là thanh niên xung phong chuyển ngành đây.
Đ.T.: Anh chờ Hoàng chút nghe! Alô, dạ tổng đài đây… Dạ, đường dây Đà Nẵng hư rồi. (Tiếng vang trong máy, một giọng đàn ông). Nếu Đà Nẵng hư thì cho nói chuyện với tổng đài chút – Dạ, tổng đài đây. – Năm nay tổng đài bao nhiêu tuổi? – Dạ, năm nay vừa tròn 50 tuổi. Dạ, tổng đài đang bận, ông cảm phiền nghe…
Đ.T.: Làm nghề này cũng vui, nhưng hơi bực. Cứ bị mấy ông phá hoài, nửa đêm như vậy cũng có người gọi điện đến phá.
Hân: Bây giờ thêm một người khách lạ đêm giao thừa nữa.
Đ.T.: Trước kia anh ở tổng đội nào?
Hân: Tổng đội 3 biên giới.
Đ.T.: Hả? Tổng đội 3 biên giới hả? Trời ơi, lúc trước Hoàng cũng ở tổng đội đó. Nhưng từ Tổng đội 5 sát nhập vào.
Hân: Còn tôi thì ở Tổng đội 1. Có lẽ vì thế mà ta không quen nhau.
Đ.T.: Nhiều khi tụi mình gặp nhau rồi cũng không biết chừng nữa. Nhưng Hoàng công tác ở tuyến sau không, nên… chưa gặp anh.
Hân: Thì bây giờ gặp cũng được rồi. Đi dâu cũng gặp thanh niên xung phong cả.
Đ.T.: Không biết anh có còn nhớ Giao thừa năm 1979 không? Năm đó vui ghê. Anh biết không, Hoàng cũng lên diễn kịch nữa.
Hân: Hoàng đóng vai gì? Có phải vai “Em, cô gái tổng đài” không?
Đ.T.: Không, vai sư nữ trong tuồng cải lương “Cây bắp chuối trổ bông”. Tại vác B.40 hoài, với lại nghe B.40 tụi K. giã như pháo Tết diễn tuồng đó. Anh em cười bò lăn…
Hân: Còn tụi này có màn thi giật cúp. Giải nhất một gói Hoa Mai, giải nhì một gói cà phê, giải ba bánh in.
Đ.T.: Thi nữa hả? Thi cái gì vậy?
Hân: Thi coi ông nào vá quần áo lẹ nhất và bắt được nhiều rệp của đứa khác bỏ vào túi mình. Rồi sau đó, anh em nảy ra sáng kiến bắt rệp đá với nhau.
Đ.T.: Mấy anh có cà phê với bánh in nữa à? Sang ghê ta.
Hân: Sang nỗi gì! Bánh in làm bằng sữa bột trộn đường, hấp cách thủy… ăn ngán thấy bà cố tổ. Còn cà phê là bo bo rang cho khét rồi đem xay. Nhưng vẫn ngon như thường.
Đ.T.: Lúc đó anh làm công tác gì vậy?
Hân: Được xông pha ra “miền khói lửa” giết bọn “giặc cá” nên thỉnh thoảng cũng bị đổ máu vì làm ẩu đứt tay…
Đ.T.: Trời ơi, gian nan ghê há. Đúng là kiểu: “Chồng người đi đánh sông Lô – Chồng em ngồi bếp rang ngô cháy quần…”.
Hân: Thôi đừng có nói như vậy, nghe dễ xa nhau lắm, bạn ơi.
Đ.T.: Tại vì… Tại vì… anh không chịu nói thiệt làm chi.
Hân: Thì… thì mình cũng làm những công chuyện như anh em khác thôi.
Đ.T.: À, chắc anh còn nhớ Thìn… Thìn C phó C5 đó.
Hân (giọng bùi ngùi): Nhớ chứ. Hôm trước tôi có đi ngang nghĩa trang liệt sĩ ở ngà ba Kà-tum, Xa-mát và có rẽ vào thăm mộ anh ấy. (Bên đầu dây kia Hoàng im lặng một lát).
Hân: Alô, alô…
Đ.T.: Alô, Hoàng đây…
Hân: Tôi còn nhớ lần gặp Thìn cuối cùng là lúc ở trạm xá của một đơn vị bộ đội. Khi tôi về mấy ngày thì trạm xá đó bị pháo kích trúng… Anh Thìn chết ở đó, nhưng nói cho cùng, nếu trạm xá không bị pháo kích trúng thì anh Thìn cũng khó qua nổi… Anh ấy bị thương ở phổi nặng lắm.
Đ.T.: Thôi… gần Giao thừa rồi, anh đừng nhắc tới chuyện buồn ấy nữa…
(Bỗng dưng tiếng pháo nổ hàng loạt, kéo dài… Tiếng còi tàu hụ vang lên từ bến cảng mà hai người – dù ở hai đầu dây – vẫn nghe rõ mồn một. Đâu đó tiếng chuông nhà thờ Đức Bà vang lên thánh thót…).
Đ.T.: Giao thừa rồi đó anh!
Hân: Ừ, Giao thừa rồi. Nhớ những cái Tết năm xưa quá. Xin chúc mừng Hoàng một năm mới đầy hạnh phúc.
Đ.T.: Anh Hân ơi, anh hát cho Hoàng nghe một bản đi.
Hân: Tôi mà hát cái gì, giọng nghe như vịt chui đầu vào ống lon sữa bò mà gào vậy…
Đ.T.: Hoàng không cần nghe giọng hát hay đâu… Alô, xin lỗi chờ Hoàng một chút. Alô, tổng đài đây (tiếng Hân nghe được trong ống điện thoại). – Alô, tổng đài đó hả? Xin chúc một năm mới hạnh phúc! – Dạ cám ơn ông. – Tổng đài ơi, cô tên gì vậy? – Dạ thưa ông, tổng đài đi ngủ rồi. Mai ông gọi lại nghe. – Thôi… mà, người đẹp… – Dạ thưa ông, tổng đài đi ngủ rồi. Ông cảm phiền nghe… Alô, anh Hân đó hả, anh hát cho Hoàng nghe một bản nào của thanh niên xung phong đi.
Hân: Thôi kệ, mình hát bài “Những bông hoa trên tuyến lửa” của Đỗ Trung Quân và Nguyễn Cửu Dũng nghe. Hai thằng cha nội đó là thanh niên xung phong thứ thiệt đó.
(Hân cầm đàn và hát vào máy điện thoại. Giọng của anh hát không hay lắm, mặc dầu rất trúng nhịp. Tuy nhiên, người ta vẫn nghe được một cái gì đó thật lắng của tâm hồn. Hình hư đôi lúc, giọng của Hân có nước mắt).
Đ.T.: Anh hát hay ghê! Hay vì tình cảm chứ không phải vì giọng hát.
Hân: Hoàng ơi, nhà Hoàng ở đâu?
Đ.T.: Bí mật. Hoàng sắp đi xa rồi. Không gặp được đâu.
Hân: Nghĩa là nghỉ làm luôn?
Đ.T.: Chưa chắc. Đâu phải đi xa nghĩa là nghỉ làm việc.
Hân: Sang năm, chắc mình nghỉ việc ở đây quá.
Đ.T.: Sao vậy?
Hân: Buồn chán!
Đ.T.: Ghê. Buồn chán!
Hân: Khi là thanh niên xung phong mình làm công tác đâu đến nỗi tệ, nhưng bây giờ chuyển ngành rồi, mà làm cái gì đâu á, không trúng với sở thích của mình.
Đ.T.: Ghê, làm ở nhà báo cũng thích lắm chớ bộ. Được đọc bản thảo trước của mấy ông nhà văn, nhà báo, được tiếp xúc với những người làm văn nghệ. Đâu phải như nghề của mình, chung quanh toàn là những ổ cắm phích, dây điện và tiếng nói của những người xa lạ. Mình có chán đâu.
Hân: Nhưng Hoàng là con gái, và sự đóng góp của Hoàng trong thời gian qua làm sao bằng được những người con trai. Họ hi sinh đâu phải là để làm những công việc như… như mình đang làm chẳng hạn.
Đ.T. (im lặng một lát): Anh Hân này, Hoàng nghĩ nếu mà anh có thích một công việc nào đó thì cũng có thể tự phấn đấu học thêm ngoài giờ. À, biết đâu chừng sau này anh sẽ trở thành một nhà văn. Cứ ngồi đánh máy bản thảo riết rồi anh viết văn hay hồi nào mà anh không biết đó. Như một nhà văn nổi tiếng nào đó của nước Anh, ông ta chỉ là thợ sắp chữ thôi, mà sau này nổi tiếng cả thế giới.
Hân: Mình đâu dám mơ làm nhà văn. Không có khiếu, không có vốn sống…
Đ.T.: Thì anh cứ viết chuyện anh sống ở thanh niên xung phong, hoặc là câu chuyện đêm nay chẳng hạn…
Hân: Con trai gì mà cứ ngồi đánh máy. Chán lắm.
Đ.T.: Chứ anh Hân muốn làm gì nào?
Hân: Làm gì thì cũng chưa biết.
Đ.T.: Chính anh còn chưa biết chọn cho mình công việc gì nữa thì làm sao người ta phân công cho anh được. Thôi, nếu chưa được làm việc mình thích thì hãy cố gắng thích công việc của mình đang làm vậy.
Hân: Cha, đầu năm mình lại được một người lên lớp.
Đ.T.: Cho nó mau lớn. Thôi, Hoàng buồn ngủ quá rồi. Nãy giờ mình nói chuyện cũng lâu. Thôi, Hoàng đi ngủ đây. Chúc anh một năm đầy hạnh phúc và sớm trở thành nhà văn.
Hoàng cúp máy. Hân ngẩn ngơ cứ cầm máy chờ đợi. Đầu dây không có tiếng trả lời. Anh gác máy. Cầm lấy đàn, anh dạo một vài nốt nhạc đầu của bài “Trên đường đời”. Anh khẽ nhún vai lẩm bẩm: “Chưa bằng ai mà bày đặt lên lớp…”.
oOo
Mồng ba Tết, Hân là người vào cơ quan sớm nhất. Những cánh mai rơi lả tả trong phòng khách. Những trái dưa hấu không còn ở đó nữa. Vội vã, Hân đi lại chiếc máy điện thoại, quay số 10.
Hân: Alô. Tổng đài đó phải không ạ? Hoàng đó hả?
Đ.T.: Không phải đâu ông ơi.
Hân: Xin lỗi, cô làm ơn cho tôi gặp cô Hoàng một chút.
Đ.T.: Ông ơi, ở đây không có cô nào tên Hoàng hết.
Hân: Có mà, cô giấu tôi hoài, tôi mới nói chuyện với cô ấy hôm Giao thừa mà…
Đ.T.: Đêm Giao thừa? Ông để tôi xem lại lịch trực.
Hân: Cô Hoàng mới chuyển về làm, trước là thanh niên xung phong đó.
Đ.T.: Ở đây không có cô nào là thanh niên xung phong chuyển ngành hết. A, đêm trực Giao thừa là cô Hồng. Hoàng là tên chồng sắp cưới của cô ấy. À, rất xui cho ông là cô ấy nghỉ phép để chuẩn bị lấy chồng.
Hân: Chắc không phải đâu, cô Hoàng là thanh niên xung phong mà.
Đ.T.: Ông biết bằng tôi làm sao được. Có phải cô Hồng là một cô bộ đội mới chuyển ngành không? TRước kia, cô đi bộ đội, làm y tá và có chiến đấu ở biên giới nữa. Cô ấy có một người yêu tên Thìn, anh này là thanh niên xung phong. Tôi nghe nói hai người trước kia là bạn học cùng trường. Nhưng anh Thìn thì đi thanh niên xung phong, còn cô ấy thì đi bộ đội. Oái oăm một chỗ là hai người gặp nhau tại chiến trường, lúc anh ấy bị thương nặng. Tội nghiệp, khi trạm xá bị pháo kích, cô ấy không nề hà thân mình, dìu anh ấy ra khỏi trận pháo. Nhưng không may, cô ấy bị miểng pháo cắt đứt một chân, còn anh Thìn thì hi sinh ngay trong vòng tay của…
Hân (hỏi dồn dập): Nhưng… nhưng sao bây giờ cô ấy lại đi lấy chồng?
Đ.T.: Anh này kỳ chưa. Cô ấy đi lấy chồng là chuyện của cô ấy. Không lẽ anh bắt người ta ở giá. Nhưng đó là chuyện của quá khứ. Hãy bắt đầu làm lại tương lai anh ạ. Tội nghiệp, Hồng phấn đấu ghê lắm trong công tác này, kể từ khi cô ấy được giải ngũ.
Hân: Dạ cảm ơn chị. Nếu chị gặp cô Hồng xin nhắn là Hân gửi lời thăm hỏi và chúc cô ấy hạnh phúc.
Hân gác máy, mặt bần thần. Tiếng cười nói vang rân của bạn đồng nghiệp như báo hiệu một ngày mới đã bắt đầu. Anh gắn những tờ giấy vào ru-lô máy chữ, đánh vài dòng, nhưng hình như trí óc anh đang cố hình dung ra một người con gái thương tật, đang xoay xở chung quanh những hàng dài ổ phích và liến thoắng “Alô, alô, đây tổng đài, đây tổng đài…”.
oOo
Không biết Hân có nghe theo lời khuyên của giọng nói Giao thừa năm trước phấn đấu để trở thành nhà văn hay không, nhưng trên một tờ báo xuân năm sau, người ta có đọc được một
[truyện ngắn](http://thanghe.com/category/truyen-ngan) mang tên: “Câu chuyện đêm Giao thừa”. Và tên tác giả là…
* (1982)*
## Gửi phản hồi Hủy trả lời

Vary: Accept-Encoding,Cookie

Accept-Ranges: bytes

Cache-Control: max-age=0, public, must-revalidate, proxy-revalidate

X-Powered-By: W3 Total Cache/0.9.4

Pragma: public


text:
083.720.6187-0972924961
le_hieu_29 - 19/03/2012
I. CẤU TRÚC PHẦN CỨNG CỦA MỘT VI XỬ LÝ
Những kiến thức được diễn đạt trong tài liệu này là những ý kiến mang tính chủ quan mà người viết muốn san sẻ với các bạn đọc có cùng mối quan tâm và chỉ liên quan đến những vấn đề cơ bản của kỹ thuật vi xử lý nói chung, không phải là kiến thức áp dụng cho một loại vi xử lý cụ thể.
Trước hết để tránh những băn khoăn đáng tiếc trong khi nghiên cứu tài liệu, tôi xin được giới thiệu đôi chút về 02 khái niệm “vi xử lý” (microprocessor) và “vi điều khiển (microcontroller). Về cơ bản hai khái niệm này không khác nhau nhiều, “vi xử lý” là thuật ngữ chung dùng để đề cập đến kỹ thuật ứng dụng các công nghệ vi điện tử, công nghệ tích hợp và khả năng xử lý theo chương trình vào các lĩnh vực khác nhau. Vào những giai đoạn đầu trong quá trình phát triển của công nghệ vi xử lý, các chip (hay các vi xử lý) được chế tạo chỉ tích hợp những phần cứng thiết yếu như CPU cùng các mạch giao tiếp giữa CPU và các phần cứng khác. Trong giai đoạn này, các phần cứng khác (kể cả bộ nhớ) thường không được tích hợp trên chip mà phải ghép nối thêm bên ngoài. Các phần cứng này được gọi là các ngoại vi (Peripherals). Về sau, nhờ sự phát triển vượt bậc của công nghệ tích hợp, các ngoại vi cũng được tích hợp vào bên trong IC và người ta gọi các vi xử lý đã được tích hợp thêm các ngoại vi là các “vi điều khiển”. Việc tích hợp thêm các ngoại vi vào trong cùng một IC với CPU tạo ra nhiều lợi ích như làm giảm thiểu các ghép nối bên ngoài, giảm thiểu số lượng linh kiện điện tử phụ, giảm chi phí cho thiết kế hệ thống, đơn giản hóa việc thiết kế, nâng cao hiệu suất và tính linh hoạt. Trong tài liệu này, ranh giới giữa hai khái niệm “vi xử lý” và “vi điều khiển” thực sự không cần phải phân biệt rõ ràng. Chúng tôi sẽ dùng thuật ngữ “vi xử lý” khi đề cập đến các khái niệm cơ bản của kỹ thuật vi xử lý nói chung và sẽ dùng thuật ngữ “vi điều khiển” khi đi sâu nghiên cứu một họ chip cụ thể.
Về cơ bản kiến trúc của một vi xử lý gồm những phần cứng sau:
- Đơn vị xử lý trung tâm CPU (Central Processing Unit).
- Các bộ nhớ (Memories).
- Các cổng vào/ra song song (Parallel I/O Ports).
- Các cổng vào/ra nối tiếp (Serial I/O Ports).
- Các bộ đếm/bộ định thời (Timers).
Ngoài ra với mỗi loại vi điều khiển cụ thể còn có thể có thêm một số phần cứng khác như bộ biến đổi tương tự-số ADC, bộ biến đổi số-tương tự DAC, các mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…
Bộ não của mỗi vi xử lý chính là CPU, các phần cứng khác chỉ là các cơ quan chấp hành dưới quyền của CPU. Mỗi cơ quan này đều có một cơ chế hoạt động nhất định mà CPU phải tuân theo khi giao tiếp với chúng. Để có thể giao tiếp và điều khiển các cơ quan chấp hành (các ngoại vi), CPU sử dụng 03 loại tín hiệu cơ bản là tín hiệu địa chỉ (Address), tín hiệu dữ liệu (Data) và tín hiệu điều khiển (Control). Về mặt vật lý thì các tín hiệu này là các đường nhỏ dẫn điện nối từ CPU đến các ngoại vi hoặc thậm chí là giữa các ngoại vi với nhau. Tập hợp các đường tín hiệu có cùng chức năng gọi là các bus. Như vậy ta có các bus địa chỉ, bus dữ liệu và bus điều khiển. Có thể mô tả sơ bộ cấu trúc phần cứng của một vi xử lý theo hình sau:
Sau đây là mô tả sơ bộ về các phần cứng bên trong một vi xử lý.
1. Đơn vị xử lý trung tâm CPU: CPU có cấu tạo gồm có đơn vị xử lý số học và lôgic (ALU), các thanh ghi, các khối lôgic và các mạch giao tiếp. Chức năng của CPU là tiến hành các thao tác tính toán xử lý, đưa ra các tín hiệu địa chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa ra thông qua các lệnh (Instructions).
2. Bộ nhớ: Nhìn chung có hai loại bộ nhớ là bộ nhớ chương trình và bộ nhớ dữ liệu. Bộ nhớ chương trình dùng để chứa mã chương trình hướng dẫn CPU thực hiện một nhiệm vụ nào đó. Thông thường thì bộ nhớ chương trình là các loại bộ nhớ “không bay hơi” (non-volatile), nghĩa là không bị mất nội dung chứa bên trong khi ngừng cung cấp nguồn nuôi. Có thể kể ra một số bộ nhớ thuộc loại này như: ROM, PROM, EPROM, EEPROM, Flash. Bộ nhớ dữ liệu là bộ nhớ dùng để chứa dữ liệu (bao gồm các tham số, các biến tạm thời…). Tuỳ thuộc loại dữ liệu mà bộ nhớ loại này có thể là loại “không bay hơi” hoặc “bay hơi” (mất dữ liệu khi cắt nguồn nuôi). Loại “bay hơi” thường thấy là các bộ nhớ SRAM.
3. Cổng vào/ra song song: Đây là các đường tín hiệu được nối với một số chân của IC dùng để giao tiếp với thế giới bên ngoài IC. Giao tiếp ở đây là đưa điện áp ra hoặc đọc vào giá trị điện áp tại chân cổng. Các giá trị điện áp đưa ra hay đọc vào chỉ có thể đwocj biểu diễn bởi một trong hai giá trị lôgic (0 hoặc 1). Trong kỹ thuật vi xử lý, người ta thường dùng quy ước lôgic dương: giá trị lôgic 0 ứng với mức điện áp thấp xấp xỉ 0VDC, giá trị lôgic 1 ứng với mức điện áp cao xấp xỉ +5VDC. Tùy loại vi xử lý mà “khoảng xấp xỉ” đó là khác nhau nhưng nhìn chung là tương thích với mức lôgic TTL. Mỗi cổng vào/ra song song thường gồm 08 đường vào/ra khác nhau và gọi là các cổng 08 bit. Các đường tín hiệu vào/ra của các cổng và thuộc cùng một cổng là độc lập với nhau. Điều đó có nghĩa là ta có thể đưa ra hay đọc vào các giá trị lôgic khác nhau đối với từng chân cổng (từng đường tín hiệu vào/ra). Một điều cần chú ý nữa đối với các cổng vào/ra đó là chúng có thể được tích hợp thêm (nói đúng hơn là kiêm thêm) các chức năng đặc biệt liên quan đến các ngoại vi khác.
4. Cổng vào/ra nối tiếp: Khác với cổng song song, với cổng nối tiếp các bit dữ liệu được truyền lần lượt trên cùng một đường tín hiệu thay vì truyền cùng một lúc trên các đường tín hiệu khác nhau. Thông thường thì việc truyền dữ liệu bằng cổng nối tiếp phải tuân theo một cơ chế, một giao thức hay một nguyên tắc nhất định. Có thể kể ra một số giao thức như SPI, I2C, SCI…
Cổng nối tiếp có 02 kiểu truyền dữ liệu chính:
- Truyền đồng bộ (synchronous): thiết bị truyền và thiết bị nhận đều dùng chung một xung nhịp (clock).
- Truyền dị bộ (asynchronous): thiết bị truyền và thiết bị nhận sử dụng hai nguồn xung nhịp riêng. Tuy nhiên hai nguồn xung nhịp này không được khác nhau quá nhiều.
Xung nhịp là yếu tố không thể thiếu trong truyền dữ liệu nối tiếp và nó có vaitrò xác định giá trị của bit dữ liệu (hay nói đúng hơn là xác định thời điểm đọc mức lôgic trên đường truyền dữ liệu).
Cổng nối tiếp có thể có một trong các tính năng sau:
-Đơn công: thiết bị chỉ có thể hoặc truyền hoặc nhận dữ liệu.
-Bán song công: thiết bị có thể truyền và nhận dữ liệu nhưng tại một thời điểm chỉ có thể làm một trong hai việc đó.
-Song công: thiết bị có thể truyền và nhận dữ liệu đồng thời.
5. Bộ đếm/Bộ định thời: Đây là các ngoại vi được thiết kế để thực hiện một nhiệm vụ đơn giản: đếm các xung nhịp. Mỗi khi có thêm một xung nhịp tại đầu vào đếm thì giá trị của bộ đếm sẽ được tăng lên 01 đơn vị (trong chế độ đếm tiến/đếm lên) hay giảm đi 01 đơn vị (trong chế độ đếm lùi/đếm xuống).
Xung nhịp đưa vào đếm có thể là một trong hai loại: Xung nhịp bên trong IC. Đó là xung nhịp được tạo ra nhờ kết hợp mạch dao động bên trong IC và các linh kiện phụ bên ngoài nối với IC. Ta có thể ví đó là “nhịp tim” để toàn bộ các phần cứng bên trong vi xử lý (bao gồm cả CPU và các ngoại vi) có thể hoạt động được. Trong trường hợp sử dụng xung nhịp loại này, người ta gọi là các bộ định thời (timers). Do xung nhịp bên loại này thường đều đặn nên ta có thể dùng để đếm thời gian một cách khá chính xác. Xung nhịp bên ngoài IC. Đó là các tín hiệu lôgic thay đổi liên tục giữa 02 mức 0-1 và không nhất thiết phải là đều đặn. Trong trường hợp này người ta gọi là các bộ đếm (counters). Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bên ngoài như đếm các sản phầm chạy trên băng chuyền, đếm xe ra/vào kho bãi…
Một khái niệm quan trọng cần phải nói đến là sự kiện “tràn” (overflow). Nó được hiểu là sự kiện bộ đếm đếm vượt quá giá trị tối đa mà nó có thể biểu diễn và quay trở về giá trị 0. Với bộ đếm 8 bit, giá trị tối đa là 255 và là 65535 với bộ đếm 16 bit. Ngoài các phần cứng nêu trên còn phải kể đến một khối lôgic khác là khối giao tiếp bus. Khối này có chức năng ghép nối giữa các bus bên trong chip và các chân đưa ra ngoài chip. Mục đích của việc đưa các tín hiệu địa chỉ, dữ liệu và điều khiển ra ngoài là nhằm mở rộng khả năng phối ghép thêm của vi xử lý với các ngoại vi khác (chủ yếu là các bộ nhớ ngoài) ngoài các ngoại vi được tích hợp trên IC. Thông thường thì số lượng các đường tín hiệu là giữ nguyên khi đưa ra ngoài chip, tuy nhiên trong một số trường hợp số lượng các đường tín hiệu có thể nhỏ hơn số lượng thực bên trong (ví dụ như trường hợp của vi xử lý 8088, bus dữ liệu bên trong là 16 bit nhưng đưa ra ngoài chỉ có 8 bit). Khi đưa ra ngoài, các tín hiệu địa chỉ và dữ liệu có thể được ghép với nhau (cùng sử dụng chung một số chân nào đó) hoặc được tách riêng (tín hiệu địa chỉ dùng một số chân, tín hiệu dữ liệu dùng một số chân khác). Người ta thường “dồn kênh” (multiplex), tức là ghép chức năng, giữa bus địa chỉ và bus dữ liệu để giảm thiểu số chân cần thiết. Trong trường hợp này, tín hiệu địa chỉ sẽ xuất hiện trước, sau đó là tín hiệu dữ liệu trên cùng một tập hợp các đường tín hiệu. Để tách được 2 loại tín hiệu đó thì nhà sản xuất cung cấp cho người sử dụng một đường tín hiệu điều khiển có tên là tín hiệu chốt địa chỉ (thường ký hiệu là ALE). Tín hiệu này sẽ tích cực khi tín hiệu địa chỉ xuất hiện và không tích cực khi tín hiệu dữ liệu xuất hiện trên bus. Các IC thích hợp với việc tách tín hiệu địa chỉ và dữ liệu là các IC thuộc họ 74xx373/374 hoặc 74xx573/574.
Trên đây là mô tả sơ bộ cấu trúc phần cứng của một vi xử lý. Trước khi đi tiếp, tôi xin chia sẻ với bạn một kinh nghiệm quý báu khi nghiên cứu kỹ thuật vi xử lý. Đó là bạn phải biết chấp nhận. Đúng! Kỹ thuật vi xử lý không phải là một cái gì đó tâm linh, đó là một môn khoa học có cả cơ sở lý thuyết và minh chứng thực tế rõ ràng, đúng đắn. Tuy nhiên sẽ là không sai nếu tôi nói rằng nó cũng rất trừu tượng. Đối với bạn, khi các bạn đang đọc những dòng chữ trong tài liệu này, chúng ta ngầm hiểu rằng bạn mới chỉ bắt đầu quá trình nghiên cứu. Đó là một lĩnh vực có thể nói ít nhiều mới mẻ và bạn chắc chắn hầu như chưa có nhiều hình dung về cái gì đang diễn ra trong một con chip chỉ bé bằng đầu ngón tay! Điều đó làm bạn cũng như tôi trước đây, và tôi nghĩ là đúng với tất cả những ai đã từng nghiên cứu kỹ thuật vi xử lý, cảm thấy có cái gì đó thật trừu tượng, khó hiểu, rất gây tò mò trong các khái niệm (dù là khái niệm đơn giản) liên quan đến lĩnh vực này. Chúng ta khi mới bắt đầu đều tự đưa ra những câu hỏi cho mình đại loại như: tại sao vi xử lý có thể làm được nhiều việc đến vậy? cái gì diễn ra bên trong chip khi chúng ta cấp nguồn nuôi cho nó? tại sao ta lại có thể tác động đến timer hay các ngoại vi khác thông qua các dòng lệnh viết cho CPU? hoặc thậm chí là mạch điện bên trong một vi xử lý, một ngoại vi, một cổng vào/ra như thế nào? Nhưng bạn có biết nếu đi tìm câu trả lời cho những thắc mắc đó, bạn sẽ có thể mất rất nhiều thời gian, công sức mà hiệu quả nghiên cứu sẽ không cao, và cho đến khi tìm thấy câu trả lời thỏa mãn cho một vấn đề mà bạn băn khoăn, có thể bạn đã quên mất một vài hay tất cả những kiến thức còn lại! Như tôi đã nói, khi mới bắt đầu nghiên cứu, bạn hãy chấp nhận những kiến thức cơ bản như chấp nhận các tiên đề. Hãy coi đó là những cái mà người ta đã xây dựng nên một cách đúng đắn, giờ đây bạn không phải mất công tìm tòi, chứng minh sự đúng đắn của chúng. Thay vào đó, bạn chỉ cần tiếp thu và thừa hưởng. Hãy công nhận chúng như một điều gì đó hiển nhiên. Một cách đơn giản, bạn không cần phải tìm hiểu vấn đề đến mức rõ ràng từng đường tín hiệu trong một mạch điện đã được tích hợp bé xíu trong chip. Vào lúc này (vâng, tôi nói là vào lúc này!), bạn chỉ cần biết, cái mạch điện đó người ta gọi là cái “bộ đếm”, là cái “cổng vào/ra”, chức năng của chúng là gì, nguyên lý hoạt động ra sao và để điều khiển được chúng thì cần phải làm những gì (cụ thể là phải viết những gì trong khi lập trình). Tuy nhiên, nói như vậy không có nghĩa tôi khuyên các bạn học một cách “hổng”, không cần đến kiến thức cơ bản. Nếu bạn là người đã có ít nhiều kiến thức điện tử (đặc biệt là điện tử số), bạn quả là may mắn khi đã có một nền tảng kiến thức vững chắc khi tiếp cận với kỹ thuật vi xử lý. Bạn có thể hiểu dễ dàng cấu tạo của một bộ đếm, nguyên lý hoạt động của nó và chắc chắn bạn thấy dễ dàng tiếp thu hơn nếu như trong bài học tôi nói với bạn rằng “trong vi điều khiển họ 8051 có tích hợp ít nhất 02 ngoại vi gọi là các bộ đếm”. Đó là vì bạn đã có những khái niệm cơ bản, những hình dung về những cái gọi là “bộ đếm”. Nếu chưa có những khái niệm cơ bản, chưa có những mường tượng sơ bộ, bạn sẽ cảm thấy khó hiểu, nhưng sự khó hiểu đó chính là lý do để chúng ta làm việc với nhau! Chỉ cần kiên nhẫn đôi chút, những gì bạn phải chấp nhận một cách gượng ép và đôi khi có vẻ như vô lý vào lúc này, bạn sẽ nhận lại được câu trả lời thỏa mãn trong quá trình tìm hiểu kỹ thuật vi xử lý cùng tôi, đặc biệt khi bạn nghiên cứu và thực hành với các vi điều khiển cụ thể.
II. NGUYÊN LÝ HOẠT ĐỘNG CỦA MỘT VI XỬ LÝ
Trước hết, tôi sẽ nói qua về một khái niệm rất hay được nhắc tới trong kỹ thuật vi xử lý – “không gian địa chỉ”. Nó được hiểu là số lượng địa chỉ mà CPU có thể phân biệt được. Trong một bộ nhớ có rất nhiều ô nhớ và CPU thường phải truy nhập (ghi hoặc đọc) đến từng ô nhớ cụ thể, do đó CPU tất nhiên phải phân biệt được các ô nhớ riêng rẽ với nhau. Mỗi ô nhớ cần phải có một địa chỉ gắn với nó. Địa chỉ này chỉ dành riêng cho ô nhớ đó, không trùng với địa chỉ của một ô nhớ nào khác, khi truy nhập tới địa chỉ đó tức là truy nhập đến ô nhớ đó. Ngoài ô nhớ, trong vi xử lý còn có một số phần cứng khác cũng cần có một địa chỉ dành riêng cho nó như các thanh ghi điều khiển, các thanh ghi dữ liệu… Thường thì hầu như tất cả những phần cứng cần được truy nhập hay tác động đến đều phải được gắn với một hay nhiều địa chỉ. Lấy ví dụ, để có thể giao tiếp và điều khiển một bộ đếm (timer/counter), CPU cần phải tác động đến các thanh ghi quy định chế độ hoạt động, thanh ghi chứa số đếm của bộ đếm đó. Các thanh ghi này đều có địa chỉ gán riêng cho chúng và nhờ các địa chỉ đó mà CPU có thể ghi/đọc giá trị của các thanh ghi, qua đó tác động lên bộ đếm.
Vi xử lý hoạt động theo một số nguyên tắc cơ bản sau:
Các thao tác tính toán xử lý sẽ được vi xử lý, hay nói đúng hơn là CPU, thực hiện theo các chỉ dẫn (chính là các lệnh) đặt trong bộ nhớ chương trình. Đương nhiên trong bộ nhớ chương trình không có những chỉ dẫn kiểu như “hãy đưa điện áp +5VDC ra chân cổng A!” hay “dừng cái bộ đếm đó lại, đừng cho nó đếm thêm một xung nhịp nào nữa!” hay “hãy tạm thời chờ ở đây cho đến khi nào điện áp tại chân B có giá trị lôgic bằng 0!”. Đó là ngôn ngữ của con người, các vi xử lý không nghe được và đương nhiên không hiểu được những câu đó, chúng chỉ có thể nhận biết được hai và chỉ hai giá trị lôgic trái ngược nhau mà thôi. Hai giá trị lôgic trái ngược nhau có thể là đen-trắng, không-có, cao-thấp… Điều đó không quan trọng, cái quan trọng là về mặt vật lý (điện học), nhờ một cơ chế nào đó mà khi đọc nội dung của bộ nhớ hay đọc giá trị lôgic của một cổng vào ra, vi xử lý có thể phân biệt được khi nào giá trị đọc được là giá trị lôgic thứ nhất và khi nào thì không phải thế. Theo truyền thống người ta quy định chung rằng các giá trị lôgic đó là 0 và 1. Biểu thị các giá trị lôgic đó theo quy ước lôgic dương là điện áp cao (xấp xỉ +5VDC) cho giá trị 1 và điện áp thấp (xấp xỉ 0VDC) cho giá trị 0. Như vậy, thay vì nói với vi xử lý rằng “hãy đưa ra giá trị lôgic 1 tại chân cổng A!”, người ta mã hoá câu nói đó thành một chuỗi các bit lôgic 0-1 (ví dụ 00001010 chẳng hạn) rồi đặt trong bộ nhớ chương trình của IC. CPU khi cấp nguồn nuôi sẽ đọc và tất nhiên nó hiểu cái chuỗi 0-1 đó có nghĩa là gì và nó sẽ thực hiện theo ý nghĩa của lệnh nó dịch ra từ chuỗi 0-1 đó. Vậy tại sao nó hiểu được? Xin trả lời là bạn lại lan man rồi đấy! Nó hiểu được đơn giản vì người ta chế tạo ra đã như thế rồi. Hãy biết chấp nhận như vậy vào lúc này!
Việc thực hiện các lệnh sẽ diễn ra tuần tự (lệnh ở địa chỉ thấp hơn được thực hiện trước) bắt đầu từ địa chỉ reset. Địa chỉ reset là địa chỉ của bộ nhớ chương trình mà tại đó, sau khi được cấp nguồn nuôi, CPU sẽ bắt đầu đọc và thực hiện theo chỉ dẫn được mã hóa đặt tại đó. Mỗi loại vi xử lý có một địa chỉ reset riêng (thường là từ 0000H) do nhà sản xuất quy định.
Các lệnh được thực hiện tuần tự là nhờ có thanh ghi “bộ đếm chương trình”(PC). Thanh ghi này chứa địa chỉ của ô nhớ chứa mã của lệnh tiếp theo sẽ được thực hiện. Khi CPU tìm nạp được mã của lệnh n, thanh ghi PC sẽ tự độngtăng lên 1 đơn vị để trỏ vào ô nhớ chứa mã của lệnh (n+1).
CPU thực hiện một lệnh theo các bước nhỏ. Thường thì các bước đó bao gồm: tìm nạp mã lệnh (fetch-tức là truy cập bộ nhớ chương trình, đọc lấy giá trị tại ô nhớ có địa chỉ trỏ bởi thanh ghi PC, lưu vào một thanh ghi chuyên dùng chứa mã lệnh trong CPU), giải mã lệnh (decode-giải mã giá trị đã lấy được và đang đặt trong thanh ghi chứa mã lệnh trong CPU), cuối cùng là thực hiện lệnh (execute-thực hiện chỉ dẫn được giải mã ra từ mã lệnh đọc được). Những vi xử lý đầu tiên được thiết kế với phương thức thực hiện lệnh một cách thuần “tuần tự”, nghĩa là thực hiện tuần tự 3 bước đối với lệnh thứ n rồi mới thực hiện 3 bước tiếp theo của lệnh thứ (n+1).
Sau này, các vi xử lý được thiết kế với CPU được module hóa thành từng phần riêng biệt có hoạt động khá độc lập với nhau, do đó mà cấu trúc xử lý đường ống (pipeline) ra đời. Với cấu trúc này, các bước nhỏ trong việc thực hiện các lệnh sẽ được gối lên nhau, trong khi một phần cứng của CPU thực hiện bước 3 (thực hiện lệnh) của lệnh n thì một phần cứng khác của CPU thực hiện việc giải mã lệnh tiếp theo (lệnh thứ n+1), và đồng thời một phần cứng khác nữa trong CPU tìm nạp mã của lệnh thứ (n+2).
Với cấu trúc xử lý đường ống, tốc độ xử lý của CPU đã được nâng cao rõ rệt và tất cả những vi xử lý ngày nay đều được thiết kế với CPU theo cấu trúc xử lý này.
Ngăn xếp(Stack): Là một đoạn bộ nhớ (thường đặt trong RAM) dùng để chứa địa chỉ trở về của trong các trường hợp chương trình con hoặc chương trình phục vụ ngắt được gọi. Ngoài ra ngăn xếp còn dùng để lưu các dữ liệu tạm thời. Ngăn xếp hoạt động theo cơ chế “vào sau ra trước” (LIFO-Last In First Out). Thanh ghi con trỏ ngăn xếp (SP-Stack Pointer) là thanh ghi có nội dung là địa chỉ của ô nhớ trên cùng của ngăn xếp. Giá trị của SP được tăng giảm một cách tự động. Ngăn xếp là phần cứng vô cùng quan trọng trong vi xử lý, nó tham gia vào các thao tác rẽ nhánh (trừ thao tác nhảy) của chương trình. Người lập trình phải hết sức cẩn thận khi gán giá trị khởi tạo cho SP để tránh sự cố tràn ngăn xếp hoặc ngăn xếp trùng với các vùng nhớ lưu dữ liệu khác. Khi xảy ra một trong các sự cố trên, sẽ không có cách nào kiểm soát được hoạt động của vi xử lý và có thể gây thiệt hại lớn đối với hệ thống. Giống như một trò chơi, khi bạn tham gia và vì một lý do nào đó phạm vào một trong hai lỗi đó, tất cả những gì bạn sẽ nhận được trên màn hình là dòng chữ “GAME OVER”!
Vậy thế nào là địa chỉ trở về? Như đã nói ở trên, vi xử lý thực hiện các lệnh một cách tuần tự: lệnh 1, lệnh 2,…, lệnh n, lệnh n+1…Tuy nhiên đôi khi nó gặp phải một lệnh gọi chương trình con và do đó phải chuyển sang thực hiện chương trình con đó. Đoạn mã lệnh của chương trình con thường nằm ở một nơi khác trong bộ nhớ chương trình, tức là có địa chỉ không liên tiếp với lệnh gọi chương trình con. Nhắc lại rằng thanh ghi PC lúc này đang chứa địa chỉ của lệnh tiếp sau lệnh gọi chương trình con. CPU chỉ biết thực hiện những gì có tại địa chỉ chứa trong PC, do vậy mà PC cần phải được nạp giá trị mới là địa chỉ của mã lệnh đầu tiên của chương trình con. Việc nạp giá trị mới cho PC được thực hiện một cách tự động khi bạn gọi một chương trình con, ngoài ra địa chỉ của lệnh tiếp sau lệnh gọi chương trình con trong chương trình chính cũng được tự động lưu lại để sau khi thực hiện xong chương trình con, CPU sẽ có thể quay lại thực hiện tiếp chương trình chính một cách đúng chỗ, tuần tự như không có chuyện gì xảy ra. Nơi lưu giữ một cách tự động địa chỉ trở về (địa chỉ của lệnh tiếp sau lệnh gọi chương trình con) ấy chính là ngăn xếp. Người ta thực hiện việc chia chương trình chính thành các chương trình con (là các đoạn chương trình thực hiện một nhiệm vụ cụ thể) để dễ dàng cho việc lập trình và dò lỗi. Bạn sẽ dần có được kỹ năng chia nhỏ chương trình chính thành các chương trình con một cách hợp lý trong quá trình lập trình cho vi xử lý.
Ngăn xếp cũng có vai trò tương tự như đối với ngắt. Vậy ngắt là gì? Đó là những yêu cầu do các ngoại vi (là các phần cứng tích hợp trên IC hoặc các tác động từ bên ngoài) gửi tới CPU nhằm đòi hỏi những đáp ứng nhất định. Mục đích của việc thiết kế cơ chế ngắt trong vi xử lý là nhằm tiết kiệm thời gian cho CPU. Trong hầu hết các trường hợp, vi xử lý cần phải thực hiện nhiều nhiệm vụ trong thời gian rất ngắn và liên tục. Để có thể đáp ứng kịp thời với các sự kiện cần xử lý, CPU có thể tiến hành thăm dò polling) liên tục các sự kiện để xem khi nào chúng xảy ra thì xử lý, đáp ứng lại. Tuy nhiên nếu làm vậy thì lãng phí rất nhiều thời gian của CPU trong khi còn có rất nhiều nhiệm vụ khác đang chờ được thực hiện, ngoài ra CPU không thể thăm dò nhiều sự kiện cùng một lúc được. Người ta tạo ra ngắt để CPU không phải thăm dò liên tục một hay nhiều sự kiện đó. Bằng cách ghép các sự kiện cần đáp ứng với các cơ chế ngắt khác nhau, khi một sự kiện nào đó xảy ra, phần cứng phụ trách ngắt tích hợp trên CPU sẽ tự động báo cho CPU biết rằng sự kiện đã xảy ra. CPU sẽ dừng công việc đang làm lại (nhưng phải thực hiện xong lệnh đang được thực hiện, dù mới chỉ ở giai đoạn tìm nạp mã lệnh), và chuyển sang đáp ứng bằng cách thực hiện chương trình phục vụ ngắt tương ứng. Đáp ứng xong, tức là xử lý xong sự kiện gây ra ngắt, CPU sẽ tiếp tục quay lại làm tiếp công việc đang dang dở (đương nhiên là nhờ hoạt động của ngăn xếp). Nói đến ngắt không thể không nói đến mức ưu tiên của các loại ngắt khác nhau. Có 02 loại mức ưu tiên ngắt cơ bản là ưu tiên giữa các ngắt xảy ra đồng thời (ngắt A và ngắt B xảy ra đồng thời cùng một lúc) và ưu tiên giữa các ngắt xảy ra khác thời điểm (đang thực hiện chương trình phục vụ ngắt A thì lại xảy ra ngắt B). Trong cả hai trường hợp, ngắt có mức ưu tiên cao hơn sẽ luôn được phục vụ ngay lập tức. Tùy loại vi xử lý mà mức ưu tiên có thể thay đổi được linh hoạt hoặc cố định.
Khác với chương trình con, thời điểm thực hiện chương trình phục vụ ngắt trong hầu hết các trường hợp là nằm ngoài sự kiểm soát của người lập trình do ngắt có thể xảy ra bất kỳ thời điểm nào, khi CPU đang thực hiện bất kỳ một lệnh nào trong chương trình chính. Vì thế cơ chế hoạt động một cách tự động của ngăn xếp là không thể thiếu trong một vi xử lý. Cũng vì thế mà cần phải xem xét kỹ lưỡng việc sử dụng các tài nguyên (thanh ghi, ô nhớ, biến, thậm chí là các ngoại vi) của các chương trình phục vụ ngắt để tránh tranh chấp với chương trình chính. Thông thường thì khi vào đầu chương trình phục vụ ngắt, người ta lưu lại những tài nguyên dùng chung đó trước khi thay đổi chúng. Kết thúc chương trình phục vụ ngắt, các tài nguyên sẽ được khôi phục lại giá trị của chúng trước khi trở về chương trình chính. Thực hiện các thao tác lưu trữ và khôi phục này đương nhiên liên quan đến ngăn xếp, chỉ có điều không phải thực hiện một cách tự động bởi CPU mà phải do người lập trình chủ động thực hiện bằng các lệnh. Người lập trình phải quyết định cất những gì và lấy ra những gì! Cũng phải chú ý đến cơ chế hoạt động “vào sau ra trước” của ngăn xếp và cất đi bao nhiêu thì phải lấy ra bấy nhiêu. Nếu không bạn sẽ phạm phải một lỗi tương tự như tràn ngăn xếp và chỉ có Chúa mới biết được chuyện gì sẽ xảy ra khi địa chỉ trở về không được nạp đúng vào thanh ghi PC. Một trong những tài nguyên hay bị thay đổi khi thực hiện chương trình phục vụ ngắt là các cờ trạng thái của CPU. Đó là các bit thể hiện trạng thái hiện thời của CPU và của kết quả thực hiện các lệnh. Các cờ này thường được ghép với nhau thành một thanh ghi và được gọi là thanh ghi trạng thái
III. LẬP TRÌNH CHO MỘT VI XỬ LÝ
Sau khi thiết kế xong phần cứng, bạn phải tiến hành lập trình cho vi xử lý để hoàn thiện sản phẩm của mình. Vi xử lý có thể được lập trình bằng ngôn ngữ bậc cao hay ngôn ngữ bậc thấp. Ngôn ngữ bậc thấp là ngôn ngữ được thiết kế riêng cho từng loại vi xử lý và thường được gọi là hợp ngữ (Assembly). Ngôn ngữ bậc cao là các ngôn ngữ gần với ngôn ngữ của con người và giống nhau cho nhiều loại vi xử lý. Mỗi loại ngôn ngữ đều có ưu và nhược điểm riêng. Với những người mới bắt đầu nghiên cứu về kỹ thuật vi xử lý, theo kinh nghiệm của riêng bản thân, tôi cho rằng nên bắt đầu với ngôn ngữ bậc thấp. Có một số điểm đáng lưu ý khi bạn lập trình cho một vi xử lý. Đó là:
- Trước tiên bạn phải hiểu rõ được các chế độ địa chỉ của vi xử lý đó. Chế độ địa chỉ chính là cách chỉ ra toán hạng nằm ở đâu. Toán hạng là các tham số, các hằng số, các ô nhớ, các thanh ghi, các bit, các cờ…hay nói chung là các đối tượng tham gia vào việc thực hiện lệnh. Thông thường thì một toán hạng (ví dụ như một thanh ghi) có thể được trỏ đến bằng một vài chế độ địa chỉ khác nhau. Mỗi chế độ địa chỉ có thế mạnh riêng của nó và tùy từng trường hợp mà ta nên chọn chế độ thích hợp khi lập trình.
- Sau đó bạn phải nắm bắt được tập lệnh (Instruction Set) của vi xử lý đó. Tập lệnh là tất cả những lệnh mà vi xử lý có thể hiểu được, có thể thực hiện được. Mỗi lệnh đều được mã hóa (hay được quy ước) bởi một chuỗi các bit 0 và 1. Các vi xử lý khác nhau thì có tập lệnh khác nhau do nhà sản xuất chip cung cấp.
- Trước khi bắt đầu viết các lệnh cụ thể, bạn nên viết lưu đồ thuật toán thực hiện các nhiệm vụ cụ thể. Lưu đồ thuật toán là sơ đồ diễn giải trình tự thực hiện các nhiệm vụ một cách lôgic và liền mạch. Viết lưu đồ thuật toán ngay cả cho các chương trình hết sức đơn giản là một thói quen rất tốt ngay cả khi bạn đã là một cao thủ trong lập trình vi xử lý. Chỉ cần mất chút thời gian thực hiện công việc này, bạn sẽ có được cái nhìn vừa bao quát vừa chi tiết đối với chương trình mình định viết, nhờ đó mà bạn lập trình nhanh hơn, hiệu quả hơn và dễ dàng phát hiện ra lỗi về thuật toán xử lý nếu chương trình chạy không như ý muốn. Đối với bản thân tôi mà nói, tôi cho rằng viết các dòng lệnh cho một vi xử lý không phải là khó, ngược lại nó rất dễ, cái khó là bạn phải biết được mình phải viết những gì hay nói đúng hơn là phải tìm ra một lưu đồ thuật toán đúng đắn. Khi đã tìm ra con đường đi đúng và hiệu quả, tất cả những gì còn lại phải làm là thể hiện các thao tác xử lý đó bằng cách lệnh của vi xử lý - một công việc mà bất cứ ai nắm rõ tập lệnh của vi xử lý đó đều có thể làm tốt. Khi lưu đồ thuật toán bạn lập ra là đúng, nếu sau khi lập trình mà vi xử lý hoạt động không như mong muốn thì lỗi chỉ có thể là do bạn chưa thể hiện bằng các dòng lệnh một cách đúng đắn những gì đã lập ra mà thôi. Dần dần, kinh nghiệm tích lũy được sẽ chỉ cho bạn cách thể hiện đúng một lưu đồ bất kỳ thậm chí ngay ở lần đầu tiên và theo như cách chúng tôi vẫn nói đùa trong chuyên môn, trình độ lập trình của bạn đã đạt đến cấp độ “plug and play”! - Chương trình sẽ được viết trong một file mã nguồn (thường có đuôi là ASM). - Phần mềm trên máy tính có tên là “Trình biên dịch” (Compiler) sẽ dịch file mã nguồn sang một file có đuôi là OBJ. File này chứa thông tin cần thiết để có thể chuyển đổi sang file có đuôi HEX hay file có đuôi BIN (là các file chứa mã chương trình đã được chuyển sang dạng Hexa hay Binary) để có thể nạp vào trong bộ nhớ chương trình của vi xử lý.
- Trong khi lập trình, hãy đặc biệt lưu ý đến các tình huống rẽ nhánh của chương trình. Các tình huống đó bao gồm các lệnh nhảy vô điều kiện, các lệnh nhảy có điều kiện, các lệnh gọi chương trình con, các tình huống xảy ra ngắt và đương nhiên phải chú ý đến các phần cứng liên quan như ngăn xếp hay các cờ trạng thái. - Với mỗi loại vi xử lý/vi điều khiển lại có nhiều hãng cung cấp các phần mềm trên máy tính dùng để soạn thảo và biên dịch. Các phần mềm này có các từ khóa khác nhau mà người lập trình phải tuân thủ khi sử dụng. Từ khóa là các ký hiệu được thể hiện bằng các ký tự, được viết trong file mã nguồn nhưng nó không phải là lệnh của vi xử lý, đương nhiên không được dịch ra mã máy, đó chỉ là các chỉ dẫn cho phần mềm trên máy tính thực hiện biên dịch các file mã nguồn sang mã máy một cách chính xác.
Nguồn svptit.org

markdown:
083.720.6187-0972924961
le_hieu_29 - 19/03/2012
**I. CẤU TRÚC PHẦN CỨNG CỦA MỘT VI XỬ LÝ**
Những kiến thức được diễn đạt trong tài liệu này là những ý kiến mang tính chủ quan mà người viết muốn san sẻ với các bạn đọc có cùng mối quan tâm và chỉ liên quan đến những vấn đề cơ bản của kỹ thuật vi xử lý nói chung, không phải là kiến thức áp dụng cho một loại vi xử lý cụ thể.
Trước hết để tránh những băn khoăn đáng tiếc trong khi nghiên cứu tài liệu, tôi xin được giới thiệu đôi chút về 02 khái niệm “vi xử lý” (
**) và “vi điều khiển ( microprocessor** **Về cơ bản kiến trúc của một vi xử lý gồm những phần cứng sau: ** *- Đơn vị xử lý trung tâm CPU (Central Processing Unit).* *- Các bộ nhớ (Memories).* *- Các cổng vào/ra song song (Parallel I/O Ports).* *- Các cổng vào/ra nối tiếp (Serial I/O Ports).* *- Các bộ đếm/bộ định thời (Timers).*
Ngoài ra với mỗi loại vi điều khiển cụ thể còn có thể có thêm một số phần cứng khác như bộ biến đổi tương tự-số ADC, bộ biến đổi số-tương tự DAC, các mạch điều chế dạng sóng WG, điều chế độ rộng xung PWM…
Bộ não của mỗi vi xử lý chính là CPU, các phần cứng khác chỉ là các cơ quan chấp hành dưới quyền của CPU. Mỗi cơ quan này đều có một cơ chế hoạt động nhất định mà CPU phải tuân theo khi giao tiếp với chúng. Để có thể giao tiếp và điều khiển các cơ quan chấp hành (các ngoại vi), CPU sử dụng 03 loại tín hiệu cơ bản là tín hiệu địa chỉ (Address), tín hiệu dữ liệu (Data) và tín hiệu điều khiển (Control). Về mặt vật lý thì các tín hiệu này là các đường nhỏ dẫn điện nối từ CPU đến các ngoại vi hoặc thậm chí là giữa các ngoại vi với nhau. Tập hợp các đường tín hiệu có cùng chức năng gọi là các bus. Như vậy ta có các bus địa chỉ, bus dữ liệu và bus điều khiển. Có thể mô tả sơ bộ cấu trúc phần cứng của một vi xử lý theo hình sau:
Sau đây là mô tả sơ bộ về các phần cứng bên trong một vi xử lý.
**1. Đơn vị xử lý trung tâm CPU: **CPU có cấu tạo gồm có đơn vị xử lý số học và lôgic (ALU), các thanh ghi, các khối lôgic và các mạch giao tiếp. Chức năng của CPU là tiến hành các thao tác tính toán xử lý, đưa ra các tín hiệu địa chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa ra thông qua các lệnh (Instructions). **2. Bộ nhớ: **Nhìn chung có hai loại bộ nhớ là bộ nhớ chương trình và bộ nhớ dữ liệu. Bộ nhớ chương trình dùng để chứa mã chương trình hướng dẫn CPU thực hiện một nhiệm vụ nào đó. Thông thường thì bộ nhớ chương trình là các loại bộ nhớ “không bay hơi” (non-volatile), nghĩa là không bị mất nội dung chứa bên trong khi ngừng cung cấp nguồn nuôi. Có thể kể ra một số bộ nhớ thuộc loại này như: ROM, PROM, EPROM, EEPROM, Flash. Bộ nhớ dữ liệu là bộ nhớ dùng để chứa dữ liệu (bao gồm các tham số, các biến tạm thời…). Tuỳ thuộc loại dữ liệu mà bộ nhớ loại này có thể là loại “không bay hơi” hoặc “bay hơi” (mất dữ liệu khi cắt nguồn nuôi). Loại “bay hơi” thường thấy là các bộ nhớ SRAM. **3. Cổng vào/ra song song:** Đây là các đường tín hiệu được nối với một số chân của IC dùng để giao tiếp với thế giới bên ngoài IC. Giao tiếp ở đây là đưa điện áp ra hoặc đọc vào giá trị điện áp tại chân cổng. Các giá trị điện áp đưa ra hay đọc vào chỉ có thể đwocj biểu diễn bởi một trong hai giá trị lôgic (0 hoặc 1). Trong kỹ thuật vi xử lý, người ta thường dùng quy ước lôgic dương: giá trị lôgic 0 ứng với mức điện áp thấp xấp xỉ 0VDC, giá trị lôgic 1 ứng với mức điện áp cao xấp xỉ +5VDC. Tùy loại vi xử lý mà “khoảng xấp xỉ” đó là khác nhau nhưng nhìn chung là tương thích với mức lôgic TTL. Mỗi cổng vào/ra song song thường gồm 08 đường vào/ra khác nhau và gọi là các cổng 08 bit. Các đường tín hiệu vào/ra của các cổng và thuộc cùng một cổng là độc lập với nhau. Điều đó có nghĩa là ta có thể đưa ra hay đọc vào các giá trị lôgic khác nhau đối với từng chân cổng (từng đường tín hiệu vào/ra). Một điều cần chú ý nữa đối với các cổng vào/ra đó là chúng có thể được tích hợp thêm (nói đúng hơn là kiêm thêm) các chức năng đặc biệt liên quan đến các ngoại vi khác. **4. Cổng vào/ra nối tiếp: **Khác với cổng song song, với cổng nối tiếp các bit dữ liệu được truyền lần lượt trên cùng một đường tín hiệu thay vì truyền cùng một lúc trên các đường tín hiệu khác nhau. Thông thường thì việc truyền dữ liệu bằng cổng nối tiếp phải tuân theo một cơ chế, một giao thức hay một nguyên tắc nhất định. Có thể kể ra một số giao thức như SPI, I2C, SCI… **Cổng nối tiếp có 02 kiểu truyền dữ liệu chính:** ** thiết bị truyền và thiết bị nhận đều dùng chung một xung nhịp (clock). - Truyền đồng bộ (synchronous):** **thiết bị truyền và thiết bị nhận sử dụng hai nguồn xung nhịp riêng. Tuy nhiên hai nguồn xung nhịp này không được khác nhau quá nhiều. - Truyền dị bộ (asynchronous): **
Xung nhịp là yếu tố không thể thiếu trong truyền dữ liệu nối tiếp và nó có vaitrò xác định giá trị của bit dữ liệu (hay nói đúng hơn là xác định thời điểm đọc mức lôgic trên đường truyền dữ liệu).
**Cổng nối tiếp có thể có một trong các tính năng sau:** * thiết bị chỉ có thể hoặc truyền hoặc nhận dữ liệu. -Đơn công:* * thiết bị có thể truyền và nhận dữ liệu nhưng tại một thời điểm chỉ có thể làm một trong hai việc đó. -Bán song công:* ** thiết bị có thể truyền và nhận dữ liệu đồng thời. -Song công:** **5. Bộ đếm/Bộ định thời:** Đây là các ngoại vi được thiết kế để thực hiện một nhiệm vụ đơn giản: đếm các xung nhịp. Mỗi khi có thêm một xung nhịp tại đầu vào đếm thì giá trị của bộ đếm sẽ được tăng lên 01 đơn vị (trong chế độ đếm tiến/đếm lên) hay giảm đi 01 đơn vị (trong chế độ đếm lùi/đếm xuống).
Xung nhịp đưa vào đếm có thể là một trong hai loại: Xung nhịp bên trong IC. Đó là xung nhịp được tạo ra nhờ kết hợp mạch dao động bên trong IC và các linh kiện phụ bên ngoài nối với IC. Ta có thể ví đó là “nhịp tim” để toàn bộ các phần cứng bên trong vi xử lý (bao gồm cả CPU và các ngoại vi) có thể hoạt động được. Trong trường hợp sử dụng xung nhịp loại này, người ta gọi là các bộ định thời (timers). Do xung nhịp bên loại này thường đều đặn nên ta có thể dùng để đếm thời gian một cách khá chính xác. Xung nhịp bên ngoài IC. Đó là các tín hiệu lôgic thay đổi liên tục giữa 02 mức 0-1 và không nhất thiết phải là đều đặn. Trong trường hợp này người ta gọi là các bộ đếm (counters). Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bên ngoài như đếm các sản phầm chạy trên băng chuyền, đếm xe ra/vào kho bãi…
Một khái niệm quan trọng cần phải nói đến là sự kiện “tràn” (overflow). Nó được hiểu là sự kiện bộ đếm đếm vượt quá giá trị tối đa mà nó có thể biểu diễn và quay trở về giá trị 0. Với bộ đếm 8 bit, giá trị tối đa là 255 và là 65535 với bộ đếm 16 bit. Ngoài các phần cứng nêu trên còn phải kể đến một khối lôgic khác là khối giao tiếp bus. Khối này có chức năng ghép nối giữa các bus bên trong chip và các chân đưa ra ngoài chip. Mục đích của việc đưa các tín hiệu địa chỉ, dữ liệu và điều khiển ra ngoài là nhằm mở rộng khả năng phối ghép thêm của vi xử lý với các ngoại vi khác (chủ yếu là các bộ nhớ ngoài) ngoài các ngoại vi được tích hợp trên IC. Thông thường thì số lượng các đường tín hiệu là giữ nguyên khi đưa ra ngoài chip, tuy nhiên trong một số trường hợp số lượng các đường tín hiệu có thể nhỏ hơn số lượng thực bên trong (ví dụ như trường hợp của vi xử lý 8088, bus dữ liệu bên trong là 16 bit nhưng đưa ra ngoài chỉ có 8 bit). Khi đưa ra ngoài, các tín hiệu địa chỉ và dữ liệu có thể được ghép với nhau (cùng sử dụng chung một số chân nào đó) hoặc được tách riêng (tín hiệu địa chỉ dùng một số chân, tín hiệu dữ liệu dùng một số chân khác). Người ta thường “dồn kênh” (multiplex), tức là ghép chức năng, giữa bus địa chỉ và bus dữ liệu để giảm thiểu số chân cần thiết. Trong trường hợp này, tín hiệu địa chỉ sẽ xuất hiện trước, sau đó là tín hiệu dữ liệu trên cùng một tập hợp các đường tín hiệu. Để tách được 2 loại tín hiệu đó thì nhà sản xuất cung cấp cho người sử dụng một đường tín hiệu điều khiển có tên là tín hiệu chốt địa chỉ (thường ký hiệu là ALE). Tín hiệu này sẽ tích cực khi tín hiệu địa chỉ xuất hiện và không tích cực khi tín hiệu dữ liệu xuất hiện trên bus. Các IC thích hợp với việc tách tín hiệu địa chỉ và dữ liệu là các IC thuộc họ 74xx373/374 hoặc 74xx573/574.
Trên đây là mô tả sơ bộ cấu trúc phần cứng của một vi xử lý. Trước khi đi tiếp, tôi xin chia sẻ với bạn một kinh nghiệm quý báu khi nghiên cứu kỹ thuật vi xử lý. Đó là bạn phải biết chấp nhận. Đúng! Kỹ thuật vi xử lý không phải là một cái gì đó tâm linh, đó là một môn khoa học có cả cơ sở lý thuyết và minh chứng thực tế rõ ràng, đúng đắn. Tuy nhiên sẽ là không sai nếu tôi nói rằng nó cũng rất trừu tượng. Đối với bạn, khi các bạn đang đọc những dòng chữ trong tài liệu này, chúng ta ngầm hiểu rằng bạn mới chỉ bắt đầu quá trình nghiên cứu. Đó là một lĩnh vực có thể nói ít nhiều mới mẻ và bạn chắc chắn hầu như chưa có nhiều hình dung về cái gì đang diễn ra trong một con chip chỉ bé bằng đầu ngón tay! Điều đó làm bạn cũng như tôi trước đây, và tôi nghĩ là đúng với tất cả những ai đã từng nghiên cứu kỹ thuật vi xử lý, cảm thấy có cái gì đó thật trừu tượng, khó hiểu, rất gây tò mò trong các khái niệm (dù là khái niệm đơn giản) liên quan đến lĩnh vực này. Chúng ta khi mới bắt đầu đều tự đưa ra những câu hỏi cho mình đại loại như: tại sao vi xử lý có thể làm được nhiều việc đến vậy? cái gì diễn ra bên trong chip khi chúng ta cấp nguồn nuôi cho nó? tại sao ta lại có thể tác động đến timer hay các ngoại vi khác thông qua các dòng lệnh viết cho CPU? hoặc thậm chí là mạch điện bên trong một vi xử lý, một ngoại vi, một cổng vào/ra như thế nào? Nhưng bạn có biết nếu đi tìm câu trả lời cho những thắc mắc đó, bạn sẽ có thể mất rất nhiều thời gian, công sức mà hiệu quả nghiên cứu sẽ không cao, và cho đến khi tìm thấy câu trả lời thỏa mãn cho một vấn đề mà bạn băn khoăn, có thể bạn đã quên mất một vài hay tất cả những kiến thức còn lại! Như tôi đã nói, khi mới bắt đầu nghiên cứu, bạn hãy chấp nhận những kiến thức cơ bản như chấp nhận các tiên đề. Hãy coi đó là những cái mà người ta đã xây dựng nên một cách đúng đắn, giờ đây bạn không phải mất công tìm tòi, chứng minh sự đúng đắn của chúng. Thay vào đó, bạn chỉ cần tiếp thu và thừa hưởng. Hãy công nhận chúng như một điều gì đó hiển nhiên. Một cách đơn giản, bạn không cần phải tìm hiểu vấn đề đến mức rõ ràng từng đường tín hiệu trong một mạch điện đã được tích hợp bé xíu trong chip. Vào lúc này (vâng, tôi nói là vào lúc này!), bạn chỉ cần biết, cái mạch điện đó người ta gọi là cái “bộ đếm”, là cái “cổng vào/ra”, chức năng của chúng là gì, nguyên lý hoạt động ra sao và để điều khiển được chúng thì cần phải làm những gì (cụ thể là phải viết những gì trong khi lập trình). Tuy nhiên, nói như vậy không có nghĩa tôi khuyên các bạn học một cách “hổng”, không cần đến kiến thức cơ bản. Nếu bạn là người đã có ít nhiều kiến thức điện tử (đặc biệt là điện tử số), bạn quả là may mắn khi đã có một nền tảng kiến thức vững chắc khi tiếp cận với kỹ thuật vi xử lý. Bạn có thể hiểu dễ dàng cấu tạo của một bộ đếm, nguyên lý hoạt động của nó và chắc chắn bạn thấy dễ dàng tiếp thu hơn nếu như trong bài học tôi nói với bạn rằng “trong vi điều khiển họ 8051 có tích hợp ít nhất 02 ngoại vi gọi là các bộ đếm”. Đó là vì bạn đã có những khái niệm cơ bản, những hình dung về những cái gọi là “bộ đếm”. Nếu chưa có những khái niệm cơ bản, chưa có những mường tượng sơ bộ, bạn sẽ cảm thấy khó hiểu, nhưng sự khó hiểu đó chính là lý do để chúng ta làm việc với nhau! Chỉ cần kiên nhẫn đôi chút, những gì bạn phải chấp nhận một cách gượng ép và đôi khi có vẻ như vô lý vào lúc này, bạn sẽ nhận lại được câu trả lời thỏa mãn trong quá trình tìm hiểu kỹ thuật vi xử lý cùng tôi, đặc biệt khi bạn nghiên cứu và thực hành với các vi điều khiển cụ thể.
**II. NGUYÊN LÝ HOẠT ĐỘNG CỦA MỘT VI XỬ LÝ**
Trước hết, tôi sẽ nói qua về một khái niệm rất hay được nhắc tới trong kỹ thuật vi xử lý – “không gian địa chỉ”. Nó được hiểu là số lượng địa chỉ mà CPU có thể phân biệt được. Trong một bộ nhớ có rất nhiều ô nhớ và CPU thường phải truy nhập (ghi hoặc đọc) đến từng ô nhớ cụ thể, do đó CPU tất nhiên phải phân biệt được các ô nhớ riêng rẽ với nhau. Mỗi ô nhớ cần phải có một địa chỉ gắn với nó. Địa chỉ này chỉ dành riêng cho ô nhớ đó, không trùng với địa chỉ của một ô nhớ nào khác, khi truy nhập tới địa chỉ đó tức là truy nhập đến ô nhớ đó. Ngoài ô nhớ, trong vi xử lý còn có một số phần cứng khác cũng cần có một địa chỉ dành riêng cho nó như các thanh ghi điều khiển, các thanh ghi dữ liệu… Thường thì hầu như tất cả những phần cứng cần được truy nhập hay tác động đến đều phải được gắn với một hay nhiều địa chỉ. Lấy ví dụ, để có thể giao tiếp và điều khiển một bộ đếm (timer/counter), CPU cần phải tác động đến các thanh ghi quy định chế độ hoạt động, thanh ghi chứa số đếm của bộ đếm đó. Các thanh ghi này đều có địa chỉ gán riêng cho chúng và nhờ các địa chỉ đó mà CPU có thể ghi/đọc giá trị của các thanh ghi, qua đó tác động lên bộ đếm.
**Vi xử lý hoạt động theo một số nguyên tắc cơ bản sau:**
Các thao tác tính toán xử lý sẽ được vi xử lý, hay nói đúng hơn là CPU, thực hiện theo các chỉ dẫn (chính là các lệnh) đặt trong bộ nhớ chương trình. Đương nhiên trong bộ nhớ chương trình không có những chỉ dẫn kiểu như “hãy đưa điện áp +5VDC ra chân cổng A!” hay “dừng cái bộ đếm đó lại, đừng cho nó đếm thêm một xung nhịp nào nữa!” hay “hãy tạm thời chờ ở đây cho đến khi nào điện áp tại chân B có giá trị lôgic bằng 0!”. Đó là ngôn ngữ của con người, các vi xử lý không nghe được và đương nhiên không hiểu được những câu đó, chúng chỉ có thể nhận biết được hai và chỉ hai giá trị lôgic trái ngược nhau mà thôi. Hai giá trị lôgic trái ngược nhau có thể là đen-trắng, không-có, cao-thấp… Điều đó không quan trọng, cái quan trọng là về mặt vật lý (điện học), nhờ một cơ chế nào đó mà khi đọc nội dung của bộ nhớ hay đọc giá trị lôgic của một cổng vào ra, vi xử lý có thể phân biệt được khi nào giá trị đọc được là giá trị lôgic thứ nhất và khi nào thì không phải thế. Theo truyền thống người ta quy định chung rằng các giá trị lôgic đó là 0 và 1. Biểu thị các giá trị lôgic đó theo quy ước lôgic dương là điện áp cao (xấp xỉ +5VDC) cho giá trị 1 và điện áp thấp (xấp xỉ 0VDC) cho giá trị 0. Như vậy, thay vì nói với vi xử lý rằng “hãy đưa ra giá trị lôgic 1 tại chân cổng A!”, người ta mã hoá câu nói đó thành một chuỗi các bit lôgic 0-1 (ví dụ 00001010 chẳng hạn) rồi đặt trong bộ nhớ chương trình của IC. CPU khi cấp nguồn nuôi sẽ đọc và tất nhiên nó hiểu cái chuỗi 0-1 đó có nghĩa là gì và nó sẽ thực hiện theo ý nghĩa của lệnh nó dịch ra từ chuỗi 0-1 đó. Vậy tại sao nó hiểu được? Xin trả lời là bạn lại lan man rồi đấy! Nó hiểu được đơn giản vì người ta chế tạo ra đã như thế rồi. Hãy biết chấp nhận như vậy vào lúc này!
Việc thực hiện các lệnh sẽ diễn ra tuần tự (lệnh ở địa chỉ thấp hơn được thực hiện trước) bắt đầu từ địa chỉ reset. Địa chỉ reset là địa chỉ của bộ nhớ chương trình mà tại đó, sau khi được cấp nguồn nuôi, CPU sẽ bắt đầu đọc và thực hiện theo chỉ dẫn được mã hóa đặt tại đó. Mỗi loại vi xử lý có một địa chỉ reset riêng (thường là từ 0000H) do nhà sản xuất quy định.
Các lệnh được thực hiện tuần tự là nhờ có thanh ghi “bộ đếm chương trình”(PC). Thanh ghi này chứa địa chỉ của ô nhớ chứa mã của lệnh tiếp theo sẽ được thực hiện. Khi CPU tìm nạp được mã của lệnh n, thanh ghi PC sẽ tự độngtăng lên 1 đơn vị để trỏ vào ô nhớ chứa mã của lệnh (n+1).
CPU thực hiện một lệnh theo các bước nhỏ. Thường thì các bước đó bao gồm: tìm nạp mã lệnh (fetch-tức là truy cập bộ nhớ chương trình, đọc lấy giá trị tại ô nhớ có địa chỉ trỏ bởi thanh ghi PC, lưu vào một thanh ghi chuyên dùng chứa mã lệnh trong CPU), giải mã lệnh (decode-giải mã giá trị đã lấy được và đang đặt trong thanh ghi chứa mã lệnh trong CPU), cuối cùng là thực hiện lệnh (execute-thực hiện chỉ dẫn được giải mã ra từ mã lệnh đọc được). Những vi xử lý đầu tiên được thiết kế với phương thức thực hiện lệnh một cách thuần “tuần tự”, nghĩa là thực hiện tuần tự 3 bước đối với lệnh thứ n rồi mới thực hiện 3 bước tiếp theo của lệnh thứ (n+1).
Sau này, các vi xử lý được thiết kế với CPU được module hóa thành từng phần riêng biệt có hoạt động khá độc lập với nhau, do đó mà cấu trúc xử lý đường ống (pipeline) ra đời. Với cấu trúc này, các bước nhỏ trong việc thực hiện các lệnh sẽ được gối lên nhau, trong khi một phần cứng của CPU thực hiện bước 3 (thực hiện lệnh) của lệnh n thì một phần cứng khác của CPU thực hiện việc giải mã lệnh tiếp theo (lệnh thứ n+1), và đồng thời một phần cứng khác nữa trong CPU tìm nạp mã của lệnh thứ (n+2).
Với cấu trúc xử lý đường ống, tốc độ xử lý của CPU đã được nâng cao rõ rệt và tất cả những vi xử lý ngày nay đều được thiết kế với CPU theo cấu trúc xử lý này.
** Ngăn xếp(Stack): **Là một đoạn bộ nhớ (thường đặt trong RAM) dùng để chứa địa chỉ trở về của trong các trường hợp chương trình con hoặc chương trình phục vụ ngắt được gọi. Ngoài ra ngăn xếp còn dùng để lưu các dữ liệu tạm thời. Ngăn xếp hoạt động theo cơ chế “vào sau ra trước” (LIFO-Last In First Out). Thanh ghi con trỏ ngăn xếp (SP-Stack Pointer) là thanh ghi có nội dung là địa chỉ của ô nhớ trên cùng của ngăn xếp. Giá trị của SP được tăng giảm một cách tự động. Ngăn xếp là phần cứng vô cùng quan trọng trong vi xử lý, nó tham gia vào các thao tác rẽ nhánh (trừ thao tác nhảy) của chương trình. Người lập trình phải hết sức cẩn thận khi gán giá trị khởi tạo cho SP để tránh sự cố tràn ngăn xếp hoặc ngăn xếp trùng với các vùng nhớ lưu dữ liệu khác. Khi xảy ra một trong các sự cố trên, sẽ không có cách nào kiểm soát được hoạt động của vi xử lý và có thể gây thiệt hại lớn đối với hệ thống. Giống như một trò chơi, khi bạn tham gia và vì một lý do nào đó phạm vào một trong hai lỗi đó, tất cả những gì bạn sẽ nhận được trên màn hình là dòng chữ “GAME OVER”!
Vậy thế nào là địa chỉ trở về? Như đã nói ở trên, vi xử lý thực hiện các lệnh một cách tuần tự: lệnh 1, lệnh 2,…, lệnh n, lệnh n+1…Tuy nhiên đôi khi nó gặp phải một lệnh gọi chương trình con và do đó phải chuyển sang thực hiện chương trình con đó. Đoạn mã lệnh của chương trình con thường nằm ở một nơi khác trong bộ nhớ chương trình, tức là có địa chỉ không liên tiếp với lệnh gọi chương trình con. Nhắc lại rằng thanh ghi PC lúc này đang chứa địa chỉ của lệnh tiếp sau lệnh gọi chương trình con. CPU chỉ biết thực hiện những gì có tại địa chỉ chứa trong PC, do vậy mà PC cần phải được nạp giá trị mới là địa chỉ của mã lệnh đầu tiên của chương trình con. Việc nạp giá trị mới cho PC được thực hiện một cách tự động khi bạn gọi một chương trình con, ngoài ra địa chỉ của lệnh tiếp sau lệnh gọi chương trình con trong chương trình chính cũng được tự động lưu lại để sau khi thực hiện xong chương trình con, CPU sẽ có thể quay lại thực hiện tiếp chương trình chính một cách đúng chỗ, tuần tự như không có chuyện gì xảy ra. Nơi lưu giữ một cách tự động địa chỉ trở về (địa chỉ của lệnh tiếp sau lệnh gọi chương trình con) ấy chính là ngăn xếp. Người ta thực hiện việc chia chương trình chính thành các chương trình con (là các đoạn chương trình thực hiện một nhiệm vụ cụ thể) để dễ dàng cho việc lập trình và dò lỗi. Bạn sẽ dần có được kỹ năng chia nhỏ chương trình chính thành các chương trình con một cách hợp lý trong quá trình lập trình cho vi xử lý.
Ngăn xếp cũng có vai trò tương tự như đối với ngắt.
**Vậy ngắt là gì?** Đó là những yêu cầu do các ngoại vi (là các phần cứng tích hợp trên IC hoặc các tác động từ bên ngoài) gửi tới CPU nhằm đòi hỏi những đáp ứng nhất định. Mục đích của việc thiết kế cơ chế ngắt trong vi xử lý là nhằm tiết kiệm thời gian cho CPU. Trong hầu hết các trường hợp, vi xử lý cần phải thực hiện nhiều nhiệm vụ trong thời gian rất ngắn và liên tục. Để có thể đáp ứng kịp thời với các sự kiện cần xử lý, CPU có thể tiến hành thăm dò polling) liên tục các sự kiện để xem khi nào chúng xảy ra thì xử lý, đáp ứng lại. Tuy nhiên nếu làm vậy thì lãng phí rất nhiều thời gian của CPU trong khi còn có rất nhiều nhiệm vụ khác đang chờ được thực hiện, ngoài ra CPU không thể thăm dò nhiều sự kiện cùng một lúc được. Người ta tạo ra ngắt để CPU không phải thăm dò liên tục một hay nhiều sự kiện đó. Bằng cách ghép các sự kiện cần đáp ứng với các cơ chế ngắt khác nhau, khi một sự kiện nào đó xảy ra, phần cứng phụ trách ngắt tích hợp trên CPU sẽ tự động báo cho CPU biết rằng sự kiện đã xảy ra. CPU sẽ dừng công việc đang làm lại (nhưng phải thực hiện xong lệnh đang được thực hiện, dù mới chỉ ở giai đoạn tìm nạp mã lệnh), và chuyển sang đáp ứng bằng cách thực hiện chương trình phục vụ ngắt tương ứng. Đáp ứng xong, tức là xử lý xong sự kiện gây ra ngắt, CPU sẽ tiếp tục quay lại làm tiếp công việc đang dang dở (đương nhiên là nhờ hoạt động của ngăn xếp). Nói đến ngắt không thể không nói đến mức ưu tiên của các loại ngắt khác nhau. Có 02 loại mức ưu tiên ngắt cơ bản là ưu tiên giữa các ngắt xảy ra đồng thời (ngắt A và ngắt B xảy ra đồng thời cùng một lúc) và ưu tiên giữa các ngắt xảy ra khác thời điểm (đang thực hiện chương trình phục vụ ngắt A thì lại xảy ra ngắt B). Trong cả hai trường hợp, ngắt có mức ưu tiên cao hơn sẽ luôn được phục vụ ngay lập tức. Tùy loại vi xử lý mà mức ưu tiên có thể thay đổi được linh hoạt hoặc cố định.
Khác với chương trình con, thời điểm thực hiện chương trình phục vụ ngắt trong hầu hết các trường hợp là nằm ngoài sự kiểm soát của người lập trình do ngắt có thể xảy ra bất kỳ thời điểm nào, khi CPU đang thực hiện bất kỳ một lệnh nào trong chương trình chính. Vì thế cơ chế hoạt động một cách tự động của ngăn xếp là không thể thiếu trong một vi xử lý. Cũng vì thế mà cần phải xem xét kỹ lưỡng việc sử dụng các tài nguyên (thanh ghi, ô nhớ, biến, thậm chí là các ngoại vi) của các chương trình phục vụ ngắt để tránh tranh chấp với chương trình chính. Thông thường thì khi vào đầu chương trình phục vụ ngắt, người ta lưu lại những tài nguyên dùng chung đó trước khi thay đổi chúng. Kết thúc chương trình phục vụ ngắt, các tài nguyên sẽ được khôi phục lại giá trị của chúng trước khi trở về chương trình chính. Thực hiện các thao tác lưu trữ và khôi phục này đương nhiên liên quan đến ngăn xếp, chỉ có điều không phải thực hiện một cách tự động bởi CPU mà phải do người lập trình chủ động thực hiện bằng các lệnh. Người lập trình phải quyết định cất những gì và lấy ra những gì! Cũng phải chú ý đến cơ chế hoạt động “vào sau ra trước” của ngăn xếp và cất đi bao nhiêu thì phải lấy ra bấy nhiêu. Nếu không bạn sẽ phạm phải một lỗi tương tự như tràn ngăn xếp và chỉ có Chúa mới biết được chuyện gì sẽ xảy ra khi địa chỉ trở về không được nạp đúng vào thanh ghi PC. Một trong những tài nguyên hay bị thay đổi khi thực hiện chương trình phục vụ ngắt là các cờ trạng thái của CPU. Đó là các bit thể hiện trạng thái hiện thời của CPU và của kết quả thực hiện các lệnh. Các cờ này thường được ghép với nhau thành một thanh ghi và được gọi là thanh ghi trạng thái
**III. LẬP TRÌNH CHO MỘT VI XỬ LÝ**
Sau khi thiết kế xong phần cứng, bạn phải tiến hành lập trình cho vi xử lý để hoàn thiện sản phẩm của mình. Vi xử lý có thể được lập trình bằng ngôn ngữ bậc cao hay ngôn ngữ bậc thấp. Ngôn ngữ bậc thấp là ngôn ngữ được thiết kế riêng cho từng loại vi xử lý và thường được gọi là hợp ngữ (Assembly). Ngôn ngữ bậc cao là các ngôn ngữ gần với ngôn ngữ của con người và giống nhau cho nhiều loại vi xử lý. Mỗi loại ngôn ngữ đều có ưu và nhược điểm riêng. Với những người mới bắt đầu nghiên cứu về kỹ thuật vi xử lý, theo kinh nghiệm của riêng bản thân, tôi cho rằng nên bắt đầu với ngôn ngữ bậc thấp. Có một số điểm đáng lưu ý khi bạn lập trình cho một vi xử lý. Đó là:
- Trước tiên bạn phải hiểu rõ được các chế độ địa chỉ của vi xử lý đó. Chế độ địa chỉ chính là cách chỉ ra toán hạng nằm ở đâu. Toán hạng là các tham số, các hằng số, các ô nhớ, các thanh ghi, các bit, các cờ…hay nói chung là các đối tượng tham gia vào việc thực hiện lệnh. Thông thường thì một toán hạng (ví dụ như một thanh ghi) có thể được trỏ đến bằng một vài chế độ địa chỉ khác nhau. Mỗi chế độ địa chỉ có thế mạnh riêng của nó và tùy từng trường hợp mà ta nên chọn chế độ thích hợp khi lập trình.
- Sau đó bạn phải nắm bắt được tập lệnh (Instruction Set) của vi xử lý đó. Tập lệnh là tất cả những lệnh mà vi xử lý có thể hiểu được, có thể thực hiện được. Mỗi lệnh đều được mã hóa (hay được quy ước) bởi một chuỗi các bit 0 và 1. Các vi xử lý khác nhau thì có tập lệnh khác nhau do nhà sản xuất chip cung cấp.
- Trước khi bắt đầu viết các lệnh cụ thể, bạn nên viết lưu đồ thuật toán thực hiện các nhiệm vụ cụ thể. Lưu đồ thuật toán là sơ đồ diễn giải trình tự thực hiện các nhiệm vụ một cách lôgic và liền mạch. Viết lưu đồ thuật toán ngay cả cho các chương trình hết sức đơn giản là một thói quen rất tốt ngay cả khi bạn đã là một cao thủ trong lập trình vi xử lý. Chỉ cần mất chút thời gian thực hiện công việc này, bạn sẽ có được cái nhìn vừa bao quát vừa chi tiết đối với chương trình mình định viết, nhờ đó mà bạn lập trình nhanh hơn, hiệu quả hơn và dễ dàng phát hiện ra lỗi về thuật toán xử lý nếu chương trình chạy không như ý muốn. Đối với bản thân tôi mà nói, tôi cho rằng viết các dòng lệnh cho một vi xử lý không phải là khó, ngược lại nó rất dễ, cái khó là bạn phải biết được mình phải viết những gì hay nói đúng hơn là phải tìm ra một lưu đồ thuật toán đúng đắn. Khi đã tìm ra con đường đi đúng và hiệu quả, tất cả những gì còn lại phải làm là thể hiện các thao tác xử lý đó bằng cách lệnh của vi xử lý - một công việc mà bất cứ ai nắm rõ tập lệnh của vi xử lý đó đều có thể làm tốt. Khi lưu đồ thuật toán bạn lập ra là đúng, nếu sau khi lập trình mà vi xử lý hoạt động không như mong muốn thì lỗi chỉ có thể là do bạn chưa thể hiện bằng các dòng lệnh một cách đúng đắn những gì đã lập ra mà thôi. Dần dần, kinh nghiệm tích lũy được sẽ chỉ cho bạn cách thể hiện đúng một lưu đồ bất kỳ thậm chí ngay ở lần đầu tiên và theo như cách chúng tôi vẫn nói đùa trong chuyên môn, trình độ lập trình của bạn đã đạt đến cấp độ “plug and play”! - Chương trình sẽ được viết trong một file mã nguồn (thường có đuôi là ASM). - Phần mềm trên máy tính có tên là “Trình biên dịch” (Compiler) sẽ dịch file mã nguồn sang một file có đuôi là OBJ. File này chứa thông tin cần thiết để có thể chuyển đổi sang file có đuôi HEX hay file có đuôi BIN (là các file chứa mã chương trình đã được chuyển sang dạng Hexa hay Binary) để có thể nạp vào trong bộ nhớ chương trình của vi xử lý.
- Trong khi lập trình, hãy đặc biệt lưu ý đến các tình huống rẽ nhánh của chương trình. Các tình huống đó bao gồm các lệnh nhảy vô điều kiện, các lệnh nhảy có điều kiện, các lệnh gọi chương trình con, các tình huống xảy ra ngắt và đương nhiên phải chú ý đến các phần cứng liên quan như ngăn xếp hay các cờ trạng thái. - Với mỗi loại vi xử lý/vi điều khiển lại có nhiều hãng cung cấp các phần mềm trên máy tính dùng để soạn thảo và biên dịch. Các phần mềm này có các từ khóa khác nhau mà người lập trình phải tuân thủ khi sử dụng. Từ khóa là các ký hiệu được thể hiện bằng các ký tự, được viết trong file mã nguồn nhưng nó không phải là lệnh của vi xử lý, đương nhiên không được dịch ra mã máy, đó chỉ là các chỉ dẫn cho phần mềm trên máy tính thực hiện biên dịch các file mã nguồn sang mã máy một cách chính xác.
Nguồn svptit.org
Đăng Nhậphoặc đăng ký thành viênđể chia sẻ,bình luận và tích lũy điểm.

Content-Type: text/html; charset=utf-8

X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.1

Cache-Control: max-age=0, private, must-revalidate

X-Rack-Cache: miss

Server: nginx/0.8.53 + Phusion Passenger 3.0.1 (mod_rails/mod_rack)