Bao Cao VI Xu Ly

You might also like

Download as rtf, pdf, or txt
Download as rtf, pdf, or txt
You are on page 1of 97

BAØI 1: THÍ NGHIEÄM VÔÙI NUÙT NHAÁN VAØ LED ÑÔN

1. Thí nghieäm 1: Vieát chöông trình thöïc hieän ñoïc lieän tuïc traïng thaùi nuùt nhaán ñöôïc
noái ñeán P1.0 vaø hieån thò ra Led ñöôïc noái taïi chaân P1.1 ( bit thöù 1 cuûa port 1)

ORG   2000H

MAIN:

                  MOV   C,P1.0

                  MOV   P1.1,C

                  SJMP   MAIN

                  END

1. Khi nhaán coù 2 ñeøn saùng cuøng luùc: khi mình nhaán P1.0 ( ñeøn saùng) thì döõ lieäu töø P1.0
ñöôïc chuyeån qua P1.1 thoâng qua côø C, thôøi gian chuyeån quaù nhanh ( thôøi gian thöïc hieän
leänh laø vaøi micro giaây) => ta nhìn seõ thaáy 2 ñeøn cuøng saùng/taét cuøng luùc.
2. Caùc bit cuûa 4 port ñöôïc söû duïng trong thì nghieäm treân: Vì EME-MC8 thieát keá hoat ñoäng ôû
cheá ñoä 3 bus, neân port 0: bus döõ lieäu, port 2: bus ñòa chæ, P3.0, P3.1, P3.6, P3.7 duøng laøm
bus ñieàu khieån. Caùc chaân coøn laïi cuûa caùc port ñeàu coù theå duøng trong thí nghieäm naøy.

1. Thí nghieäm 2: Vieát chöông trình taïo xung vuoâng 1Hz ñöôïc noái ñeán chaân P1.0 vôùi taàn
soá dao ñoäng duøng trong heä thoáng laø 11.059MHz

a.     Duty cycle: 50% - Hz

ORG   2000H

LAP:  

                  CPL     P1.0
                  ACALL  DL

                  SJMP   LAP

DL:     

                  MOV   R5,#10

L2:      

                  MOV   R6,#100

L1:      

                  MOV   R7,#250

                  DJNZ  R7,$

                  DJNZ  R6,L1

                  DJNZ  R5,L2

                  RET

END

Duøng voøng laëp ñeå taïo treã 0.5s, vôùi giaù trò naïp cho R5, R6, R7 nhö treân tính theo coâng
thöùc gaàn ñuùng laø t=2*m*n*p

Vôùi giaù trò naïp: R5 = 10, R6 = 200, R7 = 250 ñeå giaûm sai soá.

 
b.     Duty cycle: 30% - taàân soá 0.5Hz

ORG   2000H

LAP:  

MOV   R1,#3

                        MOV   R2,#7

                        CLR    P1.0

LAP1:

                        ACALL  DL

                         DJNZ  R1,LAP1

                        SETB  P1.0

LAP2:

                        ACALL  DL

                        DJNZ  R2,LAP2

                        SJMP   LAP

DL:     

            L2:       MOV   R5,#4

            L1:       MOV   R6,#200
                        MOV   R7,#250

                        DJNZ  R7,$

                        DJNZ  R6,L1

                        DJNZ  R5,L2

                        RET

END

1. Thí nghieäm 3:

a.     Vieát chöông trình taïo xung vuoâng 1Hz duøng timer 0

ORG   2000H

MAIN:

                        CPL     P1.0

                        ACALL  DL500

                        SJMP   MAIN

DL500:

                        MOV   TMOD,#01H

                        MOV   R7,#10

LOOP:
                        MOV   TH0,#HIGH(-50000)  ; giaù trò naïp laø 50000*10 = 500000us = 0.5s

                        MOV   TL0,#LOW(-50000)

                        SETB  TR0

                        JNB     TF0,$                          ; ñôïi côø TF0 traøn vaø xoùa côø traøn

                        CLR    TF0

                        CLR    TR0

                        DJNZ  R7,LOOP

                        RET

                        END

b.     Duøng ngaét Timer 0:

ORG   2000H

LJMP  MAIN

ORG    000BH                       

LJMP  ISRT0

MAIN:

      MOV   TMOD,#01H
      SETB  TF0

      MOV   IE,#82H

      MOV   R7,#11

      SJMP   $

ISRT0: 

DJNZ  R7,NAP

      CPL     P1.0

      MOV   R7,#10

      SJMP   KT

NAP:  

CLR    TR0

      MOV   TH0,#HIGH(-50000)

      MOV   TL0,#LOW(-50000)

      SETB  TR0

KT:      RETI

      END

 
4.     Thí nghieäm 4: Vieát chöông trình laøm cho led noái ñeán chaân P1.0 chôùp taét vôùi taàn
soá coù theå taêng hoaëc giaûm baèng caùch nhaán nuùt noái ñeán chaân P1.1 hoaëc P1.2.  Chu kì
chôùp taét trung bình laø 1s

ORG   2000H

MAIN:

            CPL     P1.0

                        MOV   A,#10

                        JNB     P1.1,KT_GIAM

                        DEC    A                     ;Khi nhaán P1.1 thì f taêng => Chu kyø giaûm => giaûm R7

                        MOV   R7,A 

                        SJMP   LAP                ; moãi laàn giaûm laø 1*25000us = 0.025s

KT_GIAM:

                        JNB     P1.2,LAP

                        INC     A

                        MOV   R7,A

LAP:

                        ACALL  DL500
                        DJNZ  R7,LAP

                        SJMP   MAIN

DL500:

                        MOV   TMOD,#01H

                        MOV   TH0,#HIGH(-25000) ; giaù trò laø 50000*R7 (R7TB = 10) = 500000us = 0.5s

                        MOV   TL0,#LOW(-25000)

                        SETB  TR0

                        JNB     TF0,$                          ; ñôïi côø TF0 traøn vaø xoùa côø traøn

                        CLR    TF0

                        CLR    TR0

                        RET

                        END

BAØI TAÄP:

1.     Vieát chöông trình thöïc hieän coång logic: XOR 2 ngoõ vaøo

                        ORG   2000H

MAIN:
                        CLR    A

                        MOV   C,P1.0

                        MOV   ACC.0,C

                        MOV   R0,A

                        MOV   C,P1.1

                        MOV   ACC.0,C

                        XRL    A,R0

                        MOV   C,ACC.0

                        MOV   P1.5,C

                        SJMP   MAIN

END

2.     Vieát chöông trình thöïc hieän maïch ñeøn chaïy: STTTTTT-SSTTTTTT-


SSSTTTTT-SSSSTTTT…….-SSSSSSSS-TTTTTTT.  Thôøi gian thöïc hieän chöông
trình laø 4.5s (vôùi S: ñeøn saùng, T: ñeøn taét)

                        ORG   2000H

MAIN:

                        CLR    A

                        MOV   DPTR,#TABLE
                        MOV   R7,#8

LAP:

                        MOVC  A,@A+DPTR

                        ACALL  DL500

                        INC     A

                        DJNZ  R7,LAP

                        SJMP   MAIN

DL500:

                        MOV   TMOD,#01H

                        MOV   R6,#10

LOOP:

                        MOV   TH0,#HIGH(-50000) ; giaù trò naïp laø 50000*10 = 500000us = 0.5s

                        MOV   TL0,#LOW(-50000)

                        SETB  TR0

                        JNB     TF0,$                          ; ñôïi côø TF0 traøn vaø xoùa côø traøn

                        CLR    TF0

                        CLR    TR0
                        DJNZ  R6,LOOP

                        RET

TABLE:

                        DB      7FH,3FH,1FH,0FH,07H,03H,01H,00H,0FFH

                        END

3.     Vieát chöông trình thöïc hieän pheùp logic: P1.5 = (P1.0 XOR P1.1) AND
P1.2)

                        ORG   2000H

MAIN:

                        CLR    A

                        MOV   C,P1.0

                        MOV   ACC.0,C

                        MOV   R0,A

                        MOV   C,P1.1

                        MOV   ACC.0,C

                        XRL    A,R0

                        MOV   R0,A                           ; R0 = P1.0 XOR P1.1


                        MOV   C,P1.2

                        MOV   ACC.0,C

                        ANL    A,R0

                        MOV   C,ACC.0

                        MOV   P1.5,C

                        SJMP   MAIN

                        END

           

BAØI 2: THÍ NGHIEÄM HIEÅN THÒ DUØNG LED 7 ÑOAÏN

1.     Thí nghieäm 1:Vieát chöông trính thöïc hieän boä ñeám töø 0->9 vaø hieån
thò treân led 7 ñoaïn, moãi laàn caùch nhau 2s

ORG   2000H

MAIN:

                        MOV   R7,#10

                        MOV   R5,#0
LOOP:           

MOV   DPTR,#TABLE

                        MOV   A,R5

                        MOVC  A,@A+DPTR 

                        ACALL  DL2S

                        MOV   DPTR,#0000H

                        MOVX  @DPTR,A

                        INC     R5

                        DJNZ  R7,LOOP

                        SJMP   MAIN

DL2S:

                        MOV   R6,#40

                        MOV   TMOD,#01H

LAP:  

MOV   TH0,#HIGH(-50000)

                        MOV   TL0,#LOW(-50000)

                        SETB  TR0
                        JNB     TF0,$

                        CLR    TF0

                        CLR    TR0

                        DJNZ  R6,LAP

                        RET

TABLE:         

DB      70H,71H,72H,73H,74H,75H,76H,77H,78H,79H

                        END

2.     Thí nghieäm 2:

a.     Vieát chöông trình hieån thò giaù trò 1234 leân led 7 ñoaïn

                    ORG   2000H

MAIN:

                        MOV   R7,#4

                        MOV   R5,#0

LOOP:           
MOV   DPTR,#TABLE

                        MOV   A,R5

                        MOVC  A,@A+DPTR 

                        ACALL  DL2MS

                        MOV   DPTR,#0000H

                        MOVX  @DPTR,A

                        INC     R5

                        DJNZ  R7,LOOP

                        SJMP   MAIN

DL2MS:                                 

                        MOV   TMOD,#01H

                        MOV   TH0,#HIGH(-2000)

                        MOV   TL0,#LOW(-2000)

                        SETB  TR0

                        JNB     TF0,$

                        CLR    TF0

                        CLR    TR0
                        RET

TABLE:         

DB  71H,0B2H,0D3H,0E4H   ;töông öùng vôùi giaù trò 1234 hieån thò  leân Led 1 2 3 4

                        END

b.     Thay ñoåi chöông trình ñeå giaù trò 1234 coù theå hieån thò thoâng qua maõ
BCD neùn chöùa trong caëp thanh ghi R7 & R6,Bieát R7 laø MSB

                    ORG   2000H

MAIN:

                        MOV   R7,#12H

                        MOV   R6,#34H

                        MOV   A,R7

                        ANL    A,#0F0H

                        SWAP A

                        ADD   A,#70H

                        MOV   R1,A   ; R1 chöa gía trò 71H töông öùng vôùi giaù trò 1 ñöôc xuaát ra led 1

                        MOV   A,R7
                        ANL    A,#0FH

                        ADD   A,#0B0H

                        MOV   R2,A   ; R2 chöa giaù trò 0B2H töông öùng vôùi giaù trò 1 ñöôïc xuaát ra led
2

                        MOV   A,R6

                        ANL    A,#0F0H

                        SWAP A

                        ADD   A,#0D0H

                        MOV   R3,A   ; R3 chöa giaù trò 0D3H töông öùng vôùi giaù trò 1 ñöôïc xuaát ra led
3

                        MOV   A,R6

                        ANL    A,#0FH

                        ADD   A,#0E0H

                        MOV   R4,A   ; R4 chöa giaù trò 0E4H tröông öùng vôùi giaù trò 1 ñöôc xuaát ra led
4

LAP:

                        MOV   DPTR,#0

                        MOV   A,R1

                        MOVX  @DPTR,A
                        ACALL  DL2MS

                        MOV   A,R2

                        MOVX  @DPTR,A

                        ACALL  DL2MS

                        MOV   A,R3

                        MOVX  @DPTR,A

                        ACALL  DL2MS

                        MOV   A,R4

                        MOVX  @DPTR,A

                        ACALL  DL2MS

                        SJMP   LAP

DL2MS:         

                        MOV   TMOD,#01H

                        MOV   TH0,#HIGH(-2000)

                        MOV   TL0,#LOW(-2000)

                        SETB  TR0

                        JNB     TF0,$
                        CLR    TF0

                        CLR    TR0

                        RET

                        END

3.     Thí nghieäm 3: Vieát chöông trình hieån thò giaù trò nhò phaân trong thanh ghi R7 leân led
7 ñoaïn

                        ORG   2000H

MAIN:           

                        MOV   R7,#254          ; naïp tuøy yù giaù trò R7 ñeå kieåm tra

                        MOV   B,#10

                        MOV   A,R7

                        DIV     AB

                        MOV   R4,B                ; R4 chöùa giaù trò haøng ñôn vò

                        MOV   B,#10

                        DIV     AB

                        MOV   R3,B                ; R3 chöùa giaù trò haøng chuïc

                        MOV   R2,A               ; R2 chöa giaù trò haøng traêm

LAP:
                        MOV   DPTR,#0

                        MOV   A,R2

                        ADD   A,#0B0H

                        MOVX  @DPTR,A

                        ACALL  DL2MS

                        MOV   A,R3

                        ADD   A,#0D0H

                        MOVX  @DPTR,A

                        ACALL  DL2MS

                        MOV   A,R4

                        ADD   A,#0E0H

                        MOVX  @DPTR,A

                        ACALL  DL2MS

                        SJMP   LAP

DL2MS:         

                        MOV   TMOD,#01H

                        MOV   TH0,#HIGH(-2000)
                        MOV   TL0,#LOW(-2000)

                        SETB  TR0

                        JNB     TF0,$

                        CLR    TF0

                        CLR    TR0

                        RET

                        END

BAØI TAÄP:

1.     Ñeám soá töø 0-99 (giaû söû <100) xuaát ra led 7 ñoaïn. Moãi laàn xuaát
caùch nhau

ORG   2000H

MAIN:

MOV   DPTR,#0

                        MOV   R7,#0

                        MOV   R6,#0

                        JNB     P1.0,NHAY                ; nhaûy khi nhaán P1.0


                        SJMP   MAIN

NHAY:

                        INC     R7

CJNE  R7,0AH,SKIP             ; nhaûy ñeán SKIP khi R7 # 0AH

                        MOV   R7,#0

                        INC     R6

SKIP:

MOV   A,R7

ADD   A,#0E0H

MOVX  @DPTR,A

ACALL  DL2MS

MOV   A,R6

ADD   A,#0D0H

MOVX  @DPTR,A

JB        P1.0,SKIP                   ; nhaûy ñeán SKIP khi khoâng nhaán P1.0

SJMP   NHAY

DL2MS:         
                        MOV   TMOD,#01H

                        MOV   TH0,#HIGH(-2000)

                        MOV   TL0,#LOW(-2000)

                        SETB  TR0

                        JNB     TF0,$

                        CLR    TF0

                        CLR    TR0

                        RET

                        END

2.     Vieát chöông trình ñeám töø 0-60 roài laëp laïi, moãi laàn ñeám caùch nhau 1s

ORG   2000H

                        MOV   R6,#0

                        MOV   R7,#0

LOOP1:

                        MOV   R5,#100          ; gaùn R5 = 100*(5ms+5ms) = 1s ñeå led xuaát ra coù söï löu


aûnh.

LOOP:
            MOV   DPTR,#0

                        MOV   A,R7

                        ADD   A,#0E0H

                        MOVX  @DPTR,A

                        ACALL  DL5MS

                        MOV   A,R6

                        ADD   A,#0D0H

                        MOVX  @DPTR,A

                        ACALL  DL5MS

                        DJNZ  R5,LOOP

                        INC     R7

                        CJNE  R7,#0AH,LOOP1

                        MOV   R7,#0

                        INC     R6

                        CJNE  R6,#6,LOOP1

                        MOV   R6,#0

                        SJMP   LOOP1
DL5MS:         

                        MOV   TMOD,#01H

                        MOV   TH0,#HIGH(-5000)

                        MOV   TL0,#LOW(-5000)

                        SETB  TR0

                        JNB     TF0,$

                        CLR    TF0

                        CLR    TR0

                        RET

                        END

BAØI 3: THÍ NGHIỆM HIỂN THỊ  BẰNG LCD

1.     Thí nghiệm 1: Hiển thị chuỗi “Hello world” leân LCD

ORG   2000H            

MAIN:
                  MOV   DPTR,#8000H

                  ACALL  CLEAR

                  ACALL  INIT_LCD                                                                                                               
     ACALL HIEN_CHU

                  ACALL  DELAY1   

                  SJMP   MAIN

;=============================================Chương trình con LCD

INIT_LCD:

MOV   A,#38H

                  ACALL  WRITECOM

                  MOV   A,#0EH

                  ACALL  WRITECOM

                  MOV   A,#06H

                  ACALL  WRITECOM

                  RET

CLEAR:

                  MOV   A,#01H
                  ACALL  WRITECOM                     

                  RET

WRITECOM:

                  SETB  P3.4

                  CLR    P3.5

                  MOVX  @DPTR,A

                  CLR    P3.4

                  ACALL  DELAY_50MS

                  RET

WRITETEXT:

                  SETB  P3.4

                  SETB  P3.5

                  MOVX  @DPTR,A

                  CLR    P3.4

                  ACALL  DELAY2

                  RET

HIEN_CHU:
                  MOV   A,#'H'

                  ACALL  WRITETEXT

                  MOV   A,#'E'

                  ACALL  WRITETEXT

                  MOV   A,#'L'

                  ACALL  WRITETEXT

                  MOV   A,#' 'O’

                  ACALL  WRITETEXT

                  MOV   A,#'’W'

                  ACALL  WRITETEXT

                  MOV   A,#'’O'

                  ACALL  WRITETEXT

                  MOV   A,#'’R'

                  ACALL  WRITETEXT

                  MOV   A,#'’L'

                  ACALL  WRITETEXT

                  RET
; ===============================================Chương trình DELAY

DELAY_50MS:                    

                  MOV   R3,#100

LOOP1:                     

MOV   R7,#250

                  DJNZ  R7,$

                  DJNZ  R3,LOOP1

                  RET

DELAY1:                                           ; delay 300ms

                  MOV   R6,#3

LOP1:            

MOV   R5,#200

LOP:                          

MOV   R4,#250

                  DJNZ  R4,$

                  DJNZ  R5,LOP

                  DJNZ  R6,LOP1
                  RET

DELAY2:                                                                              

                  MOV   R3,#1

LOOP2:                     

MOV   R7,#50

                  DJNZ  R7,$

                  DJNZ  R3,LOOP2

                  RET

END

BAØI TAÄP:

Viết chương trình hiển thị chuỗi: “DHBK TPHCM” chạy treân maøn hình, khi hết
maøn hình thì chạy ngược lại, lặp lại quaù trình treân

ORG   2000H            

MAIN:

                  MOV   DPTR,#8000H
                  MOV   R1,#6

                  ACALL  CLEAR

                  ACALL  INIT_LCD                                                                                                               
     ACALL HIEN_CHU

                  ACALL  DELAY     

LAP1:

                  MOV   A,#1CH                      ; dòch phaûi

                  ACALL  WRITECOM

                  ACALL  DELAY

                  DJNZ  R1,LAP1

                  MOV   R1,#6

LAP:

                  MOV   A,#18H                       ; dòch traùi

                  ACALL  WRITECOM

                  ACALL  DELAY

                  DJNZ  R1,LAP

                  MOV   R1,#6

                  SJMP   LAP1
 

;=============================================Chương trình con LCD

INIT_LCD:

MOV   A,#38H

                  ACALL  WRITECOM

                  MOV   A,#0EH

                  ACALL  WRITECOM

                  MOV   A,#06H

                  ACALL  WRITECOM

                  RET

CLEAR:

                  MOV   A,#01H

                  ACALL  WRITECOM                     

                  RET

WRITECOM:

                  SETB  P3.4
                  CLR    P3.5

                  MOVX  @DPTR,A

                  CLR    P3.4

                  ACALL  DELAY_50MS

                  RET

WRITETEXT:

                  SETB  P3.4

                  SETB  P3.5

                  MOVX  @DPTR,A

                  CLR    P3.4

                  ACALL  DELAY2

                  RET

HIEN_CHU:

                  MOV   A,#'D'

                  ACALL  WRITETEXT

                  MOV   A,#'H'

                  ACALL  WRITETEXT
                  MOV   A,#'B'

                  ACALL  WRITETEXT

                  MOV   A,#'K'

                  ACALL  WRITETEXT

                  MOV   A,#' '

                  ACALL  WRITETEXT

                  MOV   A,#'T'

                  ACALL  WRITETEXT

                  MOV   A,#'P'

                  ACALL  WRITETEXT

                  MOV   A,#'H'

                  ACALL  WRITETEXT

                  MOV   A,#'C'

                  ACALL  WRITETEXT

                  MOV   A,#'M'

                  ACALL  WRITETEXT

                  RET
; ===============================================Chương trình DELAY

DELAY_50MS:                    

                  MOV   R3,#100

LOOP1:                     

MOV   R7,#250

                  DJNZ  R7,$

                  DJNZ  R3,LOOP1

                  RET

DELAY:

                  MOV   R6,#3

LOP1:            

MOV   R5,#200

LOP:                          

MOV   R4,#250

                  DJNZ R4,$

                  DJNZ  R5,LOP

                  DJNZ  R6,LOP1
                  RET

DELAY2:                                          

                  MOV   R3,#1

LOOP2:                     

MOV   R7,#50

                  DJNZ  R7,$

                  DJNZ  R3,LOOP2

                  RET

END

BAØI 4: THÍ NGHIEÄM GIAO TIEÁP QUA COÅNG NOÁI TIEÁP

1.     Thí nghiệm 1: Phaùt chuỗi “Hello World” ra port nối tiếp

                        ORG   2000H

MAIN:

                        MOV   SCON,#52H

                        MOV   TMOD,#20H
                        MOV   TH1,#-3

                        SETB  TR1

                        MOV   DPTR,#TABLE

LAP:  

CLR    A

                        MOVC  A,@A+DPTR

                        INC     DPTR

                        ACALL  OUT_CHAR                     

                        JNZ     LAP

                        SJMP   $         

OUT_CHAR:                                     ;phaùt kí tự ra port nối tiếp

                        JNB     TI, $   

                        CLR    TI

                        MOV   SBUF, A

                        RET

TABLE:

                        DB      'Hello, world',0           ; phaùt tới khi gặp kí tự 0 thì dừng


                        END

2.     Thí nghiệm 2: Nhận kí tự từ port nối tiếp hiển thị ra LCD (tốc ñộ port chọn
laø 9600pbs)

                        ORG   2000H

EN       BIT      P3.4

RS       BIT      P3.5

MAIN:                                                           

                        MOV   DPTR, #8000H

                        ACALL  LCD_INIT

                        ACALL  UART_INIT

                        ACALL  CLEAR

LOOP:           

MOV   R4,#16

LAP1:            

                        ACALL  IN_CHAR

                        ACALL  WRITE_TEXT
                        DJNZ  R4,LAP1

MOV   R4,#16

                        MOV   A,#0C0H                    ;ñeå con troû xuoáng haøng

                        ACALL  WRITE_COM

LAP2:            

                        ACALL  IN_CHAR

                        ACALL  WRITE_TEXT

                        DJNZ  R4,LAP2

                        ACALL  CLEAR

                        SJMP   LOOP

;============================================ Chương trình con port nối tiếp

UART_INIT: 

                        MOV   SCON,#52H

                        MOV   TMOD,#20H

                        MOV   TH1,#-3

                        SETB  TR1

                        RET
OUT_CHAR:

                        JNB     TI, $                            ;khi phaùt heát TI=1

                        CLR    TI

                        MOV   SBUF, A

                        RET

IN_CHAR:

                        JNB     RI, $

                        CLR    RI

                        MOV   A, SBUF

RET

;============================================== Chương trình con LCD

LCD_INIT:

                        MOV   A,#38H

                        ACALL  WRITE_COM

                        MOV   A,#0EH

                        ACALL  WRITE_COM

                        MOV   A,#06H
                        ACALL  WRITE_COM

                        RET

CLEAR:

                        MOV   A,#01H

                        ACALL  WRITE_COM

                        RET

WAIT_LCD: 

                        MOV   R7, #100

DEL1: 

                        MOV   R6, #250

                        DJNZ  R6, $

                        DJNZ  R7, DEL1

                        RET

WRITE_TEXT:         

                        ACALL  WAIT_LCD

                        SETB  RS

                        MOVX  @DPTR, A
                        SETB  EN

                        CLR    EN

                        RET

WRITE_COM:          

                        ACALL  WAIT_LCD

                        CLR    RS

                        MOVX  @DPTR, A

                        SETB  EN

                        CLR    EN

                        RET

                        END

3.     Thí nghiệm 3: Nhận kí tự từ port nối tiếp hiển thị ra LCD ñồng thời phaùt ra
lại port nối tiếp (tốc ñộ port chọn laø 9600pbs)

ORG   2000H

EN       BIT      P3.4

RS       BIT      P3.5
 

MAIN:                                                ; chương trình chính

                  MOV   DPTR, #8000H

                  ACALL  LCD_INIT

                  ACALL  UART_INIT

                  ACALL  CLEAR

LOOP:           

MOV   R4,#16                        ; gaùn R4 = 16 ñể nhập chữ đñủ treân haøng 1 rồi xuống haøng  2

LAP1:            

                  ACALL  IN_CHAR

                  ACALL  WRITE_TEXT

                  ACALL  OUT_CHAR

                  DJNZ R4,LAP1

                  MOV   R4,#16

                  MOV   A,#0C0H        ; ñeå con troû xuoáng haøng

                  ACALL  WRITE_COM
LAP2:            

                  ACALL  IN_CHAR

                  ACALL  WRITE_TEXT

                  ACALL  OUT_CHAR

                  DJNZ  R4,LAP2

                  ACALL  CLEAR

                  SJMP   LOOP

;========================================= Chương trình con port nối tiếp

UART_INIT:                         ; khởi đñộng port nối tiếp

                  MOV   SCON,#52H

                  MOV   TMOD,#20H

                  MOV   TH1,#-3

                  SETB  TR1

                  RET

 
OUT_CHAR:                         ; phaùt kí tự ra port nối tiếp

                  JNB     TI, $                ;khi phaùt heát TI = 1

                  CLR    TI

                  MOV   SBUF, A

                  RET

IN_CHAR:                             ; thu kí tự từ port nối tiếp

                  JNB     RI, $

                  CLR    RI

                  MOV   A, SBUF

                  RET

;============================================== Chương trình con LCD

LCD_INIT:                             ; khởi đñộng LCD

                  MOV   A,#38H

                  ACALL  WRITE_COM

                  MOV   A,#0EH

                  ACALL  WRITE_COM
                  MOV  A,#06H

                  ACALL  WRITE_COM

                  RET

CLEAR:

                  MOV   A,#01H

                  ACALL  WRITE_COM

                  RET

WAIT_LCD:                          ; chương trình tạo delay chờ cho LCD

                  MOV   R7, #100

DEL1: 

                  MOV   R6, #250

                  DJNZ  R6, $

                  DJNZ  R7, DEL1

                  RET

 
WRITE_TEXT:                      ; ghi kí tự ra LCD

                  ACALL  WAIT_LCD

                  SETB  RS

                  MOVX  @DPTR, A

                  SETB  EN

                  CLR    EN

                  RET

WRITE_COM:                       ; ghi lệnh ra LCD

                  ACALL  WAIT_LCD

                  CLR    RS

                  MOVX  @DPTR, A

                  SETB  EN

                  CLR    EN

                  RET

                  END

 
BAØI TAÄP:

Viết chương trình nhập kí töï töø baøn phím veà laøm coâng vieäc sau ñaây:

a.     Kiểm tra xem kí tự nhận ñược laø A-Z hoặc a-z thì hiển thị leân LCD

b.     Kiểm tra xem kí tự nhận nhaán ñöôïc số từ 0-9 thì hiển thị qua led 7 ñoạn

c.     Nếu nhấn phím Enter thì xuống haøng maõ ASCII 13H

d.     Nếu nhấn phím ESC thì xoùa maøn hình LCD maõ ASCII 27H

ORG   2000H

EN       BIT      P3.4

RS       BIT      P3.5

MAIN:

                        MOV   DPTR, #8000H

                        ACALL  LCD_INIT

                        ACALL  UART_INIT

                        ACALL  CLEAR

LOOP:           

MOV   R4,#16
 

LAP1:            

                        ACALL  IN_CHAR

                        ACALL  NHANKYTU

                        ACALL  OUT_CHAR

                        DJNZ  R4,LAP1

                        MOV   R4,#16

                        MOV   A,#0C0H                    ;ñeå con troû xuoáng haøng

                        ACALL  WRITE_COM

LAP2:            

                        ACALL  IN_CHAR

                        ACALL  NHANKYTU

                        ACALL  OUT_CHAR

                        DJNZ  R4,LAP2

                        ACALL  CLEAR

                        SJMP   LOOP

;=======================================Chương trình con Port nối tiếp


UART_INIT: 

                        MOV   SCON,#52H

                        MOV   TMOD,#20H

                        MOV   TH1,#-3

                        SETB TR1

                        RET

OUT_CHAR:

                        JNB     TI, $                            ;khi phaùt heát TI = 1

                        CLR    TI

                        MOV   SBUF, A

                        RET

IN_CHAR:

                        JNB     RI, $

                        CLR    RI

                        MOV   A, SBUF

                        RET

;========================================== Chương trình con LCD


LCD_INIT:

                        MOV   A,#38H

                        ACALL  WRITE_COM

                        MOV   A,#0EH

                        ACALL  WRITE_COM

                        MOV   A,#06H

                        ACALL  WRITE_COM

                        RET

CLEAR:

                        MOV   A,#01H

                        ACALL  WRITE_COM

                        RET

WAIT_LCD: 

                        MOV   R7, #100

DEL1: 

                        MOV R6, #250


                        DJNZ R6, $

                        DJNZ R7, DEL1

                        RET

WRITE_TEXT:         

                        ACALL  WAIT_LCD

                        SETB  RS

                        MOVX  @DPTR, A

                        SETB  EN

                        CLR    EN

                        RET

WRITE_COM:          

                        ACALL  WAIT_LCD

                        CLR    RS

                        MOVX  @DPTR, A

                        SETB  EN
                        CLR    EN

                        RET

;=========Chương trình con kiểm tra kí tự nhận ñược từ Port nối tiếp veà xử lí theo ñề baøi

NHANKYTU:                       

                        PUSH ACC

;....................................................................................kiểm tra  ESC VA ENTER

                        CJNE  A,#13,SKIP1

                        MOV   A,#0C0H                    ;ñeå con troû xuoáng haøng

                        ACALL  WRITE_COM

                        SJMP   THOAT

SKIP1:           

CJNE  A,#27,TIEP

                        ACALL  CLEAR

                        SJMP   THOAT

;............................................................................................................ki ểm tra  0-9

           
TIEP:  

CJNE  A,#30H,$+3

                        JNC     KTRA3

                        SJMP   THOAT

KTRA3:

                        CJNE  A,#3AH,$+3

                        JC        XUAT_LED

;............................................................................................................ kiểm tra  A-Z 

                        CJNE  A,#41H,$+3

                        JNC     KTRA1

                        SJMP   THOAT

KTRA1:

                        CJNE  A,#5BH,$+3

                        JC        XUAT_LCD              ; C=1 thì A < 5AH

;............................................................................................................ki ểm tra  a-z  

                        CJNE  A,#61H,$+3
                        JNC     KTRA2

                        SJMP   THOAT

KTRA2:

                        CJNE  A,#7BH,$+3

                        JC        XUAT_LCD

XUAT_LED:

                        PUSH  DPH

                        PUSH  DPL

                        MOV   DPTR,#0

                        ANL    A,#0FH

                        ADD   A,#0E0H

                        MOVX  @DPTR,A

                        ACALL  DELAY_2MS

                        POP     DPL

                        POP     DPH

                        SJMP   THOAT         
 

XUAT_LCD:

                        ACALL  WRITE_TEXT

THOAT:        

POP     ACC

                        RET

;========================Chương trình con tạo trễ tạo sự lưu ảnh treân led 7 ñoạn

DELAY_2MS:

                        MOV   R1,#4

LAP9:

                        MOV   R2,#250

                        DJNZ  R2,$

                        DJNZ  R1,LAP9

                        RET

                        END

 
BAØI 5: THÍ NGHIỆM ÑIEÀU KHIEÅN ADC

1.     Thí nghieäm 1: Vieát chöông trình thöïc hieän ñoïc ñieän aùp cuûa bieán trôû
treân keânh 0 vaø hieån thò ra led 7 ñoaïn.

            ORG   2000H

MAIN:  

 MOV  DPTR,#4000H                        ;ñòa chæ khoái ADC

            MOV   A,#0

            MOVX  @DPTR,A

            ACALL  DELAY_100US

            MOVX  A,@DPTR

            MOV   DPTR,#0000H

            MOV   B,#10

            DIV     AB

            MOV   R7,B

            MOV   B,#10

            DIV     AB

            ORL    A,#0B0H
            MOVX  @DPTR,A  

            ACALL  DELAY_1MS

            MOV   A,B

            ORL    A,#0D0H

            MOVX  @DPTR,A

            ACALL  DELAY_1MS

            MOV   A,R7

            ORL    A,#0E0H

            MOVX  @DPTR,A

            ACALL  DELAY_1MS

            SJMP   MAIN

DELAY_100US:

            MOV   R6,#200

            DJNZ  R6,$

            RET

DELAY_1MS:

MOV   R6,#5
LOOP:           

MOV   R5,#100

            DJNZ  R5,$

            DJNZ  R6,LOOP

            RET

            END

2.     Thí nghieäm 2: Vieát chöông trình ñoïc ñieän aùp cuûa keânh 0 vaø hieån thò
leân LCD

ORG   2000H

MAIN:  

 MOV  DPTR,#4000H                        ;ñòa chæ khoái ADC

            MOV   A,#0

            MOVX  @DPTR,A

            ACALL  DELAY_100US

            MOVX  A,@DPTR

            MOV   B,#10
            DIV     AB

            MOV   R2,B

            MOV   B,#10

            DIV     AB

                  MOV   DPTR,#8000H

                  ACALL  CLEAR

                  ACALL  INIT_LCD                                                                                                               
     ACALL HIEN_CHU

                  ACALL  DELAY1   

                  SJMP   MAIN

;=============================================Chương trình con LCD

INIT_LCD:

MOV   A,#38H

                  ACALL  WRITECOM

                  MOV   A,#0EH

                  ACALL  WRITECOM

                  MOV   A,#06H

                  ACALL  WRITECOM
                  RET

CLEAR:

                  MOV   A,#01H

                  ACALL  WRITECOM                     

                  RET

WRITECOM:

                  SETB  P3.4

                  CLR    P3.5

                  MOVX  @DPTR,A

                  CLR    P3.4

                  ACALL  DELAY_50MS

                  RET

WRITETEXT:

                  SETB  P3.4

                  SETB  P3.5

                  MOVX  @DPTR,A
                  CLR    P3.4

                  ACALL  DELAY2

                  RET

HIEN_CHU:

                  ACALL  WRITETEXT

                  MOV   A,B

                  ACALL  WRITETEXT

                  MOV   A,R2

                  ACALL  WRITETEXT

                  RET

; ===============================================Chương trình DELAY

DELAY_50MS:                    

                  MOV   R3,#100

LOOP1:                     

MOV   R7,#250

                  DJNZ  R7,$

                  DJNZ  R3,LOOP1
                  RET

DELAY1:                                           ; delay 300ms

                  MOV   R6,#3

LOP1:            

MOV   R5,#200

LOP:                          

MOV   R4,#250

                  DJNZ  R4,$

                  DJNZ  R5,LOP

                  DJNZ  R6,LOP1

                  RET

DELAY2:                                                                              

                  MOV   R3,#1

LOOP2:                     

MOV   R7,#50

                  DJNZ  R7,$

                  DJNZ  R3,LOOP2
                  RET

DELAY_100US:

            MOV   R6,#200

            DJNZ  R6,$

            RET

END

BAØI 6: THÍ NGHIỆM VÔÙI LED MA TRAÄN

1.     Thí nghieäm 1: Vieát chöông trình hieån thò kí töï A leân LED ma traän.

                        ORG   2000H

 LOOP:           

MOV   A,#0

                        MOV   R7,#8

 LAP:  

MOV   R4,A

                        MOV   DPTR,#COT                          ;queùt coät cuûa LED ma traän


                        MOVC  A,@A+DPTR

                        ACALL  XUAT_COT

                        MOV   A,R4

                        MOV   DPTR,#HANG

                        MOVC  A,@A+DPTR

                        ACALL  XUAT_HANG                   ;queùt haøng cuûa LED ma traän

                        ACALL  DL2MS

                        MOV   A,R4

                        INC     A

                        DJNZ  R7,LAP

                        SJMP   LOOP

XUAT_COT:

                        MOV   DPTR,#0C00H                       ;ñòa chæ coät cuûa LED ma traän

                        MOVX  @DPTR,A

                        RET

XUAT_HANG:

                        MOV   DPTR,#0A00H                       ;ñòa chæ haøng cuûa LED ma traän


                        MOVX  @DPTR,A

                        RET

DL2MS:

                        MOV   R6,#4

LAP1: 

MOV   R5,#250

                        DJNZ  R5,$

                        DJNZ  R6,LAP1

                        RET

COT:   DB      01H, 02H, 04H, 08H, 10H, 20H, 40H, 80H

HANG:DB      03H, 0EDH, 0EEH, 0EEH, 0EDH, 03H, 0FFH, 0FFH

                        END

2.     Thí nghieäm 2: Vieát chöông trình chaïy chöõ A B töø phaûi sang traùi hieån
thò leân LED ma traän

            ORG   2000H

 TT:    
MOV   R4,#10

            MOV   R0,#0

            MOV   DPTR,#CHAR

            MOV   R5,#24

LOOP1:         

MOV   R2,DPH

            MOV   R3,DPL

LOOP:

            MOV   DPH,R2

            MOV   DPL,R3

            MOV   R1,#8

            MOV   A,#00000001B

LAP:  

ACALL  HT_COT

            PUSH  ACC

            CLR    A

            MOVC  A,@A+DPTR
            ACALL  HT_HANG

            INC     DPTR

            POP     ACC

            RL       A

            DJNZ  R1, LAP

            DJNZ  R4,LOOP

            MOV   R4,#10

            INC     R0

            MOV   A,R0

            MOV   DPTR,#CHAR

            ADD   A,DPL

            MOV   DPL,A

            DJNZ  R5,LOOP1

            SJMP   TT

CHAR:

DB    0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,03H, 0EDH, 0EEH,

DB    0EEH, 0EDH, 03H, 0FFH, 0FFH,00H, 76H, 76H, 76H, 89H, 0FFH, 0FFH,
DB         0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
HT_COT:

            PUSH  DPH

            PUSH  DPL

            MOV   DPTR,#0C000H

            MOVX  @DPTR,A

            POP     DPL

            POP     DPH

            RET

HT_HANG:

            PUSH  DPH

            PUSH  DPL

            MOV   DPTR,#0A000H

            MOVX  @DPTR,A

            ACALL  DELAY_1MS

            POP     DPL

            POP     DPH

            RET
DELAY_1MS:

            MOV   R7,#5

DL:     

MOV   R6,#100

            DJNZ  R6,$

            DJNZ  R7,DL

            RET

            END

BAØI 7: THÍ NGHIỆM VÔÙI ÑOÄNG CÔ DC

1.     Thí nghieäm 1: Vieát chöông trình cho pheùp ñoäng cô chaïy theo chieàu
thuaän trong voøng 2s, nghæ 2s, chaïy theo chieàu ngöôïc 2s, nghæ 2s vaø laëp
laïi.

            ORG   2000H

MAIN:           

MOV   DPTR,#0E000H                     ;ñòa chæ cuûa ñoäng cô


LOOP:

            MOV   A,#02H                                   ;ñoäng cô quay ngöôïc (theo quy öôùc)

            MOVX  @DPTR,A

            ACALL  DL2S

            MOV   A,#00H                                   ;ñoäng cô döøng

            MOVX  @DPTR,A

            ACALL  DL2S

            MOV   A,#01H                                   ;ñoäng cô quay thuaän (theo quy öôùc)

            MOVX  @DPTR,A

            ACALL  DL2S

            MOV   A,#00H

            MOVX  @DPTR,A

            ACALL  DL2S

            SJMP   LOOP

DL2S:

            MOV   R5,#40

LAP1:
            MOV   R6,#100

LAP:  

MOV   R7,#250

            DJNZ  R7,$

            DJNZ  R6,LAP

            DJNZ  R5,LAP1

            RET

            END

2.     Thí nghieäm 2: Vieát chöông trình ñieàu khieån ñoäng cô vôùi phöông phaùp
PWM, trong ñoù thôøi gian “baät” cuûa xung laø 50% chu kyø.

            ORG   2000H

            LJMP  MAIN

            ORG   200BH                                    ;ñòa chæ ngaét timer 0

            LJMP  ISRT0

            ORG   201BH                                    ;ñòa chæ ngaét timer 1

            LJMP  ISRT1
MAIN:           

MOV   DPTR,#0E000H         ;ñòa chæ cuûa ñoäng cô

            MOV   A,#01H

            MOVX  @DPTR,A

            MOV   TMOD,#11H

            SETB TF0

            MOV   IE,#8AH                     ;cho pheùp ngaét timer 0 vaø timer 1

            SJMP   $

ISRT0:                                                            ;ngaét timer 0 taïo chu kyø 1000us

SETB  ACC.0

            CLR    ACC.1

            MOVX  @DPTR,A

            CLR    TR0

            MOV   TH0,#HIGH(-1000)

            MOV   TL0,#LOW(-1000)

            SETB  TR0

            CLR    TR1
            MOV   TH1,#HIGH(-500)

            MOV   TL1,#LOW(-500)

            SETB  TR1

            RETI

ISRT1:                                                            ;ngaét timer 1 taïo ñoä roäng xung 500us

CLR    ACC.0

            CLR    ACC.1

            MOVX  @DPTR,A

            RETI

            END

3.     Thí nghieäm 3: Vieát chöông trình ñieàu khieån ñoäng cô vôi phöông phaùp
PWM, trong ñoù thôøi gian “baät” cuûa xung laàn löôït laø 20%, 50%, 80% chu
kyø. Moãi ñoä roäng xung caùch nhau 5s. Qui trình ñöôïc laëp laïi lieân tuïc.

            ORG   2000H

            LJMP  MAIN

            ORG   200BH

            LJMP  ISRT0
            ORG   201BH

            LJMP  ISRT1

MAIN:           

MOV   R7,#250

            MOV   R6,#20

            MOV   R3,#0

            MOV   DPTR,#0E000H

            MOV   A,#01H

            MOVX  @DPTR,A

            MOV   TMOD,#11H

            SETB TF0

            MOV   IE,#8AH

            SJMP   $

ISRT0:           

CJNE  R3,#0,NHAY

            DJNZ  R7,LOP

            DJNZ  R6,LOP1
            INC     R3

            MOV   R6,#20

MOV   R7,#250

            SJMP   LOP2

LOP1:

MOV   R7,#250

LOP:  

SETB  ACC.0

            CLR    ACC.1

            MOVX  @DPTR,A

            CLR    TR0

            MOV   TH0,#HIGH(-1000)

            MOV   TL0,#LOW(-1000)

            SETB  TR0

            CLR    TR1

            MOV   TH1,#HIGH(-200)

            MOV   TL1,#LOW(-200)
            SETB  TR1

            SJMP   THOAT

NHAY:          

CJNE  R3,#1,NHAY1

            DJNZ  R7,LOP2

            DJNZ  R6,LOP3

            INC     R3

            MOV   R6,#20

            MOV   R7,#250

            SJMP   LOP2

LOP3:

MOV   R7,#250

LOP2:

            SETB  ACC.0

            CLR    ACC.1

            MOVX  @DPTR,A

            CLR    TR0
            MOV   TH0,#HIGH(-1000)

            MOV   TL0,#LOW(-1000)

            SETB  TR0

            CLR    TR1

            MOV   TH1,#HIGH(-500)

            MOV   TL1,#LOW(-500)

            SETB  TR1

            SJMP   THOAT

NHAY1:

            DJNZ  R7,LOP4

            DJNZ  R6,LOP5

            MOV   R3,#0

            MOV   R6,#20

            MOV   R7,#250

            SJMP   THOAT

LOP5:

MOV   R7,#250
LOP4:

            SETB  ACC.0

            CLR    ACC.1

            MOVX  @DPTR,A

            CLR    TR0

            MOV   TH0,#HIGH(-1000)

            MOV   TL0,#LOW(-1000)

            SETB  TR0

            CLR    TR1

            MOV   TH1,#HIGH(-800)

            MOV   TL1,#LOW(-800)

            SETB  TR1

            SJMP   THOAT

THOAT:

RETI

ISRT1:

            CLR    ACC.0
            CLR    ACC.1

            MOVX  @DPTR,A

            RETI

            END

4.     Thí nghieäm 4: Vieát chöôg trình thöïc hieän vieäc taêng hoaëc giaûm daàn
toác ñoä ñoäng cô nhôø hai nuùt nhaán P1.4 vaø P1.5. Khi khoâng nhaán nuùt,
toác ñoä ñoäng cô khoâng ñoåi. Khi nuùt P1.4 ñöôïc nhaán vaø giöõ thì toác ñoä
ñoäng cô taêng daàn. Khi nuùt P1.5 ñöôïc nhaán vaø giöõ thì toác ñoä ñoäng cô
giaûm daàn.

ORG   2000H

MAIN:

            MOV   DPTR,#0E000H

            MOV   R3,#5

            MOV   R4,#5 

KT:     

JNB     P1.4,NHAY1                          ;nhaán P1.4 thì ñeán NHAY1

            MOV   A,#01H

            MOVX  @DPTR,A

            ACALL  DLC
            MOV   A,#00H

            MOVX  @DPTR,A

            ACALL  DLT           

           

            JNB     P1.5,NHAY2                          ;nhaán P1.5 thì ñeán NHAY2

            MOV   A,#01H

            MOVX  @DPTR,A

            ACALL   DLC

            MOV   A,#00H

            MOVX  @DPTR,A

            ACALL  DLT

            SJMP   KT

NHAY1:

INC     R3

            DEC    R4

            MOV   A,#01H

            MOVX  @DPTR,A
            ACALL  DLC

            MOV   A,#00H

            MOVX  @DPTR,A

            ACALL  DLT

            SJMP   KT

NHAY2:        

INC     R4

            DEC    R3

SKIP2:

            MOV   A,#01H

            MOVX  @DPTR,A

            ACALL   DLC

            MOV   A,#00H

            MOVX  @DPTR,A

            ACALL  DLT

            SJMP   KT      

DLC:
            MOV   R6,03H

LAP1:

MOV   R5,#100

            DJNZ  R5,$

            DJNZ  R6,LAP1

            RET

DLT:  

            MOV   R6,04H

LAP:  

MOV   R5,#100

            DJNZ  R5,$

            DJNZ  R6,LAP

            RET

            END

THÍ NGHIEÄM VI XÖÛ LYÙ PHAÀN PIC 16F690

 
BAØI 1: THÍ NGHIỆM VÔÙI LED ÑÔN

1. Thí nghieäm 1: Vieát chöông trình chôùp taét LED ñöôïc noái ñeán chaân RC2
cuûa PIC 16F690 vôùi taàn soá chôùp taét laø 1Hz.
 

#include <16F690.h>

#use delay(clock = 4000000)

#use fast_io(c)

void main()

   set_tris_C(0x00);

   output_C(0x00);

   while(1)

   {

      output_high(pin_C0);

      delay_ms(500);

      output_low(pin_C0);
      delay_ms(500);

   }

1. Thí nghieäm 2: Vieát chöông trình thöïc hieän maïch LED chaïy ñöôïc noái ñeán
4 LED port C cuûa PIC 16F690 nhö sau, bieát thôøi gian giöõa caùc traïng thaùi
S (saùng) vaø T (taét) la 0.5s: STTT – TSTT – TTST – TTTS – STTT - .....

#include <16F690.h>

#use delay(clock = 4000000)

#use fast_io(c)

int   const a[4] = {0x08, 0x04, 0x02, 0x01);

void main()

   int i;

  set_tris_C(0x00);

              output_C(0x00);
            while(1)

   { 

      while(i<4)

        {

            port_C = a[i];

            delay_ms(500);

            i++;

        }

       i = 0; 

   }

1. Thí nghieäm 3: Vieát chöông trình thöïc hieän maïch ñeám leân baét ñaàu töø 0
ñeán 15, keát quaû xuaát ra 4 LED ñôn ñöôïc noái ñeán port C cuûa PIC16F690.
Giaù trò maïch ñeám taêng leân 1 ñôn vò caùch nhau 1s.

#include <16F690.h>

#use delay(clock = 4000000)

#use fast_io(c)
int   const a[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

void main()

   int i;

   set_tris_C(0x00);

   output_C(0x00);

   while(1)

   { 

      while(i<16)

       {

         output_C(a[i]);

         delay_ms(1000);

         i++;

       }

      i = 0; 

   }
}

1. Thí nghieäm 4: Vieát chöông trình thöïc hieän maïch ñeám leân baét ñaàu töø 0
ñeán 15, keát quaû xuaát ra 4 LED ñôn ñöôïc noái ñeán port C cuûa PIC16F690.
Maïch chæ ñeám khi SW1 ñöôïc nhaán.
 

#include <16F690.h>

#use delay(clock = 4000000)

#use fast_io(C)

int   const a[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

void main()

   int i;

   set_tris_C(0x00);

   output_C(0x00);

   while(1)

     { 

         while(i<16)

           {
               if (input(pin_a0)==0)

                  {

                      output_C(a[i]);

                      delay_ms(1000);

                      i++;

                  }

            }

         i = 0; 

       }

                          }

1. Thí nghieäm 5: Vieát chöông trình thöïc hieän maïch ñeám leân baét ñaàu töø 0
ñeán 15, keát quaû xuaát ra 4 LED ñôn ñöôïc noái ñeán port C cuûa PIC16F690.
Trong quaù trình ñeám neáu SW1 ñöôïc nhaán thì seõ thöïc hieän ñeám ngöôïc taïi
giaù trò ñoù veà 0. Sau ñoù laïi thöïc hieän ñeám leân töø 0.
#include <16F690.h>

#use delay(clock = 4000000)

#use fast_io(c)

#use fast_io(a)

int   const a[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};


 

void main()

     int i;

     set_tris_C(0x00);

     output_C(0x00);

     while(1)

         { 

              while(i<16)            

                 { 

                     output_C(a[i]);       

                     delay_ms(1000);                        

                     if (input(pin_a0)==0)

                        {

     lap:                 if (i==0)

                            {

                                 while(i<16)
                                      {

                                           output_C(a[i]);       

                                           delay_ms(1000);       

                                           i++;

                                      }

                            }

                            else                                      //i>0

                            {

                                 while(i!=0)

                                      {                                          

                                           output_c(a[i]);

                                           delay_ms(500);

                                           i--;

                                      }

                            } 

                          }

             else                                                     //tang i tiep khi khong nhan


               i++;  

           }

         i = 0;

         } goto lap;

                          }

BAØI 2: THÍ NGHIỆM VÔÙI LED 7 ÑOAÏN

1. Thí nghieäm 1: Vieát chöông trình thöïc hieän maïch ñeám leân töø 0 ñeán F (soá
Hex), keát quaû xuaát ra LED 7 ñoaïn, giaù trò boä ñeám taêng leân 1 ñôn vò
caùch nhau moãi 0.5s

#include<16F690.h>

#use delay(clock = 4000000)

#use fast_io(c)

#use fast_io(a)

int const a[16] = {0x06,0x04,0x07,0x07,0x05,0x03,0x03,0x06,0x07,0x07,0x07,

0x01,0x02, 0x05,0x03,0x03} ;
int const c[16] = {0x0f,0x01,0x06,0x03,0x09,0x0b,0x0f,0x01,0x0f,0x0b,0x0d,

0x0f,0x0e, 0x07,0x0e,0x0c} ;

void main()

  {  

      int   i = 0;

        set_tris_c(0);

        set_tris_a(0);

        while(1)

         { 

            while(i<16)

               {

                  output_c(c[i]);

                  output_a(a[i]);

                  delay_ms(500);

                  i++;

               }
               i = 0;

         }

  } 

BAØI 3: THÍ NGHIỆM ÑIEÀU KHIEÅN ADC

1. Thí nghieäm 1: Vieát chöông trình ñoïc giaù trò ñieän aùp cuûa bieán trôû RP1
vaø xuaát möùc ñieän aùp töông öùng vôùi giaù trò ñieän aùp ñoïc ñöôïc ra LED
(duøng ADC vôùi ñoä phaân giaûi 10 bits) ñöôïc cho bôûi baûng sau:
Möùc (ngoõ ra boä ADC) Giaù trò hieån thò treân LED

0 – 63 0

64 – 127 1

128 – 191 2

... ...

832 – 895 D

896 – 959 E

960 – 1023 F

 
 

#include <16f690.h>

#include <math.h>

#use  delay(clock = 4000000)

#use  fast_io(c)

#use fast_io(a)

void main()

int16 adc;

     set_tris_c(0);

     set_tris_a(1);

     setup_adc(adc_clock_internal);

     setup_adc_ports(sAN0);

     set_adc_channel(0);

     delay_us(10);

     while(1)
      { 

          adc = read_adc();

          adc = adc/16;

          output_c(adc);

      }

1. Thí nghieäm 2: Vieát chöông trình ñoïc giaù trò ngoõ ra ADC vôùi ñoä phaân
giaûi 10 bits duøng ñeå ñieàu khieån thôøi gian chôùp taét LED ñôn ñöôïc noái
ñeán chaân RC0 cuûa PIC 16F690.
 

#include <16f690.h>

#include <math.h>

#use  delay(clock = 4000000)

#use  fast_io(c)

#use fast_io(a)

void main()


                             int adc;

      set_tris_c(0);

      set_tris_a(1);

      setup_adc(adc_clock_internal);

      setup_adc_ports(sAN0);

      set_adc_channel(0);

      delay_us(10);

      while(1)

       { 

           adc = read_adc();

           adc = adc*4;

           output_c(0xff);

           delay_ms(adc+100);

           output_c(0x00);

           delay_ms(adc+100);

      }

You might also like