Port 2 : Port 2 là một port có công dụng kép trên cácchân 21 – 28 được dùng như các đường xuất nhậphoặc là các byte cao của bus địa chỉ đối với cácthiết kế dùng bộ nhớ mở rộng.. PESEN sẽ
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA THÀNH PHỐ HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỀU KHIỂN TỰ ĐỘNG
SVTH : TRIỆU QUANG MINH
Trang 2MSSV : 49700897
01 - 2002
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên sinh viên : TRIỆU QUANG MINH
GIÁO VIÊN HƯỚNG DẪN : LƯƠNG VĂN LĂNG
Nhận Xét Của Giáo Viên Hướng Dẫn :
Ngày tháng năm 2002 Giáo viên hướng dẫn Đại Học Quốc Gia Trường Đại Học Bách Khoa Thành Phố Hồ Chí Minh
-o0o -Cộng Hòa Xã Hội Chủ Nghĩa Việt Nam Độc Lập – Tự Do – Hạnh Phúc
Trang 3-o0o -NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Họ và tên sinh viên : TRIỆU QUANG MINH
GIÁO VIÊN DUYỆT LUẬN VĂN :
Nhận Xét của Giáo Viên duyệt :
Ngày
tháng năm 2002 GIÁO VIÊN DUYỆT
Trang 4Lời giới thiệu
Trong thời đại ngày nay máy tính điện tử đã gópphần không nhỏ đối với sự phát triển xã hội Doyêu cầu của con người ngày càng cao, các thế hệmáy tính đã liên tục phát triển không ngừng Ngaytrong giai đoạn đầu các thế hệ vi xử lý 8 bit đượcdùng là Z80,8085, sau đó là các hệ vi xử lý 16 bitnhư 8086, 8088…
Các hệ vi xử lý này đã góp phần quan trọng
trong việc chương trình hóa các hoạt động của máy
móc trong công nghiệp nhờ vào các phần mềm ứng dụng Tại Việt nam, việc chương trình hóa các hệ
thống đang được áp dụng ngày càng nhiều trong các nhà máy công nghiệp
Kỹ thuật vi xử lý, vi điều khiển là kỹ thuật củatương lai, là chìa khóa đi vào công nghệ hiện đại Đốivới sinh viên chuyên ngành điện tử, đây là một lĩnhvực mới, hứa hẹn và mở ra nhiều triển vọng Đểgóp phần tạo nền tảng ban đầu cho việc học tập, tìmhiểu kỹ thuật vi xử lý và cách truyền dữ liệu từ vixử lý với các thiết bị bên ngoài, cũng như giao tiếp
với máy tính, em đã thực hiện đề tài: “SỐ HOÁ BÀI THÍ NGHIỆM MẠCH ĐIỆN ”.
Nhờ có sự giúp đỡ của quý thầy cô và bạn bè,
em đã cố gắng thực hiện đề tài được giao nhưng dokiến thức và thời gian có hạn nên đề tài không thểtránh khỏi thiếu sót nên rất mong sự đóng góp củaquý thầy cô và bạn bè
Em xin chân thành cảm ơn thầy LƯƠNG VĂN LĂNG
đã tận tình giúp đỡ em hoàn thành đề tài này
Em xin chân thành cảm ơn các bạn sinh viên đãtận tình giúp đỡ em hoàn thành tốt luận văn
Sinh viên thực hiện
Triệu Quang
Minh
Trang 5MỤC LỤC
PHẦN 1 : LÝ THUYẾT CHUNG
A ĐẶT VẤN ĐỀ : 4
I M ỤC ĐÍCH YÊU CẦU CỦA ĐỀ TÀI : 4
II G IỚI HẠN CỦA ĐỀ TÀI : 4
III S Ơ ĐỒ KHỐI TỔNG QUÁT : 4
B GIỚI THIỆU AT89C51: 5
I TÓM TẮT PHẦN CỨNG : 5
1 Giới thiệu họ MCS51 : 5
2 Sơ lược về các chân của AT89C51 : 6
3 Tổ chức bộ nhớ : 9
4 Các thanh ghi chức năng đặc biệt : 13
5 Bộ nhớ ngoài : 17
6 Ngõ vào tín hiệu RESET: 21
II HOẠT ĐỘNG CỦA BỘ ĐỊNH THÌ TIMER: 22
1 Giới thiệu : 22
2 Thanh ghi chế độ Timer (TMOD) : 23
3 Thanh ghi điều khiển timer (TCON) : 24
4 Chế độ timer : 25
5 Nguồn tạo xung nhịp : 27
6 Bắt đầu, dừng và điều khiển các Timer: 28
7 Khởi động và truy xuất các thanh ghi timer : 29
8 Các khoảng ngắn và các khoảng dài: 29
III HOẠT ĐỘNG CỦA BỘ NGẮT (INTERRUPT): 30
1 Giới thiệu : 30
2 Tổ chức ngắt của AT89C51: 31
3 Các ngắt của CAT89C51: 31
4 Định thì interrupt: 32
IV HOẠT ĐỘNG PORT NỐI TIẾP : 32
1 Giới thiệu : 32
2 Thanh ghi điều khiển port nối tiếp : 33
3 Các chế độ hoạt động : 35
4 Khởi động và truy xuất các thanh ghi cổng nối tiếp : 36
5 Truyền thông đa xử lý : 38
Trang 66 Tốc độ baud cổng nối tiếp : 38
V TẬP LỆNH CỦA CAT89C51: 40
chế độ đánh địa chỉ: 40
Trang 7C BIẾN ĐỔI A/D VÀ D/A : 44
I GIỚI THIỆU ADC0809 : 44
1 Sơ đồ khối : 44
2 Sơ đồ chân : 45
3 Khả năng : 45
4 Đặc tính kỹ thuật : 45
5 Mô tả chức năng : 46
G IẢN ĐỒ THỜI GIAN : 46
II GIỚI THIỆU DAC0808 : 48
1 Sơ đồ khối : 49
2 Sơ đồ chân : 49
3 Khả năng : 49
4 Trị số tối đa : 50
5 Hoạt động cơ bản : 50
D CỔNG NỐI TIẾP RS 232 : 51
E NGÔN NGỮ LẬP TRÌNH VISUAL BASIC VỚI TRUYỀN THÔNG NỐI TIẾP : 53
F GIAO TIẾP VÀ HIỂN THỊ KẾT QUẢ ĐO : 54
G KHUYẾCH ĐẠI THUẬT TOÁN (OPERATION AMPLIFIER) :54 I SƠ ĐỒ KHỐI VÀ PHÂN TÍCH MỘT MẠCH OP – AMP ĐƠN GIẢN : 55
II IC KHUYẾCH ĐẠI THUẬT TOÁN (OP AMP) : 55
1 Các đặc tính cơ bản : 55
2 Op Amp lý tưởng : 57
3 Mạch đo dùng IC Op-Amp (mạch khuyếch đại thuật toán ) : 58
PHẦN 2 : THIẾT KẾ A THIẾT KẾ PHẦN CỨNG : 59
I ĐO ÁP, DÒNG, TỤ, CẢM VÀ ĐIỆN TRỞ : 59
1 Đo điện áp : 59
2 Đo dòng điện : 60
3 Đo điện dung : 60
4 Đo điện cảm : 61
5 Đo điện trở : 62
II ĐO TẦN SỐ, COS, CÔNG SUẤT : 63
1 Đo tần số : 63
2 Đo cos : 63
3 Đo công suất : 63
Trang 8III BỘ NGUỒN LẬP TRÌNH DAC : 64
B GIỚI THIỆU CÁC IC TRÊN KIT : 64
1 µCAT89C51 : 64
2 Vi mạch MAX 232 : 64
3 ADC0809 : 65
4 DAC0808 : 65
5 LM741 và LF353 : 65
6 IC 74HC573 : Đệm dòng 66
7 Rơ le : 66
C GIAO DIỆN TRÊN MÁY TÍNH VÀ SỬ DỤNG : 68
D LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH VI XỬ LÝ : 74 I LƯU ĐỒ GIẢI THUẬT : 74
1 Chương trình chính : 74
2 Chương trình con Inchar, Outchar: 84
3 Chương trình con đo độ rộng xung : 84
4 Chương trình con delay2ms : (delay 2.5 ms) 85
II CHƯƠNG TRÌNH VI XỬ LÝ CHO AT89C51 : 86
III MẠCH THIẾT KẾ : 99
Tài liệu tham khảo
1 Tài liệu Vi Xử Lý _Giảng viên Hồ Trung Mỹ
2 The 8051 Microcontroller _I.Scott MacKenzie
3 Hướng dẫn thí nghiệm Vi Xử Lý
4 Đo lường và điều khiển bằng máy tính Ngô Diên Tập
5 Lập trình ghép nối máy tính trong Windows Ngô Diên Tập
6 Kỹ thuật đo Nguyễn Ngọc Tân
7 Tài liệu hướng dẫn thí nghiệm mạch điện tử
Trang 9PHẦN 1 : LÝ THUYẾT CHUNG
A ĐẶT VẤN ĐỀ :
Ngày nay cùng với sự phát triển của các ngànhkhoa học kỹ thuật, kỹ thuật điện tử ma øtrong đó làviệc ứng dụng máy vi tính vào kỹ thuật đo lường vàđiều khiển đã đem lại những kết quả đầy tính ưu việt Để có thể tiến hành điều khiển hoặc giám sát, đolường các quá trình thực bằng máy tính, trước hết phảicó được mối liên hệ cần thiết giữa máy tính và thếgiới bên ngoài
Với sự phát triển mạnh của nghành kỹ thuật sốđặc biệt là cho ra đời các họ vi xử lí và vi điều khiểnrất đa chức năng do đó việc dùng kỹ thuật vi xử lí, kỹthuật vi điều khiển kết hợp với máy tính đã giải quyếtnhững bế tắc và kinh tế hơn mà phương pháp dùng ICrời kết nối lại không thực hiện được Các thiết bị, hệthống đo lường và điều khiển ghép nối với máy tínhcó độ chính xác cao, thời gian thu thập số liệu ngắn,nhưng điều đáng quan tâm hơn là mức độ tự động hoátrong việc thu thập và xử lý các kết quả đo, kể cảviệc lập bảng thống kê cũng như in ra kết quả
Trong luận văn này, em thiết kế một mô hình thínghiệm mạch điện và bộ đo các đại lượng điện, có giaodiện nối tiếp với máy tính để hiển thị và vẽ dạng tínhiệu đo lên màn hình Mạch vi xử lý nhận các giá trịđại lượng điện (điện áp, dòng điện, điện trở, điện dung,cảm kháng tần số, công suất) sau khi đã qua mạchđệm được chuyển thành điện áp thích hợp tương ứngvới ngõ vào analog của bộ biến đổi ADC Các giá trị đosẽ được truyền về máy tính để xử lý và được hiện thịlên màn hình
Trang 10II. Giới hạn của đề tài :
Do mạch chỉ thiết kế đo các đại lượng điện trên mạch thí nghiệm điện nên bị giới hạn về giá trị đo áp (tối đa 12 V DC, 24 Vpp AC), dòng (0.1 A), các giá trị điện kháng, tần số, công suất cũng bị giới hạn tầm đo Ta có thể mở rộng để đo các giá trị lớn hơn thông qua biến dòng, biến áp, mạch phân tầm đo với tỷ số biến đổi thích hợp
B GIỚI THIỆU AT89C51 :
1 Giới thiệu họ MCS51 :
MCS51 là một họ IC vi điều khiển (microcontroller) do hãng Intel sản xuất Các IC tiêu biểu cho họ MCS51 là
8031 và 8051 Cùng với thời gian, con người đã cho ra đời nhiều loại vi xử lí từ 8 bit đến 64 bit với cải tiến ngày càng ưu việt nhưng tùy theo mục đích sử dụng mà
vi xử lí 8 bit vẫn còn tồn tại Trong luận văn, em sử dụng vi điều khiển AT89C51 AT89C51 cũng là vi xử lí 8 bit nhưng có chứa bộ nhớ bên trong và có thêm 2 bộ định thời, ngoài ra nó có thể giao tiếp nối tiếp trực tiếp với máy tính Với bộ nhớ trong, AT89C51 thích hợp cho những chương trình có quy mô nhỏ, tuy nhiên AT89C51 có thể kết hợp được với bộ nhớ ngoài cho chương trình có quy mô lớn Sau đây là giới thiệu của em về vi điều khiển AT89C51 có các đặc điểm chung như sau :
4 Kbyte ROM
128 byte RAM
4 port I/O 8 bit
2 bộ định thời 16 bit
Giao tiếp nối tiếp
64 K không gian bộ nhớ chương trìng mở rộng
64 K không gian bộ nhớ dữ liệu mở rộng
Khối mạch đệm
Khối xử lý
& chuyển đổi
Máy tính
Trang 11 Một bộ xử lý luận lý (thao tác trên các bitđơn ).
210 bit được địa chỉ hoá
Bộ nhân/chia 4 s
Trang 12Sơ đồ khối AT89C51
2 Sơ lược về các chân của AT89C51 :
AT89C51 có tất cả 40 chân có chức năng nhưcác đường xuất nhập Trong đó có 24 chân có côngdụng kép, mỗi đường có thể hoạt động như đườngxuất nhập hoặc như đường điều khiển hoặc là cácthành phần của bus dữ liệu và bus địa chỉ
OTHER
128 byte RAM 8032\805 2
ROM 0K:
8031\80 32 4K: 8031 8K:8052
CPU
OSCILATOR
BUS CONTROL I/O PORT SERIAL PORT
EA\
TEMER2 8032\805 2 TEMER1 TEMER1
Trang 13Sơ đồ chân AT89C51 : 40
A11 INT0 12 P3.2 P2.2 23
A10
A9RXD 10 P3.0 Vss P2.0 21 A8
Trang 14a Port 0 :
Port 0 là một port có hai chức năng trên cácchân 32 – 39 Trong các thiết kế cỡ nhỏ ( khôngdùng bộ nhớ mở rộng ) nó có các chức năng nhưcác đường I/O Đối với các thiết kế lớn với bộ nhớmở rộng, nó được hợp kênh giữa bus địa chỉ và busdữ liệu
Trang 15b Port 1 :
Port 1 là một port I/O trên các chân 1 – 8 Cácchân được ký hiệu P1.0 , P1.1, P1.2 , … có thể dùngcho giao tiếp với các thiết bị ngoài nếu cần Port 1không có chức năng khác, vì vậy chúng chỉ đượcdùng cho giao tiếp với các thiết bị ngoài
c Port 2 :
Port 2 là một port có công dụng kép trên cácchân 21 – 28 được dùng như các đường xuất nhậphoặc là các byte cao của bus địa chỉ đối với cácthiết kế dùng bộ nhớ mở rộng
d Port 3 :
Port 3 là một port công dụng kép trên cácchân 10 – 17 Các chân của port này có nhiều chứcnăng, các công dụng chuyển đổi có liên hệ với cácđặc tính đặc biệt của AT89C51 như ở bảng sau :
port nối tiếp
nối tiếp
e PSEN ( Program Store Enable ) :
AT89C51 có 4 tín hiệu điều khiển
PSEN là tín hiệu ra trên chân 29 Nó là tín hiệuđiều khiển để cho phép bộ nhớ chương trình mở rộngvà thường được nối đến chân OE (Output Enable ) củamột EPROM để cho phép đọc các byte của mã lệnh
PESEN sẽ ở mức thấp trong thời gian lấy lệnh Các mã nhị phân của chương trình được đọc từ EPROMqua bus dữ liệu và được chốt vào thanh ghi lệnh của
Trang 16AT89C51 để giải mã lệnh Khi thi hành chương trình trongROM nội ( AT89C51 ) PSENsẽ ở mức thụ động ( mức cao ).
f ALE (Adress Latch Enable ) :
Tín hiệu ra ALE trên chân 30 tương hợp với các thiết
bị làm việc với các vi xử lý 8085, 8086, 8088 AT89C51dùng ALE một cách tương tự cho việc giải kênh các busđịa chỉ và dữ liệu Khi port 0 được dùng trong chế độchuyển đổi của nó : vừa là bus dữ liệu vừa là bytethấp của bus địa chỉ, ALE là tín hiệu để chốt địa chỉvào một thanh ghi bên ngoài trong nữa đầu chu lỳ bộnhớ Sau đó các đường port 0 dùng đểxuất hoặc nhậpdữ liệu trong nửa sau của chu kỳ bộ nhớ
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tầnsố dao động trên chip và có thể được dùng làm nguồnxung nhịp cho các phần khác của hệ thống Nếu xungnhịp trên AT89C51 là 12 MHz thì ALE có tần số 2 MHz Chỉ ngoại trừ khi hình thành lệnh MOVX , một xung ALEsẽ bị mất Chân này cũng được làm ngõ vào cho xunglập trình cho EPROM trong AT89C51
g EA (External Access):
Tín hiệu vào EA trên chân 31 thường được mắc lênmức cao (+5V )hoặc mức thấp (GND ) Nếu ở mức cao,AT89C51 thi hành chương trình từ ROM nội trong khoảng địachỉ thấp ( 4K) Nếu ở mức thấp, chương trình chỉ đượcthi hành từ bộ nhớ mở rộng Khi dùng 8031, EA luônđược nối mức thấp vì không có bộ nhớ chương trìnhtrên chip Nếu EA được nối mức thấp bộ nhớ bên trongchương trình AT89C51 sẽ bị cấm và chương trình thi hành
từ EPROM mở rộng Người ta còn dùng EA làm chân
cấp điện áp 21V khi lập trình cho EPROM trong AT89C51
h RST ( Reset ):
Ngõ vào RST trên chân 9 là ngõ reset của AT89C51 Khi tín hiệu này được đưa lên mức cao ( trong ít nhất 2 chukỳ máy ) , các thanh ghi bên trong AT89C51 được tảinhững giá trị thích hợp để khởi động hệ thống
i Các ngõ vào bộ dao động trên chíp :
Như đã thấy trong các hình trên , AT89C51 có mộtbộ dao động trên chip Nó thường được nối với mộtthạch anh ở giữa hai chân 18 và 19 Các tụ giữ cũngcần thiết như đã vẽ Tần số thạch anh thông thườnglà 12 MHz
Trang 17j Các chân nguồn :
AT89C51 vận hành với nguồn đơn +5V Vcc được nốivào chân 40 và Vss (GND) được nối vào chân 20
3 Tổ chức bộ nhớ :
AT89C51 có bộ nhớ theo cấu trúc Harvard : cónhững vùng bộ nhớ riêng biệt cho chương trình và dữliệu Như đã nói ở trên , cả chương trình và dữ liệucó thể ở bên trong ( AT89C51); dù vậy chúng có thểđược mở rộng bằng các thành phần ngoài lên đếntối đa 64 Kbyte bộ nhớ chương trình và 64 Kbyte bộnhớ dữ liệu
Bộ nhớ bên trong bao gồm ROM và RAM trên chip ,
RAM trên chip bao gồm nhiều thành phần : phần lưu trữ
đa dụng , phần lưu trữ địa chỉ hoá từng bit , các bank
thanh ghi và các thanh ghi chức năng đặc biệt
Trang 18FFFF FFFF
FF
00 0000 0000
Bộ nhớ trên chip Bộ nhớ mở rộng
Tóm tắt các vùng bộ nhớ của AT89C51
Hai đặc tính cần lưu ý là :
Các thanh ghi và các port xuất nhập đã được xếptrong bộ nhớ và có thể được truy xuất trực tiếpgiống như các địa chỉ bộ nhớ khác
Ngăn xếp bên trong RAM nội nhỏ hơn so với RAMngoài như trong các bộ vi xử lý khác
Chi tiết về bộ nhớ RAM trên chip :
Như ta thấy trên hình sau, RAM bên trong AT89C51 đượcphân chia giữa các bank thanh ghi (00H – 1FH ), RAM địa chỉhoá từng bit (20H – 2FH ), RAM đa dụng (30H – 7FH) và cácthanh ghi chức năng đặc biệt (80H – FFH)
a RAM đa dụng :
Mặc dù trên hình cho thấy 80 byte RAM đa dụng chiếmcác địa chỉ từ 30H – 7FH, 32 byte dưới cùng từ 00H đến1FH cũng có thể được dùng với mục đích tương tự (mặcdù các địa chỉ này đã có mục đích khác )
Bộ nhớ chương trìnhđược chọnqua PSEN
Bộ nhớ dữ liệuđược chọnqua WRvà RD
Trang 197F RAM ña duïng FF
Trang 2007 Bank thanh ghi
Mọi địa chỉ trong vùng RAM đa dụng dều có thể được
truy xuất tự do dùng cách đánh địa chỉ trực tiếp hoặc
gián tiếp Ví dụ , để đọc nội dung ở địa chỉ 5FH của
RAM nội vào thanh tích luỹ , lệnh sau sẽ được dùng :
MOV A, 5FH ; Định dịa chỉ trực tiếpRAM bên trong cũng có thể được truy xuất dùng
cách đánh địa chỉ gián tiếp qua R0 hay R1 Ví dụ , hai
lệnh sau thi hành cùng nhiệm vụ như lệnh đơn ở trên :
MOV R0 , #5FH
Lệnh đầu dùng địa chỉ tức thời để di chuyển giá trị
5FH vào thanh ghi R0 , và lệnh thứ hai dùng địa chỉ trực
tiếp để di chuyển dữ liệu “ được trỏ bởi R0 “ vào thanh
ghi tích luỹ
b RAM địa chỉ hoá từng bit :
AT89C51 chứa 210 bit được địa chỉ hoá , trong đó 128
bit là ở các địa chỉ byte 20H đến 2FH , và phần còn lại
là trong các thanh ghi chức năng ghi đặc biệt
Ý tưởng truy xuất từng bit riêng lẻ bằng các phần
mềm là một đặc tính tiện lợi của vi điều khiển nói
chung Các bit có thể được đặt, xoá, AND, OR, … với một
lệnh đơn Đa số các vi xử lý đòi hỏi một chuỗi lệnh
đọc–sửa–ghi để đạt được hiệu quả tương tự Hơn nữa,
các port I/O cũng được địa chỉ hoá từng bit làm đơn giả
phần mềm xuất nhập từng bit
Có 128 bit được địa chỉ hoá đa dụng ở các byte 20H
đến 2FH Các địa chỉ này được truy xuất như các byte
hoặc như các bit phụ thuộc vào lệnh được dùng Ví dụ ,
để đặt bit 67H , ta dùng lệnh sau :
SETB 67HChú ý rằng “địa chỉ bit 67H “ là bit có trọng số lớn
nhất (MSB) ở “ địa chỉ byte 2CH “ Lệnh trên sẽ không
tác động đến các bit khác ở địa chỉ này Các vi xử
lý sẽ phải thi hành nhiệm vụ tương tự như sau :
RAM
CÁC THANH GHI CHỨC NĂNG ĐẶC BIỆT
Trang 21ORL A, #10000000 ; set MSBMOV 2CH, A ; ghi lại cả byte
c Các bank thanh ghi :
32 byte thấp nhất của bộ nhớ nội là dành cho cácbank thanh ghi Bộ lệnh của AT89C51 hỗ trợ 8 thanh ghi(R0 đến R7) và theo mặc định (sau khi reset hệ thống)các thanh ghi này ở các địa chỉ 00H – 07H Lệnh sauđây sẽ đọc nội dung ở cacù địa chỉ 05H vào thanh ghitích luỹ :
Bank thanh ghi tích cực có thể chuyển đổi bằng cáchthay đổi các bit chọn bank thanh ghi trong từ trạng tháichương trình (PSW) Giả sử rằng bank thanh ghi 3 được tíchcực , lệnh sau sẽ ghi nội dung của thanh ghi tích luỹ vàođịa chỉ 18H :
Ý tưởng dùng các “bank thanh ghi “ cho phép “chuyển hướng” chương trình nhanh và hiệu quả ( từngphần riêng rẽ của phần mềm sẽ có một bộ thanh ghiriêng không phụ thuộc vào các phần khác)
4 Các thanh ghi chức năng đặc biệt :
Các thanh ghi nội của AT89C51 được truy xuất ngầmđịnh bởi một bộ lệnh Ví dụ lệnh “INC A” sẽ tăng nộidung của thanh tích luỹ A lên 1 .Tác động này đượcngầm định trong mã lệnh
Các thanh ghi trong AT89C51 được định dạng như mộtphần của RAM trên chip Vì vậy mỗi thanh ghi sẽ cómột địa chỉ (ngoại trừ thanh ghi điểm chương trình vàthanh ghi lệnh vì các thanh ghi này hiếm khi bị tác độngtrực tiếp , nên không có lợi lộc gì khi đặt chúng vàotrong RAM trên chip) Đó là lý do để AT89C51 có nhiềuthanh ghi như vậy Cũng như R0 đến R7 , có 21 thanh ghichức năng đặc biệt (SFR : Special Function Register) ở
Trang 22vùng trên của RAM nội , từ địa chỉ 80H đến FFH Hầuhết 128 địa chỉ từ 80H đến FFH không được định nghĩa Chỉ có 21 địa chỉ SFR là được định nghĩa
Ngoại trừ tích luỹ (A) có thể được truy xuất ngầm nhưđã nói, đa số các SFR được truy xuất dùng địa chỉ trựctiếp Chú ý rằng một vài SFR có thể được địa chỉhoá bằng bit hoặc byte Người thiết kế phải thận trọngkhi truy xuất bit và byte Ví dụ lệnh sau
SETB 0E0Hsẽ set bit 0 trong thanh ghi tích luỹ , các bit khác khôngthay đổi Ta thấy rằng E0H đồng thời là địa chỉ bytecủa cả thanh ghi tích luỹ và là địa chỉ bit của bit cótrọng số nhỏ nhất trong thanh ghi tích luỹ Vì lệnh SETBchỉ tác động trên bit , nên chỉ có địa chỉ bit là cóhiệu quả
a Thanh ghi B :
Thanh ghi B ở địa chỉ F0H được dùng cùngvới thanh ghi tích luỹ A cho các phép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trị không dấu 8 bit trong Avà B rồi trả về kết quả 16 bit trong A (byte thấp ) và B(byte cao ) Lệnh DIV AB sẽ chia A cho B rồi trả về kếtquả nguyên trong A và phần dư trong B Thanh ghi B cũngcó thể được xem như thanh ghi đệm đa dụng Nó được địachỉ hoá từng bit bằng các địa chỉ bit F0H đến F7H
b Từø trạng thái chương trình :
Từ trạng thái chương trình (PSW : Program Status Word)
ở địa chỉ D0H chứa các bit trạng thái như bảng tóm tắtsau :
Bit Ký hiệu Địa chỉ Ý nghĩa
01 = bank 1 : địa chỉ08H – 0FH
Trang 2310 = bank 2 : địa chỉ10H – 17H
11 = bank 3 : địa chỉ18H – 1FH
ANL C, 25H
Cờ nhớ phụ :
Khi cộng các số BCD, cờ nhớ phụ (AC) được set nếukết quả của 4 bit thấp trong khoảng 0AH đến 0FH Nếucác giá trị được cộng là số BCD , thì sau lệnh cộng cầncó DA A(hiệu chỉnh thập phân thanh ghi tích luỹ ) đểmang kết quả lớn hơn 9 trở về tầm từ 0 -> 9
Cờ 0 :
Cờ 0 (F0) là một bit cờ đa dụng dành cho các ứngdụng của người dùng
Các bit chọn bank thanh ghi :
Các bit chọn bank thanh ghi (RS0 và RS1) xác định bankthanh ghi được tích cực Chúng được được xoá sau khi resethệ thống và được thay đổi bằng phần mềm nếu cần
Ví dụ , ba lệnh sau cho phép bank thanh ghi 3 và di chuyểnnội dung của thanh ghi R7 (địa chỉ byte 1FH ) đến thanh ghitích luỹ :
Trang 24MOV A, R7Khi chương trình được hợp dịch , các địa chỉ bit đúng đượcthay thế cho các ký hiệu “RS1” và “RS0” Vậy , lệnhSETB RS1 sẽ giống như lệnh SETB 0D4H
Cờ tràn :
Cờ tràn (OV)được set sau một lệnh cộng hoặc trừnếu có một phép toán bị tràn Khi các số có dấuđược cộng hoặc trừ với nhau , phần mềm có thể kiểmtra bit này để xác định xem kết quả có nằm trong tầmxác định không Khi các số không dấu được cộng , bit
OV có thể được bỏ qua Các kết quả lớn hơn +127hoặc nhở hơn –128 sẽ set bit OV Ví dụ , phép cộng sau bịtràn và bit OV được set :
Kết quả là một số có dấu 8EH được xen như –116 ,không phải là kết quả đúng (142) , vì vậy , bit OV đượcset
c Con trỏ ngăn xếp :
Con trỏ ngăn xếp (SP) là một thanh ghi 8 bit ở địachỉ 81 H Nó chứa địa chỉ của byte dữ liệu hiện hànhtrên đỉnh của ngăn xếp Các lệnh trên ngăn xếp baogồm các thao tác cất dữ liệu vào ngăn xếp và lấydữ liệu ra khỏi ngăn xếp Lệnh cất dữ liệu vào ngănxếp sẽ làm tăng SP trước khi ghi dữ liệu và lệnh lấydữ liệu ra khỏi ngăn xếp sẽ đọc dữ liệu và giảm SP.Ngăn xếp của AT89C51 được giữ trong RAM nội và đượcgiới hạn các địa chỉ có thể truy xuất bằng địa chỉgián tiếp Chúng là 128 byte đầu của AT89C51
Để khởi động lại SP với ngăn xếp bắt đầu tại 60H ,các lệnh sau đây được dùng :
MOV SP , # 5FHTrên AT89C51 ngăn xếp bị giới hạn 32 byte vì địa chỉcao nhất của RAM trên chip là 7FH Sở dĩ dùng giá trị5FH vì SP sẽ tăng lên 60H trước khi cất byte dữ liệu đầutiên
Người thiết kế có thể chọn không phải khởi độnglại con trỏ ngăn xếp mà để nó lấy giá trị mặc định
Trang 25khi reset hệ thống Giá trị mặc định đó là 07H và kếtquả là ngăn đầu tiên để cất dữ liệu có địa chỉ là08H Nếu phần mềm ứng dụng không khởi động lại
SP , bank thanh ghi 1 ( có thể cả 2 và 3 ) sẽ không dùngđược vì vùng RAM này đã được dùng làm ngăn xếp
Ngăn xếp được truy xuất trực tiếp bằng các lệnhPUSH và POP đểû lưu trữ tạm thời và lấy lại dữ liệu,hoặc được truy xuất ngầm bằng các lệnh gọi chươngtrình con (ACALL và LCALL) và các lệnh trở về (RET, RETI)để cất và lấy lại bộ đếm chương trình
d.Con trỏ dữ liệu :
Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộnhớ ngoài là một thanh ghi 16 bit ở địa chỉ 82H (DPL :byte thấp ) và 83H (DPH : byte cao) Ba lệnh sau sẽ ghi 55Hvào RAM ngoài địa chỉ 1000H :
MOVX @DPTR, ALệnh đầu tiên dùng địa chỉ tức thời để tải dữ liệu55H vào thanh ghi tích luỹ Lệnh thứ hai cũng dùng địachỉ tức thời , lần này để tải dữ liệu 16 bit vào con trỏdũ liệu Lệnh thứ ba dùng địa chỉ gián tiếp để dichuyển dữõ liệu trong A (55H) đến RAM ngoài ở địa chỉđược chứa trong DPTR (1000H)
e Các thanh ghi port xuất nhập :
Các Port của 8031 gồm port 0 ở địa chỉ 80H, port 1 ởđịa chỉ 90H, port 2 ở địa chỉ A0H và port 3 ở địa chỉB0H Tất cả các port này có thể truy xuất từng bit nênrất thuận tiện trong chức năng giao tiếp
f Các thanh ghi Timer:
AT89C51 có chứa hai bộ định thời/ đếm 16 bit đượcdùng cho việc định thời hoặc đếm sự kiện Timer 0 ởđịa chỉ 8AH (TLO: byte thấp) và 8CH (THO: byte cao) Timer
1 ở địachỉ 8BH (TL1: byte thấp)và 8DH (TH1: byte cao)việc khởi động Timer được set bởi Timer mode (TMOD) ởđịa chỉ 89 và thanh ghi điều khiển Timer (TCON) ở địachỉ 88H Chỉ có TCON được địa chỉ hóa từng bit
g Các thanh ghi port nối tiếp:
Trang 26AT89C51 chứa 1 port nối tiếp dùng cho việc trao đổithông tin với các thiết bị nối tiếp như máy tính modemhoặc giao tiếp với các IC khác (các bộ chuyển đổi A\D,các thanh ghi dịch…) Một thanh ghi gọi là bộ đếm dữliệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả hai dữliệu phát và dữ liệu nhận Khi truyền dữ liệu thì ghilên SUBF, khi nhận dữ liệu thì đọc SUBF Các mode vậnhành khác nhau được lập trình qua thanh ghi điều khiểnport nối tiếp (SCON: được địa chỉ hóa từng bit ở địa chỉ98H).
h Các thanh ghi ngắt:
AT89C51 có cấu trúc 5 nguồn ngắt và 2 mức ưutiên Các ngắt bị cấm sau khi Reset hệ thống và sẽđược cho phép bằng việc thanh ghi cho phép ngắt (IE) ởđịa chỉ A8H Cả hai thanh ghi được địa chỉ hóa từng bit
i Thanh ghi điều khiển công suất:
Thanh ghi điều khiển công suất (PCON) ở địa chỉ 97Hchứa nhiều bit điều khiển chúng được tóm tắt ở bảngsau:
Không địnhù nghĩa Không địnhù nghĩa Không địnhù nghĩa Bit cờ đa dụng 1Bit cờ đa dụng 2Giảm công suất, được set hoạt modegiảm công suất, chỉ thoát khi reset
Mode chờ, set để kích hoạt mode chờ,chỉ thoát khi có ngắt hoặc reset hệthống
Trang 275 Bộ nhớ ngoài :
AT89C51 có khả năng mở rộng bộ nhớ lên đến 64
kB bộ nhớ chương trình và 64 KB bộ nhớù dữ liệu bênngoài Do đó có thể dùng ROM và RAM nếu cần Khidùng bộ nhớ ngoài port 0 cũng là một port I/O thuầntuý Nó được kết hợp với Bus địa chỉ (A0 - A7) và Busdữ liệu (D0 - D7) với tín hiệu ALE để chốt byte thấp củaBus địa chỉ khi bắt đầu mỗi chu kỳ nhớ Port 2 được chophép byte cao của địa chỉ Trong nữa đầu của mỗi chukỳ bộ nhớ , byte thấp của địa chỉ được cấp trong port 0và được chốt bằng xung ALE Một IC chốt 74HC373 (hoặctương đương) sẽ giữ byte địa chỉ thấp trong phần còn lạicủa chu kỳ bộ nhớ Trong nữa sau của chu kỳ bộ nhớport 0 được dùng như bus dữ liệu và được đọc hoặc ghituỳ theo lệnh
a Truy xuất bộ nhớ chương trình ngoài:
Bộ nhớ chương trình bên ngoài là một ICù ROM đượccho phép bởi tín hiệu PSEN Hình vẽ sau đây sẽ mô tảcách kết nối 1ù EPROM với AT89C51:
ALE Port 2 PSEN\
D7-D0 A7-A0 EPROM A15-A8 OE\
D Q
74373
E
Trang 28b Truy xuất bộ nhớ dữ liệu ngoài :
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được chophép ghi /đọc bằng các tín hiệu điều khiển WR\ và RD\.AT89C51 có một lệnh duy nhất truy xuất dữ liệu củabộ nhớ dữ liệu ngoài là MOVX dùng con trỏ dữ liệu 16bit (DPTR) hoặc R0 và R1 xem như thanh ghi địa chỉ
Giao tiếp giữa AT89C51 và RAM
Trang 29Kết nối bus địa chỉ và bus dữ liệu giữa RAM vàAT89C51 cũng giống như EPROM và do đó cũng có thểlên đến 64 Kbyte bộ nhớ RAM Ngoài ra chân RD củaAT89C51 được nối với chân cho phép xuất (OE) của RAMvà chân WR được nối với chân ghi (WR) củaRAM.
Giản đồ thời gian cho lệnh đọc bộ nhớ dữ liệungoài được vẽ ở hình sau đối với lệnh MOVX A,@DPTR:
Trang 30c Giải mã địa chỉ:
Nếu nhiều EPROM và/hoặc nhiều RAM được giao tiếpvới AT89C51 thì cần có mạch giải mã địa chỉ Mạch giảimã cũng tương tự như các hệ vi xử lý khác.Ví dụ , nếudùng nhiều EPROM và RAM 8Kbyte thì bus địa chỉ cầnphải được giải mã để xác định IC nhớ nào được chọn
Thường dùng IC giải mã 74HC138 với các ngõ rađược nối tới các ngõ vào chọn chip (CS) trên các ICnhớ
Dữ liệu nhập
S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6
Một chu kỳ
Trang 31d Xếp chồng các vùng bộ nhớ và dữ liệu bênngoài:
Vì bộ nhớ chương trình là ROM nên nảy sinh mộtvấn đề bất tiện khi phát triển phần mềm cho AT89C51là tổ chức bộ nhớ như thế nào để có thể sửa đổichương trình và có thể ghi trở lại khi nó được chứa trongbộ nhớ ROM Cách giải quyết là xếp chồng các vùngnhớ chương trình và dữ liệu Một bộ nhớ RAM có thểchứa cả chương trình và dữ liệu bằng cách nối đường
OE của RAM với một cổng AND có hai ngõ vào PSEN\ vàRD\
Sơ đồ mạch như hình sau cho phép bộ nhớ RAM cóhai chức năng vừa là bộ nhớ chương trình vừa là bộnhớ dữ liệu:
Vậy một chương trình có thể được tải vào RAM bằngcách xem nó như một bộ nhớ dữ liệu và thi hànhbằng cách xem nó như một bộ nhớ chương trình
6 Ngõ vào tín hiệu RESET:
AT89C51 có ngõ vào Reset RST tác động ở mức caotrong khoảng thời gian hai chu kỳ xung máy, sau đóxuống mức thấp để AT89C51 bắt đầu làm việc , RSTcó thể kích bằng tay bằng một phím thường hở, sơ đồmạch Reset như sau:
100k
Trang 32Trạng thái của tất cả thanh ghi trong AT89C51 sau khiReset hệ thống được tóm tắt như sau:
Trang 33Thanh ghi Nội dung
Đếm chương trình PCThanh ghi tích lũy AThanh ghi B
Thanh ghi trạng tháiPSW
SPDPRTPort 0 đến port 3IP
IECác thanh ghi địnhthời
SCON SBUFPCON(HMOS)PCON(CMOS)
0000H00H00H00H07H0000HFFHXXX0 0000B0XX0 0000B00H
00H00H0XXX XXXXB0XXX 0000B
Quan trọng nhất trong các thanh ghi trên là thanh ghiđếm chương trình, nó được đặt tại 0000H Khi Reset trở lạimức thấp, việc thi hành chương trình luôn bắt đầu ởđịa chỉ đầu tiên trong bộ nhớ chương trình: địa chỉ0000H Nội dung của RAM trên chip không bị thay đổi bởilệnh Reset
1 Giới thiệu :
Một định nghĩa đơn giản của timer là một chuỗi cácflip-flop chia đôi tần sồ nối tiếp với nhau, chúng nhậntín hiệu vào làm nguồn xung nhịp Ngõ ra của tầng cuốilàm xung nhịp cho flip - flop báo tràn của timer, mà cóthể kiểm tra nó bằng phần mềm hoặc nó tạo rainterrupt (flip - flop cờ) Giá trị nhị phân trong các flip - flopcủa timer có thể xem như số đếm số xung nhịp (hoặccác sự kiện) từ khi khởi động timer Ví dụ timer 16 bit sẽđếm lên từ 0000H đến FFFFH Cờ báo tràn sẽ lên 1 khisố đếm tràn từ FFFFH đến 0000H
CAT89C51 có hai timer 16 bit, mỗi timer có 4 cách
làm việc Người ta sử dụng các timer để:
Trang 34a Định khoảng thời gian.
ở một khoảng đều đặn và đặt cờ tràn timer Cờ đượcsử dụng để đồng bộ hóa chương trình để thực hiện mộttác động như kiểm tra trạng thái của các ngõ vàohoặc gởi sự kiện ra các ngõ ra Các ứng dụng khác cóthể sử dụng việc tạo xung nhịp đều đặn của timer để
đo thời gian trôi qua giữa hai sự kiện (Ví dụ: đo độ rộngxung)
Đếm sự kiện dùng để xác định số lần xảy ra củamột số sự kiện Một “sự kiện” là bất cứ tác độngngoài nào có thể cung cấp một chuyển trạng thái 1xuống 0 trên một chân của AT89C51.Các timer cũng cóthể cung cấp xung nhịp tốc độ baud cho port nối tiếpnội của AT89C51
Truy xuất các timer của AT89C51 dùng 6 thanh ghichức năng đặc biệt trong bảng sau:
Trang 352 Thanh ghi chế độ Timer (TMOD) :
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chếđộ làm việc cho timer 0 và timer1
chạy khi INT1 ở mức cao
1 = Bộ đếm sự kiện
0 = Bộ định khoảng thời gian
Các chế độ timer:
00: Chế độ 0: timer 13 bit 01: Chế độ 1: timer 16 bit 10: Chế độ 2: tự độngnạp lại 8 bit
11: Chế độ 3: tách timer
timer 0
timer 0
Tóm tắt thanh ghi TMOD.
3 Thanh ghi điều khiển timer (TCON) :
Thanh ghi TCON chứa các bit trạng thái và các bit điềukhiển cho timer0 và timer1
hiệu Địachỉ Mô tả
TCON
7 TF1 8FH Cờ báo tràn timer Đặt bởiphần cứng khi tràn, được xóa
bởi phần mềm hoặc phầncứng khi bộ xử lí chỉ đếnchương trình phục vụ ngắt
Trang 364 TR0 8CH Bit điều khiển timer chạy.
TCON
3 IE1 8BH Cờ cạnh ngắt cạnh bên ngoài.Đặt bởi phần cứng khi phát
hiện một cạnh xuống ởINT1:xóa bằng phần mềmhoặc phần cứng khi CPU chỉđến chương trình phục vụ ngắt
TCON
2 IT1 8AH Cờ kiểu ngắt một bên ngoài.Đặt/xóa bằng phần mềm để
ngắt ngoài tích cực cạnhxuống/mức thấp
TCON
1 IE0 89H Cờ cạnh ngắt 0 bên ngoài
TCON
0 ITO 88H Cờ kiểu ngắt 0 bên ngoài
Tóm tắt thanh ghi TCON.
4 Chế độ timer :
a Chế độ 0 – Chế độ TIMER 13 bit :
- Để tương thích với 8048 (có trước 8051)
- 3 bit cao của TLx (TL0 và hoặc TL1) khôngdùng
b Chế độ 1 – Chế độ TIMER 16 bit :
- Hoạt động như timer 16 bit đầy đủ
- Cờ báo tràn là bit TFx trong TCON có thể đọchoặc ghi bằng phần mềm
- MSB của giá trị trong thanh ghi timer là bit 7của THx và LSB là bit 0 của TLx Các thanh ghi
TLx(5 bit)
THx(8 bit)
TFx
Xung nhịp timer
Cờ báo tràn
Trang 37timer (TLx/THx) có thể đọc hoặc ghi bất cứ lúcnào bằng phần mềm.
c Chế độ 2 – Chế độ tự động nạp lại 8 bit:
TLx hoạt động như 1 timer 8 bit, trong đó THx vẫn giữnguyên giá trị khi nạp Khi số đếm tràn từ FFH đến 00H,không những cờ timer được xét mà giá trị trong THxđồng thời được nạp vào TLx, việc đếm tiếp tục từ giátrị này lên đến FFH xuống 00H và nạp lại v.v…Chế độnày rất thông dụng vì sự tràn timer xảy ra trong nhữngkhoảng thời gian nhất định và tuần hoàn một khi khởiđộng TMOD và THx
TLx(8 bit)
THx(8 bit)
TFx
Xung nhịp timer
Cờ báo tràn
Trang 38d Chế độ 3 – Chế độ tách timer:
- Timer 0 tách thành 2 timer 8 bit (TL0 và TH0), TL0có cờ báo tràn là TF0 và TH0 có cờ báo tràn là TF1
- Timer 1 ngưng chế độ 3, nhưng có thể khởiđộng bằng cách chuyển sang chế độ khác Giới hạnduy nhất là cờ báo tràn TF1 không còn bị tác động khitimer 1 bị tràn vì nó được nối với tới TH0
- Khi timer 0 ở chế độ 3, có thể có thể chotimer 1 chạy và ngưng bắng cách chuyển nó ra ngoài vàvào chế độ 3 Nó vẫn có thể được sử dụng bởi portnối tiếp như bộ tạo tốc độ baud hoặc nó có thể sửdụng bằng bất cứ cách nào mà không cần ngắt (vìnó không còn được nối với TF1)
TLx(8 bit)
THx(8 bit)
TFx
Xung nhịp timer
Cờ báo tràn
Xung nhịp timer
1/12 fosc
Cờ báo tràn
Trang 395 Nguồn tạo xung nhịp :
Có hai nguồn tạo xung nhịp có thể có, được chọnbằng cách ghi vào C/T (counter/timer) trong TMOD khi khởiđộng timer Một nguồn tạo xung nhịp dùng cho địnhkhoảng thời gian, cái khác cho đếm sự kiện
Hình : Nguồn tạo xung nhịp
Định khoảng thời gian (interval timing):
Nếu C/T=0 hoạt động timer liên tục được chọn vàtimer được dùng cho việc định khoảng thời gian Lúcđó, timer lấy xung nhịp từ bộ dao động trên chip Bộchia 12 được thêm vào để giảm tần số xung nhịp đếngiá trị thích hợp cho các ứng dụng Như vậy, thạch anh
12 MHz sẽ cho tốc độ xung nhịp timer 1 MHz Báo tràntimer xảy ra sau một số (cố định) xung nhịp, phụ thuộcvào giá trị ban đầu được nạp vào các thanh ghi timerTLx/THx
Đếm sự kiện (Event Couting):
Nếu C/T=1, timer lấy nguồn xung nhịp từ bênngoài.Trong hầu hết các ứng dụng, nguồn bên ngoàinày cung cấp cho timer một xung khi xảy ra một sựkiện – timer dùng đếm sự kiện Số sự kiện được xácđịnh bằng phần mềm bằng cách đọc các thanh ghiTLx/THx vì giá trị 16 bit trong thanh ghi này tăng thêmmột cho mỗi sự kiện
Nguồn xung nhịp ngoài có từ thay đổi chức năngcủa các port 3, bit 4 của port 3 (P3.4) dùng làm ngõ vào
12
Bộ dao độngtrongchip
0: (lên) định khoảng thời gian
Trang 40tạo xung nhịp bên ngoài cho timer 0 và được gọi là “T0”.Và P3.5 hay “T1” là ngõ vào tạo xung nhịp cho timer 1.
Trong các ứng dụng bộ đếm, các thanh ghi Timer đượctăng thêm 1 tương ứng với chuyển từ 1 xuống 0 ở ngõvào bên ngoài: Tx Như vậy, khi ngõ vào cao trong mộtchu kỳ và thấp trong một chu kỳ kế thì số đếm đượctăng thêm một Do đó, mất 2 chu kỳ máy (2s) để ghinhận sự chuyển 1 sang 0, tần số ngoài tối đa là 500KHz(giả sử hoạt động ở 12 MHz)
6 Bắt đầu, dừng và điều khiển các Timer:
Phương pháp đơn giản nhất để bắt đầu (cho chạy)và dừng các timer là dùng các bit điều khiển chạy: TRxtrong TCON TRx bị xóa sau khi Reset hệ thống Như vậy,các timer theo mặc nhiên là bị cấm (bị dừng) TRx đượcđặt lên 1 bằng phần mềm để cho các timer chạy
Hình : cho chạy và dừng các timer
Vì TRx ở trong thanh ghi TCON có địa chỉ bit, nên dễdàng cho việc điều khiển các timer trong chương trình
Ví dụ, cho timer 0 chạy bằng lệnh: SETB TR0
Và dừng bằng lệnh: CLR TRO
Hình sau minh họa Timer 1 hoạt động ở chế độ 1 nhưmột timer 16 bit Các thanh ghi timer TL1/TH1 và cờ báotràn TF1 trong sơ đồ chỉ các khả năng có thể có củanguồn tạo xung nhịp và dễ cho chạy, dừng và điềukhiển timer
1 = xuống: timer chạy
Các thanh ghi timer
12
C/T