CLOCK - TIMER - SOUND

9 537 1
CLOCK - TIMER - SOUND

Đang tải... (xem toàn văn)

Thông tin tài liệu

57 CHƯƠNG 9 : CLOCK - TIMER - SOUND 9.1CLOCK Để thực hiện một lệnh, CPU phải trải qua nhiều giai đoạn, mỗi giai đoạn được một nhóm các mạch điện thực hiện, kết quả của giai đoạn trước được chuyển cho giai đoạn sau thực hiện tiếp cho đến khi lệnh được hoàn tất. Trong quá trình thục hiện, để các mạch điện hoạt động nhòp nhàng đồng bộ với nhau, người ta đã dùng các xung điện với tần số xác đònh để đều khiển các mạch điện ấy.Các mạch điện sẽ chỉ hoạt động khi xuất hiện xung,và sẽ thực hiện một tác vụ nào đó (tương ứng với một giai đoạn) trong quá trình xuất hiện xung.Các xung đóng vai trò của người cầm cờ hiệu ra lệnh cho các mạch điện làm việc một cách nhòp nhàng,đúng lúc.Các xung điện này được gọi là nhòp đồng hồ của máy điện toán (CLOCKS) . Đối với máy IBM PC/XT chuẩn nhòp đồng hồ là 4772727 Hz (4.77 MHz) . Nhòp đồng hồ này được tạo ra từ nguồn dao động gốc ( có tần số 14.31818 MHz ) bằng cách chia tần số gốc cho 3. Các máy IBM AT sử dụng các bộ vi xử lý 80286 và 80386 đã dùng nhòp đồng hồ với tần số cao hơn : 6,8,12,16,25,33 . MHz nên đã có tốc độ lớn hơn. Mặt khác số chu kỳ để thực hiện một lệnh của các bộ vi xử lý 80286,80386 thường ít hơn 8088/8086, đây cũng là lý do làm tốc độ của chúng cao hơn. 9.2TIMER Một số tác vụ trong máy tính cần được thực hiện theo một chu kỳ xác đònh hoặc trong những thời gian xác đònh . Thí dụ : Đếm giờ Chờ motor của ổ đóa đạt đến tốc độ xác đònh . Các yêu cầu này đòi hỏi phải có một hệ thống “đồng hồ báo thức” được gọi là TIMER . Đối với các máy vi tính thuộc họ nhà IBM PC/XT/AT chip 8253-5 hoặc các chip tương đương đảm nhận nhiệm vụ trên . TIMER chip cung cấp nhiều kênh (CHANNEL) tín hiệu đồng hồ, mỗi kênh cho một mục đích riêng . Tần số làm việc của mỗi kênh đều có thể xác đònh bằng cách cung cấp các tham số thích hợp cho TIMER chip . Những chip có khả năng thay đổi tình trạng làm việc thông qua các mệnh lệnh và các tham số được gọi là các chip có thể thảo chương dược (programmable chips). 8253-5 cung cấp 3 kênh : - Kênh 0 cung cấp tín hiệu đồng hồ hệ thống được xác đònh tần số chuẩn khoảng 18.206 Hz sau khi bật máy . - Kênh 1 dùng để điều khiển quá trình làm tươi bộ nhớ (RAM refresh) - Kênh 2 dùng để điều khiển loa. 9.3THẢO CHƯƠNG CHO 8253-5 Trên IBM PC/XT/AT 8253-5 được điều khiển thông qua các port : - Port 040h : data port of channel 0 - Port 041h : data port of channel 1 - Port 042h : data port of channel 2 - Port 043h : control port of 8253-5 9.3.1Nguyên lý hoạt động của 8253-5 58 Chip 8253-5 được cung cấp một dao động tại ngõ vào có tần số 1.19318 MHz. Dao động này được tạo ra bằng cách chia dao động gốc cho một giá trò thích hợp ( 12 trên PC/XT ) . Mỗi kênh của 8253-5 là một bộ đếm (Counter) và một thanh ghi 16 bit lưu giữ số đếm (selected count register) gọi tắt là SCR. Để thiết lập trạng thái làm việc cho mỗi kênh ta cần phải gán giá trò cho SCR của mỗi bộ đếm cùng các tham số bằng cách gởi một byte điều khiển ra control port của 8253-5 để chỉ đònh kênh và mode làm việc,kế tiếp là các tham số ra data port tương ứng . Byte điều khiển có dạng thức : SC1 SC0 RL1 RL0 M2 M1 M0 BCD Với chi tiết về các thành phần như sau : SC1 SC0 RL1 RL0 0 0 Select Counter 0 0 0 Counter Latching operator 0 1 Select Counter 1 0 1 Read/Load high byte only 1 0 Select Counter 2 1 0 Read/Load low byte only 1 1 Illegal 1 1 Read/Load low byte first and then high byte M2 M1 M0 0 0 0 Mode 0 0 0 1 Mode 1 0 Binary Counter 16-bits X 1 0 Mode 2 X 1 1 Mode 3 1 Binary Code Decimal (BCD) Counter (4 decades) 1 0 0 Mode 4 1 0 1 Mode 5 9.3.2Các mode của 8253-5 Mode 0 : Interrupt on terminal Count Tín hiệu ra ở mức thấp sau khi mode được chỉ đònh . Sau khi SCR được nạp giá trò, tín hiệu ra tiếp tục ở mức thấp và bộ đếm bắt đầu làm việc . Khởi đầu bộ đếm được nạp giá trò của SCR, sau đó giảm 1 khi có tín hiệu xuất hiện ở ngõ vào . Khi bộ đếm giảm đến 0 (terminal count),tín hiệu ra sẽ chuyển lên mức cao và giữ luôn trạng thái này cho đến khi mode được đònh lại hoặc SCR được nạp lại . Nạp lại SCR trong khi bộ đếm đang làm việc, sẽ tạo ra kết quả : - Nạp byte thứ nhất : bộ đếm ngừng hoạt động - Nạp byte thứ hai : bộ đếm làm việc trở lại với số đếm mới Mode 1 : Programmable One-Shot Giống mode 0,nhưng việc nạp lại SCR trong khi tín hiệu ngõ ra ở mức thấp sẽ không có tác dụng . Mode 2 : Rate generator Tín hiệu ra sẽ ở mức thấp trong một thời hằng và sẽ ở mức cao trong thời hằng kế tiếp,quá trình này được lặp đi lặp lại cho đến khi đònh lại mode. Thời hằng có giá trò bằng khoảng thời gian thực hiện N ( N là giá trò trong SCR ) chu kỳ của tín hiệu vào.Như vậy tín hiệu ra sẽ là dạng xung vuông với tần số bằng tần số ngõ vào chia cho 2*N . Mode 3 : Square Wave Rate generator Giống như mode 2, nhưng tín hiệu sẽ ở mức thấp trong ½ thời hằng và ở mức cao trong ½ thời hằng kế tiếp.Do đó tín hiệu ra sẽ là xung vuông với tần số bằng tần số ngõ vào chia cho N . Như vậy tần số của tín hiệu của ngõ ra trong mode 3 sẽ bằng 1.19318 MHz chia cho giá trò của SCR. Để tạo ra một dao động có tần số f ta cần cho số đếm của kênh tương ứng một giá trò xác đònh bởi : 1193180 59 n = ------------ f Mode 4 : Software Triggered Strobe Sau khi mode 4 được thiết lập, tín hiệu ngõ ra sẽ ở mức cao . Khi SCR được nạp, bộ đếm bắt đầu làm việc . Khi bộ đếm giảm đến 0, tín hiệu ngõ ra sẽ chuyển sang mức thấp trong khoảng thời gian bằng 1 chu kỳ của tín hiệu xung vào,sau đó trở lại mức cao . Nếu SCR được nạp lại trong lúc bộ đếm đang hoạt động, giá trò này sẽ được nạp vào bộ đếm cho chu kỳ kế tiếp. Mode 5 : Hardware Triggered Strobe Sau khi mode 5 được thiết lập, tín hiệu ngõ ra sẽ ở mức cao . Khi SCR được nạp, bộ đếm bắt đầu làm việc . Khi bộ đếm giảm đến 0, tín hiệu ngõ ra sẽ chuyển sang mức thấp trong khoảng thời gian bằng 1 chu kỳ của tín hiệu xung vào,sau đó trở lại mức cao . 9.3.3Thảo chương cho Chanel-2 Đọc SCR của Channel-2 vào CX mov al,10110110b ; Yêu cầu đọc 2 byte của SCR từ Channel-2 out 043h,al ; Đưa ra control port in al,042h ; Lấy byte thứ nhất (Low byte) mov cl,al ; Cất vào CL in al,042h ; Lấy byte thứ hai (High byte) mov ch,al ; Cất vào CH ---> CX = SCR value Chỉ đònh tần số của Channel-2 là 512 Hz dạng xung vuông mode 3 mov dx,012h ; Double word trong DX,AX có giá trò 1193180 mov ax,034DCh mov cx,512 div cx ; mov bx,ax ; BX = 1193180/512 mov al,10110110b ; Yêu cầu đònh mode 3 cho channel-2 out 043h,al ; đồng thời nạp giá trò mới cho SCR mov al,bl out 042h,al ; Load low byte mov al,bh out 042h,al ; Load high byte 9.4NGUYÊN LÝ HOẠT ĐỘNG CỦA ĐỒNG HỒ HỆ THỐNG (SYSTEM CLOCK) Ngõ ra của channel-0 của 8253-5 được nối liền với chip điều khiển interrupt 8259 . Mỗi xung nhòp của channel-0 sẽ làm phát động interrupt cứng 08h . Mỗi lần được gọi đến, interrupt 08h sẽ thực hiện các công việc chính sau : - Tăng giá trò tại double word 0000:046C (Count tick) lên 1 ( giá trò này được cho bằng 0 lúc 0 giờ ) - Gọi interrupt 01Ch - Cho phép phát động interrupt cứng (Enable hard interrupt) bằng cách gởi ra cổng 020h giá trò 020h . SCR của channel-0 được nạp giá trò 0FFFFh (65535) trong quá trình khởi động máy, do đó tần số của ngõ ra sẽ là 1193180/65536 = 18.206 Hz . Hệ điều hành sẽ căn cứ theo giá trò của Count tick để tính ra thời gian cho hệ thống . Make-time proc near ; Make-time sẽ lấy giá trò 60 ; hiện thời của Count tick xor ax,ax ; nhân với 65535 rồi chia mov es,ax ; cho 1193180 . Giá trò mov ax,word ptr es:[046Ch] ; thu được chính là tổng mov dx,word ptr es:[046Ch+2] ; số giây tính từ 0 giờ ; DX:AX = Time-count ; Từ đó tính ra giờ,phút mov bx,ax ; giây và phần trăm giây . mov cx,dx ; Time-count = tổng số giây tính từ 0 giờ *(1193180/65535) ; Nhân Time-count với 5 rồi đặt kết quả vào DX:AX shl ax,1 rcl dx,1 ; Nhân 2 shl ax,1 rcl dx,1 ; Nhân 2 add ax,bx adc dx,cx ; Cộng dồn 1+2*2=5 ; Gọi giá trò thu được tại đây là (1) ; Chia kết quả cho 59659 ;. Chú ý : 59659=1193180/20 mov cx,59659 div cx mov bx,ax ; Cất kết quả vào BX xor ax,ax ; DX:AX = số dư * 65535 div cx ; mov dx,bx ; ; DX:AX = (1)*65535/59659 mov cx,200 div cx ; AX = (Time-count*65535/1193180)/2 = (số giây từ 0 giờ)/2 mov bl,100 sub bl,dl ; Kiểm tra số dư ; Nếu DL > 100 --> BL < 0 --> CF=1 ; Nhân kết quả với 2 --> số giây tính từ 0 giờ rcl ax,1 ; Nếu số dư của phép chia cho 200 mov dx,0 ; lớn hơn 100 thì cộng thêm 1 vào rcl dx,1 ; kết quả mov cx,60 ; giây = (tổng số giây) mod 60 div cx ; Kết quả là tổng số phút mov s-var,dl ; Số dư là giây ; phút = (tổng số phút) mod 60 div cl mov m-var,ah ; Số dư là phút mov h-var,al ; Kết quả là giờ ret 61 Make-time endp s-var db 0 m-var db 0 h-var db 0 9.5NGUYÊN LÝ ĐIỀU KHIỂN LOA TRONG IBM PC/XT/AT Mỗi máy IBM PC/XT/AT được trang bò một cái loa nhỏ công suất khoảng 0,2W . Loa được gắn vào ngõ ra của một mạch khuếch đại có đầu vào là ngõ ra của Channel-2 của 8253-5 . Mạch khuếch đại của loa được điều khiển bởi hai bit thấp của port 061h : Nếu cả hai bit thấp của port 061h đều bò xóa thành 0 thì mạch khuếch đại không làm việc : loa sẽ im . Nếu cả hai bit thấp của port 061h đều được dựng lên thì mạch khuếch đại sẽ làm việc : loa sẽ dao động với tín hiệu của ngõ ra Channel-2. Thí dụ : Bật loa: in al,061h or al,00000011b out 061h,al Tắt loa: in al,061h and al,11111100b out 061h,al 9.6NGUYÊN LÝ TẠO ÂM NHẠC TRÊN IBM PC/XT/AT Để máy tính chơi được một đoạn nhạc, chúng ta cần phải tạo ra các note nhạc và duy trì chúng theo từng trường độ riêng . Để tạo ra một note nhạc chúng ta chỉ cần đưa tần số tương ứng của note ấy ra loa . Như vậy, điều cần thiết là chúng ta xác đònh được tần số của từng note nhạc trong các cung bậc (octave) quen thuộc. Tần số của các note thuộc octave 1 và octave 7 Octave 1 Octave 7 C = 32.70 C = 2093.00 C# = 34.65 C# = 2217.46 D = 36.71 D = 2349.32 D# = 38.89 D# = 2489.02 E = 41.20 E = 2637.02 F = 43.65 F = 2793.83 F# = 46.25 F# = 2959.96 G = 49 . G = 3135.96 G# = 51.91 G# = 3322.44 A = 55.00 A = 3520.00 A# = 58.27 A# = 3729.31 B = 61.74 B = 3951.07 Tần số của một note thuộc một octave gấp đôi tần số của note tương ứng thuộc octave ngay trước nó. Thí dụ : Tần số của note DO ở octave 5 sẽ bằng tần số của note DO ở octave 6 chia 2 và bằng tần số của note DO ở octave 4 nhân 2 . 62 Để tạo ra count tương ứng ta lấy 1193180/tần số . 9.7MỘT CHƯƠNG TRÌNH CHƠI NHẠC Main proc near lea si,chuoi-nhac call Sound-on M1: cld lodsw ; lo-byte = note, hi-byte = trường độ or ax,ax jz M4 call Music or ah,ah jz M3 xchg al,ah xor ah,ah push es xor bx,bx mov es,bx add ax,word ptr es:[046Ch] M2: cmp ax,word ptr es:[046Ch] jne M2 pop es M3: jmp M1 M4: call Sound-off int 020h Main endp Sound-on proc near in al,61h ; Bật loa or al,3 ; bằng cách cho bit 0 và bit 1 out 61h,al ; cổng 61h bằng 1 ret Sound-on endp Sound-off proc near in al,61h ; Tắt loa and al,0fch ; bằng cách cho bit 0 và bit 1 out 61h,al ; cổng 61h bằng 0 ret Sound-off endp DO equ 0 ; Giá trò của note RE equ 2 63 MI equ 4 FA equ 5 SOL equ 7 LA equ 9 SI equ 11 O1 equ 010h ; Giá trò của octave O2 equ 020h O3 equ 030h O4 equ 040h O5 equ 050h O6 equ 060h O7 equ 070h SO1 equ 01Fh ; Giá trò của octave default SO2 equ 02Fh SO3 equ 03Fh SO4 equ 04Fh SO5 equ 05Fh SO6 equ 06Fh SO7 equ 07Fh chuoi-nhac db -SO4,0,-SOL,4,-SOL,2,-LA,2,-SI-1,4,-SOL,4 db -MI+-O5,4,-RE+-O5,4,-SI-1,4,-SOL,4,-FA,4,-FA,2,-SOL,2 db -LA,4,-FA,4,-RE+-O5,4,-LA,4,-FA,4,-RE,4,-MI,4,-MI,2 db -FA,2,-SOL,4,-MI,4,-LA,4,-LA+-O3,4,-SI+-O3,4,-DO+1,4 db -RE,2,-DO,2,-RE,2 db -MI,2,-FA,2,-MI,2,-FA,2,-SOL,2,-LA,4,-FA,4,-MI,4,-RE,4 db -SO4,0,-SOL,4,-SOL,2,-LA,2,-SI-1,4,-SOL,4 db -MI+-O5,4,-RE+-O5,4,-SI-1,4,-SOL,4,-FA,4,-FA,2,-SOL,2 db -LA,4,-FA,4,-RE+-O5,4,-LA,4,-FA,4,-RE,4,-MI,4,-MI,2 db -FA,2,-SOL,4,-MI,4,-LA,4,-LA+-O3,4,-SI+-O3,4,-DO+1,4 db -RE,8 dw 0,0 MUSIC proc near ; AL = note parameter with structure as follow : ; high nibble = Octave value ( 1 - 7 ) ; low nibble = Note value ( 0 - 11 ) ; ( DO = 0, DO thăng = 1 ) push ax push bx ; Bảo toàn tất cả các thanh ghi được dùng push cx mov ah,al mov cl,4 shl al,cl shr al,cl ; AH = low byte (note value) shr ah,cl ; AH = high byte (Octave value) 64 cmp ah,7 ja Music-end ; Invalid value for octave cmp al,0Fh ; Set default octave jne Music-1 mov Current-octave,ah jmp Music-end Music-1: or ah,ah ; AH = 0 --> using default octave jnz Music-2 mov ah,Current-octave Music-2: cmp al,11 ja Music-end ; Invalid value for note xor bh,bh mov bl,al shl bx,1 ; BX = BX * 2 mov bx,word ptr M-table[bx] mov cl,ah ; BX = count của note tương ứng ở octave 1 dec cl shr bx,cl ; BX = BX / ( 2 lũy thừa CL ) mov al,10110110b ; Yêu cầu đònh mode 3 cho channel-2 out 043h,al ; đồng thời nạp giá trò mới cho SCR mov al,bl out 042h,al ; Load low byte mov al,bh out 042h,al ; Load high byte Music-end: pop cx pop bx pop ax ret Music endp Current-Octave db 0 M-Table dw 36488 ; DO dw 34435 ; DO thăng / RE giáng dw 32502 ; RE dw 30680 ; RE thăng / MI giáng dw 28960 ; MI dw 27335 ; FA dw 25798 ; FA thăng / SOL giáng dw 24350 ; SOL dw 22985 ; SOL thăng / LA giáng dw 21694 ; LA dw 20476 ; LA thăng / SI giáng dw 19326 ; SI Các quy tắc của procedure MUSIC 65 MUSIC sẽ thực hiện một note nhạc theo nguyên tắc một note nhạc được xác đònh bởi bát độ (octave) và note trong bát độ ấy Để có thể thực hiện một note nhạc,cần phải xác đònh tần số của note nhạc và suy ra giá trò của count cần phải gởi ra channel-2 theo công thức 1193180 n = ----------------- f Theo công thức trên, tần số càng thấp thì count càng lớn . MUSIC có một bảng các giá trò của các count tương ứng với các note thuộc octave 1 . Thay vì thực hiện công thức trên, MUSIC chỉ cần được chỉ đònh hãy chơi note thứ mấy trên bảng . Để chơi một note ở một octave cao hơn octave 1, MUSIC sẽ xác đònh giá trò của count tương ứng với note trong octave 1, sau đó suy ra giá trò cần thiết theo nguyên tắc : Count tương ứng với một note trong một octave sẽ bằng ½ giá trò của count tương ứng với note ấy trong octave trước đó . Như vậy count tương ứng với một note thuộc octave n sẽ bằng count tương ứng với note ấy trong octave 1 chia cho 2 lũy thừa (n-1) Và để chia một giá trò n lần cho 2 ta chỉ cần shift right n lần giá trò đó. MUSIC được gọi với tham số trong AL với quy tắc : Nibble cao ( 4 bit cao ) mang giá trò octave (1-7) Nibble thấp ( 4 bit thấp ) mang giá trò note (0-11) Nếu giá trò của nibble thấp là 0Fh thì giá trò của nibble cao sẽ được lấy làm giá trò của octave mặc nhiên (default) Giá trò này được đặt trong biến Current-octave Nếu giá trò của nibble cao là 0, note sẽ được chơi với octave default Giá trò note Giá trò octave Giá trò octave default _DO equ 0 _01 equ 010h _S01 equ 01Fh _RE equ 2 _02 equ 020h _S02 equ 02Fh _MI equ 4 _03 equ 030h _S03 equ 03Fh _FA equ 5 _04 equ 040h _S04 equ 04Fh _SOL equ 7 _05 equ 050h _S05 equ 05Fh _LA equ 9 _06 equ 060h _S06 equ 06Fh _SI equ 11 _07 equ 070h _S07 equ 07Fh Để xác đònh một octave,cho AL một giá trò của octave default ( -SO1 : octave 1, SO2 : octave 2 .) Giá trò này sẽ được gán cho biến Current-octave AL = một giá trò của note,sẽ chơi note đó với octave default ( lấy từ Current-octave ) Để chơi một note ngoài octave default mà không đònh lại Current-octave ta cộng thêm giá trò octave vào giá trò note . ( Octave default không bò thay đổi ) Thí dụ : mov AL,-FA + -O5 . -SO4,0,-SOL,4,-SOL,2,-LA,2,-SI-1,4,-SOL,4 db -MI+-O5,4,-RE+-O5,4,-SI-1,4,-SOL,4,-FA,4,-FA,2,-SOL,2 db -LA,4,-FA,4,-RE+-O5,4,-LA,4,-FA,4,-RE,4,-MI,4,-MI,2 db -FA,2,-SOL,4,-MI,4,-LA,4,-LA+-O3,4,-SI+-O3,4,-DO+1,4. chuoi-nhac db -SO4,0,-SOL,4,-SOL,2,-LA,2,-SI-1,4,-SOL,4 db -MI+-O5,4,-RE+-O5,4,-SI-1,4,-SOL,4,-FA,4,-FA,2,-SOL,2 db -LA,4,-FA,4,-RE+-O5,4,-LA,4,-FA,4,-RE,4,-MI,4,-MI,2

Ngày đăng: 29/09/2013, 11:20

Hình ảnh liên quan

MUSIC có một bảng các giá trị của các count tương ứng với các note thuộc octave 1. Thay vì thực hiện công thức trên, MUSIC chỉ cần được chỉ định hãy chơi note thứ mấy trên bảng  - CLOCK - TIMER - SOUND

c.

ó một bảng các giá trị của các count tương ứng với các note thuộc octave 1. Thay vì thực hiện công thức trên, MUSIC chỉ cần được chỉ định hãy chơi note thứ mấy trên bảng Xem tại trang 9 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan