Bài tập kết thúc học phần Vi điều khiển - Đề tài: Đồng hồ số - Nguyễn Khắc Nguyên
Tóm tắt Bài tập kết thúc học phần Vi điều khiển - Đề tài: Đồng hồ số - Nguyễn Khắc Nguyên: ...rình kiểm tra phím ấn. Sau khi thực hiện xong việc kiểm tra phím ấn thì quay lại và tiếp tục kiểm tra phím ấn. Còn các việc khác được thực hiện trong các ngắt được cài đặt ở phần sau. Khởi động gồm: o Khởi động con trỏ Stack o Khởi động vùng đệm hiển thị Buff. Gồm bốn byte đều được reset v.... IsStart=1; Reset HH,MM,SS,MSS INT0 STARTCLOCK IsStart=0; INT1 STOPCLOCK Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 15 Code chương trình con STARTCLOCK và STOPCLOCK StartClock: SetB IsStart Mov Buff+0,#0 Mov Buff+1,#0 Mov Buff+2,#0 Mov Buff+3,#0...100? No INC(SS) SS=60? INC(MM) MM=60? INC(HH) CLOCK Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 22 Để tính toán thời gian cho đồng hồ, ta sử dụng biến nhớ HH, MM, SS, MSS tương ứng với giờ, phút, giây, phần trăm giây. MSS=SS/100 Như vậy mỗi lần gọi gọi lệnh ...
điều khiển biết để ngừng đồng hồ, nếu như đồng hồ đang đếm. Bên cạnh đó nút Stop còn là nút để cho phép nút Start có tác dụng sau khi đã ấn Start rồi. Cụ thể: Sau khi ấn Start thì nút Start sẽ bị vô hiệu hóa và mất tác dụng, chỉ khi ấn Stop thì nút Start mới trở lại như cũ và có tác dụng như ban đầu. * Chú ý: Ngoài các khối được kể trên còn một số phần khối khác ta không nhắc đến nhưng được lắp vào mạch đó là: o Khối Reset cho vi điều khiển o Khối tạo xung cho vi điều khiển o Khối tạo nguồn 5V Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 7 2. Phần mềm SƠ ĐỒ KHỐI: BEGIN Khởi Động SP Buff isStart HH,MM,SS,MSS TMOD,IE T0,T1 TR0,TR1 VAR SCANBUTTON SCANLED T=5000 CM ISR_SCANLED Sơ đồ khối chương trình chính CLOCK T=10000 CM ISR_CLOCK IsStart=1; Reset HH,MM,SS,MSS INT0 STARTCLOCK IsStart=1; Reset HH,MM,SS,MSS INT1 STOPCLOCK MAIN Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 8 CHƯƠNG TRÌNH CHÍNH MAIN: Sau khi được cấp nguồn và được reset bởi mạch reset, vi điều khiển nhảy tới thực hiện lệnh Main, là lệnh chính trong chương trình. Sau khi nhảy tới Main là bước khởi động, sau đó là tiến trình kiểm tra phím ấn. Sau khi thực hiện xong việc kiểm tra phím ấn thì quay lại và tiếp tục kiểm tra phím ấn. Còn các việc khác được thực hiện trong các ngắt được cài đặt ở phần sau. Khởi động gồm: o Khởi động con trỏ Stack o Khởi động vùng đệm hiển thị Buff. Gồm bốn byte đều được reset về 0. o Biến nhớ điều khiển việc chạy/ngừng đồng hồ IsStart được đưa về 0. o Khởi động các biến nhớ thời gian đếm HH, MM, SS, MSS lần lượt là: giờ, phút, giây và MSS=SS/100 (phần trăm giây). Tất cả được reset về 0. o Khởi động hai biến nhớ phục vụ tối ưu hóa ấn phím ckStart và ckStop. Được reset về 0. o Reset chân SecTic (P3.4) là chân chớp tắt hai led có nhiệm vụ thể hiện sự dao động của số giây. o Khởi động ColLed và VarCol lần lượt là Port0 - xuất tín hiệu điều khiển 4 Led bảy đoạn - và biến nhớ tương ứng. ColLed là ánh xạ của VarCol. Việc xoay Port0 để hiển thị Led 7 đoạn kiểu quét được thực hiện trên VarCol sau đó mới xuất ra ColLed. Nguyên nhân của việc này là nếu dùng xoay trực tiếp ColLed thì sau khi hiển thị thì tín hiệu mức cao đưa ra Led bị kéo BEGIN Khởi Động SP Buff isStart HH,MM,SS,MSS TMOD,IE T0,T1 TR0,TR1 VAR SCANBUTTON MAIN Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 9 xuống mức thấp do sụt áp cũng như do Led 7 đoạn đã tiêu thụ dòng làm mất tín hiệu (chứng minh bằng thực nghiệm). Nếu ta tiếp tục xoay thì Port0 (ColLed) sẽ toàn là tín hiệu mức thấp, vì vậy không thể điều khiển được led sáng nữa. o Cài đặt TMOD để sử dụng 2 Timer dùng cho ngắt Timer. o Cài đặt các khởi trị của 2 Timer o Cài đặt IE, cho phép ngắt 2 Timer và 2 ngắt ngoài o Bắt đầu khởi động 2 Timer Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 10 Code lập trình cho khởi động: Mov Sp,#255-32 Mov Buff+0,#0 Mov Buff+1,#0 Mov Buff+2,#0 Mov Buff+3,#0 Mov HH,#0 Mov MM,#0 Mov SS,#0 Mov MSS,#0 Clr IsStart Clr CkStart Clr CkStop Clr SecTic Mov ColLed,#10H ;00010000 Mov VarCol,#10H Mov Col,#4 Mov TMOD,#11H ;Setup Timer0 va Timer1 o Mode 1 Mov TL0,#03CH Mov TH0,#0F6H ;Tran sau 2500 CM Mov TL1,#0F0H Mov TH1,#0D8H ;Tran sau 10000 CM Mov IE,#8FH ;Cho phep ngat 2 ngat ngoai va 2 timer SetB TR0 ;Bat Timer0 SetB TR1 ;Bat Timer1 Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 11 MAIN_LOOP: Là vòng lặp chính của chương trình. Trong vòng lặp này chỉ chứa một lệnh đó là gọi chương trình con SCANBUTTON. Là lệnh kiểm tra nút ấn, SCANBUTTON được quét liên tục và lặp đi lặp lại. Chương trình con SCANBUTTON: ckStart=1? Yes Start=1? Yes Start INT0, SetB ckStart ckStop=1? Stop=1? Start INT1, SetB ckStop, Clr ckStart Yes Yes SCANBUTTON Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 12 Việc kiểm tra phím ấn sử dụng thêm hai biến ckStart và ckStop, chương trình con này hoạt động như sau: Việc đầu tiên là kiểm tra biến ckStart để xem có phải là nút Start đã được ấn rồi hay chưa. Nếu nút Start chưa được ấn lần nào thì sẽ khởi động ngắt ngoài INT0 để gọi chương trình phục vụ ngắt ngoài STARTCLOCK và Set bit ckStart. Nếu ckStart là 1, nghĩa là đồng hồ đang chạy thì sẽ không làm gì và nhảy đến kiểm tra nút Stop. Sau khi kiểm tra nút Start, ta tiến hành kiểm tra nút Stop. Đầu tiên biến ckStop được xét xem có bằng 1 hay không. Ở đây hơi khác so với khi làm việc với nút Start vì chức năng hai nút có phần khác nhau. Nếu ckStop=1 nghĩa là nút Stop vừa được ấn (trong thời gian rất ngắn ngay lúc trước đó) thì sẽ không làm gì và nhảy ra khỏi chương trình con này. Nếu nút Stop chưa được ấn, nghĩa là ckStop=0 thì sẽ kích hoạt ngắt ngoài INT1 hoạt động để gọi chương trình con STOPCLOCK và Set bit ckStop, song song đó là khôi phục lại tác dụng của nút Start bằng cách Set bit ckStart trở lại. Còn về nút Stop sau khi ấn cũng bị vô tác dụng do ckStop bị Set lên 1, để trả lại tác dụng cho nút Stop thì trong chương trình con Clock ta đặt vài dòng lệnh để Set ckStop, dòng lệnh đó đặt ngay trong vùng kiểm tra số Giây của đồng hồ. Nghĩa là nút Stop sẽ có tác dụng trở lại sau 1 giây được ấn. Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 13 Code chương trình con SCANLED Main_Loop: Call ScanButton Jmp Main_loop ScanButton: Jb CkStart,CheckStop Jb Start,CheckStop SetB CkStart Clr P3.2 SetB P3.2 CheckStop: Jb CkStop,ScanButton_Exit Jb Stop,ScanButton_Exit SetB CkStop Clr CkStart Clr SecTic Clr P3.3 SetB P3.3 ScanButton_Exit: Ret Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 14 HAI NGẮT NGOÀI INT0, INT1 VÀ HAI CHƯƠNG TRÌNH PHỤC VỤ NGẮT NGOÀI STARTCLOCK VÀ STOPCLOCK: Như ta đã đề cập ở trên, hai chương trình con phục vụ ngắt ngoài STARTCLOCK và STOPCLOCK được kích hoạt từ việc kiểm tra nút ấn Start và Stop. Việc sử dụng 2 ngắt ngoài này có thể được lược bỏ vì ta có thể hoàn toàn đặt các dòng lệnh của hai ngắt này trong chương trình con SCANBUTTON. Nhưng vì nhằm phục vụ cho việc học tập, nghiên cứu nên ta vẫn sử dụng 2 ngắt ngoài này để kiểm chứng những gì ta đã học trong lý thuyết. STARTCLOCK: Đơn giản chỉ Set bit IsStart để kích hoạt đồng hồ chạy, reset các biến thời gian HH, MM, SS, MSS và vùng đệm hiển thị. STOPCLOCK: Clear bit IsStart để ngưng đồng hồ. IsStart=1; Reset HH,MM,SS,MSS INT0 STARTCLOCK IsStart=0; INT1 STOPCLOCK Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 15 Code chương trình con STARTCLOCK và STOPCLOCK StartClock: SetB IsStart Mov Buff+0,#0 Mov Buff+1,#0 Mov Buff+2,#0 Mov Buff+3,#0 Mov HH,#0 Mov MM,#0 Mov SS,#0 Mov MSS,#0 Reti StopClock: Clr IsStart Reti Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 16 NGẮT TIMER0 VÀ CHƯƠNG TRÌNH PHỤC VỤ NGẮT ISR_SCANLED: Để phục vụ cho việc hiển thị ra Led 7 đoạn theo kiểu quét, ta dùng ngắt Timer (Timer0). Khi thực hiện lệnh ngắt, chương trình con SCANLED được gọi và hiển thị từng Led 7 đoạn 1 lần lượt trong 4 Led 7 đoạn trên. Trước khi gọi lệnh SCANLED thì việc cài đặt lại Timer0 là không thể thiếu. Chu kỳ được tính cho mỗi vòng quét Led này (Chu kỳ để ngắt Timer0 hoạt động) là 5000 chu kỳ máy (CM). Nghĩa là: Sau 5000x4=20000 CM = 0.02s thì Led 7 đoạn này sẽ được sáng trở lại. Điều này tương đương với tần số sáng là f=1/T=1/0.02=50Hz, đủ để mắt người có thể không phát hiện được có sự thay đổi giữa sáng và tắt. Biểu đồ xung cấp cho 4 led 7 đoạn Led0 Led1 Led2 Led3 5000CM 20000CM SCANLED T=5000 CM ISR_SCANLED Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 17 Code chương trình phục vụ ngắt Timer0 ISR_SCANLED: Việc tại sao ta lại cộng thêm 10 vào TL0 và việc tại sao lại nói là trừ 10 Chu ký máy sẽ được nhắc ở phần ngắt Timer1. CHƯƠNG TRÌNH CON SCANLED: Chương trình con SCANLED được gọi nhờ lệnh trong chương trình phục vụ ngắt Timer0 IRS_SCANLED. Nhiệm vụ chính của chương trình con ScanLed là hiển thị giá trị thời gian đếm của đồng hồ ra led 7 đoạn, cũng như việc chớp tắt 2 led đơn SEC. Lệnh được gọi sau mỗi 5000CM để hiển thị lần lượt mỗi khi gọi là 1 led 7 đoạn được cho sáng. ISR_ScanLed: Clr TR0 Mov TL0,#078H+10 ;Tru di 10 Chu ky may di nhay vao lenh ngat Mov TH0,#0ECH ;Tran sau 5000 CM SetB TR0 ;Bat Timer0 Call ScanLed Reti Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 18 Code chương trình con SCANLED: ScanLed: Mov A,VarCol RR A Mov VarCol,A Mov ColLed,A Jnb Col7,Col7_Not0 Mov VarCol,#08H Col7_Not0: Mov DPTR,#DB7SEG Mov A,#Buff Dec Col Add A,Col Mov R0,A Mov A,@R0 MovC A,@A+DPTR CPL A Mov RowLed,A Mov A,Col Cjne A,#0,Col_Not0 Mov Col,#4 Col_Not0: Ret ;-------------------------------------------- DB7SEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;BANG DU LIEU "CODE LED 7 DOAN" Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 19 NGẮT TIMER1 VÀ CHƯƠNG TRÌNH PHỤC VỤ NGẮT ISR_CLOCK: Chương trình ngắt Timer1 là phần có thể nói là thiết yếu trong đề tài này, để quyết định độ chính xác cho đồng hồ tùy thuộc phần lớn vào việc ta xử lý ngắt này. Ở đây ta dùng ngắt Timer1 và chương trình phục vụ ngắt ISR_CLOCK. Ngắt Timer1 hoạt động sau mỗi 10000CM. Lý do ta con con số 10000CM là do đơn giản hóa việc tính toán, giúp cho việc tính toán được chính xác hơn. Vì đề tài này cần có một đồng hồ có thời gian thực, nên chương trình con được gọi trong ngắt Timer1 là CLOCK cũng phải kết hợp nhuần nhuyễn với ngắt Timer1 để tính toán được con số chính xác nhất. Trong chương trình con phục vụ ngắt Timer1 ISR_CLOCK chỉ đơn giản là việc cài đặt lại Timer1 và gọi chương trình con CLOCK. Code chương trình con phục vụ ngắt Timer1 ISR_CLOCK: Cũng như ở chương trình con phục vụ ngắt Timer0, ở chương trình con phục vụ ngắt Timer1, biến TL1 được cộng thêm 10 và ghi chú là trừ đi 10 chu kỳ máy nảy vào lệnh ngắt. Lý do là: để cho đồng hồ hoạt động 1 cách chính xác nhất, việc hiển thị một cách đều đặn nhất, thì các ngắt Timer phải được gọi một cách đều đặn nhất. Bằng thực nghiệm mô phỏng với phần mềm KeilC, ta biết được, kể từ khi ngắt Timer (Timer0 và Timer1) được gọi ngắt (tràn) cho đến khi được hoạt động trở lại thì ta cần thêm 10 CM nữa gồm các lệnh nhảy vào ngắt và cài đặt lại khởi trị cho các Timer. Vì vậy ta sẽ thêm 10 vào byte TL của các Timer đồng nghĩa với giảm đi 10 CM cho các Timer. Cho nên qua đây ta có thể chứng minh được rằng, đồng hồ dùng code lập trình như vậy sẽ chạy một cách chính xác và có thể nói nếu không có vấn đề khác xảy ra thì sai số có thể là bằng 0. Tuy nhiên, nếu 2 Timer0 và Timer1 cùng tràn 1 lúc, 2 lệnh ngắt được gọi cùng lúc thì đó là điều không thể, điều này dẫn tới sai số cho đồng hồ. Để khắc phục điều này, ban đầu khi qua chương trình khởi động, ta cho khởi động 2 Timer cách nhau 1 khoảng nhất định, cụ thể là: ISR_Clock: Clr TR1 Mov TL1,#0F0H+10 ;Tru di 10 Chu ky may di nhay vao lenh ngat Mov TH1,#0D8H ;Tran sau 10000 CM SetB TR1 ;Bat Timer0 Call Clock Reti Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 20 Timer0 tràn lần đầu tiên sau 2500CM, còn Timer1 tràn lần đầu tiên sau 10000CM. Ở đây Timer1 không thay đổi gì khi tràn sau 10000CM ở các lần tràn tiếp. Nhưng sau lần tràn đầu Timer0 được cài sẽ tràn sau 5000CM. Việc này sẽ làm cho 2 Timer tràn ở những thời gian khác nhau, không có việc 2 Timer cùng tràn 1 lúc, đảm bảo cho tính chính xác của đồng hồ. Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 21 CHƯƠNG TRÌNH CON CLOCK: INC(MSS) MSS=100? No INC(SS) SS=60? INC(MM) MM=60? INC(HH) CLOCK Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 22 Để tính toán thời gian cho đồng hồ, ta sử dụng biến nhớ HH, MM, SS, MSS tương ứng với giờ, phút, giây, phần trăm giây. MSS=SS/100 Như vậy mỗi lần gọi gọi lệnh CLOCK ta sẽ cộng thêm 1 vào MSS. Nếu sau khi cộng 1 vào MSS mà MSS bằng 100 thì ta sẽ cộng thêm 1 vào SS và gán MSS bằng 0. Lệnh này được lặp lại cho đến khi SS bằng 60 (60 giây) thì cộng thêm 1 vào MM (phút) và gán SS bằng 0. Và làm tương tự đối với HH (Giờ). Cuối cùng nếu HH bằng 99 thì ta sẽ ngừng đồng hồ bằng cách Clear IsStart. Code chương trình con CLOCK: Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 23 Clock: Jnb IsStart,Clock_exit Clock_Start: Mov A,MSS INC A Mov MSS,A Cjne A,#50,Next_0 CPL SecTic Next_0: Cjne A,#100,Next_1 CPL SecTic Next_1: Jc Clock_Exit Mov MSS,#0 Mov A,SS INC A Mov SS,A ;---------------Phuc vu toi uu hoa phim an Start Stop Jnb Stop,Clock_Next2 Clr CkStop Clock_Next2: ;---------------Ket thuc {Phuc vu toi uu hoa phim an Start Stop} Cjne A,#60,Next_2 Next_2: Jc Clock_Exit Mov SS,#0 Mov A,MM INC A Mov MM,A Cjne A,#60,Next_3 Next_3: Jc Clock_Exit Mov MM,#0 Mov A,HH INC A Mov HH,A Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 24 CODE ĐẦY ĐỦ: ;Khai bao port vao ra RowLed Data P1 ColLed Data P0 Col7 Bit P0.7 Start Bit P3.0 Stop Bit P3.1 SecTic Bit P3.4 ;Khai bao doan du lieu Bseg at 20h IsStart: Dbit 1 CkStart: Dbit 1 CkStop : Dbit 1 IsTimer: Dbit 1 Dseg at 30h Buff: DS 4 HH: DS 1 MM: DS 1 SS: DS 1 MSS: DS 1 Col: DS 1 VarCol: DS 1 Var1: DS 1 LA: DS 1 HH2: DS 1 MM2: DS 1 Button: DS 1 ;Khai bao doan chuong trinh Cseg at 0h Org 0H Jmp Main Org 0BH Jmp ISR_ScanLed Org 01BH Cjne A,#99,Next_4 Next_4: Jc Clock_Exit Clr IsStart Clock_Exit: Mov A,HH Mov B,#10 Div AB Mov Buff+0,A Mov Buff+1,B Mov A,MM Mov B,#10 Div AB Mov Buff+2,A Mov Buff+3,B Ret Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 25 Jmp ISR_Clock Org 03H Jmp StartClock Org 13H Jmp StopClock Org 030H ;Dinh nghia chuong trinh chinh Main: Mov Sp,#255-32 Mov Buff+0,#0 Mov Buff+1,#0 Mov Buff+2,#0 Mov Buff+3,#0 Mov HH,#0 Mov MM,#0 Mov SS,#0 Mov MSS,#0 Mov HH2,#0 Mov MM2,#0 Clr IsTimer Clr IsStart Clr CkStart Clr CkStop Clr SecTic Mov ColLed,#10H ;00010000 Mov VarCol,#10H Mov Col,#4 Mov TMOD,#11H ;Setup Timer0 va Timer1 o Mode 1 Mov TL0,#03CH Mov TH0,#0F6H ;Tran sau 2500 CM Mov TL1,#0F0H Mov TH1,#0D8H ;Tran sau 10000 CM Mov IE,#8FH ;Cho phep ngat 2 ngat ngoai va 2 timer SetB TR0 ;Bat Timer0 SetB TR1 ;Bat Timer1 Main_Loop: Call ScanButton Jmp Main_loop ;-------------------------------------------- ScanButton: Jb CkStart,CheckStop Jb Start,CheckStop SetB CkStart Clr P3.2 SetB P3.2 CheckStop: Jb CkStop,ScanButton_Exit Jb Stop,ScanButton_Exit SetB CkStop Clr CkStart Clr SecTic Clr P3.3 SetB P3.3 ScanButton_Exit: Ret ;-------------------------------------------- StartClock: SetB IsStart Mov Buff+0,#0 Mov Buff+1,#0 Mov Buff+2,#0 Mov Buff+3,#0 Mov HH,#0 Mov MM,#0 Mov SS,#0 Mov MSS,#0 Reti ;-------------------------------------------- StopClock: Clr IsStart Reti ;-------------------------------------------- ISR_Clock: Clr TR1 Mov TL1,#0F0H+10 ;Tru di 10 Chu ky may di nhay vao lenh ngat Mov TH1,#0D8H ;Tran sau 10000 CM SetB TR1 ;Bat Timer0 Call Clock Reti ;-------------------------------------------- ISR_ScanLed: Clr TR0 Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 26 Mov TL0,#078H+10 ;Tru di 10 Chu ky may di nhay vao lenh ngat Mov TH0,#0ECH ;Tran sau 5000 CM SetB TR0 ;Bat Timer0 Call ScanLed Reti ;-------------------------------------------- Clock: Jnb IsStart,Clock_exit Clock_Start: Mov A,MSS INC A Mov MSS,A Cjne A,#50,Next_0 CPL SecTic Next_0: Cjne A,#100,Next_1 CPL SecTic Next_1: Jc Clock_Exit Mov MSS,#0 Mov A,SS INC A Mov SS,A ;---------------Phuc vu toi uu hoa phim an Start Stop Jnb Stop,Clock_Next2 Clr CkStop Clock_Next2: ;---------------Ket thuc {Phuc vu toi uu hoa phim an Start Stop} Cjne A,#60,Next_2 Next_2: Jc Clock_Exit Mov SS,#0 Mov A,MM INC A Mov MM,A Cjne A,#60,Next_3 Next_3: Jc Clock_Exit Mov MM,#0 Mov A,HH INC A Mov HH,A Cjne A,#99,Next_4 Next_4: Jc Clock_Exit Clr IsStart Clock_Exit: Mov A,MM Mov B,#10 Div AB Mov Buff+0,A Mov Buff+1,B Mov A,SS Mov B,#10 Div AB Mov Buff+2,A Mov Buff+3,B Ret ;-------------------------------------------- ScanLed: Mov A,VarCol RR A Mov VarCol,A Mov ColLed,A Jnb Col7,Col7_Not0 Mov VarCol,#08H Col7_Not0: Mov DPTR,#DB7SEG Mov A,#Buff Dec Col Add A,Col Mov R0,A Mov A,@R0 MovC A,@A+DPTR CPL A Mov RowLed,A Mov A,Col Cjne A,#0,Col_Not0 Mov Col,#4 Col_Not0: Ret ;-------------------------------------------- DB7SEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,0 7H,7FH,6FH,40H ;BANG DU LIEU "CODE LED 7 DOAN" ;-------------------------------------------- End Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 27 III. KẾT LUẬN. 1. Ưu điểm: Qua Kết quả thực tế ta thấy đồng hồ hoạt động tốt, cách sử dụng đơn giản, chính xác với yêu cầu thiết kế ban đầu như : + Khi ấn Start Thì đồng hồ bắt đầu điếm từ 0 + Khi ấn Stop thì đồng hồ ngưng. => đồng hồ hoạt động với mức sai số không đáng kể. 2. Nhược điểm: Do lâp trình bằng vi xử lý nên không thể đạt độ chính xác tối đa được và sau một thời gian thì có thể cũng có một số lổi làm cho hệ thống không chính xác như lúc đầu được (sai số do qua trình tính toán hoặc sai số của linh kiện). 3. Hướng phát triển: Bằng việc ứng dụng kỹ thuật vi xử lý, chúng ta có thể thiết kế những hệ thống không những hiển thị được giờ-phút mà còn có thể hiển thị được lun cả giây, ngày, tháng, năm..và còn có thể phát triển nhiều loại đông hồ kiểu khác nữa như là đồng hồ hẹn giờ hay các loại động hồ đa năng khác, các tính năng về thời gian Muốn phát triển được như vậy thì trước tiên ta cần phải có kiến thức đủ rộng và có những hiểu biết sâu về mạch số, lập trình 4. Lời kết: Mạch đồng hồ số là đề tài rất thiết thực và gần gũi với cuộc sống chúng ta. Đây là một đề tài nhỏ nhưng cũng là đề tài đầu tiên mà chúng em tự mình tìm hiểu và thi công, qua đó giúp chúng em ứng dụng những kiến thức mà mình đã học. Vì đây là lần đầu thực hiện một mạch thực tế hoàn chỉnh dựa vào những kiến thức đã học nên còn nhiều sai sót và hạn chế nên chưa được như ý muốn. Mong được sự đóng góp ý kiến của Thầy và các bạn. Báo Cáo Vi Điều Khiển Mạch Đồng Hồ GVHD: Nguyễn Khắc Nguyên 28 Mục Lục I - MỤC TIÊU ĐỀ TÀI .................................................................. Trang 2 II - GIẢI QUYẾT VẤN ĐỀ ........................................................... Trang 3 1. Phần cứng ................................................................... Trang 3 2. Phần mền .................................................................... Trang 7 III - KẾT LUẬN ............................................................................. Trang 24 1. Ưu điểm ....................................................................... Trang 24 2. Nhược điểm ................................................................. Trang 24 3. Hướng phát triển ......................................................... Trang 25 4. Lời kết .......................................................................... Trang 25
File đính kèm:
- bai_tap_ket_thuc_hoc_phan_vi_dieu_khien_de_tai_do_ho_so_nguy.pdf