Professional Documents
Culture Documents
THC HNH VI X L
BM K thut My tnh
2009
Gii thiu
Mc Lc
Mc Lc .............................................................................................................................. 1 Bi 1 : Gii thiu MPLAB IDE v KIT PIC .................................................................. 1 1.1 Mi trng pht trin MPLAB ................................................................................. 1 1.2 Np file hex vo vi iu khin PIC........................................................................... 8 1.3 Debug dng MpLab SIM ........................................................................................ 12 1.4 Debug onchip dng Mplab ICD2............................................................................ 15 1.5 Bi tp ..................................................................................................................... 15 Bi 2 : Kho st cng xut nhp ................................................................................... 16 2.1 Kin thc lin quan................................................................................................. 16 2.1.1 Cc thanh ghi iu khin cng xut nhp ........................................................ 16 2.1.2 Kt ni mch .................................................................................................... 16 2.2 Cc bc hin thc yu cu 1 ................................................................................. 18 2.3 Chng trnh mu yu cu 1................................................................................... 20 2.4 Cc bc hin thc yu cu 2 ................................................................................. 21 2.5 Chng trnh mu yu cu 2................................................................................... 22 2.6 Bi tp ..................................................................................................................... 23 Bi 3 : Kho st c ch ngt qung, giao tip LCD k t ............................................ 24 3.1 Kin thc lin quan................................................................................................. 24 3.1.1 Tm tt cc thanh ghi iu khin ngt ............................................................. 24 3.2 Cc bc hin thc yu cu 1 ................................................................................. 25 3.3 Chng trnh mu yu cu 1................................................................................... 28 3.4 LCD k t 2x16 ...................................................................................................... 31 3.4.1 Hnh dng v ngha cc chn: ....................................................................... 31 3.4.2 T chc vng nh ca LCD............................................................................. 32 3.4.3 Cc lnh giao tip vi LCD ............................................................................. 34 3.4.4 Khi to LCD................................................................................................... 35 3.5 Cc bc hin thc yu cu 2 ................................................................................. 36 3.6 Bi tp ..................................................................................................................... 41 Bi 4 : Kho st b nh thi ........................................................................................ 42 4.1 Cc bc hin thc yu cu 1 ................................................................................. 42 4.2 Chng trnh mu ................................................................................................... 46 4.3 Bi tp ..................................................................................................................... 48 Bi 5 : K thut qut ma trn phm .............................................................................. 49 5.1 Kt ni mch ma trn phm..................................................................................... 49 5.2 Cc bc hin thc ................................................................................................. 50 5.3 Bi tp ..................................................................................................................... 54 Bi 6 : K thut qut LED ............................................................................................ 56 6.1 Cu to LED 7 on v LED ma trn ..................................................................... 56 6.2 Kt ni mch ........................................................................................................... 58 6.3 Cc thanh ghi lin quan v cch iu khin............................................................ 59 6.4 Cc bc hin thc. ................................................................................................ 62 6.5 Bi tp ..................................................................................................................... 65 Bi 7 : Kho st b truyn nhn ni tip ...................................................................... 66 7.1 Cc bc hin thc. ................................................................................................ 66
7.2 Chng trnh mu ................................................................................................... 68 7.3 Bi tp ..................................................................................................................... 70 Bi 8 : Kho st khi chuyn i A-D.......................................................................... 71 8.1 Cc bc hin thc ................................................................................................. 71 8.2 Bi tp ..................................................................................................................... 72 Bi 9 : Kho st cc khi chc nng c bit khc ...................................................... 73 9.1 Cc bc hin thc PWM....................................................................................... 73 9.2 Chng trnh mu ................................................................................................... 74 9.3 Bi tp ..................................................................................................................... 75
Bi 1 :
Ni dung : To project trn MPLAB IDE. Vit chng trnh ASM. Dch v np chng trnh vo vi iu khin PIC. Chy v g ri chng trnh.
B mn K Thut My Tnh
Thc hnh Vi x l
Chn tool Microchip C18 Toolsuite ti Active Toolsuite. Chn MPLAB C18 C Compiler ti Tollsuite contents. Nu lp trnh bng assembly th ta chon Active Toolsuite theo hnh sau:
Click Next
B mn K Thut My Tnh
Thc hnh Vi x l
nh vo tn Project mun to. Save, sau chng ta chn Next th hin ra ca s nh sau:
Bn nn add ht cc file cn thit cho vic lp trnh trc khi bt u vit chng trnh gm file .lib v file .lkr. Nu vit chng trnh cho con chip no th ta ly file .lib v file .lkr ca chp tng ng, nh hnh trn chung ta ang s dng chip 18f4550. Click Next.
B mn K Thut My Tnh
Thc hnh Vi x l
Mt project n gin nht phi gm c 2 thnh phn Source files v Hearder Files. Th mc Source files cha file text *.asm hoc file *.c cha code lp trnh. Th mc Hearder Files cha file *.h hoc *.INC: file c sn ca microchip. User khai bo dng loi chip g => add vo th mc ny. Nu bn qun khng add cc file cn c vo th lm theo hng dn sau. ADD header file: ( Copy header file vo th mc cha project tin cho vic s dng sau ny).
B mn K Thut My Tnh
Thc hnh Vi x l
Chn header file ph hp vi PIC mnh chn. Open. ADD source file: Click chn New trn toolbar: Ca s hin ln nh sau: T Menu bar chn File >> Save lu.
t tn v Save vi ui .c nu bn lp trnh trn c18 ca maplab hoc .asm nu bn lp trnh trn assembly. Nhp phi vo Source Files chn Add file >>> chn file chng ta va to xong.
B mn K Thut My Tnh
Thc hnh Vi x l
Ca s hin ln nh sau:
Chng ta hon tt vic add file vo cc th mc Source files v header files. Cng vic tip theo l vit code ( ca s text editor :D:\MAPLAB\Untiled.asm). i vi project m s dng cng 1 loi chip, cng loi ngn ng lp trnh ( ASM hay C) th ch cn to 1 ln. Nhng ln sau, ch cn add/ remove file text (*.asm hoc *.c) vo th mc Source files.
B mn K Thut My Tnh
Thc hnh Vi x l
By gi chng ta lu chng trnh va vit thnh nut_nhan.asm vo mt th mc to project pha trn. compile chng trnh ta vo menu Project -> Build All nh hnh bn di.
B mn K Thut My Tnh
Thc hnh Vi x l
Nu vic build tht bi, nhng vic ny th khng mong mun, ta c thy kt qu nh hnh sau:
B mn K Thut My Tnh
Thc hnh Vi x l
Nu vic build thnh cng, chng trnh s dch nut_nhan.asm thnh nut_nhan.hex trong cng th mc chng trnh nut_nhan.asm. Sau khi c c file hex, cng vic tip theo l lm th no np c file Hex xung board. u tin l chn mch np bng cch vo menu Programmer -> Select Programmer -> Mplab ICD2 nh hnh sau :
Sau khi chn Mplab ICD2 xong th ta s thy giao din nh sau:
B mn K Thut My Tnh
10
Thc hnh Vi x l
Lc ny np chng trnh ta ch cn vo menu Programmer -> Program nh hnh sau l c th np c chng trnh.
Sau khi nhn Program nu download xung chip thnh cng th ta s thy hin th ra ca s Output nh sau: MPLAB ICD 2 Ready Programming Target... ...Validating configuration fields ...Erasing Part ...Programming Program Memory (0x0 - 0x3F) Verifying... ...Program Memory ...Verify Succeeded Programming Configuration Bits .. Config Memory Verifying configuration memory... ...Verify Succeeded ...Programming succeeded
B mn K Thut My Tnh
11
Thc hnh Vi x l
bt u chy chng trnh ta phi rt dy kt ni mch np v kit ra. Khi chng trnh mi c th chy c. Trn y l ton b cc bc to mt project, vit assembly cho Pic trn Mplab cng nh lm th no compile v download chng trnh xung chip thc thi. y l trng hp l tng l khi vit code khng c li no xy ra. Nu c li no xy ra th ta phi debug n nh th no. Trong chng ny s hng dn cc bn hai cch debug.
Bc 2: Khi chn Mplab SIM xong th trn menu Debugger c thm nhiu chc nng khc h tr cho vic debug nh hnh sau:
B mn K Thut My Tnh
12
Thc hnh Vi x l
T y ta c th m phng c chng trnh ca mnh mt cch d dng. V d nh Run (F9) dng chy chng trnh, chng trnh s chy lin tc n khi no c breakpoint th dng. Vy lm th no to Breakpoint, ta s dng lnh Breakpoints (F2) nh trn hnh to ra breakpoint ti v tr hin ti ca con tr hoc double click vo hng code mnh mong mun t con tr. Hay s dng Step Into (F7) chy tng lnh mt, gp li gi hm th n s vo bn trong li gi hm chy tng lnh trong . Khc vi Step Over (F8) mt t l khi c li gi hm th Step Over xem nh l mt lnh bnh thng, khng i vo hm chi tit nh Step Into. Reset: tr v u chng trnh. Bc 3: Khi debug th ta cng cn phi bit gi tr ca cc thanh ghi cng nh b nh ca chip nh th no, xem c cc gi tr ny th chng ta qua menu View. xem c gi tr ca cc thanh ghi trong PIC ta chn View -> File registers s xut hin ca s nh hnh sau:
B mn K Thut My Tnh
13
Thc hnh Vi x l
xem c gi tr ca cc thanh ghi SFR th ta chn View -> Special Function Registers s xut hin ca s nh hnh sau:
Hay xem mt v thanh ghi m ta quan tm th c th dng Watch xem bng cch vo View -> Watch th hnh sau s xut hin:
B mn K Thut My Tnh
14
Thc hnh Vi x l
Mun xem thanh ghi no, ta ch vic chn thanh ghi tng ng trong combobox bn trn, sau nhn Add SFR.
1.5 Bi tp
B mn K Thut My Tnh
15
Thc hnh Vi x l
Bi 2 :
Ni dung: Kho st hot ng ca nt nhn, LED. Kho st cc thanh iu khin cng xut nhp. Tnh ton thi gian thc thi lnh, vit chng trnh con lm nhim v delay. Vit chng trnh c gi tr ca t hp nt nhn v iu khin gi tr hin th LED. Yu cu: Vit chng trnh xut d liu ra 4 led n m t 0 -> 15 -> 0. Thi gian gia cc ln m ln 1 n v l 1s. Nhp d liu t nt nhn RA4. Khi nt RA4 c nhn th led n RB0 sng, khi khng nhn RA4 th led n RB0 tt.
2.1.2 Kt ni mch
V tr LED hin th v nt nhn trn board nh hnh di y:
B mn K Thut My Tnh
16
Thc hnh Vi x l
LED sng, J6 phi c ni li v chn iu khin tng ng c thit lp l ng ra v mc logic 1. Cc nt nhn c kt ni nh sau:
VCC R1 10K
VCC
VCC
R7 10K
Nt nhn RESET dng reset vi iu khin Nt nhn RA4, RB0 khi c nhn s lm cho chn tng ng mc logic 0. Cn thit lp cc chn RA4 v RB0 l ng vo. Hin tng rung phm:
VCC
R7 10K
B mn K Thut My Tnh
17
Thc hnh Vi x l
ng ra b chuyn trng thi gia logic 0 v logic 1. Khi phm c th, hin tng rung cng xy ra tng t. B dao ng chnh c kt ni nh sau:
C4 22pF C5 22pF Y2 OSC1 Y1 4MHz OSC2 R4 VCC 4.7K 22pF 2 1 2 NC/OE GND VCC OUT 4 3 VCC
OSC1
J7 C3 1
4MHz
Bc 2: Include file p18f4520.inc vo file led_don.asm. Bc 3: Khi to PortB l output s dng cc lnh clrf, bcf. INIT clrf PORTB ; setup portb for outputs
B mn K Thut My Tnh
18
Thc hnh Vi x l
bcf TRISB,0 bcf TRISB,1 bcf TRISB,2 bcf TRISB,3 return Bc 4: To hm delay1ms s dng GOTO. delay equ 0ch
; clear trisb.0 ; clear trisb.1 ; clear trisb.1 ; clear trisb.1 cc lnh CLRF, NOP, DECFSZ, ; declare variable delay
Delay1ms ;Approxiamtely at 4Mhz clrf delay ; clear variable delay Delay_1 nop decfsz delay goto Delay_1 return Bc 5: T y ta c th to ra c hm delay1s: Delay1s Movwf Movlw Delay1s_1 Movwf Movlw Delay1s_2 Call decfsz goto decfsz goto return .4 delay_1sa .250 delay_1sb Delay1ms delay_1sb Delay1s_2 delay_1sa Delay1s_1
Bc 6: Vit chng trnh cho hm main thc hin cc yu cu ca bi s dng lnh INCF: begin INCF PORTB call Delay1s goto begin
B mn K Thut My Tnh
19
Thc hnh Vi x l
1 1
.4 delay_1sa
20 Thc hnh Vi x l
Delay1s_1 movwf movlw Delay1s_2 call decfsz goto decfsz goto return END
Sau khi c chng trnh mu ta thc hin vic compile chng trnh v np xung mch chy chng trnh nh hng dn chng 1.
Bc 3: Khi to PortB l output v PortA l input s dng cc lnh clrf, bcf, bsf INIT CLRF PORTB ;setup portb for outputs BCF TRISB,0 BCF TRISB,1 BCF TRISB,2 BCF TRISB,3 BSF PORTA,4 ; setup porta.4 for input BSF TRISA,4 RETURN Bc 4: Vit chng trnh cho hm main thc hin yu cu ca bi
MAIN BTFSC GOTO BSF SWOFF BTFSS GOTO BCF GOTO PORTA,4 MAIN PORTB,0 PORTA,4 SWOFF PORTB,0 MAIN ;Wait for SW1 to be pressed ;Turn on LED1. ;Wait for SW1 to be released. ;Switch off LED1. ;Repeat sequence.
Trng H. Bch Khoa TP.HCM GOTO BSF SWOFF BTFSS GOTO BCF GOTO MAIN PORTB,0 PORTA,4 SWOFF PORTB,0 MAIN
;Turn on LED1. ;Wait for SW1 to be released. ;Switch off LED1. ;Repeat sequence.
INIT CLRF
BCF
BSF ; setup porta.4 for input BSF RETURN END Sau khi c chng trnh mu ta thc hin vic compile chng trnh v np xung mch chy chng trnh nh hng dn chng 1.
2.6 Bi tp
Vit chng trnh khi nhn RA4 th cc led s sng m ln, mi ln nhn m ln 1 n v. Vit chng trnh sao cho mi ln nhn RA4 th 2 led tri v 2 led phi thay nhau sng. To hiu ng light river trn 4 led ca board mch starter kit. Nhn RA4 thay i chiu ca light river.
B mn K Thut My Tnh
23
Thc hnh Vi x l
Bi 3 : t
Ni dung: Kho st cc nguyn nhn gy ngt qung, cch x l ngt qung, tnh u tin gia cc ngt ca vi iu khin PIC16F877. Kho st ngt ngoi ca vi iu khin PIC16F877. iu khin LCD k t 2x16. Yu cu:
1. Vit chng trnh khi to 2 ngt: Ngt ngoi 0 vi u tin cao. Ngt timer 0 vi u tin thp. Trong chng trnh ngt ngoi 0 bt 3 led n RB1, RB2, RB3sng cng lc. Trong chng trnh timer 0 sau 1s khi 3 led c bt trong ngt ngoi th tt 3 led n RB1, RB2, RB3 cng lc. 2. Vit chng trnh hin th k t ln LCD.
B mn K Thut My Tnh
24
Thc hnh Vi x l
S iu khin ngt:
B mn K Thut My Tnh
25
Thc hnh Vi x l
Bc 2: Include file p18f4520.inc vo file interrupt.asm Bc 3: Khi to PortB l output s dng cc lnh clrf, bcf INIT ;assigning PORTB is a digital output MOVLW 0x0e MOVWF ADCON1 ; setup portb for outputs BCF TRISB,1 BCF PORTB,1 BCF TRISB,2 BCF PORTB,2 BCF TRISB,3 BCF PORTB,3 ;initialize delay variable MOVLW .10 MOVWF delay RETURN Bc 4: Khi to timer 0, cho timer 0 ngt c u tin thp, thit lp timer0 c 100ms th xy ra ngt mt ln. INIT_TIMER0 BSF RCON,IPEN ;enable priority interrupts. BCF INTCON2,TMR0IP ;timer0 with low priority
B mn K Thut My Tnh 26 Thc hnh Vi x l
BSF INTCON,TMR0IF;set timer0 interrupt flag bit BSF INTCON,TMR0IE ; enable timer 0 ;set the global interrupt enable bits BSF INTCON,GIEH BSF INTCON,GIEL CLRF T0CON MOVLW 0x3c MOVWF TMR0H MOVLW 0xAF MOVWF TMR0L BSF T0CON,TMR0ON RETURN Bc 5: Khi to ngt ngoi 0 tch cc cnh xung. i vi ngt ngoi 1 v ngt ngoi 2 th u tin ngt ph thuc vo 2 bit INT1IP v INT2IP trong thanh ghi INTCON3. Cn vi ngt ngoi 0 th khng c bt xc nh u tin, n ch c mt mc u tin l high priority. INIT_EXTERNAL_INTERRUPT ;falling edge on RB0 BCF INTCON2,INTEDG0 ; clear external interrupt flag bit BCF INTCON,INT0IF ; enable external 0 interrupt BSF INTCON,INT0IE ;set the global interrupt enable bits BSF INTCON,GIEH BSF INTCON,GIEL RETURN Bc 6: Vit chng trnh cho ngt ngoi 0, bt 3 n led n cng sng v khi to li gi tr cho bin delay 1s sau th ngt timer s tt 3 n . EXTERNAL_INTERUPT_ROUTINE BCF INTCON,INT0IF BSF PORTB,1 BSF PORTB,2 BSF PORTB,3 MOVLW .10 MOVWF delay RETURN Bc 7: Vit chng trnh cho ngt timer0, sau 1s sau khi led c bt sng th n s lm cho led tt. Thi gian timer m ln 1 n v c tnh bng cng thc :
B mn K Thut My Tnh
27
Thc hnh Vi x l
T = 1/((Focs/4)/2) = 1/((4Mhz/4)/2) = 0.5us Nn khi ta gi tr trong cc thanh ghi ca timer gi tr 50000 th c sau 100ms, timer s ngt mt ln. tnh c gi tr s Hex gn cho thanh ghi m ca timer ta lm nh sau: i s 50000 sang s hex: C350. Ly FFFF C350 = 3CAF. Byte cao s c lu vo TMR0H, byte thp lu vo TMR0L. TIMER0_INTERRUPT_ROUTINE BCF INTCON,TMR0IF DECFSZ delay,1 GOTO TIMER0_ROUTINE_1 BCF PORTB,1 BCF PORTB,2 BCF PORTB,3 MOVLW .10 MOVWF delay TIMER0_ROUTINE_1 BCF T0CON,TMR0ON MOVLW 0x3C MOVWF TMR0H MOVLW 0xAF MOVWF TMR0L BSF T0CON,TMR0ON RETURN
B mn K Thut My Tnh
28
Thc hnh Vi x l
list p = 18f4520 #include P18f4520.inc delay res 1 ORG 00h GOTO MAIN ORG 08H GOTO ISR_HIGH ORG 18H GOTO ISR_LOW MAIN CALL INIT CALL INIT_TIMER0 CALL INIT_EXTERNAL_INTERRUPT GOTO $ INIT ;assigning PORTB is a digital output MOVLW 0x0e MOVWF ADCON1 BCF TRISB,1 BCF PORTB,1 BCF TRISB,2 BCF PORTB,2 BCF TRISB,3 BCF PORTB,3 MOVLW .10 MOVWF delay RETURN INIT_TIMER0 BSF RCON,IPEN ;enable priority interrupts. BCF INTCON2,TMR0IP BSF INTCON,TMR0IF BSF INTCON,TMR0IE BSF INTCON,GIEH ;set the global interrupt enable bits BSF INTCON,GIEL CLRF T0CON MOVLW 0x3c MOVWF TMR0H MOVLW 0xAF MOVWF TMR0L BSF T0CON,TMR0ON RETURN INIT_EXTERNAL_INTERRUPT
B mn K Thut My Tnh 29 Thc hnh Vi x l
;Interrupt priority for INT1 and INT2 is determined by the ;value contained in the interrupt priority bits, INT1IP ;(INTCON3<6>) and INT2IP (INTCON3<7>). There is ;no priority bit associated with INT0. It is always a high ;priority interrupt source BCF BCF BSF BSF BSF RETURN INTCON2,INTEDG0 INTCON,INT0IF INTCON,INT0IE INTCON,GIEH ;set the global interrupt enable bits INTCON,GIEL
EXTERNAL_INTERUPT_ROUTINE BCF INTCON,INT0IF BSF PORTB,1 BSF PORTB,2 BSF PORTB,3 MOVLW .10 MOVWF delay RETURN TIMER0_INTERRUPT_ROUTINE ; BSF INTCON,INT0IF BCF INTCON,TMR0IF DECFSZ delay,1 GOTO TIMER0_ROUTINE_1 BCF PORTB,1 BCF PORTB,2 BCF PORTB,3 MOVLW .10 MOVWF delay TIMER0_ROUTINE_1 BCF T0CON,TMR0ON MOVLW 0x3c MOVWF TMR0H MOVLW 0xaf MOVWF TMR0L BSF T0CON,TMR0ON RETURN ISR_HIGH
B mn K Thut My Tnh 30 Thc hnh Vi x l
CALL EXTERNAL_INTERUPT_ROUTINE RETFIE ISR_LOW CALL TIMER0_INTERRUPT_ROUTINE RETFIE END Sau khi c chng trnh mu ta thc hin vic compile chng trnh v np xung mch chy chng trnh nh hng dn chng 1.
M t t (0V) Ngun (+5V) Chnh contrast (0 VCC) D0-D7 l gi tr lnh D0-D7 l gi tr d liu Ghi gi tr vo LCD c gi tr ra t LCD Cm truy xut LCD LCD hot ng trao i d liu D liu/Lnh a vo LCD Bit 0/LSB Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Thc hnh Vi x l
B mn K Thut My Tnh
Character Generator Ram (CGRAM): lu tr tm mu k t do ngi dng nh ngha. Tm mu k t ny tng ng vi cc m k t D7-D0 = 0000*D2D1D0 (* mang gi tr ty nh 0 hay 1).
B mn K Thut My Tnh
32
Thc hnh Vi x l
Chng ta mun hin th ch CE gia hng u tin, gi s ca s hin th ang bt u t v tr u tin (hng th nht hin th d liu ca nh t 0x00 n 0x0f, hng th hai hin th d liu ca nh t 0x40 n 0x4f, y l v tr home). Gi tr ca nh 0x07 l 0x43 (k t C), ca nh 0x08 l 0x45 (k t E). Chng ta mun hin th ch gi hng th hai, gi s c s hin th ang v tr home. Trong bng mu k t chng ta thy khng c mu . Lc ny chng ta phi nh ngha mu 5x8 im, gm c 8 byte, sau lu vo v tr ca mu k t CGRAM th nht. Lc ny gi tr ca nh 0x47 l 0x00 hoc 0x08 (v tr ca mu k t CGRAM th nht ).
B mn K Thut My Tnh
33
Thc hnh Vi x l
I/D SH C * * B * *
Cc bit trn bng tm tt cc lnh c ngha nh sau: I/D SH S/C R/L DL N F BF 1 1 1 1 1 1 1 1 Increment Entire shift on Display shift Shift to the Right 8 bits 2 Lines 5x10 dots Font Internally operating 0 0 0 0 0 0 0 0 Decrement Entire shift off Cursor move Shift to the Left 4 bits 1 Lines 5x8 dots Font Can accept instruction
Trn kit th nghim LCD k t 2x16 c kt ni vo Port D ch 4 bit. ch 4 bit, c hay ghi mt byte phi tin hnh ci d liu hai ln, ln u l 4 bit cao, ln th hai l 4 bit thp.
B mn K Thut My Tnh
34
Thc hnh Vi x l
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Trc khi xut k t ra mn hnh LCD, LCD controller phi c khi to khi mi c cp ngun. Trnh t khi to nh lc sau. Trn lc , lnh Display clear c gi tr 0x01 c gi hai ln, ln u l 4 bit cao c gi tr 0x0, ln th hai l bn bit thp c gi tr 0x01. Lnh Function set gi hai ln gi tr 0x2.
B mn K Thut My Tnh
35
Thc hnh Vi x l
Ch ti thiu 39s
Gi lnh Entry mode set Ch ti thiu 39s RS RW D7 0 Gi lnh Display on/off control RS RW D7 0 0 0 0 0 1 D6 0 D D5 0 C D4 0 B Kt thc khi to 0 0 0 0 0 D6 0 1 D5 0 I/D D4 0 SH
B mn K Thut My Tnh
36
Thc hnh Vi x l
Bc 2: Include file p18f4520.inc vo file lcd.asm Bc 3: Da vo s nguyn l kt ni vi iu khin vi LCD k t ta define li d dng s dng hn. #define LCD_D4 PORTD, 0 ; LCD data bits #define LCD_D5 PORTD, 1 #define LCD_D6 PORTD, 2 #define LCD_D7 PORTD, 3 #define LCD_D PORTD #define #define #define #define #define #define #define #define #define #define #define #define LCD_D4_DIR LCD_D5_DIR LCD_D6_DIR LCD_D7_DIR LCD_E LCD_RW LCD_RS LCD_E_DIR LCD_RW_DIR LCD_RS_DIR LCD_INS LCD_DATA TRISD, 0 TRISD, 1 TRISD, 2 TRISD, 3 PORTD, 6 PORTD, 5 PORTD, 4 TRISD, 6 TRISD, 5 TRISD, 4 0 1 ; LCD data bits
B mn K Thut My Tnh
37
Thc hnh Vi x l
Bc 4: Vit hm xut d liu 4 bt ra cho LCD k t : LCDWriteNibble btfss STATUS, C ; Set the register select bcf LCD_RS btfsc STATUS, C bsf LCD_RS bcf LCD_RW ; Set write mode bcf LCD_D4_DIR ; Set data bits to outputs bcf LCD_D5_DIR bcf LCD_D6_DIR bcf LCD_D7_DIR NOP ; Small delay NOP bsf LCD_E ; Setup to clock data NOP ; Small delay NOP btfss temp_wr, 7 ; Set high nibble bcf LCD_D7 btfsc temp_wr, 7 bsf LCD_D7 btfss temp_wr, 6 bcf LCD_D6 btfsc temp_wr, 6 bsf LCD_D6 btfss temp_wr, 5 bcf LCD_D5 btfsc temp_wr, 5 bsf LCD_D5 btfss temp_wr, 4 bcf LCD_D4 btfsc temp_wr, 4 bsf LCD_D4 NOP ; Small delay NOP bcf LCD_E ; Send the data return Bc 5: Tip tc ta vit hm truyn lnh (command) cho lcd k t. Macro LCDWrite_command c mt i s l data, ta dng i s ny truyn lnh cho lcd. y, LCD ta thit lp ch 4 bt nn khi truyn lnh n cng ch cn 4 bit iu khin. Trong macro ny data1 ch s dng 4 bit cao m thi.
B mn K Thut My Tnh 38 Thc hnh Vi x l
LCDWrite_command macro data1 bcf LCD_RS ;write command movlw data1 movwf temp_wr call LCDWriteNibble movlw 0xF movwf delay rcall DelayXCycles endm Bc 6: Sau vit thm hm truyn d liu hin th ra LCD k t. Macro LCDWrite_data c mt i s l data1, ta dng macro vi i s tng ng truyn data hin th ln mn hnh LCD. Nh trn ta cp, trong ng dng ny ta s dng LCD ch 4 bt, nn data y c truyn theo th t l 4 bit cao truyn trc sau 4 bt thp c truyn sau. LCDWrite_data macro data1 bsf LCD_RS ;write data movff data1,temp_wr rcall LCDBusy bsf STATUS, C rcall LCDWrite movlw 0x0F ;Wait ~100us @ 20 MHz movwf delay rcall DelayXCycles endm Bc 7: Hm quan trng nht ca LCD k t chnh l hm khi to LCD. Trc khi s dng c lcd ta phi khi to cho n theo nh gin khi to lcd trn phn hng dn l thuyt. Ngoi ra do thit k mch, LCD c th hin th bnh thng trc tin ta phi bt ngun ca LCD ln, chn ngun ca LCD c iu khin bi PortD.7 tch cc mc cao, nn trc khi mun s dng LCD ta phi bt PortD.7 ln 1. LCDInit1 CALL Init_variable bsf bcf bsf bcf bcf bcf movlw movwf
B mn K Thut My Tnh
Thc hnh Vi x l
0xff COUNTER 0xFF delay DelayXCycles COUNTER,F lil11 0x20 0x20 0x80 0x00 0xf0 0x00 0x10 0x00 0x20
LCDWrite_command LCDWrite_command LCDWrite_command LCDWrite_command LCDWrite_command LCDWrite_command LCDWrite_command call LongDelay ;2ms call LongDelay ;2ms LCDWrite_command LCDWrite_command
call Lcd_clear return Bc 8: n y ta c th vit chng trnh hin th k t ln lcd k t. tng thc hin y l lc u ta khai bo mt vng nh gm 32 nh tng ng vi 32 v tr trn lcd k t. Hm lcd_display ca chng ta s thc hin mt vic n gin l ly d liu cha trong vng nh ny ra hin th ln lcd k t. Cn ngi dng mun hin th ln lcd th ch cn update gi tr vo vng nh ny l xong. Lcd_display movff INDF0,temp_wr1 movlw .0 cpfseq temp_wr1 goto Lcd_display1 movlw 0x20 movwf temp_wr1 Lcd_display1 LCDWrite_data temp_wr1 INCF CLRF ADDWFC
B mn K Thut My Tnh
MOVLW cpfseq goto ;display line1 INCF MOVLW CPFSEQ GOTO CLRF MOVLW MOVWF Set_cursor goto ;display line2 Lcd_display_line2 INCF MOVLW CPFSEQ GOTO CLRF MOVLW MOVWF Movlw Movwf Movlw Movwf Set_cursor Exit_Lcd_display RETURN
.0 flag_line Lcd_display_line2 index_of_lcd MAX_INDEX index_of_lcd Exit_Lcd_display Index_of_lcd .1 flag_line .0,.1 Exit_Lcd_display
index_of_lcd MAX_INDEX index_of_lcd Exit_Lcd_display Index_of_lcd .0 flag_line HIGH Lcd_buffer FSR0H LOW Lcd_buffer FSR0L .0, .0
3.6 Bi tp
Vit chng trnh chy ch qua LCD. Vit chng trnh thay i ch hin th trn LCD khi nhn nt.
B mn K Thut My Tnh
41
Thc hnh Vi x l
Bi 4 :
Kho st b nh thi
Ni dung: Kho st cc ch hot ng ca cc b nh thi. Kho st cc thanh ghi iu khin b nh thi. S dng b nh thi trong chng trnh. Yu cu: S dng b timer 1 c sau 1s m ln 1 n v ri xut gi tr ra led n. Vit chng trnh s dng b nh thi lm ng h iu khin n giao thng.
Bc 2: Include file p18f4520.inc vo file timer.asm Bc 3: Khi to PortB l output. Cn gn gi tr cho thanh ghi ADCON1 v thanh ghi ny c chc nng chn cc PORT c chc nng l input/output digital hay l input Analog. Do , trc khi s dng cc port ta phi kim tra xem thanh ghi ADCON1 cu hnh ng cha. INIT
B mn K Thut My Tnh
42
Thc hnh Vi x l
;assigning PORTB is a digital output MOVLW 0x0e MOVWF ADCON1 ; setup portb for outputs CLRF TRISB CLRF PORTB RETURN Bc 4: Khi to cc vector ngt. a ch 0x00 bt u chng trnh chnh. a ch 0x08 a ch ca vector ngt c u tin cao a ch 0x18 a ch ca vector ngt c u tin thp. Ch : VK Pic ch c 2 u tin khi ngt xy ra nh ni trn. org 0x0 goto MAIN ORG GOTO ORG GOTO MAIN GOTO MAIN ;interrupt sevice routine for high priority interrupt ISR_HIGH RETFIE ;interrupt sevice routine for low priority interrupt ISR_LOW RETFIE Bc 5: Khi to ngt timer 0 c sau 100ms th vo ngt mt ln. Thi gian timer m ln 1 n v c tnh bng cng thc T = 1/((Focs/4)/2) = 1/((4Mhz/4)/2) = 0.5us Nn khi ta gi tr trong cc thanh ghi ca timer gi tr 50000 th c sau 100ms, timer s ngt mt ln. tnh c gi tr s Hex gn cho thanh ghi m ca timer ta lm nh sau : u tin i s 50000 sang s hex: C350. Sau ly FFFF C350 = 3CAF. C c s ny ri ta ly byte cao lu vo TMR0H, byte thp lu vo TMR0L. 0x000008 ; high priority interrupt vector ISR_HIGH 0x000018 ISR_LOW ; low priority interrupt vector
B mn K Thut My Tnh
43
Thc hnh Vi x l
;=====================; ; Initializing timer 0: 16BIT ;=====================; INIT_TIMER0 ;enable priority interrupts. BSF RCON,IPEN ;set Timer0 as a HIGH priority interrupt source BSF INTCON2,TMR0IP ;Clear the Timer0 interrupt flag. BCF INTCON,TMR0IF ;enable Timer0 interrupts BSF INTCON,TMR0IE ;set the global interrupt enable bits BSF INTCON,GIEH BSF INTCON,GIEL ;initialize timer0: 10ms CLRF T0CON MOVLW 0x3c MOVWF TMR0H MOVLW 0xaf MOVWF TMR0L ;turn on timer0 BSF T0CON,TMR0ON RETURN Bc 6: Vit chng trnh con chy trong timer, sau 1s tng gi tr hin th ra ngoi led n. V c 100ms th c ngt mt ln, do sau 1s ta tng ln mt gi tr th cn 10 ln ngt nh vy, nn ban u ta phi khi to cho bin delay = 10. V y l hm chnh thc hin chc nng ca bi tp 1. TIMER0_ROUTINE BCF INTCON,TMR0IF DECFSZ delay,1 GOTO TIMER0_ROUTINE_1 INCF PORTB MOVLW .10 MOVWF delay TIMER0_ROUTINE_1 BCF T0CON,TMR0ON
B mn K Thut My Tnh 44 Thc hnh Vi x l
B mn K Thut My Tnh
45
Thc hnh Vi x l
; Author: BKIT HARDWARE CLUB ; Homepage: http://www.bkit4u.com/forum ; Creation Date: 8 - 6 - 2009 ;======================================; list p=18f4520 #include p18f4520.inc delay res 1 org 0x0 goto MAIN ORG GOTO ORG GOTO MAIN CALL CALL GOTO INIT INIT_TIMER0 $ 0x000008 ISR_HIGH 0x000018 ISR_LOW ; high priority interrupt vector ; low priority interrupt vector
INIT ;assigning PORTB is a digital output movlw 0x0e movwf ADCON1 ; setup portb for outputs clrf TRISB clrf PORTB MOVLW .10 MOVWF delay return
B mn K Thut My Tnh
46
Thc hnh Vi x l
;===========================================; ; Initializing timer 0: 16BIT ;===========================================; ;to calculate the accurately timing scheduling of timer 0. ;we have to know something ;1. External clock: 4Mhz (this ex) ;2. Timer0 Prescaler: 1/2 (this ex) ;cycle of timer0 = 1/((Fexternal/4)/2) = 0.5us INIT_TIMER0 BSF RCON,IPEN ;enable priority interrupts. BSF INTCON2,TMR0IP BSF INTCON,TMR0IF BSF INTCON,TMR0IE BSF INTCON,GIEH BSF INTCON,GIEL CLRF T0CON MOVLW 0x3c MOVWF TMR0H MOVLW 0xAF MOVWF TMR0L BSF T0CON,TMR0ON RETURN ISR_HIGH ; high priority isr BTFSC INTCON,TMR0IF GOTO ISR_TIMER0_HIGH ISR_TIMER0_HIGH CALL TIMER0_ROUTINE GOTO EXIT_ISR_HIGH EXIT_ISR_HIGH RETFIE ;===============================================; ; interrupt service routine for low priority interrupts ;===============================================; ISR_LOW BTFSC INTCON,TMR0IF GOTO ISR_TIMER0_LOW ISR_TIMER0_LOW CALL TIMER0_ROUTINE GOTO EXIT_ISR_LOW EXIT_ISR_LOW RETFIE
B mn K Thut My Tnh
47
Thc hnh Vi x l
;===============================================; ;===============================================; ;===============================================; ;===============================================; TIMER0_ROUTINE BCF INTCON,TMR0IF DECFSZ delay,1 GOTO TIMER0_ROUTINE_1 INCF PORTB MOVLW .10 MOVWF delay TIMER0_ROUTINE_1 BCF T0CON,TMR0ON MOVLW 0x3c MOVWF TMR0H MOVLW 0xaf MOVWF TMR0L BSF T0CON,TMR0ON RETURN END
Yu cu 2 ca bi thc hnh ny xem nh bi tp
4.3 Bi tp
Dng b nh thi to xung vung chu k 10ms, duty cycle 30%.
B mn K Thut My Tnh
48
Thc hnh Vi x l
Bi 5 :
Ni dung: Kho st cu to, hot ng ca ma trn phm. Tm hiu k thut ly d liu t ma trn phm, chng rung phm nhn. Yu cu: Vit chng trnh ly d liu t phm nhn sau hin th gi tr ca phm nhn ra led n.
2 3 COLUMN2 R6 100R COL2 J4 COL2 COL4 ROW2 ROW4 1 3 5 7 9 11 RD1 RD0 RD3 RD2 RD5 RD4 RD7 RD6 RE1 RE0 GNDVCC CON12A 2 4 6 8 10 12
Ma trn phm gm 16 phm nhn kt ni chung 4 hng v 4 ct. Bn ct COL1COL4 ni vo bn bit thp ca Port D D0-D3. Bn hng ROW1-ROW4 ni vo bn bit cao ca Port D D4-D7. Bn hng c ni vi in tr ko ln m bo mc logic 1 khi phm khng c nhn.
B mn K Thut My Tnh
49
Thc hnh Vi x l
Bc 2: Include file p18f4520.inc vo file key.asm Bc 3: Define cc port tng ng vi hng v ct ca ma trn phm d
B mn K Thut My Tnh
50
Thc hnh Vi x l
s dng sau ny. Da vo s mch ta nh ngha nh sau: #define COLUMN_1 PORTD, 0 #define COLUMN_2 PORTD, 1 #define COLUMN_3 PORTD, 2 #define COLUMN_4 PORTD, 3 #define #define #define #define ROW_1 ROW_2 ROW_3 ROW_4 PORTD, 4 PORTD, 5 PORTD, 6 PORTD, 7
Bc 4: Khi to input v output cho cc port tng ng. y column l output, cn row l input. Portb dng hin th led n cng c cu hnh l output. INIT_IO ;assigning PORTB is a digital output MOVLW 0x0F MOVWF ADCON1 ; setup portb for outputs CLRF TRISB CLRF PORTB MOVLW 0x0F MOVWF TRISD MOVLW 0xFF MOVWF PORTD RETURN Bc 5: Khi to timer, phn ny chng ta hc t chng 4, ta c th c mt hm khi to timer n gin nh sau: INIT_TIMER0 BSF RCON,IPEN ;enable priority interrupts. BSF INTCON2,TMR0IP BSF INTCON,TMR0IF BSF INTCON,TMR0IE BSF INTCON,GIEH BSF INTCON,GIEL CLRF T0CON MOVLW 0x3c MOVWF TMR0H MOVLW 0xAF MOVWF TMR0L BSF T0CON,TMR0ON RETURN Bc 6: Vit hm Get_key vi 2 i s. i s th nht c tn l temp_wr,
B mn K Thut My Tnh 51 Thc hnh Vi x l
chnh l gi tr output tng ng vi cc ct ca ma trn phm, i s th 2 c tn l col chnh l gi tr bt u ca mi ct. V d ct 1 th gi tr bng 0, ct 2 th gi tr bng 1, ct 3 th gi tr bng 2 v ct 4 th gi tr bng 3. GET_KEY BTFSS temp_wr, 0 BCF COLUMN_1 BTFSS temp_wr, 0 BSF COLUMN_1 BTFSS temp_wr, 1 BCF COLUMN_2 BTFSS temp_wr, 1 BSF COLUMN_2 BTFSS temp_wr, 2 BCF COLUMN_3 BTFSS temp_wr, 2 BSF COLUMN_3 BTFSS temp_wr, 3 BCF COLUMN_4 BTFSS temp_wr, 3 BSF COLUMN_4 BTFSC GOTO MOVLW MOVWF GOTO PORTD,4 ;BIT TEST F, SKIP IF SET NEXT_BUTTON_1 .0 KeyReg1 EXIT_GET_KEY
NEXT_BUTTON_1 BTFSC PORTD,5 ;BIT TEST F, SKIP IF SET GOTO NEXT_BUTTON_2 MOVLW .4 MOVWF KeyReg1 GOTO EXIT_GET_KEY NEXT_BUTTON_2 BTFSC PORTD,6 ;BIT TEST F, SKIP IF SET GOTO NEXT_BUTTON_3 MOVLW .8 MOVWF KeyReg1 GOTO EXIT_GET_KEY NEXT_BUTTON_3 BTFSC PORTD,7 ;BIT TEST F, SKIP IF SET GOTO NEXT_BUTTON_2 MOVLW .12
B mn K Thut My Tnh 52 Thc hnh Vi x l
MOVWF
KeyReg1
EXIT_GET_KEY MOVFF COL,W ADDWF KeyReg1,d RETURN Bc 7: Da vo hm Get_key trn ta c th hon thin hm Scan_button mt cch d dng. y ta nhc li cch m s l phm nhn d liu ngc tr v l ti mt thi im ch cho mt ct c tch cc ( y l mc 0) sau c ngc gi tr t cc hng. Hng 1 tng ng vi ct 1 l s 0, tng t hng 2 vi ct 1 l s 4 Khi nhn phm th s c hin tng rung phm, gii quyt trng hp ny ta c mt cch gii quyt y l c d liu 3 ln lin tip mi ln cch nhau 10ms, sau so snh 3 gi tr c c. Nu 3 gi tr bng nhau th ta xem nh c mt nt nhn c nhn. Trong hm Scan_button ta dng 3 bin KeyReg1, KeyReg2 v KeyReg3 lu gi tr ca 3 ln c d liu lin tip, khi kim tra 3 bin ny c gi tr bng nhau th ta s lu vo bin KeyReg v xut d liu ra PORTB. Scan_button MOVFF MOVFF MOVLW MOVWF MOVLW MOVWF CALL MOVLW MOVWF MOVLW MOVWF CALL MOVLW MOVWF MOVLW MOVWF CALL MOVLW MOVWF
B mn K Thut My Tnh
KeyReg2,KeyReg3 KeyReg1,KeyReg2 0x0E temp_wr .0 COL GET_KEY 0x0D temp_wr .1 COL GET_KEY 0x0B temp_wr .2 COL GET_KEY 0x07 temp_wr
53 Thc hnh Vi x l
MOVLW MOVWF CALL MOVFF CPFSEQ GOTO CPFSEQ GOTO MOVFF CPFSEQ GOTO GOTO Scan_button1 MOVFF CALL
.3 COL GET_KEY KeyReg1,W KeyReg2 EXIT_SCAN_BUTTON KeyReg3 EXIT_SCAN_BUTTON KeyReg,W KeyReg1 Scan_button1 EXIT_SCAN_BUTTON KeyReg1,KeyReg Button_process
EXIT_SCAN_BUTTON RETURN Bc 8: Nh gii thut trn ni l c mi 10ms th ta c d liu mt ln, cho iu ny c thc hin d dng th ta phi dng n interrupt timer. Ta khi to mt interrupt timer c sau 10ms th interrupt mt ln. lm c iu ny cc bn c th xem li chng timer c th lm vic mt cch d dng. y ch gii thiu cho cc bn l hm Timer0_routine, hm ny c gi trong interrupt timer v trong hm ny ta gi hm Scan_button trn. TIMER0_ROUTINE BCF BCF MOVLW MOVWF MOVLW MOVWF BSF CALL RETURN INTCON,TMR0IF T0CON,TMR0ON 0x3c TMR0H 0xaf TMR0L T0CON,TMR0ON SCAN_BUTTON
5.3 Bi tp
Ci tin hm chng rung phm, khi nhn 1 phm th phi sau 1 thi gian TimeOutForKey th mi tch cc phm nhn . Vit ng dng ng h casio n gin (hin th gi, ngy, cho php chnh sa
B mn K Thut My Tnh
54
Thc hnh Vi x l
Trng H. Bch Khoa TP.HCM ngy gi) s dng ma trn phm v LCD.
B mn K Thut My Tnh
55
Thc hnh Vi x l
Bi 6 :
Ni dung: Kho st cu to, hot ng ca LED 7 on, LED ma trn. Tm hiu k thut qut LED 7 on v LED ma trn. Yu cu: Vit chng trnh cho php hin th gi tr ra led 7 on v led ma trn.
LED 7 on c hai loi l Common Anode v Common Cathode, tng ng cc LED ni chung Anode hay ni chung Cathode.
B mn K Thut My Tnh
56
Thc hnh Vi x l
Cc LED trn cng mt hng ni chung Anode, cc LED cng loi trn cng mt ct ni chung Cathode.
B mn K Thut My Tnh
57
Thc hnh Vi x l
6.2 Kt ni mch
ENABLE_LED1 3 8 3 LED1 A 7 B 6 C 4 D 2 E 1 F 9 G 10 DOT 5 LED2 A 7 B 6 C 4 D 2 E 1 F 9 G 10 DOT 5 ENABLE_LED2 8 3 LED3 A 7 B 6 C 4 D 2 E 1 F 9 G 10 DOT 5 ENABLE_LED3 8 3 Vcc LED4 A 7 B 6 C 4 D 2 E 1 F 9 G 10 DOT 5 ENABLE_LED4 8
Vcc
Vcc
Vcc
Vcc
Vcc
Vcc
a b c d e f g dot
8.
Green.1
a b c d e f g dot
8.
Green.2 Row.2 Red.2
a b c d e f g dot
8.
Green.4 Row.4 Red.4
a b c d e f g dot
8.
led7
led7 Green.3
led7
led7
Row.1
24 GR1
23 RD1
22 RW1
21 GR2
20 RD2
19 RW2
18 GR3
17 RD3
Row.3
Red.1
Red.3
16 RW3
15 GR4
14 RD4
13 RW4
LED 8x8x2
ML1
GR5
GR6
GR7
GR8
RD5
RD6
RD7
RW5
RW6
RW7
RD8
1 Green.5
3 Row.5
4 Green.6
6 Row.6
7 Green.7
9 Row.7
10 Green.8
11
12 Row.8
Red.5
Red.6
Red.7
Mch LED m rng gm c 4 LED 7 on v 1 LED ma trn hai mu xanh . Mch c ni vo mt phn ca Port PICtail. D liu c dch ni tip v c ci bi IC 74HC595, TPIC6595. Module SPI ca PIC m nhn vic dch d liu ni tip thng qua chn d liu SDO v chn clock dch SCK. Sau khi dch 4 byte, tn hiu LATCH chuyn t mc 0 ln mc 1 s y d liu ca 4 byte tm ra 4 byte ng ra QA-QH tng ng. Tn hiu CLR_DISP tch cc mc 0 khng cho php hin th.
B mn K Thut My Tnh
58
Red.8
RW8
Thc hnh Vi x l
Vcc
RCLK DRAIN0 SRCLK DRAIN1 DRAIN2 SRCLR DRAIN3 G DRAIN4 DRAIN5 DRAIN6 DRAIN7
U2 SDI
TPIC6595 SDO
18 4 5 6 7 14 15 16 17 100 100 100 100 100 100 100 100 R9 R10 R11 R12 R13 R14 R15 R16 Green.1 Green.2 Green.3 Green.4 Green.5 Green.6 Green.7 Green.8
RCLK DRAIN0 SRCLK DRAIN1 DRAIN2 SRCLR DRAIN3 G DRAIN4 DRAIN5 DRAIN6 DRAIN7
SDO SCK
U3 SDI
TPIC6595 SDO
18 4 5 6 7 14 15 16 17 330 330 330 330 330 330 330 330 R17 R18 R19 R20 R21 R22 R23 R24 A B C D E F G DOT
LATCH CLR_DISP
RCLK DRAIN0 SRCLK DRAIN1 DRAIN2 SRCLR DRAIN3 G DRAIN4 DRAIN5 DRAIN6 DRAIN7
VCC
12 11 10 9 8 7 6 5 4 3 2 1
PICtail RA3 RC5 RC4 RC3 RA0 RA1 RA2 RC0 RC1 RC2 +5V GND CON12
14 12 11 10 13
U4 SDI
74HC595 SDO QA QB QC QD QE QF QG QH
9 15 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 10
U3
VCC 18 17 16 15 14 13 12 11 Row.1 Row.2 Row.3 Row.4 Row.5 Row.6 Row.7 Row.8 ENABLE_LED1 ENABLE_LED2 ENABLE_LED3 ENABLE_LED4
V+
COM UDN2981
B mn K Thut My Tnh
59
Thc hnh Vi x l
Vi s mch trn, mi ln c mt hng LED LED ma trn hay mt con LED 7 on hin th d liu. Li dng hin tng lu nh ca mt, d liu ca mi hng LED ma trn hay mi con LED 7 on c xut ra tun t hng (con) ny n hng (con) khc, chng ta s thy c hnh nh ca c mn hnh ma trn LED hay ca c 4 con LED 7 on. Khi tt c cc hng LED ma trn v tc c cc con LED 7 on c hin th (qut) qua mt ln, ta ni hin th mt frame. mt khng cm thy hnh nh b rung th s ln hin th frame trong mt giy phi ln hn 24 ln (thng l 30 ln). u tin tn hiu CLR_DISP tch cc (mc 0) khng cho LED hin th, sau dch bn byte d liu, tn hiu LATCH chuyn t mc 0 ln mc 1 a d liu mong mun sn sn ng ra, cui cng a tn hiu CLR_DISP ln mc 1 cho php LED hin th d liu mong mun. C nh vy lp li chu trnh ny. B mn K Thut My Tnh 60 Thc hnh Vi x l
Bn byte d liu c dch ra mi ln c ngha tng ng l d liu ca mt hng LED , d liu ca mt hng LED xanh, d liu ca mt con LED 7 on, iu khin hng (con) LED no hin th. Cch iu khin c minh ha thng qua hnh sau :
Gi tr ca byte control ch cha nhiu nht mt bit 1. Nh hnh v, cn 12 ln xut d liu (4 byte) cho 1 frame gm c LED ma trn v LED 7 on, 8 ln xut d liu cho 1 frame gm ch c LED ma trn (khng quan tm ni dung hin th LED 7 on), 4 B mn K Thut My Tnh 61 Thc hnh Vi x l
ln xut d liu cho 1 frame gm ch c LED 7 on(khng quan tm ni dung hin th LED ma trn).
Bc 2: Include file p18f4520.inc vo file Led_matran.asm Bc 3: Khai bo cc buffer cn thit vit driver cho led. V y ta vit driver nn mi ngi khi s dng nhng module ny s khng s dng nhng hm m chng ta vit trong ny ch c th thao tc trn cc buffer m thi. GREEN_SCREEN_BUFFER RES .8 RED_SCREEN_BUFFER RES .8 SEVEN_LED_BUFFER RES .8 COLUMN_BUFFER RES .8 INDEX_OF_BUFFER RED_DATA GREEN_DATA SEVEN_LED_DATA COLUMN_DATA RES RES RES RES RES .1 .1 .1 .1 .1
Bc 4: Ngoi ra nhn vo mch ta c th d dng nhn thy c rng d liu ca chng ta c truyn theo kiu truyn ng b ni tip, chnh xc hn y ngi ta s dng chc nng SPI truyn d liu. Do ta phi cu hnh cho chip lm sao c th hot ng c ch SPI ny. INIT_SPI CLRF SSPCON1 ;SET Fspi = f/4 BSF SSPCON1,5 ;ENALBLE SPI MODE BCF TRISC,5
B mn K Thut My Tnh 62 Thc hnh Vi x l
BCF TRISC,3 RETURN Trn y ta mi ch khi to module SPI n c th hot ng nhng nhn li s mch ta li thy c thm vi kt ni na t vi iu khin ra IC74595. IC ny hot ng c th ta cn thm mt chn to clock c th chuyn d liu ni tip ra song song ca IC ny. Ta define thm cho chn Latch ca IC 74595. #define LATCH_DIR TRISA,1 #define LATCH_DATA PORTA,1 ng thi khi to cc PORT lin quan: INIT MOVLW 0x0F MOVWF ADCON1 BCF LATCH_DIR BCF LATCH_DATA CLRF INDEX_OF_BUFFER RETURN Bc 5: Ngoi ra thc hin c bi ny khng th no thiu timer c, v hin th ra led ma trn ta phi qut tng ct led trn ma trn led. Khi nhn vo cu to ca ma trn led ta thy hin th c mt hnh g trn ma trn led th ta phi qut led, v ti mt thi im ch c th hin th mt ct led m thi. Nh vo hin tng lu nh mt m khi qut vi tn s cao th mt ta s thy nh l ct sng ch khng phi chp nhy na. Vy lm sao bit c ta qut led vi tn s bao nhiu l hp l. Nh trong phim nh khi xem phim thc cht ta bit l n ang chy vi tn s l 24 hnh /s. y ta cng gi s nh vy, c mn hnh ca led cng chp nhy vi tn s l 24 hnh/s, m mi hnh ta phi qut 8 ln v c 8 ct. T ta c th suy ra tn s ta cn phi qut cho mi ct l 8x24 ln/s. T y ta c th d dng tnh c timer ca chng ta cn bao nhiu c th qut led c mt cch d dng. INIT_TIMER0 BSF RCON,IPEN ;enable priority interrupts. BSF INTCON2,TMR0IP BSF INTCON,TMR0IF BSF INTCON,TMR0IE BSF INTCON,GIEH BSF INTCON,GIEL CLRF T0CON MOVLW 0x3c MOVWF TMR0H MOVLW 0xAF MOVWF TMR0L BSF T0CON,TMR0ON
B mn K Thut My Tnh 63 Thc hnh Vi x l
RETURN Bc 6: Ban u ta khi to cc buffer hin th cng nh qut ct led. d dng trong vic s l ta s khi to cho Column_Buffer cc gi tr tng ng lm sao, khi xut ra n ch tch cc mt ct ca led m thi. y gi s tch cc ti mi ct l tch cc mc cao th ta c th khi to cho Column_buffer cc gi tr sau: 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80. Bc 7: n y mi s chun b xong, ta c th bt u vit hm hin th d liu ra led. u tin ta s vit mt macro SPI_transmit vi i s s l gi tr byte s c truyn ni tip ra ngoi. SPI_TRANSMIT MACRO TEMP_DATA ;Has data been received (transmit complete)? BTFSS SSPSTAT, BF GOTO $-2 ;No MOVF TEMP_DATA, W ;W reg = contents of TXDATA MOVWF SSPBUF ENDM Bc 8: Tip theo l lm sao ly d liu t cc buffer a vo cc bin tng ng xut ra led. Ta vit thm mt Macro na gm 2 i s l buffer v temp_data. Macro ny s lm nhim v l ly d liu ti v tr (c lu trong bin index_of_buffer) ca buffer lu vo temp_data. UPDATE_DATA MACRO BUFFER,TEMP_DATA MOVLW HIGH BUFFER MOVWF FSR0H MOVLW LOW BUFFER MOVWF FSR0L MOVFF INDEX_OF_BUFFER,W ADDWF FSR0L,F CLRF W ADDWFC FSR0H MOVFF INDF0,TEMP_DATA ENDM Bc 9: Nh trn gii thiu xut d liu ra led, ngoi vic dng module SPI xut d liu ta cn phi c thm mt tn hiu clock tc ng ln IC74595 th d liu ni tip ca ta mi chuyn qua song song v hin th ra led. Do ta phi vit thm mt hm to clock trn chn define khi ny l Latch_data. CLOCK_STORAGE BSF LATCH_DATA NOP NOP BCF LATCH_DATA NOP NOP
B mn K Thut My Tnh 64 Thc hnh Vi x l
BSF LATCH_DATA RETURN Bc 10: Cui cng l hm quan trng nht, hm ny c gi trong timer thc hin vic qut led. DISPLAY CALL INCREASING_INDEX UPDATE_DATA RED_SCREEN_BUFFER,RED_DATA UPDATE_DATA GREEN_SCREEN_BUFFER,GREEN_DATA UPDATE_DATA SEVEN_LED_BUFFER,SEVEN_LED_DATA UPDATE_DATA COLUMN_BUFFER,COLUMN_DATA SPI_TRANSMIT RED_DATA SPI_TRANSMIT GREEN_DATA SPI_TRANSMIT SEVEN_LED_DATA SPI_TRANSMIT COLUMN_DATA CALL CLOCK_STORAGE RETURN
6.5 Bi tp
Xy dng ng dng cho php s 1234 chy qua cc led 7 on. Xy dng ng dng cho php 1 dng ch chy qua led ma trn.
B mn K Thut My Tnh
65
Thc hnh Vi x l
Bi 7 :
Ni dung: Kho st cng COM my PC, cc thng s truyn ni tip. Kho st b truyn ni tip ca PIC. Tm hiu cch s dng chng trnh Hyper Terminal truyn nhn ni tip trn my PC. Yu cu: Vit chng trnh giao tip gia my tnh v vi iu khin PIC.
Bc 2: Include file p18f4520.inc vo file uart.asm Bc 3: Khi to PortB l output, PORTC.6 l output, PORTC.7 l input. INIT_PORT CLRF LATB ; Clear PORTB output latches CLRF TRISB ; Config PORTB as all outputs BCF TRISC,6 ; Make RC6 an output
B mn K Thut My Tnh 66 Thc hnh Vi x l
BSF RETURN
TRISC,7
Bc 4: Khi to cc vector ngt org 00000h goto Start org 00008h goto IntVector Start GOTO IntVector RETFIE $ ; Reset Vector ; Interrupt vector
Bc 5: Khi to cho ngt UART, tc 9600baud ti tn s 4Mhz. INIT_UART MOVLW 19h ; 9600 baud @4MHz MOVWF SPBRG BSF BSF BSF BSF TXSTA,TXEN TXSTA,BRGH RCSTA,SPEN RCSTA,CREN ; Enable transmit ; Select high baud rate ; Enable Serial Port ; Enable continuous reception
BCF PIR1,RCIF ; Clear RCIF Interrupt Flag BSF PIE1,RCIE ; Set RCIE Interrupt Enable BSF INTCON,PEIE ; Enable peripheral interrupts BSF INTCON,GIE ; Enable global interrupts RETURN Bc 6: Vit chng trnh trong ngt thc hin nhim v nhn mt d liu t my tnh truyn xung sau gi li k t cho my tnh nhn li. IntVector btfss PIR1,RCIF ; Did USART cause interrupt? goto ISREnd ; No, some other interrupt movlw 06h ; Mask out unwanted bits andwf RCSTA,W ; Check for errors btfss STATUS,Z ; Was either error status bit set? goto RcvError ; Found error, flag it
B mn K Thut My Tnh
67
Thc hnh Vi x l
movf movwf movwf goto return RcvError bcf bsf movlw movwf goto return ISREnd retfie
; Get input data ; Display on LEDs ; Echo character back ; go to end of ISR, restore context,
RCSTA,CREN ; Clear receiver status RCSTA,CREN 0FFh ; Light all LEDs PORTB ISREnd ; go to end of ISR, restore context,
B mn K Thut My Tnh
68
Thc hnh Vi x l
00020h
INIT_PORT INIT_UART Main ; loop to self doing nothing LATB ; Clear PORTB output latches TRISB ; Config PORTB as all outputs TRISC,6 ; Make RC6 an output TRISC,7 ; Make RC7 an input
INIT_PORT clrf clrf bcf bsf RETURN INIT_UART movlw movwf bsf bsf bsf bsf bcf bsf bsf bsf RETURN
19h ; 9600 baud @4MHz SPBRG TXSTA,TXEN; Enable transmit TXSTA,BRGH ; Select high baud rate RCSTA,SPEN RCSTA,CREN ; Enable Serial Port ; Enable continuous reception
PIR1,RCIF ; Clear RCIF Interrupt Flag PIE1,RCIE ; Set RCIE Interrupt Enable INTCON,PEIE ; Enable peripheral interrupts INTCON,GIE; Enable global interrupts
;************************************************************ ; Interrupt Service Routine IntVector btfss goto movlw andwf btfss goto PIR1,RCIF ISREnd 06h RCSTA,W STATUS,Z RcvError ; Did USART cause interrupt? ; No, some other interrupt ; Mask out unwanted bits ; Check for errors ; Was either error status bit set? ; Found error, flag it
B mn K Thut My Tnh
69
Thc hnh Vi x l
movf movwf movwf goto RcvError bcf bsf movlw movwf goto ISREnd retfie end
; Get input data ; Display on LEDs ; Echo character back ; go to end of ISR, restore context, return
RCSTA,CREN ; Clear receiver status RCSTA,CREN 0FFh ; Light all LEDs PORTB ISREnd ; go to end of ISR, restore context, return
7.3 Bi tp
Vit chng trnh trn PC, gi 1 chui string xung board, dng ch ny s chy qua led ma trn hoc LCD. Khi nhn 1 phm trn board nhn, s gi 1 chui string ln PC qua cng COM, vit chng trnh trn PC nhn chui string ny v in ra giao din.
B mn K Thut My Tnh
70
Thc hnh Vi x l
Bi 8 :
Ni dung: Kho st hot ng khi chuyn i A-D. Kho st cc thanh ghi iu khin hot ng khi chuyn i A-D. Yu cu: Vit chng trnh c v hin th gi tr in p thay i bi bin tr.
Bc 2: Include file p18f4520.inc vo file a2d.asm Bc 3: Khi to module ADC ta c th s dng mt cch d dng. InitializeAD Movlw B'00000100' ; Make RA0,RA1,RA4 analog inputs movwf ADCON1 movlw B'11000001' ; Select RC osc, AN0 selected, movwf ADCON0 ; A/D enabled movlw 0x01 movwf ADCON2 call SetupDelay ; delay for 15 instruction cycles bsf ADCON0,GO ; Start first A/D conversion return khi to c module ADC ta ch cn quan tm ch yu ti cc thanh
B mn K Thut My Tnh
71
Thc hnh Vi x l
ghi ADCCON1, ADCCON0, ADCON2. Nh chng trnh khi to trn ta thy u tin phi cu hnh cho cc pin tng ng phi l chn AN0, mc nh ca cc chn ny c chc nng l Input/Output digital. Sau ta phi chn knh ADC tng ng, y ta s dng knh AD0. V mt im quan trng na chnh l bit GO trong thanh ghi ADCON0, khi bt ny c bt ln th module AD mi bt u chuyn i tn hiu. Bc 4: Tip theo l hm c gi tr ADC: Update_adc bsf ADCON0,GO ;start conversion btfsc ADCON0,GO bra $-2 movf ADRESH,W return Sau khi chuyn i tn hiu A-D, gi tr s s c lu vo thanh ghi ADRESH. n y ty vo ng dng c th m ta c th bin i gi tr ny ty theo yu cu m ta mong mun.
8.2 Bi tp
Tch hp module LCD, ly gi tr in th t bin tr hin th ln LCD. S dng module ADC ca Pic o nhit trong phng, dng LCD hin th gi tr nhit .
B mn K Thut My Tnh
72
Thc hnh Vi x l
Bi 9 :
Ni dung: Kho st khi chc nng WDT. Kho st khi chc nng PWM . Kho st cc ch hot ng ca vi iu khin. Yu cu: Vit chng trnh s dng chc nng WDT. Vit chng trnh s dng chc nng PWM iu khin sng ca LED. Vit chng trnh s dng chc nng Power control.
Bc 2: Include file p18f4520.inc vo file pwm.asm. Bc 3: Tch hp module LCD vo project pwm, tham kho bi tp v LCD. Bc 4: Khi to module PWM ta c th s dng mt cch d dng. Init_pwm ;configure CCP1 module for buzzer bcf TRISC,2 movlw 0x80
B mn K Thut My Tnh
73
Thc hnh Vi x l
PR2 ;initialize PWM period 0x80 ;initialize PWM duty cycle CCPR1L CCP1CON,CCP1X CCP1CON,CCP1Y
;postscale 1:1, prescaler 4, Timer2 ON movlw 0x05 movwf T2CON movlw 0x0F ;turn buzzer on movwf CCP1CON return khi to chc nng pwm, u tin ta phi cu hnh cho PORTC2 l output. Tip theo khi to chu k ca PWM thng qua vic cu hnh thanh ghi PR2. Sau ta khi to duty cycle ca xung pwm bng cch cu hnh thanh ghi CCPR1L.
TRISC,2 0x80 PR2 ;initialize PWM period 0x80 ;initialize PWM duty cycle CCPR1L CCP1CON,CCP1X CCP1CON,CCP1Y
;postscale 1:1, prescaler 4, Timer2 ON movlw 0x05 movwf T2CON movlw 0x0F ;turn buzzer on movwf CCP1CON return END
9.3 Bi tp
Tm hiu v hin thc chng trnh iu khin RC Servo.
B mn K Thut My Tnh
75
Thc hnh Vi x l