Giáo trình Vi điều khiển (Nghề: Cơ điện tử - Cao đẳng): Phần 2 - Trường CĐ nghề Việt Nam - Hàn Quốc thành phố Hà Nội

46 20 0
Giáo trình Vi điều khiển (Nghề: Cơ điện tử - Cao đẳng): Phần 2 - Trường CĐ nghề Việt Nam - Hàn Quốc thành phố Hà Nội

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

(NB) Giáo trình Vi điều khiển cung cấp cho người học những kiến thức như: Cấu trúc họ vi điều khiển 8051; Tập lệnh 8051; Bộ định thời; Cổng nối tiếp; Mời các bạn cùng tham khảo nội dung giáo trình phần 2 dưới đây.

Bài Bộ định thời Mục tiêu - Trình bày cấu tạo chế độ làm việc định thời 8051 theo nội dung học - Thực khởi tạo nhớ yêu cầu kỹ thuật - Thực đọc định thời hoạt động yêu cầu kỹ thuật - Thực lập trình điều khiển dùng định thời yêu cầu kỹ thuật - Nghiêm túc, cẩn thận, xác học tập thực công việc 3.1 Mở đầu Tần số: tần số xung ngõ tần số xung ngõ vào chia cho 2N Giá trị: giá trị nhị phân FF định thời số đếm xung clock ngõ vào từ định thời bắt đầu đếm Tràn: xảy tượng tràn (cờ tràn = 1) số đếm chuyển từ giá trị lớn xuống giá trị nhỏ định thời Ví dụ: Bộ định thời 16 bit (chứa 16 FF bên trong) f f  IN  IN OUT 216 65536 Tần số: f Giá trị: số đếm nằm khoảng (0000H)  65535 (FFFFH) Tràn: cờ tràn số đếm từ FFFFH chuyển xuống 0000H Hình minh họa đơn giản hoạt động định thời bit: 82 Hình 4.3 Bộ định thời bít, hình a sơ đồ logic, b giản đồ thời gian Hoạt động định thời bit đơn giản minh họa hình Mỗi tầng D FF kích khởi cạnh âm hoạt động mạch chia ta nối ngõ Q với ngõ vào D Flipflop cờ (Flag FF) mạch chốt D set tầng cuối định thời Giản đồ thời gian cho thấy tầng thứ (Q0) chia tần số xung clock, tầng thứ hai (Q1) chia tần số xung clock, … Số đếm ghi dạng thập phân kiểm tra dễ dàng cách khảo sát trạng thái flipflop Ví dụ, số đếm xuất Q2 = 1, Q1 = 0, Q0 = Các flipflop flipflop tác động cạnh âm (nghĩa trạng thái flipflop thay đổi theo cạnh âm xung clock) Khi số đếm tràn từ 111 xuống 000, ngõ Q2 có cạnh âm làm cho trạng thái flipflop cờ đổi từ lên (ngõ vào D flipflop luôn logic 1) Ứng dụng định thời gian (TIMER): định thời lập trình cho tràn sau khoảng thời gian qui định cờ tràn định thời Ứng dụng đếm kiện (COUNTER): để xác định số lần xuất kích thích từ bên ngồi tới chân chip 8051 (kích thích chuyển trạng thái từ xuống 0) Ứng dụng tạo tốc độ baud cho port nối tiếp: xem thêm phần “Hoạt động port nối tiếp.” 83 3.2 Thanh ghi SFR timer Thanh ghi THx/TLx TL0: Chứa byte thấp định thời TL1: Chứa byte thấp định thời TH0: Chứa byte cao định thời TH0: Chứa byte cao định thời 3.2.1 Thanh ghi TMOD 84 Thanh ghi TMOD (Timer Mode Register) chứa bit dùng để thiết lập chế độ hoạt động cho định thời định thời Thanh ghi TMOD nạp giá trị lần thời điểm bắt đầu chương trình để qui định chế độ hoạt động định thời Các chế độ hoạt động định thời: Ví dụ 1: Cho biết giá trị cần nạp cho ghi TMOD để Timer 0: định thời gian 16 bit, điều khiển phần mềm (bit TR0) Timer 1: đếm xung 13 bit, điều khiển phần cứng (chân INT1) Giải Phân tích: (1): Chế độ 16 bit  M1 = 0, M0 = (2): Bộ định thời gian  C / T = (3): Điều khiển phần mềm  GATE = (4): Chế độ 13 bit  M1 = 0, M0 = (5): Bộ đếm xung  C / T = (6): Điều khiển phần cứng  GATE = Từ ta có: (TMOD) = 11000001B = C1H 85 3.2.2 Thanh ghi TCON Thanh ghi TCON (Timer Control Register) chứa bit dùng để điều khiển báo trạng thái định thời định thời Cấu trúc ghi TCON: 3.3 Các chế độ làm việc 3.3.1 Chế độ định thời 13 bit (chế độ 0) Chế độ định thời chế độ định thời 13 bit cung cấp khả tương thích với vi điều khiển tiền nhiệm 8048.Chế độ không dùng cho thiết kế mới.Byte cao định thời THx ghép cascade với bit thấp byte thấp định thời THx để tạo thành định thời 13bit Ba bit cao TLx không sử dụng 3.3.2 Chế độ định thời 16 bit (chế độ 1) Chế độ định thời 16 bit có cấu hình giống chế độ định thời 13 bit Khi có xung clock định thời đếm lên: 0000H,0001H,0002H … FFFFH (65535) Một tràn xuất có chuyển số đếm từ FFFFH xuống 0000H, kiện set cờ tràn (TFx = 1) định thời tiếp tục đếm Bit có ý nghĩa lớn (MSB : Most significant bit) giá trị ghi định thời bit THx bit có ý nghĩa thấp (LSB : Least significan bit ) bit TLx Các ghi định thời ( THx,TLx) đọc ghi phần mềm thời điểm 3.3.3 Chế độ tự nạp lại bit (chế độ 2) Chế độ chế độ tự nạp lại 8bit Byte thấp định thời (TLx) hoạt động định thời bit byte cao định thời lưu giữ giá trị nạp lại Khi số đếm tràn từ FFH xuống 00H không cờ tràn định thời set lên mà giá trị THx nạp vào TLx, việc đếm tiếp tục từ giá trị xảy lần tràn kế tiếp,v.v… 86 3.3.4 Chế độ định thời tách biệt timer (chế độ 3) Chế độ chế độ định thời chia xẻ có hoạt động khác cho định thời Bộ định thời chế độ chia thành định thời bit hoạt động riêng lẻ TL0 TF1, định thời Set cờ tràn tương ứng TF0 TF1 xảy tràn Bộ định thời không hoạt động chế độ khởi động bắng cách chuyển định thời vào chế độ khác Giới hạn cờ tràn TF1 định thời không bị ảnh hưởng định thời xảy tràn TF1 nối với định thời TH0 Chế độ chủ yếu cung cấp thêm định thời bit nữa, nghĩa 8051 có thêm định thời thứ 3.Khi định thời chế độ 3,bộ định thời hoạt động ngưng cách chuyển khỏi chế độ vào chế độ Bộ định thời sử dụng port nối tiếp (lúc định thời làm nhiệm vụ tạo xung clock tốc độ baud) sử dụng theo cách khơng u cầu ngắt (vì định thời lúc khơng cịn nối với TF1) 87 3.4 Nguồn cung cấp xung cho Timer Cách đơn giản để khởi động dừng định thời sử dụng bit điều khiển hoạt động TRx ghi TCON TRx xóa thiết lập hệ thống; nghĩa định thời ngưng hoạt động Ngược lại ta set bit TRx nghĩa cho phép định thời hoạt động Do ghi TCON ghi định địa bit, ta dễ dàng khởi động dừng định thời chương trình Một phương pháp khác để điều khiển định thời sử dụng bit GATE ghi TMOD ngõ vào /INTx Bằng cách set bit GATE lên ta cho phép định thời điều khiển /INTx 3.5 Khởi tạo truy xuất ghi Timer Hình 3.1 Chế độ - Các định thời thường khởi động lần thời điểm bắt đầu chương trình để thiết lập chế độ hoạt động yêu cầu.Trong thân chương trình,các định thời điều khiển hoạt động, dừng, kiểm tra bit cờ xóa, cá ghi định thời đọc cập nhật tuỳ theo yêu cầu ứng dụng TMOD ghi khởi động trước tiên ghi thiết lập chế độ hoạt động Các tác vụ: Đặt chế độ làm việc Cho timer chạy Dừng timer 88 Kiểm tra cờ tràn Xóa cờ tràn Đọc cập nhật ghi timer Chú ý: có sử dụng ngắt ngồi ( TD: chế độ 1) Ví dụ: Đặt chế độ làm việc: Khởi động định thời hoạt động chế độ 16-bit (chế độ 1), xung clock cấp từ mạch dao động chip(định thời khỏang thời gian) MOV TMOD,#00010000B Timer 1: Gate = 0, C/T = 0, M1M0 = 01 (mode 1) Timer : Gate = 0, C/T = 0, M1M0 = 00(mode 0) Trong trường hợp cần đến số đếm ban đầu, ghi định thời TL1/TH1 phải khởi động Cần nhớ định thời đếm lên thiết lập cờ tràn xảy tràn số đếm từ FFFFH xuống 0000H, khoảng thời gian 100us định thời cách khởi động TL1/TH1 chứa số đếm nhỏ 0000H lượng 100 nghĩa -100 hay FF9CH Các lệnh sau thực điều MOV TL1,#9CH MOV TH1,#0FFH Cho timer chạy: Kế đến định thời bắt đầu hoạt động cách thiết lập bit điềukhiển hoạt động sau : SETB TR1 Cờ tràn tự động sau khoảng thời gian 100us Phần mềm chứa vịng lặp trì hỗn thời gian 100us cách sử dụng lệnh rẽ nhánh lặp lại lệnh cờ tràn chứa set WAIT : JNB TF1, WAIT Dừng timer: Khi định thời tràn ta cần dừng định thời xóa cờ tràn phần mềm: CLR TR1 CLR TF1 89 Kiểm tra cờ xóa cờ: WAIT:JNB TF1,WAIT CLR TR1 ;dừng timer T1 CLR TF1 ; xóa cờ báo tràn Cập nhật ghi timer MOV TL1,#9CH MOV TH1,#0FFH Hình 3.2.: Kiến trúc Timer chế độ (Mode 0) 90 3.6 Thực hành 3.6.1 Thực hành theo ngơn ngữ ASM Viết chương trình, mơ lắp ráp mạch điều khiển LED đơn nối với Port sáng tắt (có sử dụng đệm đảo) với thời gian trễ 500ms ORG 00H ORG 00H CHOPTAT: MOV P0,#00H CHOPTAT: MOV P0,#00H LCALL "Chương trình điều khiển tạo thời gian trễ 200s sử dụng Timer LCALL ;LED TAT DELAY500MS DELAY500MS SJMP CHOPTAT ;QUAY LAI LCALL DELAY200US SJMP CHOPTAT ;QUAY LAI DELAY200US: PUSH00H ;******************************* ********************* DELAY500MS: ;CHUONG TRINH CON TAO THOI GIAN TRE 500MS DELAY200US MOV P0,#0FFH ;LED SANG MOV P0,#0FFH ;LED SANG LCALL ;LED TAT PUSH01H MOV R0,#10 DEL: MOV R1,#10 PUSH00H DJNZ R1,$ MOV R0,#100 DJNZ R0,DEL MOV TMOD,#01H POP 01H LOOP2: POP 00H MOV TH0,#HIGH(-5000) RET MOV TL0,#LOW(-5000) END SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 DJNZ R0,LOOP2 POP 00H RET END 91 a) 9600 b) 4800 SMOD = tần số XTAL = 11.0592MHz Lời giải: Với tần số XTAL = 11.0592MHz SMOD = ta có tần số cấp cho Timer1 57.6kHz a) 57.600/9600 = TH1 = - hay TH1 = FAH b) 57.600/4800 = 12 TH1 = - 12 hay TH1 = F4H 4.5 Thực hành 4.5.1 Thực hành theo ngôn ngữ ASM Bài Điều khiển khối LED đơn : ORG Bài 2: Chương trình đếm 000 đến 255 dùng ngắt 000H ORG 000H MOV TMOD,#05H ORG 0030H MOV TH0,#0 MAIN: MOV TL0,#0 LCALL TURN_ON_OFF CLR TF0 LCALL FLASH_SINGLE_LED SETB TR0 LCALL FLASH_LED MAIN: CALL HEX_BCD LCALL SHIFT_LEFT_RIGHT CALL BCD_7DOAN LCALL CALL HIENTHI INCREMENT_LEFT_RIGHT JMP MAIN SJMP $ ;******************************* ;********************************* ************** ****************** LJMP MAIN 113 HEX_BCD: MOV A,TL0 MOV 36H,#5 MOV B,#10 LOOP_INC_LR: DIV AB MOV P1,#11111111B MOV 10H,B ;LUU SO HANG INC_LEFT: DV CLR C MOV B,#10 DIV AB MOV A,P1 MOV 11H,B ;LUU SO HANG RLC A CHUC MOV P1,A MOV 12H,A ;LUU SO LCALL DELAY_50MS HANG TRAM CJNE A,#0,INC_LEFT RET MOV P1,#11111111B ;******************************* ************** INC_RIGHT: BCD_7DOAN: CLR C MOV DPTR,#MA7DOAN MOV A,P1 MOV R0,#10H RRC A MOV R1,#20H MOV P1,A GM: MOV A,@R0 LCALL DELAY_50MS MOVC A,@A+DPTR MOV @R1,A CJNE A,#0,INC_RIGHT INC R0 DJNZ 36H,LOOP_INC_LR INC R1 MOV P1,#0FFH CJNE R0,#13H,GM RET RET ;********************************* ;******************************* ******************* ************** SHIFT_LEFT_RIGHT: HIENTHI: MOV 35H,#5 MOV R0,#20H MOV A,#08H LOOP_SHIFT_LR: HT: MOV P0,@R0 MOV P1,#11111110B MOV P2,A LOOP_SHIFT_L: CALL DELAY MOV A,P1 MOV P2,#00H ;CHONG RL A LEM INCREMENT_LEFT_RIGHT: 114 INC R0 RR A LCALL DELAY_50MS CJNE A,#01H,HT CJNE A,#01111111B,LOOP_SHIFT_L RET LOOP_SHIFT_R: ;******************************* MOV A,P1 ************** RR A DELAY: MOV R7,#0FFH MOV P1,A DJNZ R7,$ LCALL DELAY_50MS RET CJNE ;******************************* A,#11111110B,LOOP_SHIFT_R ************** DJNZ 35H,LOOP_SHIFT_LR MA7DOAN: MOV P1,#0FFH DB RET 0C0H,0F9H,0A4H,0B0H,99H,92H,82 ;********************************* H,0F8H,80H,90H END ****************** FLASH_LED: Bài 3: Viết chương trình điều khiển 16 MOV 34H,#100 LED sáng dần? LOOP_FL: MOV P1,A MOV A,P1 Chương trình mẫu: ORG 000H MAIN: MOV P1,A MOV P0,#0FFH ;8 LED P0 LCALL DELAY_50MS TAT DJNZ 34H,LOOP_FL MOV P2,#0FFH ;8 LED P2 RET TAT ;********************************* LOOP: CALL DELAY MOV A,P0 ****************** CLR C FLASH_SINGLE_LED: RLC A MOV 33H,#100 MOV P0,A LOOP_FLS: MOV A,P2 CPL P1.0 ; COMPLEMENT RLC A BIT MOV P2,A LCALL DELAY_50MS JC LOOP DJNZ 33H,LOOP_FLS CPL A ; COMPLEMENT A 115 JMP MAIN ;********************************* ;******************************* ****************** TURN_ON_OFF: *******CHUONG TRINH CON DELAY CLR P1.0 ; TURN ON DELAY: LCALL DELAY_5S MOV R0,#0FFH SETB P1.0 ; TURN OFF RET DEL: MOV R1,#0FFH ;********************************* DJNZ R1,$ ****************** DELAY_5S: DJNZ R0,DEL RET MOV 32H,#5 RET END LOOP_DL5S: LCALL DELAY_1S DJNZ 32H,LOOP_DL5S RET ;********************************* ****************** DELAY_1S: MOV 31H,#20 LOOP_DL1S: LCALL DELAY_50MS DJNZ 31H,LOOP_DL1S RET ;********************************* ****************** DELAY_500MS: MOV 30H,#10 LOOP_DL500MS: LCALL DELAY_50MS DJNZ 30H,LOOP_DL500MS RET ;********************************* ****************** DELAY_50MS: MOV TMOD,#00000001B TIMER 16 BIT SETB TR0 JNB ; TF0,$ 116 CLR TF0 CLR TR0 MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) RET Bài 4: Viết chương trình điều khiển LED chớp tắt Bài 5: Viết chương trình điều khiển động bước? Chương trình mẫu: ORG 000H MAIN: MOV P0,#00H CALL DELAY MOV P0,#0FFH CALL DELAY JMP MAIN Chương trình mẫu ORG 000H ;*****************************Chu ong trinh Delay DELAY: MOV R0,#0FFH DEL: MOV R1,#0FFH DJNZ R1,$ DJNZ R0,DEL RET END 4.5.2 Thực hành theo ngôn ngữ KeilC Điều khiển led MATRIX 117 MAIN: MOV A,#0FEH LOOP: MOV P2,A CALL DELAY RL A CJNE A,#0F7H,LOOP JMP MAIN ;******************************* ******* DELAY: MOV R6,#0FFH DEL: MOV R7,#0FFH DJNZ R7,$ DJNZ R6,DEL RET END 118 119 120 Chương trình hiển thị ký tự A led ma trận #include #define Hang P0 #define Cot P1 void delay() { TMOD=0x01; TH0=0xFB; TL0=0x00; TR0=1; while(1){ if(TF0==1) break; } TR0=0; TF0=0; 121 } main() { while(1) { Hang=0xE0; Cot=0x02; delay(); Hang=0xDB; Cot=0x04; delay(); Hang=0xBB; Cot=0x08; delay(); Hang=0xDB; Cot=0x10; delay(); Hang=0xE0; Cot=0x20; delay(); } } Bài tập nhà: Viết chương trinh hiển thị chữ CĐT – Khoa Điện tử 122 123 Viết chương trình hiển thị dịng thứ cho LCD “A, B, C, D” #include #define RS P3_0 #define RW P3_1 //RW=0 => ghi #define EN P3_2 //RW=1 => doc //RS=0 => code //RS=1 => data #define LCD_PORT P1 void delay_5ms() { int i,j; for(i=0;i

Ngày đăng: 25/03/2022, 08:56

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

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

Tài liệu liên quan