Code Ví Dụ Cho 89c51 .ASM - Cùng Tôi Học Điện Tử

Trang

  • Home
  • Bài Viết mới nhất
  • Games
  • Music
  • Chat
  • Thư Viện
  • Photo
  • Music Fountain
  • English
  • Góc Quê Hương
  • About me

Code ví dụ cho 89c51 .ASM

1. Viết chương trình hiển thị các led tắt dần D1 đến D8; lặp lại quá trình 10 lần; thời gian delay giữa các led là 250ms dùng timer 0, mod 2 code: " MAIN: MOV R1,#10 BEGIN: MOV R0,#0 MOV DPTR,#MALED LAP: MOV A,R0 MOVC A,@A+DPTR MOV P2,A CALL DELAY INC R0 CJNE R0,#9,LAP DJNZ R1,BEGIN SJMP $ MALED: DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H ;----------------------------------------------- DELAY: MOV TMOD,#02H MOV R6,#10 LOOP: MOV R7,#100 LOOP1: MOV TH0,#(-250) MOV TL0,#(-250) SETB TR0 JNB TF0,$ CLR TF0 DJNZ R7,LOOP1 DJNZ R6,LOOP RET END " 2. Hiển thị chữ "Chao ban" tren 8 led 7 đoạn code: " LED1 EQU 30H LED2 EQU 31H LED3 EQU 32H LED4 EQU 33H LED5 EQU 34H LED6 EQU 35H LED7 EQU 36H LED8 EQU 37H LED_POS EQU 38H ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0_ISR MAIN: SETB EA SETB ET0 MOV LED1,#0C6H MOV LED2,#089H MOV LED3,#088H MOV LED4,#0C0H MOV LED5,#0FFH MOV LED6,#83H MOV LED7,#088H MOV LED8,#0C8H MOV LED_POS,#01H MOV R0,#LED1 MOV TMOD,#01H MOV TH0,#(-200) MOV TL0,#(-200) SETB TR0 SJMP $ ;--------------------------------------------- TIMER0_ISR: MOV TH0,#HIGH(-200) MOV TL0,#LOW(-200) MOV A,LED_POS MOV P1,A RL A MOV LED_POS,A MOV A,@R0 MOV P2,A INC R0 CJNE R0,#LED_POS,EXITTIMER0 MOV LED_POS,#01H MOV R0,#LED1 EXITTIMER0: RETI END " Phần mềm sinh code led 7 đoạn : để sinh code số 0 dùng cho led 7 đoạn chung Cathode ban thiết lập như hình sau: mã số 0 sinh ra 0C0H link download 3. Viết chương trình hiển thị các led tắt dần từ D1 đến D8; lặp lại quá trình 356 lần ; thời gian delay giữa các led là 400ms dùng timer 1, mode 2 code: " MAIN: MOV R2,#2 BEGIN: MOV R1,#178 SCANLED: MOV R0,#0 MOV DPTR,#MALED LAP: MOV A,R0 MOVC A,@A+DPTR MOV P2,A CALL DELAY INC R0 CJNE R0,#9,LAP DJNZ R1,SCANLED DJNZ R2,BEGIN SJMP $ MALED: DB 00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH ;--------------------------------------------------- DELAY: MOV TMOD,#20H MOV R6,#20 LOOP: MOV R7,#100 LOOP1: MOV TH1,#(-200) MOV TL1,#(-200) SETB TR1 JNB TF1,$ CLR TF1 DJNZ R7,LOOP1 DJNZ R6,LOOP RET END " 4. Cho mạch sau: a, Thành lập mã led 7 đoạn từ 0 đến 9 Lưu ý Led 7 đoạn trên là led chung Anode, nhưng khi kết nối qua cổng đệm đảo thì code đưa vào giống code của led chung Cathode sử dụng phần mềm sinh code led 7 đoạn , chọn kiểu chung Cathode, nhấn Auto tự động sinh code từ 0 đến 9 Viết chương trình: b. Cho phép ngắt tại Timer0, Timer1, ngắt ngoài 1. c. Hiển thị các số tăng dần từ 0000 đến 2011 trên 4 led 7 đoạn và dừng tại giá trị này. Thời gian tăng q đơn vị là 500ms dùng timer0 mode 1; dùng ngắt timer1 để quét led với chu kỳ quét cho 4 led là 5ms. d. Nếu có quá trình ngắt tại ngắt ngoài thì reset giá trị trên 4 led về 0 và bắt đầu thực hiện lại quá trình đếm. code: " ;----------------------------------------------------------------------------------------------------------- ; BILLNEE ; http://laptrinhc.co.cc ;----------------------------------------------------------------------------------------------------------- LED1 EQU 30H ;dia chi luu cac gia tri led 7 doan nen dat theo tu LED2 EQU 31H ;tang dan giup cho viec quet led de dang hon LED3 EQU 32H ;http://laptrinhc.co.cc LED4 EQU 33H ;http://laptrinhc.co.cc LED_POS EQU 34H ;dia chi luu vi tri hien tai cua led , thu tu cua dia chi cua o nho nay phai nam cuoi sau cac dia chi luu gia tri led DONVI EQU 35H ;dia chi luu gia tri hang don vi CHUC EQU 36H ;dia chi luu gia tri hang chuc TRAM EQU 37H ;dia chi luu gia tri hang tram NGHIN EQU 38H ;dia chi luu gia tri hang nghin, do ma led khac ma thap phan nen can khai bao them cac o nho nay ORG 0000H ; Ham main bat dau tu dia chi 0000H LJMP MAIN ORG 000BH ;dia chi timer0, cu 500ms se dem 1 lan, nhay den vecto ngat timer0 nay LJMP COUNT ORG 0013H ;dia chi ngat ngoai 1, khi nut bam duoc bam vecto ngat nhay den chuong trinh ngat reset cac so ve 0 0 0 0 LJMP RESET1 ORG 001BH ;dia chi ngat timer1,timer1 dung de quet led, cu 5ms quet led 1 lan LJMP SCAN_LED ;------------------------------------------- MAIN: MOV TMOD,#11H ;khai bao timer0 mod 1 16bit, timer1 mod 1 16 bit MOV TH0,#HIGH(-50000) ;gia tri nap ban dau la 50000 = 50ms MOV TL0,#LOW(-50000) ;can lap lai MOV R7,#10 ;10 lan de duoc 500ms MOV TH1,#HIGH(-5000) ;nap gia tri ban dau cho timer1 la 5000 = 5ms MOV TL1,#LOW(-5000) ;http://laptrinhc.co.cc MOV DONVI,#0 ;gia tri ban dau cua hang don vi MOV CHUC,#0 ;hang chuc MOV TRAM,#0 ;hang tram MOV NGHIN,#0 ;hang nghin la 0 0 0 0 MOV R0,#LED1 ;R0 nhan gia tri o nho cua led1, R0 nhan gia tri dau la gia tri o nho 30H MOV LED_POS,#08H ;P1.3 ket noi voi anode cua led 1, de sang led 1 P1 = 00001000b = 08h SETB EA ; enble ngat cuc bo SETB EX1 ;enble ngat ngoai 1 SETB IT1 ; chon cach ngat ngoai 1 SETB ET0 ;enble ngat timer0 SETB ET1 ;enble ngat timer1 SETB TR0 ;chay timer0 ( timer0 run) SETB TR1 ;chay timer1 JMP $ ; chuong trinh chinh gio ko lam gi nua do cac chuong trinh ngat lam viec lien tuc ;---------------------------------------- COUNT: MOV TH0,#HIGH(-50000) ;gia tri nap ban dau lon nhat co the nap 2^16 > 65000,chon gia chi 50.000 MOV TL0,#LOW(-50000) ; ma gia tri can delay la 500000 = 500ms DJNZ R7,EXIT_TIMER0 ;can lap 10 lan 50ms de duoc 500ms MOV R7,#10 ;nap lai gia tri R7 CALL INCRE ; cu het 500 ms bat dau tang 1 don cua so ;----------------------------------------- EXIT_TIMER0: RETI ;----------------------------------------- RESET1: MOV DONVI,#0 ; dua cac gia tri don vi MOV CHUC,#0 ;chuc MOV TRAM,#0 ;tram MOV NGHIN,#0 ;nghin ve 0 0 0 0 SETB ET0 ; sau do bat dau dem lai SETB TR0 ; bang timer0 RETI ;---------------------------------------- SCAN_LED: ;chuong trinh quet led MOV TH1,#HIGH(-5000) ; nap lai gia tri timer1 MOV TL1,#LOW(-5000) ;cu 5ms quet led 1 lan MOV A,LED_POS ;thanh ghi a nhan gia tri vi tri tam thoi cua led dang duoc quet MOV P1,A ;vi du muon led 1 sang thi P1 nhan gia tri 80h, led2 sang P1 = 04h,led3 sang P1 = 02h RR A ; do vay muon sang led tiep theo can dich bit sang ben phai MOV LED_POS,A ; luu lai gia tri sau ghi dich MOV A,@R0 ;doc gia tri led 7 doan vao A, mac dinh dau tien la led 1 sang dau tien MOV P2,A ;xuat gia tri qua P2 de hien thi len led 7 doan INC R0 ; chuyen sang gia tri led 7 doan tiep theo lan luot 30h,31h,32h,33h MOV A,R0 ; chuyen gia tri led 7 doan hien thoi vao A CJNE A,#LED_POS,EXIT_TIMER1 ; de so sanh voi gia tri 34h, thi lap lai qua trinh quet MOV R0,#LED1 ; tu dau MOV LED_POS,#08H EXIT_TIMER1: RETI ;------------------------------------------- INCRE: INC DONVI ;tang don vi CALL CHUYENMA ; chuyen ma thap phan sang ma led 7 doan MOV A,DONVI CJNE A,#10,TEST ;trong qua trinh dem luon kiem tra xem gia tri so da dem duoc 2011 chua MOV DONVI,#0 ; khi don vi dem den 10 thi reset don vi ve 0 INC CHUC ; va bat dem hang truc, cac hang tran, nghin tuong tu CALL CHUYENMA ;http://laptrinhc.co.cc MOV A,CHUC ;http://laptrinhc.co.cc CJNE A,#10,TEST ;http://laptrinhc.co.cc MOV CHUC,#0 ;http://laptrinhc.co.cc INC TRAM ;http://laptrinhc.co.cc CALL CHUYENMA ;http://laptrinhc.co.cc MOV A,TRAM ;http://laptrinhc.co.cc CJNE A,#10,TEST MOV TRAM,#0 INC NGHIN CALL CHUYENMA MOV A,NGHIN CJNE A,#10,TEST MOV NGHIN,#0 ;------------------------------------------ TEST: ;ham kiem tra so xem so dat duoc gia tri 2011 chua?? MOV A,DONVI ;ham se kiem tra 4 so lan luot CJNE A,#1,EXIT ; neu hang don vi bang 1 MOV A,CHUC ; thi nhay sang kiem tra hang chuc CJNE A,#1,EXIT ; hang chuc bang 1 thi nhay sang kiem tra MOV A,TRAM ; hang tram CJNE A,#0,EXIT ; hang tram bang 0 thi nhay sang MOV A,NGHIN ; kiem tra hang nghin CJNE A,#2,EXIT ; neu hang nghin bang 2 CLR ET0 ; dung qua trinh CLR TR0 ; ngat timer0 EXIT: RET ;--------------------------------------- CHUYENMA: ; ham chuyen ma thap phan sang ma led 7 doan MOV A,DONVI ; ham SCAN_Led se lay tung gia tri LED 1,2,3,4 CALL BCD2LED7 ; xuat ra P2 de hien thi MOV LED4,A ;http://laptrinhc.co.cc MOV A,CHUC ;http://laptrinhc.co.cc CALL BCD2LED7 ;http://laptrinhc.co.cc MOV LED3,A MOV A,TRAM CALL BCD2LED7 MOV LED2,A MOV A,NGHIN CALL BCD2LED7 MOV LED1,A RET ;--------------------------------------- BCD2LED7: MOV DPTR,#MALED7 MOVC A,@A+DPTR RET MALED7:DB 03fH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH RET END ;---------------------------------------------------------------------------------- ;http://laptrinhc.co.cc COCC nghia la "con ong chau cha" kaka kết quả here: 5. Viết chương trình chữ chạy hiển thị trên led 7 đoạn . KAKA , ngồi viết code đói quá viết chữ " BILLNEE HI PIF " , viết lộn thành " PIF HI BILLNEE " ka ka code đây nè : LED1 EQU 30H LED2 EQU 31H LED3 EQU 32H LED4 EQU 33H LED5 EQU 34H LED6 EQU 35H LED7 EQU 36H LED8 EQU 37H LED_POS EQU 38H ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0_ISR ORG 001BH LJMP DICH_LED MAIN: CALL DEFAULT MOV LED_POS,#01H MOV R0,#LED1 MOV R1,#50 MOV R6,#8 MOV R3,#0 MOV TMOD,#11H MOV TH0,#(-200) MOV TL0,#(-200) MOV TH1,#(-5000) MOV TL1,#(-5000) SETB EA SETB ET0 SETB ET1 SETB TR0 SETB TR1 JMP $ DEFAULT: MOV LED1,#0FFH MOV LED2,#0FFH MOV LED3,#0FFH MOV LED4,#0FFH MOV LED5,#0FFH MOV LED6,#0FFH MOV LED7,#0FFH MOV LED8,#0FFH RET ;--------------------------------------------- LED_JMP: MOV A,LED7 MOV LED8,A MOV A,LED6 MOV LED7,A MOV A,LED5 MOV LED6,A MOV A,LED4 MOV LED5,A MOV A,LED3 MOV LED4,A MOV A,LED2 MOV LED3,A MOV A,LED1 MOV LED2,A INC R3 MOV A,R3 MOV DPTR,#MALED MOVC A,@A+DPTR MOV LED1,A CJNE R3,#18,EXIT_JMP MOV R3,#0 CALL DEFAULT EXIT_JMP: RET MALED: DB 0FFH,86H,86H,0C8H,0C7H,0C7H,0CFH,083H,0FFH,0F9H,08 9H,0FFH,08EH,0F9H,08CH,0FFH,0FFH,0FFH ;--------------------------------------------- TIMER0_ISR: MOV TH0,#HIGH(-200) MOV TL0,#LOW(-200) MOV A,LED_POS MOV P1,A RL A MOV LED_POS,A MOV A,@R0 MOV P2,A INC R0 CJNE R0,#LED_POS,EXITTIMER0 MOV LED_POS,#01H MOV R0,#LED1 EXITTIMER0: RETI ;------------------------------------- DICH_LED: MOV TH1,#HIGH(-5000) MOV TH1,#LOW(-5000) DJNZ R1,EXIT_TIMER1 MOV R1,#10 CALL LED_JMP EXIT_TIMER1: RETI END file .hex nè :03000000020800F3 :0C080000787FE4F6D8FD75810702000047 :0300000002001EDD :03000B0002009D53 :10001B000200B71146753801783079327E087B00C3 :10002B00758911758C38758A38758D78758B78D282 :10003B00AFD2A9D2ABD28CD28E80FE7530FF753188 :10004B00FF7532FF7533FF7534FF7535FF7536FF5E :10005B007537FF22E536F537E535F536E534F535F9 :10006B00E533F534E532F533E531F532E530F5318D :10007B000BEB90008B93F530BB12047B00114622E7 :10008B00FF8686C8C7C7CF83FFF989FF8EF98CFF20 :10009B00FFFF758CFF758A38E538F59023F538E648 :1000AB00F5A008B83805753801783032758DEC75C8 :0900BB008D78D904790A115F3235 :00000001FF 6. Cho mạch kết nối AT89C51 như hình dưới ( giả sử tần số thạch anh 12MHZ). Thực hiện các yêu cầu sau: a. Xác định bảng mã hiển thị các kí hiệu *C và 0->9 cho Led 7 đoạn b.Viết chương trình con Delay ( thời gian 0,5s dùng timer 0, mode 1). c.Kiểm tra công tắc nhấn: SW1: Đọc các dữ liệu từ P0, lưu vào ô nhớ 30h sau đó delay khoảng thời gian 0,5s SW2: Xuất giá trị trong ô nhớ 30h ra led1, led2 ( giả sử dữ liệu luôn <100), led3,led4 hiện *C CODE " LED1 EQU 31H LED2 EQU 32H LED3 EQU 33H LED4 EQU 34H LED_POS EQU 35H ORG 0000H LJMP MAIN ORG 001BH LJMP SCAN_LED ;---------------------------- MAIN: MOV TMOD,#21H MOV R7,#10 MOV TH1,#(-200) MOV TL1,#(-200) MOV 30H,#00 CALL CHUYENDOI MOV LED3,#9CH MOV LED4,#0C6H MOV R0,#LED1 MOV LED_POS,#0FEH SETB EA SETB ET1 SETB TR1 BEGIN: JNB P1.0,SW1 JNB P1.1,SW2 JMP BEGIN ;--------------------------------- DELAY_05S: MOV R7,#10 LOOP: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SETB ET0 SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 DJNZ R7,LOOP RET ;---------------------------------- SW1: MOV A,P0 MOV 30H,A CALL DELAY_05S SJMP BEGIN RET ;----------------------------------- SW2: MOV A,30H CALL CHUYENDOI CALL CHUYENDOI CALL CHUYENDOI SJMP BEGIN RET ;------------------------------------ SCAN_LED: MOV A,LED_POS MOV P3,A RL A MOV LED_POS,A MOV A,@R0 MOV P2,A INC R0 MOV A,R0 CJNE A,#LED_POS,EXIT MOV R0,#LED1 MOV LED_POS,#0FEH EXIT: RETI ;----------------------------------- CHUYENDOI: MOV A,30H MOV B,#10 DIV AB CALL BCD2LED7 MOV LED1,A MOV A,B CALL BCD2LED7 MOV LED2,A RET ;----------------------------------- BCD2LED7: MOV DPTR,#MALED7 MOVC A,@A+DPTR RET MALED7: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 7. Cho sơ đồ dưới đây , viết chương trình hiển thị các led sáng dần từ D1 đến D8;lặp lại quá trình vô hạn; thời gian delay giữa các led là x100ms dùng timer 1,mode 1, trong đó x là một số thay đổi 1-5 cho phép nhập từ nút bấm và hiển thị trên led (mặc định x =1) theo yêu cầu sau: - Nhấn SW1: tăng x một đơn vị (1-5) - Nhấn SW2 ; giảm x một đơn vị (5-1) - Nhấn SW3 ; x = 1 code: MAIN: CLR P2.0 MOV TMOD,#10H MOV 30H,#1 CALL CHUYENMABEGIN: MOV R1,#0LOOP: MOV A,R1 MOV DPTR,#MALED MOVC A,@A+DPTR MOV P0,A INC R1 JNB P2.3,SW1 JNB P2.4,SW2 JNB P2.5,SW3FLAG: CALL DELAY_XTIME CJNE R1,#9,LOOP JMP BEGINMALED: DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H;--------------------------------------------------------DELAY_XTIME: MOV R3,30H MOV TMOD,#10HLOOP1: MOV R2,#100LOOP2: MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) CLR TF1 SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 DJNZ R2,LOOP2 DJNZ R3,LOOP1 RET;---------------------------SW1: INC 30H CALL CHUYENMA MOV A,30H CJNE A,#6,FLAG MOV 30H,#5 CALL CHUYENMA JMP FLAG RET;--------------------------SW2: DEC 30H CALL CHUYENMA MOV A,30H CJNE A,#0,FLAG MOV 30H,#1 CALL CHUYENMA JMP FLAG RET;----------------------------SW3: MOV 30H,#1 CALL CHUYENMA JMP FLAG RET;----------------------------CHUYENMA: MOV A,30H MOV DPTR,#LED MOVC A,@A+DPTR MOV P1,A RETLED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END

No comments:

Newer Post Older Post Home Subscribe to: Post Comments (Atom) Related Posts Plugin for WordPress, Blogger...

Cùng tôi học Điện Tử ..(http://ilovec.tk)..

Loading... Billnee Nguyen

Bài xem nhiều

  • Code ví dụ cho 89c51 .ASM 1. Viết chương trình hiển thị các led tắt dần D1 đến D8; lặp lại quá trình 10 lần; thời gian delay giữa các led là 250ms d...
  • Canh sat ky tai 5,6,7 (Cực kì vui nhộn)   Cảnh sát kỳ tài (Kochikame-7/16 volume) Cảnh sát kỳ tài Là bộ manga dài nhất từ trước đến na...
  • PIC 16F887 Mình rất thích dòng vi điều khiển PIC , việc lập trình PIC đối với người chưa biết gì như mình rất khó, với những ai giống mình , bài viết n...
  • Caì Driver cho mạch nạp 89 series device programmer USB cho Win 7 Mình có mua một mạch nạp Mạch nạp MCS51-AVR-Serial Eprom Little Programmer USB Box 280 ngàn Phiên bản : 3.7.425 ...
  • Tìm hiểu IC 4017 Tìm hiểu IC 4017 Sơ đồ chân: IC đếm thập phân 4017 có 10 ngõ ra ở mức cao. Bộ đếm thập phân là gì? IC 4017 có 10...
  • Download và hướng dẫn cài đặt Orcad 16.3  Giới thiệu về Orcad 16.3 Cadence SPB / OrCAD 16.30.000 is a comprehensive package of design of electronic circuits, analog and digital...
  • Hướng dẫn cài OpenCV 3 + Python cho Raspberry Pi 3 Bước 1 : Mở rộng không gian thẻ nhớ cho file hệ thống ( Lưu ý thẻ nhớ SD 8GB không đủ dung lượng để cài khuyến cáo sử dụng thẻ nhớ 32GB) -...
  • LED trái tim - 32 led ( nguồn : Hội quán điện tử ) Trái tim là bộ phận quan trọng của con người đồng thời trái tim tượng trưng cho tình yêu đẹp của đôi trai gái. Các bạn trai đọc điện - điệ...
  • Điện tử thưởng thức Triac Mosfet Diac Diode Thyristor Led Transistor Cầu chia áp Op-amp Thí nghiệm về Transistor ...
  • "Nghịch tí " Thiết bị gây nhiễu cho TV từ xa Trên là sơ đồ mạch của mạch  gây nhiễu TV đơn giản nhưng hiệu quả cao từ xa.   Hầu hết các điều khiển TV có tần số 38KHz .   Một  chùm tia h...

Số lượt người xem

Are you from ...

Kết nối bạn bè

Từ khóa » đếm Từ 00 đến 99 Dụng 89c51