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    CHUYENMA
BEGIN:
    MOV    R1,#0
LOOP:
    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,SW3
FLAG:
    CALL    DELAY_XTIME
    CJNE    R1,#9,LOOP
    JMP    BEGIN
MALED:    DB    0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H
;--------------------------------------------------------

DELAY_XTIME:
    MOV        R3,30H
    MOV    TMOD,#10H
LOOP1:
    MOV    R2,#100
LOOP2:
    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
    RET
LED:    DB     0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H   
    END

   
   

No comments:

Related Posts Plugin for WordPress, Blogger...

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