MỤC LỤC
• Định vị hiều ngầm: dùng ACC là nơi chứa kết quả các phép toán số học. • Định vị bit: trong các lệnh RESET,SET,BIT cho phép truy xuất đến từng bit trong ô nhớ.
*Kết quả của lệnh: nội dung của ô nhớ có địa chỉ nn được chuyển vào thanh ghi byte thấp, còn nội dung ô nhớ có địa chỉ nn+1 được chuyển vào thanh ghi byte cao. Hai lệnh trên truyền mảng dữ liệu bắt đầu từ đáy ( địa chỉ cao) lên, thường dùng trong trường hợp mảng nguồn có địa chỉ thấp hơn để tránh sự chép chồng khi hai mảng phủ lẫn nhau.
Lệnh này đắt dau các lệnh cộng hay trừ với dữ liệu là số BCD để hiệu chỉnh kết quả trong A thành số BCD.
+ RxC[I] và TxC[I]:Xung đồng hồ cung cấp cho các thanh ghi dịch của phần thu và phần phát.Thường hai chân này được nối chung để phần thu và phần phát làm việc với cùng một tầng số nhịp.Tần số của các xung đồng hồ đưa đến chân RxC và TxC được chọn sao cho là bội số ( Cụ thể là gấp 1 , 16 hoặc 64 lần ) của tốc độ thu hay tốc độ phát theo yêu cầu. Khi đệm ở phần thu đầy thì sẽ có tín hiệu RxRDY = 1.Nếu cho đến khi phần thu nhận được kí tự mới mà CPU không kịp thời đọc được kí tự cũ thì kí tự cũ sẽ bị mất do bị đè bởi kí tự mới nhận được,hiện tượng này gọi là thu đè.
Với việc dùng tần số đồng hồ cho phần thu\phát cao hơn so với tốc độ truyền ta sẽ giảm được lỗi khi truyền thông tin.Tất nhiên khi làm việc ở chế độ đồng bộ thì ta phải có từ chế độ với hai Bit cuối là 00. Bít D2 = 1 : Cho phép phần thu làm việc,nếu lúc này ta có kí tự tại đệm thu ( sẵn sàng để CPU đọc) thì bắt buộc chân RxRDY = 1, báo cho CPU là đệm thu đầy.Tín hiệu này có thể được nối với chân INTR của CPU để lưu ý CPU đọc kí tự từ 8251 theo cách điều khiển trao đổi dữ liệu bằng ngắt. EH IR RTS ER SBRK RxE DTR. Vào chế độ săn tìm 1:Cho phép tìm kiếm kí tự đồng bộ. Reset nội bộ 1: Reset mềm. Cho phép phát 1: Cho phép phát 0: Cấm phát Yêu cầu truyền. Nếu tìm được, nó sẽ đưa thông báo ra bằng mức cao trên chân SYNDET/BRKDET. Trên đây ta đã giới thiệu qua các Bit của từ lệnh và cũng nói sơ qua cách thức dùng ngắt để điều khiển việc trao đổi dữ liệu giữa CPU và USART thông qua các tín hiệu móc nối tại các chân của vi mạch. Ta cũng có khả năng đọc được các tín hiệu móc nối và trạng thái làm việc của mạch 8251 trong thanh ghi trạng thái của nó.Nhờ đọc các Bit trạng thái ta biết được tình trạng của việc truyền dữ liệu và ta có thể dùng các Bit này vào việc điều khiển bằng phương pháp thăm dò việc trao đổi dữ liệu giữa CPU và USART. II.3 Thanh ghi từ trạng thái:. Dạng thức của thanh ghi từ trạng thái được biểu diễn theo hình sau:. Ý nghĩa của các Bit trạng thái như đã nói trên.Cần nói thêm là lỗi khung chỉ có ý nghĩa khi truyền không đồng bộ.Để điều khiển trao đổi dữ liệu kiểu thăm dò ta sẽ phải liên tục đọc và kiểm tra các Bit trạng thái liên quan để có quyết định cụ thể. sàng nhận dữ liệu. 1: phần phát sẵn sàng nhận lệnh hoặc dữ liệu. 1: Đệm giữ và đệm phát rỗng. DSR SYNDET FE OE PE TXEMPTY RXRDY TXRDY. nhận đủ bit Stop).
- Trường hợp chọn đọc/nạp hai byte thì số đếm hai byte sẽ được gửi ra bộ đếm hai lần theo thứ tự byte thấp trước và byte cao sau ra cùng địa chỉ cổng của bộ đếm.Bộ đếm sẽ bắt đầu đếm ngay sau khi nhận được byte thứ hai. - Hoạt động xuất số đếm ra cho bộ đếm sẽ kích cho bộ đếm bắt đầu đếm lại và phát ra một xung nữa sau khi đếm xong.Chính vì vậy nên chế độ này được gọi là chế độ phát xung cài kích mềm.
Tùy theo loại loại mã (Baudot,ASCII,…)được chọn trong quá trình truyền thì ta sẽ có độ dài cho mã kí tự khác nhau có thể là 5,6,7,8 bit(trong đồ án này mã của kí tự được qui định là mã ASCII).Với từng hệ thống truyền tin khác nhau thì bên cạnh các bit mã dữ liệu ta còn có thể tùy chọn có hoặc không có bit Parity để kiểm tra lỗi khi truyền hoặc ta có thể tùy chọn 1 hoặc 2 bít Stop,nhưng trong mọi trường hợp thì bắt buộc phải có 1 bit Start. Ưu điểm của giao diện RS-232 là việc xử lí rất đơn giản (tìm lỗi rất nhanh) nên được sử dụng rất rộng rãi và phổ biến nên khả năng giao tiếp rất lớn,hầu hết ở các máy tính PC đều có cổng RS-232, vì vậy số thiết bị ngoại vi ghép nối với máy tính PC qua giao diện RS-232 cũng nhiều .Về nhược điểm của loại giao diện này phải kể đến khoảng cách truyền rất bị hạn chế và tốc độ truyền chưa cao.Tuy nhiên trong việc thiết kế mạch ngoại vi cho đề tài này để đơn giản về thiết kế cũng như nhằm đạt được yêu cầu của đề tài, mạch giao tiếp qua cổng COM của đồ án sẽ sử dụng loại giao diện RS-232.Khi cần mở rộng đề tài đòi hỏi khoảng cách truyền xa hơn,tốc độ truyền nhanh hơn chẳng hạn chúng ta sẽ phải sử dụng loại giao diện tiên tiến khác như RS-422,RS-485.
Khi có một yêu cầu gửi kí tự được phát ra từ 8250 (thông qua cổng COM) thì khối nhận thông tin (8251 trên mạch ngoại vi) sẽ báo tin hiệu sẵn sàng nhận thông tin.Lúc đó dữ liệu được nhập vào máy PC (từ bàn phím) sẽ được truyền nối tiếp và khối nhận dữ liệu sẽ nhận dữ liệu (là mã ASCII của kí tự) thông qua cổng COM. Đối với cổng COM thì có hai cách phương cách truyền nhận nối tiếp là:Truyền nhận đồng bộ và truyền nhận không đồng bộ (dị bộ) tuy nhiên ở đây sẽ chỉ đề cập tói phương thức truyền nối không đồng bộ mà thôi.
Trong quá trình truyền nhận dữ liệu,quá trình xử lí của CPU thì tốc độ truyền nhận và ngắt quãng cho CPU là điều chúng ta phải lưu ý đến,vì vậy việc chia xung cho tốc độ truyền nhận vàđịnh thời ngắt quãng cho CPU phải được đồng bộ.Khối chia xung dùng vi mạch đếm lập trình được 8253 sẽ làm nhiệm vụ chia xung theo những yêu cầu khác nhau.Vi mạch 8253 sẽ nhận xung Clock từ hệ thống , sau đó tùy chọn ta có thể chia với những khoảng thời gian và chu kì xung khác nhau để cung cấp cho 8251 đạt được tốc độ truyền nhận , mặc khỏc cỏc ngừ ra khỏc của 8253 cú thể để cung cấp cho chõn ngắt quóng (INT) của CPU để thực hiện việc ngắt quãng theo thời gian. Khi CPU nhận dữ liệu từ các thiết bị ngoại vi cũng như cần xuất dữ liệu ra các thiết bị ngoại vi thì dòng dữ liệu phải mang tính ổn định và mang tính chính xác cao vì vậy việc đệm dữ liệu là điều cần phải lưu ý đến.Nếu đối với những thiết bị ngoại vi không có sẵn các bộ đệm bên trong nó bắt buộc chúng ta phải sử dụng các mạch cài và mạch chốt cho các dòng dữ liệu đi vào hoặc đi ra khỏi chúng.Các mạch cài và các mạch đệm có nhiệm vụ chủ yếu là ổn định điện áp cho các dòng dữ liệu khi ra vào các thiết bị để hạn dòng cho phù hợp với mức điện áp qui định của linh kiện đó.Có rất nhiều IC tổ hợp có chức năng đệm dữ liệu trong đó vi mạch 74LS374 là được sử dụng rộng rãi hơn cả vì đặc tính chịu được mức điện áp tương đối cao ,Vì vậy các mạch cài trong việc thiết kế đề tài này chúng tôi sử dụng mạch đệm 74LS374 để thực hiện việc đệm dữ liệu cho các linh kiện.
Khi sử dụng một IC nào đó để làm công việc giải mã chúng ta phải luôn căn cứ vào những đặc tính kĩ thuật của chúng để việc giải mã phù hợp với mạch thiết kế tránh tình trạng dư thừa quá nhiều.Ví dụ như khi cần giải mã cho một vài thiết bị nào đó(chỉ sử dụng một số ít các địa chỉ chẳng hạn) ta nên chọn những IC giải mã có ít ngỏ ra và ngược lại. Về cách thức giải mã thì giống nhau đối với bất cứ IC nào cũng vậy, chỉ có nét khác nhau cơ bản giữa cỏc IC giải mó là cỏc ngừ vào và cỏc ngừ ra khỏc nhau về số lượng.Khi IC giải mó cú N ngừ vào (là cỏc chõn địa chỉ) thỡ sẽ cú 2 lũy thừa N ngừ ra,và tương ứng với dữ liệu (giỏ trị cỏc bớt) ở ngừ vào luụn luụn chỉ cú một ngừ ra ở trạng thỏi tớch cực mà thụi,cỏc ngừ ra tích cực đó sẽ được đưa đến các Chip Select của các thiết bị để báo rằng thiết bị đó đang ở trạng thỏi làm việc.,lỳc đú dữ liệu ở ngừ vào chớnh là địa chỉ của thiết bị đú.
Dòng dữ liệu trước khi thực hiện việc truyền,nhận được đưa vào các cổng Input của bộ đệm,bên trong bộ đệm có các D-Fliplop sẽ cất giữ các giá trị(mức Logich) của dữ liệu,chỉ khi có tín hiệu điều khiển cho phép Enable thì dữ liệu trong bộ đệm mới được xuất ra các ngừ Out của bộ đệm,lỳc đú dũng dữ liệu đó được bộ đệm ổn định điện ỏp trờn đường truyền làm cho việc truyền nhận diễn ra chính xác hơn. Cũng như những mạch tổ hợp khác hiện nay có rất nhiều IC chuyên dụng có chức năng đệm dữ liệu , tuy nhiên với những IC họ TTL thì các mạch đệm 74LS373,74LS374 là được sử dụng nhiều hơn cả trong việc thiết kế bởi trước hết là tính dễ sử dụng của nó kế đến là có số chân phù hợp với dòng dữ liệu từ D0-D7 cuối cùng việc giải mã để chọn các chân cho phép Enable tương tự như những thiết bị ngoại vi khác.
Khi hiển thị một kí tự bất kì trên ma trận thì nguyên tắc ta phải biết được Led nào sáng và những Led nào không sáng. Quyết định những Led nào sáng và những Led nào ta phải căn cứ cào dữ liệu xuất ra các bộ đệm dữ liệu.Tuy nhiên Led sáng được chỉ khi có dòng đi qua nó,để phân cực cho dòng điện được phép hay được đi qua Led bắt buột ta phải có thiết bị dùng để phân cực và kéo dòng cho Led.Transitor sẽ đảm nhận nhiệm vụ này.
Khi hệ thống hoạt động thì tại một thời điểm CPU chỉ có thể làm việc với duy nhất một thiết bi nào đó mà thôi,để hướng CPU làm việc với một thiết bị nào đó thì ta cần phải biết thiết bị đó nằm tại địa chỉ nào vì vậy khi thiết kế một mạch vi xử lí thì việc giải mã địa chỉ cho các thiết bị như ROM,RAM và các thiết bị ngoại vi là điều tối quan trọng mà chúng ta cần phải quan tâm hàng đầu và trước hết.Cách thức giải mã và địa chỉ qui định cho các thiết bị khi giải mã phải sao cho phù hợp để khi hoạt động CPU có thể dễ dàng tham chiếu tới đúng địa chỉ của thiết bị một cách nhanh nhất,chú ý tránh việc giải mã trùng địa chỉ và cần lưu ý việc giãi mã cho các thiết bi ngoại vi đối với từng loại CPU. Thực tế khi cần hiển thị một dòng kí thì đòi hỏi rất nhiều ma trận vì vậy trong mạch giải mã địa chỉ chúng tôi dành 64 địa chỉ ngoại vi (bắt đầu từ 80H cho đến BF H) cho các bộ đệm tuy nhiên trong quá trình thiết kế số bộ đệm được sử dụng là ít hơn nhiều các địa chỉ giải mã còn dư có thể dùng để mở rộng thêm cho bảng đèn ma trận của chúng ta khi đưa ra ngoài thực tế sử dụng.
Sau khi giải mã ta định được 64 địa chỉ ngoại vi tương ứng với 64 bộ đệm.Vì số lượng địa chỉ của các cổng đệm tương đối nhiều nên ở đây chúng tôi sử dụng vi mạch 74LS138 để giải mó,lỳc đú cỏc ngừ ra từ Y0 đến Y7 của cỏc vi mạch 74LS138 sẽ được nối vào cỏc chõn Select của các bộ đệm .Dưới đây là sơ đồ mạch nguyên lí của việc giải mã cho các cổng đệm. Cỏc chõn tớn hiệu cũn lại của CPU khụng sử dụng,để chống nhiễu cho CPU cỏc ngừ vào không sử dụng sẽ được nối lên nguồn để Set mức Logich 1 (không tích cực) cho nó,còn cỏc ngừ ra khụng sử dụng cú thể để trống.
Hai tín hiệu truyền (TxD), nhận (RxD) được kết nối với hai chân nhận và truyền dữ liệu trên cổng COM thông qua hai vi mạch chuyển đổi điện áp 1488 và 1489 để đưa mức điện áp về tương thích với mức diện áp của máy tính PC hoặc phù hợp với mức điện áp của mạch ngoại vi. Khi truyền nhận dữ liệu thì việc xác định tốc độ truyền nhận của dữ liệu phải là một trong những tốc độ chuẩn đã được qui định,và việc truyền nhận lúc nào cũng diễn ra đồng thời nên tốc độ truyền nhận phải giống nhau.
Vì ma trận đèn là ma trận 16 hàng * 8 cột nên nếu tính đơn giản ta sẽ phải tốn hai bộ đệm cho hàng và một bộ đệm cho cột của ma trận.Tuy nhiên trong phương pháp quét ma trận chúng tôi sử dụng cách thức quét theo hàng nên các bộ đệm cho hàng của ma trận có thể dùng chung với nhau,lúc đó mỗi lần quét hàng tất cả các ma trận đều được quét cùng lúc việc này tiện lợi cho quá trình xuất dữ liệu ra ma trận và phù hợp khi cần mỡ rộng dòng kí tự hiển thị trên ma trận.Tuy nhiên để đơn giản hơn trong đề tài này chúng tôi sử dụng phương pháp quét cho từng ma trân một tức là các ma trận có các bộ đệm cho hàng độc lập với nhau nên khi quét ma trận tại một thời điểm chỉ có một ma trận đang thực hiện việc quét. Khi cần quét các hàng của một ma trận ta thường sử dụng bộ đếm,bộ chọn kênh,bộ giải mã địa chỉ… Vì một phần tử của ma trận được xác định bởi hai yếu tố đó là hàng và cột , khi bắt đầu quét ta chọn lần lượt các hàng sau đó đi kiểm tra các cột nếu cả hai yếu tố cả cột và hàng đều đươc chọn thì phần tử đó mới được chọn(lúc đó Led mới sáng).Tuy nhiên khi xử dụng bộ đếm hay vi mạch bất kì để quét thì ta phải tính toán để đồng bộ việc quét hàng với việc kiểm tra dữ liệu trên cột.Khi thiết kế cho.
Công việc thiết kế mạch in cho cho một mạch ứng dụng nào đó chính là công việc tiếp theo sau giai đoạn đã hoàn tất mạch nguyên lí.Việc thiết kế ra một bảng mạch in ít nhiều chúng ta cần phải dựa vào sơ đồ mạch nguyên lí đã hoàn chỉnh của nó để dựa vào các đường tiền nối mạch để biết được các đường nối giữa các chạn nối linh kiện với nhau để từ đó ta phải chọn cách bố trí linh kiện và cách thức chạy các đường nối cho phù hợp. Hiện nay có rất nhiều phần mềm hỗ trợ cho việc vẽ mạch in như : PCB,Protel PCB,Crikit Maker,Orcad … Các phần mềm này giúp việc vẽ mạch in trở nên thuận lợi và dễ dàng hơn nhiều vì đa số đều được chạy trên môi trường Window và có thư viện rất đa dạng hỗ trợ cho các chân gắn linh kiện.
Dựa vào mạch nguyên lí để gọi ra các chân gắn linh kiện tương ứng chú ý khi gọi các chân gắn linh kiện phải có sự đồng bộ với số chân của IC muốn gắn lên mạch in.Trong PROTEL PCB có hỗ trợ một thư viện các chân gắn linh kiện nhưng chắc chắn là không thể nào đầy đủ hết các kiểu chân gắn nên khi thao tác ta có thể vào mục Library chọn mục Components rối chọn mục Display để liệt kê tất cả các chân gắn linh kiện mà PROTEL PCB hỗ trợ để có thể lựa chọn chính xác hơn linh kiện mà chúng ta muốn sử dụng trên bảng mạch.Sau khi đã xác định được chân gắn linh kiện số thông số cho chân linh kiện đó rối sau đó ta có thể đặt linh kiện đó lên bảng vẽ.Đối với những ai đã sử dụng PROTEL PCB một cách thành thạo hơn thì có thể thao tác. File.NET là một tập tin ở dạng text ,do đó ta có thể dùng bất kì trình soạn thảo văn bản nào để biên soạn File.NET này.Điều cần phải quan tâm trong khi biên soạn file.NET là ta phải tuân theo cú pháp mà trình dịch tập tin .NET qui định vì đối với các trình vẽ mạch in khác nhau thì cú pháp của tập tin.NET có khác nhau.Khi sử dụng File.NET để thiết kế mạch in thì ít nhiều ta phải nắm được cú pháp của cách viết tập tin nàyđể có thể sửa chữa những sai sót trong tập tin cũng như để tự viết lấy tập tin mà không cần phải thông qua biên dịch từ mạch nguyên lí.
Thực chất tập tin này là một dạng File Text chứa tất cả những mô tả những linh kiện có trong mạch in mà chúng ta cần vẽ nên chúng ta có thể biên dịch từ mạch nguyên lí là như vậy .Mỗi mạch nguyên lí khi biên dịch sẽ được một tập tin.NET riêng mà trong đó có mô tả các kiểu chân gắn linh kiện và mô tả các đường nối các chân của linh kiện theo dạng NET. Ưu điểm khi sử dụng tập tin .NET để vẽ mạch in đó là tính nhanh chóng ,chính xác mang tính tối ưu hóa các diểm nối và các đường Track ,khi vẽ mạch ta có thể kiểm tra lỗi rất nhanh trên tập tin .NET.Tuy nhiên việc sử dụng tập tin này để vẽ mạch in có thể gây khó khăn khi thi công vì tính chặt chẽ của nó cũng như khi cần vẽ những mạch phức tạp việc tối ưu trong khi vẽ làm cho bảng vẽ không thể hoàn chỉnh trên ít lớp vẽ.
Ý nghĩa các Bit của thanh ghi AH trong hàm này liên quan việc truyền nhận thông qua Modem sẽ không được giới thiệu (Vì trong phạm vi của bài tập này việc truyền dữ liệu không sử dụng Modem các bạn có thể tham khảo trong giáo trình Advancad MS Dos Programming) mà chúng tôi chỉ đề cập đến việc Set các tham số để thực hiện việc khởi tạo cổng COM. AH = Trạng thái của cổng COM ( Xem lại ý nghĩa các bit của thanh ghi thanh ghi AH trong hàm 00H của ngắt 14H). GIỚI THIỆU CHƯƠNG TRÌNH GỬI MỘT CHUỖI KÍ TỰ RA CỔNG COM:. Có rất nhiều ngôn ngữ như : Basic,Pascal,C,Assembler,… cung cấp các hàm gọi các ngắt của BIOS để truy cập giao diện mong muốn như : Bàn phím,màn hình,cổng song song của máy in,cổng nối tiếp RS232… Nhưng ở đây để mang tính gần gũi với tất cả mọi người chúng tôi sẽ sử dụng ngôn ngữ Pascal để thực hiện chương trình này:. Chương trình sẽ cung cấp cho chúng ta một hàm cho phép ghi chuỗi kí tự ra giao diện nối tiếp.Chương trình này được cấu thành từ 5 phần đó là : Chương trình chính và 4 thủ tục gọi các hàm của ngắt cho cổng COM. Các thủ tục này dùng để khởi tạo giao diện của cổng COM1 ,sau đó sẽ gửi chuỗi kí tự tới cổng COM này.Nếu việc gửi kí không thành công thì chương trình sẽ gửi ra một thông báo lỗi trên màn hình. Lưu ý : Trong chương trình nguồn của chúng ta các thông số khi khởi động cổng COM ở hàm 00H các Bit của thanh ghi AL được qui định như sau:. Program OUT_STRING_TO_COM_PORT;. Uses Crt,Dos; {Ghép các Unit Crt và Dos}. NumberCom : Integer):Boolean; {Số máy in}.
Chương trình này do CPU Z80 điều hành sẽ đảm nhận việc nhận kí tự từ vi mạch nối tiếp USART 8251 thông qua ngắt (CPUZ80 trước khi nhận kí tự thông qua ngắt từ 8251 sẽ ra kiểm tra trạng thái của vi mạch này một lần sau đó mới hoạt động theo tín hiệu ngắt).Khi nhận kí tự CPU sẽ so sánh với mã kết thúc chuỗi ,. Theo cách thức hoạt động như mô hình trên thì ta có thể nhận thấy rằng khi hệ thống hoạt động thì cứ mỗi lần xuất ra ma trận thì ta phải xuất một lúc 8 kí tự ( tương ứng với 8 ma trận mà chúng ta đã thiết kế).Trong quá trình xuất như vậy kí tự được hiể thị trên ma trận 1 sẽ bị mất đi trong lần xuất tiếp theo để nhường chỗ cho một kí tự mới và các kí tự trên ma trận sẽ được dịch lên ma trận trước nó quá trìng đó diễn ra liên tục và tương đối nhanh nên ta sẽ thực hiện được việc làm cho chữ chạy.
Chương trình trên ROM ngoại vi sẽ được CPU Z80 tham chiếu đến vì vậy chương trình này sẽ được viết bởi tập lệnh của Z80. Lưu ý : Tất cả các biến đều phải được khai báo trong vùng nhớ của RAM thông qua các lệnh hợp ngữ của Z80.
Chuỗi kí tự nhận vào sẽ được cất trong biến STRING bắt đầu từ ô nhớ:9000H.
Khi có yêu cầu ngắt từ 8251 gởi tới thì chương trình ngắt này sẽ được thực thi ,chương trình này sẽ cất nội dung của các thanh ghi quay ra đọc dữ liệu từ 8251 lưu kí tự này vào ô nhớ ngay sau @ cuối cùng của chỗi tăng @ này lên 1 cất @ vừa tăng vào biến EOF SRTING khôi phục nội dung các thanh ghi kết thúc chương trình ngắt quay lại chương trình đang thực thi. Trong chương trình này khi nhận được mã ASCII của kí tự thì chương trình sẽ gọi chương trình con để tính ra @ đầu của 16 Bytes dữ liệu cần xuất nạp @ của dữ liệu quét xuất các dữ liệu ra để hiển thị kí tự.
- Có thể mở hệ thống để đáp ứng những yêu cầu cao hơn , ví dụ như có thể làm tăng số kí tựhiển thị….