Professional Documents
Culture Documents
May Dien Toan Tap
May Dien Toan Tap
C1
D13
33p
X1 D15
CRYSTAL LED-RED
C2
U1 D14
VCC
13 33
R1 LED-RED
33p
14
OSC1/CLKIN RB0/INT
34
R2
1
OSC2/CLKOUT RB1
35
R3
100 D16
MCLR/Vpp/THV RB2
36
R4
100 LED-RED
RB3/PGM R5
100
R15 2
RA0/AN0 RB4
37 R6
100 D4
10K 3 38 R7 LED-RED
RA1/AN1 RB5 100
4 39 R8
RA2/AN2/VREF- RB6/PGC 100
5 40
6
RA3/AN3/VREF+ RB7/PGD 100 D6
RA4/T0CKI 100 LED-RED
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI
16
8
RC1/T1OSI/CCP2
17
D5
RE0/AN5/RD RC2/CCP1 LED-RED
9 18
RE1/AN6/WR RC3/SCK/SCL
10 23
RE2/AN7/CS RC4/SDI/SDA
24
D7
RC5/SDO LED-RED
25
RC6/TX/CK
26
RC7/RX/DT
LED-RED
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877
BÀI 1 : CHƯƠNG TRÌNH MỘT LED SÁNG DỊCH PORTB DÙNG LỆNH XOAY
CÁCH 1:
ORG 0x000
GOTO MAIN
ORG 0x0005
MAIN
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
LOOP
MOVLW B'10000000'
MOVWF PORTB
clrc
LAP
CALL DELAY
RRF PORTB,1
BTFSS STATUS,0
GOTO LAP
GOTO LOOP
;===========================================
DELAY
MOVLW D'10'
MOVWF COUNT_H
NAPLAI2
MOVLW D'100'
MOVWF COUNT_L
NAPLAI1
MOVLW D'100'
MOVWF COUNT_M
LOOP1
DECFSZ COUNT_M,1
GOTO $-1
DECFSZ COUNT_L,1
GOTO NAPLAI1
DECFSZ COUNT_H,1
GOTO NAPLAI2
RETURN
END
;*****************************************************************
CÁCH 2:
ORG 0x000
GOTO START
;=============================================
START
;================================================
;KHOI TAO PORTB
;===========================================
BCF STATUS,RP1
BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
;============================================
;VONG LAP CHUONG TRINH
;===========================================
MAIN
MOVLW b'00000001'
MOVWF PORTB
clrc
LOOP
CALL DELAY
RLF PORTB,1
BTFSS STATUS,0
GOTO LOOP
GOTO MAIN
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D2 CLRF COUNT_2
D1 DECFSZ COUNT_2
GOTO D1
DECFSZ COUNT_1
GOTO D1
RETURN
END
;********************************************************************
C1
RP1
33p 10K
X1
CRYSTAL
C2
1
2
3
4
5
6
7
8
9
VCC
VCC
33p
R15 U1
10K
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36 CATOED CHUNG
RB3/PGM
2 37 R15
RA0/AN0 RB4
3 38 A
4
RA1/AN1 RB5
39 B
R11
5
RA2/AN2/VREF- RB6/PGC
40 C
R13
220R
6
RA3/AN3/VREF+ RB7/PGD
D
R12
220R
7
RA4/T0CKI
15 E
R14
220R
RA5/AN4/SS RC0/T1OSO/T1CKI
16 A F
R9
220R
RC1/T1OSI/CCP2
B G
R10
220R
8 17 220R
RE0/AN5/RD RC2/CCP1
9 18 C
RE1/AN6/WR RC3/SCK/SCL 220R
10 23 D
RE2/AN7/CS RC4/SDI/SDA
24 E
RC5/SDO
25 F
RC6/TX/CK
26 G
RC7/RX/DT
R1
19 R2
RD0/PSP0
20 R3
100R
RD1/PSP1
21 R4
100R
RD2/PSP2
22 R5
100R
RD3/PSP3
27 R6
100R
RD4/PSP4
28 R7
100R
RD5/PSP5
29 R8
100R
RD6/PSP6
30 100R
RD7/PSP7
100R
PIC16F877
D8 D3 D1 D2 D12 D11 D9 D10
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
BÀI 2A : CHƯƠNG TRÌNH ĐIỂU KHIỂN 8 LED ĐƠN NỐI VỚI PORTD, MỘT NÚTNHẤN SW 1 (NỐI VỚI
CHÂN RB1) .(SƠ ĐỒ MẠCH HÌNH TRÊN). KHI SW MỞ THÌ CHẠY CHƯƠNG TRÌNH 1, KHI SW ĐÓNG
CHẠY CHƯƠNG TRÌNH 2. KIỂM TRA SW LIÊN TỤC
ORG 0x000
GOTO START
ORG 0x0005
START
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTD
CLRF PORTB
BSF STATUS,RP0
MOVLW b'11111111'
MOVWF TRISB
CLRF TRISD
BCF STATUS,RP0
MAIN
MOVLW b'00000000'
MOVWF PORTD
BTFSC PORTB,1
GOTO CTRINH1
GOTO CTRINH2
;=========================================
CTRINH1
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
LAP BSF STATUS,0
RRF PORTD,1
CALL delay_100ms
BTFSS PORTB,1
GOTO CTRINH2
BTFSS STATUS,0
GOTO LAP
GOTO CTRINH1
;=====================================
CTRINH2
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
BTFSC PORTB,1 ; KTRA SW MO
GOTO CTRINH1
MOVLW b'00011000'
MOVWF PORTD
CALL delay_100ms
BTFSC PORTB,1 ; KTRA SW MO
GOTO CTRINH1
MOVLW b'00111100'
MOVWF PORTD
CALL delay_100ms
BTFSC PORTB,1 ; KTRA SW MO
GOTO CTRINH1
MOVLW b'01111110'
MOVWF PORTD
CALL delay_100ms
BTFSC PORTB,1 ; KTRA SW MO
GOTO CTRINH1
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
CALL delay_100ms
BTFSC PORTB,1 ; KTRA SW MO
GOTO CTRINH1
GOTO CTRINH2
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
;=================================
delay_100ms
MOVLW d'100'
MOVWF count1
d2
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
END
;******************************************************
BÀI 2B : MUỖI LẦN NHẤN NÚT Ở CHÂN RB0 THÌ LED SÁNG DỊCH TRÊN PORT D
CÁCH 1:
GOTO MAIN
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
END
;***************************************************
CÁCH 2:
CALL DELAY
C2 BTFSS PORTB,0
GOTO C2
CALL DELAY
RRF PORTD,1 ; XOAY PHAI PORTD 1 LAN
BTFSS STATUS,0 ; KTRA BIT0 = 1 ? Y NHAY MAIN,
; N NHAY LOOP
GOTO LOOP
GOTO MAIN
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
END
;********************************************************
BÀI 3A : CHƯƠNG TRÌNH ĐIỂU KHIỂN 8 LED ĐƠN NỐI VỚI PORTD :
KHI NHẤN NÚT SW 1 (NỐI VỚI CHÂN RB1) RESET TẮT 8 LED
KHI NHẤN NÚT SW 2 (NỐI VỚI CHÂN RB2) TĂNG GIÁ TRỊ Ở PORTD,
HIỂN THỊ DƯỚI DẠNG NHỊ PHÂN RA 8 LED ĐƠN.(SƠ ĐỒ MẠCH HÌNH TRÊN)
TITLE "SW.ASM"
PROCESSOR 16F877 ; Define MCU type
__CONFIG 0x3733 ; Set config fuses
; Register Label Equates....................................
PORTB EQU 0x06 ; Port B Data Register
TRISB EQU 0x86
PORTD EQU 0x08 ; Port D Data Register
TRISD EQU 0x88 ; Port B Direction Register
Timer EQU 0x20 ; GPR used as delay counter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Initialise Port B (Port A defaults to inputs).............
BANKSEL TRISD ; Select bank 1
MOVLW b'00000000' ; Port B Direction Code
MOVWF TRISD ; Load the DDR code into F86
MOVLW b'11111111' ; Port B Direction Code
MOVWF TRISB ; Load the DDR code into F86
BANKSEL PORTD ; Select bank 0
GOTO reset ; Jump to main loop
; 'delay' subroutine ........................................
delay
MOVWF Timer ; Copy W to timer register
down
DECFSZ Timer ; Decrement timer register
GOTO down ; and repeat until zero
RETURN ; Jump back to main program
; Start main loop ...........................................
reset
CLRF PORTD ; Clear LEDs
start
BTFSS PORTB,1 ; Reset?
GOTO reset ; Yes - clear LEDs
BTFSC PORTB,2 ; Step on?
GOTO start ; No - wait
MOVLW H'FF' ; Delay count literal
CALL delay ; Wait for count
BTFSS PORTB,2 ; Step on?
GOTO start ; Yes – wait
INCF PORTD ; Increment LEDs
GOTO start ; Repeat always
END ; Terminate source code
;***************************************************
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
;=====================================
;VONG LAP CHUONG TRINH CHINH
;========================================
MAIN2
CLRF PORTB
CALL DELAY
CLRF M
MOVLW D'8'
MOVWF SCK
X21
MOVF SCK,0
MOVWF SLX
MOVLW H'00'
MOVWF BTG
SETC
X11
RLF BTG
CLRC
MOVF BTG,0
IORWF M,0
MOVWF PORTB
CALL DELAY
DECFSZ SLX
GOTO X11
MOVF PORTB,0
MOVWF M
DECFSZ SCK
GOTO X21
GOTO MAIN2
;========================================
;CHUONG TRINH CON DELAY
;=========================================
DELAY
MOVLW D'225'
MOVWF COUNT1
D1
MOVLW 0xC7
MOVWF COUNTA
MOVLW 0x01
MOVWF COUNTB
DELAY_0
DECFSZ COUNTA,1
GOTO $+2
DECFSZ COUNTB,1
GOTO DELAY_0
DECFSZ COUNT1,1
GOTO D1
RETURN
END
:*************************************************************
R1R2R3R4
10k10k10k10k
U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36
RB3/PGM
2 37
RA0/AN0 RB4
3 38
4
RA1/AN1 RB5
39 D4
RA2/AN2/VREF- RB6/PGC
5 40
RA3/AN3/VREF+ RB7/PGD
6
7
RA4/T0CKI
15 D6
RA5/AN4/SS RC0/T1OSO/T1CKI LED-RED
16
RC1/T1OSI/CCP2
8 17
9
RE0/AN5/RD RC2/CCP1
18
D5
RE1/AN6/WR RC3/SCK/SCL LED-RED
10 23
RE2/AN7/CS RC4/SDI/SDA
24
RC5/SDO
25
D7
RC6/TX/CK LED-RED
26
RC7/RX/DT
19 LED-RED
RD0/PSP0
20 U2
RD1/PSP1
21 7 13 QA
RD2/PSP2 A QA
22 1 12 QB
RD3/PSP3 B QB
27 2 11 QC
RD4/PSP4 C QC
28 6 10 QD
RD5/PSP5 D QD
29 9 QE
RD6/PSP6 QE
30 3 15 QF
RD7/PSP7 LT QF
4 14 QG
BI QG
PIC16F877 5
LE/STB
4511
BÀI 4 : CHƯƠNG TRÌNH MỖI LẦN NHẤN NÚT Ở PORTB BIT RB0, TĂNG BIẾN ĐẾM TỪ 0 9 VÀ
HIỂN THỊ RA LED 7 ĐOẠN NỐI VỚI PORTD QUA IC4511
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
END
;****************************************************
BÀI 5 : CHƯƠNG TRÌNH MỖI LẦN NHẤN NÚT Ở PORTB BIT RB0, GIẢM BIẾN ĐẾM TỪ 9 0 VÀ
HIỂN THỊ RA LED 7 ĐOẠN NỐI VỚI PORTD
include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &_WRT_OFF &
_LVP_OFF & _CPD_OFF
;--------------------------------------------------------------------------------------------------------------
;Khai bao hang
;--------------------------------------------------------------------------------------------------------------
SW1 EQU 0
PORTB EQU 06H
TRISB EQU 86H
PORTD EQU 08H
TRISD EQU 88H
COUNT_1 EQU 0x20
COUNT_2 EQU 0x21
DEM EQU 22H
ORG 0x000
GOTO START
;=====================================
;KHAI BAO PORTB VÀ PORTD
;=====================================
START
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTD
CLRF PORTB
BSF STATUS,RP0
MOVLW b'00001111' ; THIET LAP I/O PORTB
MOVWF TRISB
CLRF TRISD ; PORTD OUTPUT
BCF STATUS,RP0
;===========================
MAIN
MOVLW D'9'
MOVWF DEM
LOOP
MOVF DEM,0
MOVWF PORTD
C1 BTFSC PORTB,0
GOTO C1 ;NHAY VE SAU 1 DONG LENH
CALL DELAY
C2 BTFSS PORTB,0
GOTO C2
CALL DELAY
MOVF DEM,0
XORLW D’0’
BTFSS STATUS,Z
GOTO GIAM_DEM
GOTO MAIN
GIAM_DEM
DECFSZ DEM,1
NOP
GOTO LOOP
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
END
;***************************************************
BÀI 6: CHƯƠNG TRÌNH NGẮT NGOÀI INT (RB0) TĂNG BIẾN ĐẾM TỪ 0 9 HIỂN THỊ RA LED 7
ĐOẠN (LED 7 DOẠN NỐI VỚI PORTA QUA IC4511)
CÁCH 1:
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
END
;*****************************************************
CAT CHUNG
U2
RA0 7 13
A QA
RA1 1 12
B QB
RA2 2 11
C QC
RA3 6 10
D QD
9
QE
3 15
LT QF
4 14
BI QG
5
VCC
LE/STB
4511
R1R2R3R4
RC4
RC5
RC6
RC7
QG
QC
QD
QA
QB
QE
QF
10k10k10k10k
VCC
QG
QC
QD
QA
QB
QE
QF
13
12
11
10
15
14
9
U1 U3
QG
QC
QD
QF
QA
QB
QE
13 33 4511
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36 D4
RB3/PGM R5
LE/STB
RA0 2 37
RA1
RA0/AN0 RB4 R6
3 38 R7
100 D6
LT
RA1/AN1 RB5
BI
C
D
A
B
RA2
RA3
4
RA2/AN2/VREF- RB6/PGC
39 R8
100 LED-RED
5 40 100
RA3/AN3/VREF+ RB7/PGD
RA4
7
1
2
6
3
4
5
6
RA5 7
RA4/T0CKI
15 RC0
100 D5
RA5/AN4/SS RC0/T1OSO/T1CKI LED-RED
16 RC1
RC1/T1OSI/CCP2
8 17 RC2
9
RE0/AN5/RD RC2/CCP1
18 RC3 D7
RE1/AN6/WR RC3/SCK/SCL LED-RED
10 23 RC4
RE2/AN7/CS RC4/SDI/SDA
24 RC5
RC0
RC1
RC2
RC3
RC5/SDO VCC
25 RC6 LED-RED
RC6/TX/CK
26 RC7
RC7/RX/DT
R9
RD0/PSP0
19 R10
RD1/PSP1
20 R11
100
RD2/PSP2
21 R12
100
22 R13
100
RD3/PSP3
27 R14
100
RD4/PSP4
28 R15
100
RD5/PSP5
29 R16
RD6/PSP6 100
30 100
RD7/PSP7
100
PIC16F877
D1 D2 D3 D8 D9 D10 D11 D12
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
CÁCH 2:
;=====================================
;CHUONG TRINH NGAT
;=====================================
ORG 0x04 ; VECTO NGAT NGOAI RB0
MOVWF TEMP
INCF DEM,1
MOVLW 0x0A
SUBWF DEM,0
BTFSS STATUS,0 ; <=> BTFSS STATUS,Z
GOTO CARRY_ON
GOTO CLEAR
CARRY_ON
BCF INTCON,1
MOVFW TEMP
RETFIE
CLEAR
CLRF DEM
BCF INTCON,1
RETFIE
;==================================================
;KHAI BAO NGAT
;=================================================
INIT
BSF INTCON,7 ;CHO PHEP NGAT TOAN CUC
BSF INTCON,4 ;CHO PHEP NGAT NGOAI RB0 INT
BCF INTCON,1 ; XOA CO NGAT INTF
;====================================================
;KHAI BAO PORT I/O
;====================================================
BSF STATUS,5 ; CHON BANK1
CLRF PORTA
CLRF PORTB
MOVLW b'00001111'
MOVWF TRISB ;
CLRF TRISA ; PORTA LA OUTPUT
MOVLW D'0'
MOVWF DEM
BCF STATUS,5 ; VE BANK0
;=============================
;CHUONG TRINH CHINH
;===========================
MAIN
MOVF DEM,0 ; CHO DEM VAO W
MOVWF PORTA ; CHO PORTA = W
GOTO MAIN
;==============================
;CHUONG TRINH DELAY
;==============================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
END
;*********************************************************
BÀI 7: CHƯƠNG TRÌNH NGẮT NGOÀI INT (RB0) GIẢM ĐẾM TỪ 9 0 HIỂN THỊ RA LED 7 ĐOẠN
CÁCH 1: CHƯƠNG TRÌNH NGẮT NGOÀI INT (RB0) GIẢM ĐẾM TỪ 9 0 HIỂN THỊ RA LED 7
ĐOẠN (LED 7 DOẠN NỐI VỚI PORTD QUA IC4511)
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
END
;*****************************************************
CÁCH 2: NGẮT NGOÀI RB0 GIẢM DẾM TỪ 9 VỀ 0 DÙNG PHƯƠNG PHÁP TRA BẢNG (LED 7 ĐOẠN
DÙNG LOẠI CATOT CHUNG) NỐI Ở PORTC
;==================================================
;KHAI BAO NGAT
;=================================================
ORG 0x050
INIT
BSF INTCON,7 ;CHO PHEP NGAT TOAN CUC
BSF INTCON,4 ;CHO PHEP NGAT NGOAI RB0 INT
BCF INTCON,1 ; XOA CO NGAT INTF
;=====================================================
;KHAI BAO PORT I/O
;====================================================
BSF STATUS,5 ; CHON BANK1
CLRF PORTC
MOVLW b'00001111'
MOVWF TRISB ; CHAN RB0 VA RB1 INPUT, CON LAI LA OUTPUT
CLRF TRISC ; PORTA LA OUTPUT
BCF STATUS,5 ; VE BANK0
MOVLW D'9'
MOVWF DEM
;===========================
;CHUONG TRINH LAP VONG
;===============================
MAIN
CALL TABLE
MOVWF PORTC
CALL DELAY
GOTO MAIN
;======================================
;CHUONG TRINH DELAY
;===========================================
DELAY
MOVLW 0xFF
MOVWF COUNT3
D2
DECFSZ COUNT3
GOTO D2
RETURN
;======================================
TABLE
MOVF DEM,W
ADDWF PCL,1
DT 0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,
0xFA,0x0E,0xFE,0xDE,0xEE,0xF8,0x72,0xBC,0xF2,0xE2
;==========================================================================
TABLE1
MOVF DEM,W ; Get key count
ADDWF PCL ; and calculate jump
NOP ; into table
RETLW B'01111110' ; Code for '0' 7EH
RETLW B'00001100' ; Code for '1' 0CH
RETLW B'10110110' ; Code for '2' B6H
RETLW B'10011110' ; Code for '3' 9EH
RETLW B'11001100' ; Code for '4' CCH
RETLW B'11011010' ; Code for '5' DAH
RETLW B'11111010' ; Code for '6' FAH
RETLW B'00001110' ; Code for '7' 0EH
RETLW B'11111110' ; Code for '8' FEH
RETLW B'11011110' ; Code for '9' DEH
RETLW B'11101110' ; Code for 'A' EEH
RETLW B'11111000' ; Code for 'B' F8H
RETLW B'01110010' ; Code for 'C' 72H
RETLW B'10111100' ; Code for 'D' BCH
RETLW B'11110010' ; Code for 'E' F2H
RETLW B'11100010' ; Code for 'F' E2H
END
;*******************************************************************
BÀI 8: CHƯƠNG TRÌNH MỘT LED SÁNG DỊCH Ở PORTB DÙNG TIMER1 LÀM DELAY
START
MOVLW B'10000000'
MOVWF PORTB
CLRC
LOOP
CALL DELAY
RRF PORTB,1
BTFSS STATUS,0
GOTO LOOP
GOTO START
END
;***********************************************************
BÀI 9 : CHƯƠNG TRÌNH NGẮT TIMER0 TĂNG BIẾN ĐẾM TỪ 0 9 HIỂN THỊ RA LED 7 ĐOẠN Ở
PORTA.
;------------------------------------------------------------
ORG 0x000
GOTO INIT
;-------------------------------------------------------------------------------------------------------------
; CHUONG TRINH NGAT
;-------------------------------------------------------------------------------------------------------------
ISR
;------------------------------------------------------------------------------------------------------------
; doan chuong trinh bat buoc khi bat dau chuong trinh ngat
;------------------------------------------------------------------------------------------------------------
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
BTFSS INTCON,TMR0IF ; kiem tra co ngat timer0
GOTO exit_int
BCF INTCON,TMR0IF ; xoa co ngat timer0
;-----------nhiem vu khi ngat ------------------------------
INCF DEM1,1
MOVLW D'200'
XORWF DEM1,0
BTFSS STATUS,Z
GOTO exit_int
CLRF DEM1
INCF DEM,1
MOVLW 0x0A
XORWF DEM,0
BTFSS STATUS,Z
GOTO exit_int
CLRF DEM
END
;**************************************************
BÀI 10 : CHƯƠNG TRÌNH ĐIỀU KHIỂN 8 LED ĐƠN NỐI VỚI PORTB, BAN ĐẦU 8 LED SÁNG, TẮT DẦN
TỪ TRÁI SANG PHẢI, RỒI LẠI SÁNG TỪ PHẢI SANG TRÁI.
ORG 0x000
GOTO MAIN
ORG 0x008
;=============================================
MAIN
;===================================
;KHOI TAO PORTB
;===========================================
BCF STATUS,RP1
BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP1
BCF STATUS,RP0
MOVLW H'FF'
MOVWF PORTB
;============================================
;VONG LAP CHUONG TRINH
;===========================================
START
MOVLW H'FF'
MOVWF PORTB
CALL WAIT
AAA
BCF STATUS,0 ;<=> CLRC
RLF PORTB,1
CALL WAIT
BTFSC PORTB,7
GOTO AAA
;=============================================
BBB
BSF STATUS,0 ;<=> CLRC
RRF PORTB,1
CALL WAIT
BTFSS PORTB,0
GOTO BBB
GOTO AAA
;=============================================
;CHUONG TRINH DELAY
;===========================================
WAIT
MOVLW H'FF'
MOVWF BIEN1
DEL1 CALL DELAY
DECFSZ BIEN1,1
GOTO DEL1
RETURN
DELAY
CLRF BIEN0
DEL DECFSZ BIEN0,1
GOTO DEL
RETURN
END
;********************************************************
BÀI 11 : CHƯƠNG TRÌNH HIỂN THỊ TĂNG DẦN TỪ 0 ĐẾN 9999 RA 4 LED 7 ĐOẠN NỐI VỚI PORTB
(DỮU LIỆU) VÀ PORTA (ĐIỀU KHIỂN LED SÁNG)
CATOT CHUNG
C1
33p
X1
CRYSTAL
C2
VCC
33p
VCC Q1
U1 R3 2N2222
13 33 R4
OSC1/CLKIN RB0/INT
R1 14
OSC2/CLKOUT RB1
34 R5
330R
10k 1 35 R6
MCLR/Vpp/THV RB2
36
330R Q2
RB3/PGM R7
330R
2N2222
2 37 R8
RESET 3
RA0/AN0 RB4
38
330R
RA1/AN1 RB5 R9
330R
4 39 330R
RA2/AN2/VREF- RB6/PGC
5 40 330R
RA3/AN3/VREF+ RB7/PGD
6 R10
RA4/T0CKI
7 15 R11
RA5/AN4/SS RC0/T1OSO/T1CKI
16 Q3
RC1/T1OSI/CCP2 R2
1k
2N2222
8 17 R12
1k
RE0/AN5/RD RC2/CCP1
9 18 1k
RE1/AN6/WR RC3/SCK/SCL
10 23 1k
RE2/AN7/CS RC4/SDI/SDA
24
RC5/SDO
25 Q4
RC6/TX/CK 2N2222
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877
CLRF STATUS
MOVLW 0x00
MOVWF PCLATH
GOTO START
;==========================
;KHAI BAO PORTB VÀ PORTD
;==========================
START
ORG 0x005
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTB
CLRF PORTC
BSF STATUS,RP0
CLRF TRISB
CLRF TRISC
BCF STATUS,RP0
;===========================
;CHUONG TRINH LAP VONG
;===========================
X5
MOVLW D'0'
MOVWF NGHIN
X4
MOVLW D'0'
MOVWF TRAM
X3
MOVLW D'0'
MOVWF CHUC
X1
MOVLW D'0'
MOVWF DVI
X2
CALL BCD_7DOAN
CALL DELAY_HIENTHI
INCF DVI
MOVF DVI,0
XORLW D'10'
BTFSS STATUS,Z
GOTO X2
INCF CHUC
MOVF CHUC,0
XORLW D'10'
BTFSS STATUS,Z
GOTO X1
INCF TRAM
MOVF TRAM,0
XORLW D'10'
BTFSS STATUS,Z
GOTO X3
INCF NGHIN
MOVF NGHIN,0
XORLW D'10'
BTFSS STATUS,Z
GOTO X4
GOTO X5
;===============================
BCD_7DOAN
MOVF DVI,0
CALL TABLE
MOVWF BIEN1
MOVF CHUC,0
CALL TABLE
MOVWF BIEN2
MOVF TRAM,0
CALL TABLE
MOVWF BIEN3
MOVF NGHIN,0
CALL TABLE
MOVWF BIEN4
RETURN
;==============================
DELAY_HIENTHI
MOVLW D'2'
MOVWF COUNT1
DEL1
MOVLW D'10'
MOVWF COUNT2
DEL2
CALL HIENTHI
DECFSZ COUNT2
GOTO DEL2
DECFSZ COUNT1
GOTO DEL1
RETURN
;===============================
HIENTHI
MOVF BIEN1,0
MOVWF PORTB
MOVLW B'00000001'
MOVWF PORTC
CALL delay_10ms
MOVF BIEN2,0
MOVWF PORTB
MOVLW B'00000010'
MOVWF PORTC
CALL delay_10ms
MOVF BIEN3,0
MOVWF PORTB
MOVLW B'000000100'
MOVWF PORTC
CALL delay_10ms
MOVF BIEN4,0
MOVWF PORTB
MOVLW B'00001000'
MOVWF PORTC
CALL delay_10ms
RETURN
;======================================
;CHUONG TRINH DELAY
;===========================================
DELAY
MOVLW D'10'
MOVWF COUNT3
D1 DECFSZ COUNT3
GOTO D1
RETURN
;======================================
delay_10ms
MOVLW d'4'
MOVWF count1
d2
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
;=========================================================
TABLE ADDWF PCL,1
DT 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
END
;*******************************************************
BÀI 12 : CHƯƠNG TRÌNH NGẮT TIMER0 LÀM SÁNG TẮT LED Ở CHÂN RB0 (PORTB,0)
;----------------------------------------
CLRF TMR0 ; xoa thanh ghi TMR0
CLRF INTCON ; xoa thanh ghi INTCON
BSF STATUS,RP0 ; chon BANK0
BCF STATUS,RP01
MOVLW b'10000001' ; tat chuc nang dien tro keo len PORTB,
MOVWF OPTION_REG
CLRF TRISB
BCF STATUS,RP0 ; chon BANK0
BSF INTCON,TMR0IE ; cho phep ngat Timer0
BSF INTCON,PEIE ; cho phep ngat ngoai vi
BSF INTCON,GIE ; cho phep ngat toan cuc
CLRF PORTB
MAIN
GOTO $ ; cho ngat o day
;=============================================
NGAT_TIMER1
;--------------phan bat buoc ---------------------------
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
;--------------------------------
BTFSS INTCON,TMR0IF
GOTO THOAT_NGAT ;
BCF INTCON,TMR0IF
BTFSS PORTB,0
GOTO SET_RB0
CLR_RB0
BCF PORTB,0
GOTO THOAT_NGAT
SET_RB0
BSF PORTB,0
THOAT_NGAT
;------------phan bat buoc-------------
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;===============================================
END
;*********************************************************
BÀI 13 : CHƯƠNG TRÌNH NGẮT TIMER2 TĂNG GIÁ TRỊ BIẾN ĐẾM HIỂN THỊ RA LED 7 ĐOẠN TỪ 0
9 Ở PORTA
;---------------------------------------------------------------------------------------------------------------
THOAT_NGAT
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;----------------------------------------------------------------------------------------------------------------
; Ket thuc chuong trinh ngat
;----------------------------------------------------------------------------------------------------------------
ORG 0x000
GOTO start
ORG 0x050
;----------------------------------------------------------------------------------------------------------------
; Bat dau chuong trình chính
;----------------------------------------------------------------------------------------------------------------
start
;---------------------------------------------
; Khai bao cac PORT
;---------------------------------------------
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0x00
MOVWF TRISA
BCF STATUS,RP0
;----------------------------------------
; KHAI BAO Timer2
;----------------------------------------
MOVLW b'11111111' ; postscaler 1:16, prescaler 1:16, Timer2 ON
MOVWF T2CON
BSF STATUS,RP0
MOVLW .249 ; dat truoc gia tri can so sanh thanh ghi TMR2
MOVWF PR2 ; vao thanh ghi PR2
BSF PIE1,TMR2IE ; cho phep ngat Timer2
BCF STATUS,RP0
BSF INTCON,PEIE ; cho phep ngat ngoai vi
BSF INTCON,GIE ; cho cho phep ngat toan cuc
;----------------------------------------------
; Khoi tao cac bien
;----------------------------------------------
CLRF DEM
;----------------------------------------------
; VONG LAP CHING
;----------------------------------------------
MAIN
MOVF DEM,0
MOVWF PORTA
GOTO MAIN
;------------------------------------------------------------------------
END
;********************************************
BÀI 14 : CHƯƠNG TRÌNH NGẮT TIMER1 TĂNG GIÁ TRỊ BIẾN ĐẾM HIỂN THỊ RA LED 7 ĐOẠN TỪ 0
9 Ở PORTA
ORG 0x0004
GOTO ISR
;-----------------------------------------------------------------------------
; Chuong trinh ngat
;-----------------------------------------------------------------------------
ISR
;---------------------------------------------------------------------------
; doan chuong trinh bat buoc khi bat dau chuong trinh ngat
;--------------------------------------------------------------------------
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
;--------------------------------------------------------------------------------
; Kiem tra co ngat
;--------------------------------------------------------------------------------
BTFSS PIR1,TMR1IF ; kiem tra co ngat timer1
GOTO EXIT_INT
BCF T1CON,TMR1ON ; tam thoi tat timer1 de khoi tao lai
;--------------------------------------------------------------------------------
; cac thao tac chinh cua chuong trinh ngat
;--------------------------------------------------------------------------------
CLRF TMR1L ; khoi tao cac gia tri chua trong thanh
CLRF TMR1H ; ghi TMRH va TMRL
MOVLW 0x61 ; nap gia tri vao cac thanh ghi dem cua Timer1
MOVWF TMR1H ; gia tri 25000 (25000 -> 61A8h)
MOVLW 0xA8 ; Note “gia tri nay cang nho, time ngat cang cham”.
MOVWF TMR1L
BSF T1CON,TMR1ON ; Bat Timer1
BCF PIR1,TMR1IF ; xoa co ngat
INCF DEM
MOVLW d'10'
XORWF DEM,0
BTFSS STATUS,Z
GOTO EXIT_INT
CLRF DEM
;----------------------------------------------------------------------------------------------------------------
; DOAN CHUUONG TRINH BAT BUOC KHI KE THUC CHUONG TRINH NGAT
;----------------------------------------------------------------------------------------------------------------
EXIT_INT
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;---------------------------
ORG 0x0000
GOTO START
ORG 0x050
;---------------------------------------------------------------------------------------------------
; Chuong trình chính
;---------------------------------------------------------------------------------------------------
START
;---------------------------------------------------------------
; khoi tao cac port dieu khien
;---------------------------------------------------------------
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0x00 ; PORTA <-output
MOVWF TRISA
BCF STATUS,RP0
;-----------------------------------------------------------------
; Khoi tao Timer1
;-----------------------------------------------------------------
CLRF T1CON
CLRF INTCON
CLRF TMR1H
CLRF TMR1L
BSF STATUS,RP0 ; Chon BANK1
CLRF PIE1
BSF PIE1,TMR1IE ; Cho phep ngat Timer1
BCF STATUS,RP0 ; ChoN BANK0
CLRF PIR1 ; xoa tat ca cac co ngat
MOVLW 0X30 ; prescaler 1:8, xung dem la xung lenh, tam thoi
MOVWF T1CON ; tat Timer1
MOVLW 0x61 ; Khoi tao gia tri trong thanh ghi TMR1H
MOVWF TMR1H ; vao TMR1L (TMR1H:TMR1L = 25000)
MOVLW 0xA8
MOVWF TMR1L
BSF T1CON,TMR1ON ; Bat Timer1
;***************************************
U1 CATOED CHUNG
13 33 R4
OSC1/CLKIN RB0/INT
14 34 A
1
OSC2/CLKOUT RB1
35 B
R5
MCLR/Vpp/THV RB2
36 C
R6
220R VCC
2
RB3/PGM
37 D
R7
220R
3
RA0/AN0 RB4
38 E
R8
220R
4
RA1/AN1 RB5
39 F
R9
220R
5
RA2/AN2/VREF- RB6/PGC
40 G
R10
220R
RA3/AN3/VREF+ RB7/PGD 220R
6
RA4/T0CKI 220R
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
16 A R1 R2 R3
8 17 B
RE0/AN5/RD RC2/CCP1 10k 10k 10k
9 18 C
RE1/AN6/WR RC3/SCK/SCL
10 23 D
RE2/AN7/CS RC4/SDI/SDA
24 E
RC5/SDO
25 F
RC6/TX/CK
26 G
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
3
RD2/PSP2
22
RD3/PSP3
RD4/PSP4
RD5/PSP5
27
28
A 1 2 3
29
RD6/PSP6
30
RD7/PSP7
PIC16F877
B 4 5 6
C 7 8 9
D 0 #
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; KEYPAD.ASM MPB Ver 1.0 28-8-05
;
; Reads keypad and shows digit on display
; Design file KEYPAD.DSN
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROCESSOR 16F877
PCL EQU 002 ; Program Counter
PORTC EQU 007 ; 7-Segment display
PORTD EQU 008 ; 3x4 keypad
TRISC EQU 087 ; Data direction
TRISD EQU 088 ; registers
Key EQU 020 ; Count of keys
; Initialise ports.........................................
BANKSEL TRISC ; Display
CLRW ; all outputs
MOVWF TRISC ; PORTC OUTPUT
MOVLW B'00000111' ; Keypad
MOVWF TRISD ; bidirectional
BANKSEL PORTC ; Display off
CLRF PORTC ; initially
GOTO main ; jump to main
; Check a row of keys .....................................
row
INCF Key ; Count first key
BTFSS PORTD,0 ; Check key
GOTO found ; and quit if on
INCF Key ; and repeat
BTFSS PORTD,1 ; for second
GOTO found ; key
INCF Key ; and repeat
BTFSS PORTD,2 ; for third
GOTO found ; key
GOTO next ; go for next row
; Scan the keypad..........................................
scan
CLRF Key ; Zero key count
BSF 3,0 ; Set Carry Flag
BCF PORTD,4 ; Select first row
newrow
GOTO row ; check row
next
BSF PORTD,3 ; Set fill bit
RLF PORTD ; Select next row
BTFSC 3,0 ; 0 into carry flag?
GOTO newrow ; if not, next row
GOTO scan ; if so, start again
found
RETURN ; quit with key count
; Display code table.......................................
table
MOVF Key,W ; Get key count
ADDWF PCL ; and calculate jump
NOP ; into table
RETLW B'00001100' ; Code for '1'
RETLW B'10110110' ; Code for '2'
RETLW B'10011110' ; Code for '3'
RETLW B'11001100' ; Code for '4'
RETLW B'11011010' ; Code for '5'
RETLW B'11111010' ; Code for '6'
RETLW B'00001110' ; Code for '7'
RETLW B'11111110' ; Code for '8'
RETLW B'11011110' ; Code for '9'
RETLW B'10010010' ; Code for '*'
RETLW B'01111110' ; Code for '0'
RETLW B'11101100' ;Code for '#'
; Output display code......................................
show
CALL table ; Get display code
MOVWF PORTC ; and show it
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Read keypad & display....
main
MOVLW 0FF ; Set all outputs
MOVWF PORTD ; to keypad high
CALL scan ; Get key number
CALL show ; and dsiplay it
GOTO main ; and repeat
END
;****************************************************************
VCC
U1 CATOED CHUNG
13 33 R4
OSC1/CLKIN RB0/INT
14 34 A
1
OSC2/CLKOUT RB1
35 B
R5 VCC
MCLR/Vpp/THV RB2 R6
220R
R11 RB3/PGM
36 C
R7
220R
2 37 D
10k
3
RA0/AN0 RB4
38 E
R8
220R
4
RA1/AN1 RB5
39 F
R9
220R
5
RA2/AN2/VREF- RB6/PGC
40 G
R10
220R
RA3/AN3/VREF+ RB7/PGD 220R
6
RA4/T0CKI 220R
7
RA5/AN4/SS RC0/T1OSO/T1CKI
15 R1 R2 R3 R12
16 A
RC1/T1OSI/CCP2 10k 10k 10k 10k
8 17 B
RE0/AN5/RD RC2/CCP1
9 18 C
RE1/AN6/WR RC3/SCK/SCL
10 23 D
RE2/AN7/CS RC4/SDI/SDA
24 E
RC5/SDO
25 F
RC6/TX/CK
26 G
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
4
RD4/PSP4
28
+
RD5/PSP5
C
RD6/PSP6
RD7/PSP7
29
30
D
ON 0 =
PIC16F877
C 1 2 3
B 4 5 6
A 7 8 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CHUONG TRINH SCAN_KEY 16 BIT
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROCESSOR 16F877
PCL EQU 002
PORTC EQU 007 ; 7-Segment display
PORTD EQU 008 ; 3x4 keypad
TRISC EQU 087 ; Data direction
TRISD EQU 088 ; registers
KEY EQU 020 ; Count of keys
; Initialise ports.........................................
BANKSEL TRISC ; Display
CLRW ; all outputs
MOVWF TRISC ;
MOVLW B'00000111' ; Keypad
MOVWF TRISD ; bidirectional
BANKSEL PORTC ; Display off
CLRF PORTC ; initially
GOTO MAIN ; jump to main
; Check a row of keys .....................................
ROW
INCF KEY ; Count first key
BTFSS PORTD,0 ; Check key
;*****************************************************************************
C1
RP1
33p 10K
X1
CRYSTAL
C2
2
3
4
5
6
7
8
9
VCC
33p
VCC
R20
R16 U1
10K
10K
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36 CATOED CHUNG
RB3/PGM
2 37 R15
RA0/AN0 RB4
3 38 A
4
RA1/AN1 RB5
39 B
R11
5
RA2/AN2/VREF- RB6/PGC
40 C
R13
220R
6
RA3/AN3/VREF+ RB7/PGD
D
R12
220R
RA4/T0CKI
E
R14
220R
7
RA5/AN4/SS RC0/T1OSO/T1CKI
15
A F
R9
220R
NUT NHAN NGAT COUNTER TIMER0 RC1/T1OSI/CCP2
16
B G
R10
220R
8 17 220R
RE0/AN5/RD RC2/CCP1
9 18 C
RE1/AN6/WR RC3/SCK/SCL 220R
10 23 D
RE2/AN7/CS RC4/SDI/SDA
24 E
RC5/SDO
25 F
RC6/TX/CK
26 G
RC7/RX/DT
R1
RD0/PSP0
19 R2
RD1/PSP1
20 R3
100R
RD2/PSP2
21 R4
100R
RD3/PSP3
22 R5
100R
27 R6
100R
RD4/PSP4
28 R7
100R
RD5/PSP5
RD6/PSP6
29 R8
100R
30 100R
RD7/PSP7
100R
PIC16F877
D8 D3 D1 D2 D12 D11 D9 D10
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
BÀI 16 : CHƯƠNG TRÌNH KIỂM NGẮT COUNTER TIMER0 TĂNG BIẾN HIỂN THỊ SỐ TỪ 0 F RA
LED 7 (CATHEOD CHUNG) ĐOẠN NỐI VỚI PORTC
ORG 0x0004
BTFSS INTCON,TMR0IF ; kiem tra co ngat timer0
GOTO EXIT
BCF INTCON,TMR0IF ; xoa co ngat timer0
;-----------nhiem vu khi ngat ------------------------------
INCF COUNT,1
MOVF COUNT,0
XORLW D'16'
BTFSS STATUS,Z
GOTO EXIT
MOVLW D'0'
MOVWF COUNT
;--------------------------------
INIT
;----------------------------------------
; KHAI BAO ngat counter Timer0
;----------------------------------------
CLRF TMR0 ; xoa thanh ghi TMR0
CLRF INTCON ; xoa thanh ghi INTCON
BSF STATUS,RP0
BSF OPTION_REG,7 ;
BSF OPTION_REG,5 ; TIMER0 HD COUNTER
BCF STATUS,RP0 ; chon BANK0
BSF INTCON,TMR0IE ; cho phep ngat Timer0
BSF INTCON,PEIE ; cho phep ngat ngoai vi
BSF INTCON,GIE ; cho phep ngat toan bo cac ngat
MOVLW .255
MOVWF TMR0
;----------------------------------------------
BCF STATUS,RP1
BSF STATUS,RP0 ; BANK1
MOVLW B'111111'
MOVWF TRISA ; THIET LAP I/O PORTA
CLRF TRISC ; PORTA LA OUTPUT
CLRF COUNT
BCF STATUS,RP0 ;
;===============================
;CHUONG TRINH CHINH
;=================================
MAIN
CALL TABLE
MOVWF PORTC
GOTO MAIN
;======================================
;CHUONG TRINH DELAY
;===========================================
DELAY
MOVLW 0xFF
MOVWF COUNT3
D2
DECFSZ COUNT3
GOTO D2
RETURN
;======================================
TABLE
MOVF COUNT,W
ADDWF PCL,1
DT 0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,
0xFE,0xDE,0xEE,0xF8,0x72,0xBC,0xF2,0xE2
TABLE1
MOVF COUNT,W ; Get key count
ADDWF PCL ; and calculate jump
NOP ; into table
RETLW B'01111110' ; Code for '0' 7EH
RETLW B'00001100' ; Code for '1' 0CH
RETLW B'10110110' ; Code for '2' B6H
RETLW B'10011110' ; Code for '3' 9EH
RETLW B'11001100' ; Code for '4' CCH
RETLW B'11011010' ; Code for '5' DAH
RETLW B'11111010' ; Code for '6' FAH
RETLW B'00001110' ; Code for '7' 0EH
RETLW B'11111110' ; Code for '8'FEH
RETLW B'11011110' ; Code for '9' DEH
RETLW B'11101110' ; Code for 'A' EEH
RETLW B'11111000' ; Code for 'B' F8H
RETLW B'01110010' ; Code for 'C' 72H
RETLW B'10111100' ; Code for 'D' BCH
RETLW B'11110010' ; Code for 'E' F2H
RETLW B'11100010' ; Code for 'F' E2H
END
;******************************************************************
BÀI 17A : CHƯƠNG TRÌNH NGẮT_COUNTER TIMER1 TĂNG GIÁ TRỊ BIẾN ĐẾM HIỂN THỊ RA LED 7
ĐOẠN TỪ 0 9 Ở PORTA(QUA IC 4511)
GOTO ISR
;-----------------------------------------------------------------------------
; Chuong trinh ngat
;-----------------------------------------------------------------------------
ISR
;---------------------------------------------------------------------------
; doan chuong trinh bat buoc khi bat dau chuong trinh ngat
;--------------------------------------------------------------------------
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
;--------------------------------------------------------------------------------
; Kiem tra co ngat
;--------------------------------------------------------------------------------
BTFSS PIR1,TMR1IF ; kiem tra co ngat timer1
GOTO EXIT_INT
BCF T1CON,TMR1ON ; tam thoi tat timer1 de khoi tao lai
;--------------------------------------------------------------------------------
; cac thao tac chinh cua chuong trinh ngat
;--------------------------------------------------------------------------------
CLRF TMR1L ; khoi tao cac gia tri chua trong thanh
CLRF TMR1H ; ghi TMRH va TMRL
MOVLW 0xFF ; nap gia tri vao cac thanh ghi dem cua Timer1
MOVWF TMR1H ; gia tri 25000 (25000 -> 61A8h)
MOVLW 0xFF ;gia tri 10000 (10000 -> 2710h)
MOVWF TMR1L
BSF T1CON,TMR1ON ; Bat Timer1 hoat dong lai
BCF PIR1,TMR1IF ; xoa co ngat
INCF DEM
MOVLW d'10'
XORWF DEM,0
BTFSS STATUS,Z
GOTO EXIT_INT
CLRF DEM
;----------------------------------------------------------------------------------------------------------------
; DOAN CHUUONG TRINH BAT BUOC KHI KE THUC CHUONG TRINH NGAT
;----------------------------------------------------------------------------------------------------------------
EXIT_INT
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;---------------------------
ORG 0x0000
GOTO START
ORG 0x050
;---------------------------------------------------------------------------------------------------
; Chuong trình chính
;---------------------------------------------------------------------------------------------------
START
;---------------------------------------------------------------
; khoi tao cac port dieu khien
;---------------------------------------------------------------
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0x00 ; PORTA <-output
MOVWF TRISA
BCF STATUS,RP0
;-----------------------------------------------------------------
; Khoi tao Timer1
;-----------------------------------------------------------------
CLRF T1CON ;xoa thanh ghi T1CON
CLRF INTCON ;xoa thanh ghi INTCON
CLRF TMR1H
CLRF TMR1L
BSF STATUS,RP0 ; Chon BANK1
CLRF PIE1
BSF PIE1,TMR1IE ; Cho phep ngat Timer1
BCF STATUS,RP0 ; ChoN BANK0
CLRF PIR1 ; xoa tat ca cac co ngat
BSF T1CON,1 ;TIMER1 HOAT DONG CHE DO COUNTER
MOVLW 0xFF ; Khoi tao gia tri trong thanh ghi TMR1H
MOVWF TMR1H ; vao TMR1L (TMR1H:TMR1L = 65535 = ffffh)
MOVLW 0xFF ;khi do timer1 dem 1 la tra.
MOVWF TMR1L
BSF T1CON,TMR1ON ; Bat Timer1
BSF INTCON,TMR1IE ; Cho phep ngat Timer1
BSF INTCON,PEIE ; Cho phep ngat ngoai vi
BSF INTCON,GIE ; Cho phep ngat toan cuc
;====================================================
CLRF DEM
MAIN
MOVF DEM,0
MOVWF PORTA
GOTO MAIN
;=================================
END
;***********************************************
BÀI 17B : CHƯƠNG TRÌNH NGẮT_COUNTER1 TĂNG GIÁ TRỊ BIẾN ĐẾM TỪ 0 9 HIỂN THỊ RA
LED 7 ĐOẠN Ở PORTD BẰNG PHƯƠNG PHÁP TRA BẢNG
C1
33p
X1
CRYSTAL
C2
VCC
33p
VCC
R16 U1
10K
13
OSC1/CLKIN RB0/INT
33 R9
14 34 10K
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36
RB3/PGM
2 37
RA0/AN0 RB4
3 38
4
RA1/AN1 RB5
39
NUT NHAN NGAT COUNTER1
RA2/AN2/VREF- RB6/PGC
5 40
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2
8 17
RE0/AN5/RD RC2/CCP1
9 18
RE1/AN6/WR RC3/SCK/SCL
10 23
RE2/AN7/CS RC4/SDI/SDA
24
RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT CATOT CHUNG
19 R1
RD0/PSP0
RD1/PSP1
20 R2
21 R3
100R
RD2/PSP2
RD3/PSP3
22 R4
100R
27 R5
100R
RD4/PSP4
RD5/PSP5
28 R6
100R
29 R7
100R
RD6/PSP6
30 100R
RD7/PSP7
100R
PIC16F877
;-----------------------------------------------------------------------------
; Chuong trinh ngat
;-----------------------------------------------------------------------------
ISR
;---------------------------------------------------------------------------
; doan chuong trinh bat buoc khi bat dau chuong trinh ngat
;--------------------------------------------------------------------------
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
;--------------------------------------------------------------------------------
; Kiem tra co ngat
;--------------------------------------------------------------------------------
BTFSS PIR1,TMR1IF ; kiem tra co ngat timer1
GOTO EXIT_INT
BCF T1CON,TMR1ON ; tam thoi tat timer1 de khoi tao lai
;--------------------------------------------------------------------------------
; cac thao tac chinh cua chuong trinh ngat
;--------------------------------------------------------------------------------
CLRF TMR1L ; khoi tao cac gia tri chua trong thanh
CLRF TMR1H ; ghi TMRH va TMRL
MOVLW 0xFF ; nap gia tri vao cac thanh ghi dem cua Timer1
MOVWF TMR1H ; gia tri 25000 (25000 -> 61A8h)
MOVLW 0xFF ;gia tri 10000 (10000 -> 2710h)
MOVWF TMR1L
BSF T1CON,TMR1ON ; Bat Timer1 hoat dong lai
BCF PIR1,TMR1IF ; xoa co ngat
INCF DEM
MOVLW d'10'
XORWF DEM,0
BTFSS STATUS,Z
GOTO EXIT_INT
CLRF DEM
;----------------------------------------------------------------------------------------------------------------
; DOAN CHUUONG TRINH BAT BUOC KHI KE THUC CHUONG TRINH NGAT
;----------------------------------------------------------------------------------------------------------------
EXIT_INT
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;====================================================================
ORG 0x0000
GOTO START
ORG 0x050
;---------------------------------------------------------------------------------------------------
; Chuong trình chính
;---------------------------------------------------------------------------------------------------
START
;---------------------------------------------------------------
; khoi tao cac port dieu khien
;---------------------------------------------------------------
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0x00 ; PORTD <-output
MOVWF TRISD
MOVLW 0xFF ; PORTC <-INPUT
MOVWF TRISC
BCF STATUS,RP0
;-----------------------------------------------------------------
; Khoi tao Timer1
;-----------------------------------------------------------------
CLRF T1CON
CLRF INTCON
CLRF TMR1H
CLRF TMR1L
BSF STATUS,RP0 ; Chon BANK1
CLRF PIE1
BSF PIE1,TMR1IE ; Cho phep ngat Timer1
BCF STATUS,RP0 ; ChoN BANK0
CLRF PIR1 ; xoa tat ca cac co ngat
BSF T1CON,1 ;TIMER1 HOAT DONG CHE DO COUNTER
MOVLW 0xFF ; Khoi tao gia tri trong thanh ghi TMR1H
MOVWF TMR1H ; vao TMR1L (TMR1H:TMR1L = 65535 = ffffh)
MOVLW 0xFF ;khi do timer1 dem 1 la tra.
MOVWF TMR1L
BSF T1CON,TMR1ON ; Bat Timer1
BSF INTCON,TMR1IE ; Cho phep ngat Timer1
BSF INTCON,PEIE ; Cho phep ngat ngoai vi
BSF INTCON,GIE ; Cho phep ngat toan cuc
;====================================================
CLRF DEM
MAIN
CALL TABLE
MOVWF PORTD
GOTO MAIN
;======================================
TABLE
MOVF DEM,W
ADDWF PCL,1
DT 0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,
0x0E,0xFE,0xDE,0xEE,0xF8,0x72,0xBC,0xF2,0xE2
END
;*****************************************************************************
BÀI 18 : CHƯƠNG TRÌNH TẠO XUNG VUÔNG VỚI TẦN SỐ 1KHZ RA CHÂN SỐ 6 CỦA PIC16F877A.
;--------------- ------chuong trinh tao xung vuong 1KHZ o chan 6 cua 16f877a ------------------
;f = 1KHZ , T = 1/f = 1000 us (micrco giay), cao 500us, thap 500us.
;chan so 6 cua PIC 16F877A la bit thu 4 cua PORTA
processor P16f877a
include <P16F877A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF &
_LVP_OFF & _CPD_OFF
;*******************************************
BÀI 19 : CHƯƠNG TRÌNH BAN ĐẦU 8 LED NỐI VỚI POTRB TẮT HẾT, SAU ĐÓ SÁNG DẦN TỪ TRÁI
QUA PHẢI, KHI SÁNG HẾT THÌ TẮT DẦN TỪ PHẢI QUA TRÁI, KHI NÀO TẮT HẾT THÌ LẶP LẠI.
ORG 0x000
GOTO MAIN
ORG 0x008
;=======================
MAIN
;=======================
;KHOI TAO PORTB
;=============================
BCF STATUS,RP1
BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP1
BCF STATUS,RP0
MOVLW H'00'
MOVWF PORTB
;=============================
;VONG LAP CHUONG TRINH
;=============================
START
MOVLW H'00'
MOVWF PORTB
CALL WAIT
AAA
BSF STATUS,0 ;<=> C = 1
RRF PORTB,1
CALL WAIT
BTFSS PORTB,0
GOTO AAA
;==========================
BBB
BCF STATUS,0 ;<=> C = 0
RLF PORTB,1
CALL WAIT
BTFSC PORTB,7
GOTO BBB
GOTO AAA
;========================
;CHUONG TRINH DELAY
;=========================
WAIT
MOVLW H'FF'
MOVWF BIEN1
DEL1 CALL DELAY
DECFSZ BIEN1,1
GOTO DEL1
RETURN
DELAY
CLRF BIEN0
DEL
DECFSZ BIEN0,1
GOTO DEL
RETURN
END
;************************************************
BÀI 20A : CHƯƠNG TRÌNH ĐIỀU KHIỂN 8 LED NỐI VỚI PORTD VÀ 1 NÚT NHẤN NỐI VỚI CHÂN RB0
CỦA PORTB. BAN ĐẦU 8 LED TẮT HẾT, NẾU NHẤN NÚT 1 LẦN THÌ 8 LEN CHỚP TẮT 3 LẦN RỒI TẮT,
CÒN NẾU NHẤN NÚT 2 LẦN THÌ 8 LED SÁNG DẦN TỪ TRÁI QUA PHẢI, KHI 8 LED SÁNG HẾT THÌ
CHỚP TẮT 3 LẦN.
ORG 0x000
GOTO START
ORG 0x0005
START
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTD
CLRF PORTB
BSF STATUS,RP0
MOVLW b'11111111' ;PORTB INPUT
MOVWF TRISB
CLRF TRISD
BCF STATUS,RP0
MAIN
MOVLW b'00000000'
MOVWF PORTD
C1 BTFSC PORTB,0
GOTO C1 ;NHAY VE SAU 1 DONG LENH
CALL DELAY
C2 BTFSS PORTB,0
GOTO C2
CALL delay_100ms
BTFSC PORTB,0
GOTO KTRA
CALL DELAY
C3 BTFSS PORTB,0
GOTO C3
CALL DELAY
GOTO CTRINH2
KTRA
CALL delay_100ms
BTFSC PORTB,0
GOTO CTRINH1
C4 BTFSS PORTB,0
GOTO C4
CALL DELAY
CTRINH2
BSF STATUS,0
RRF PORTD,1
CALL delay_100ms
BTFSS STATUS,0
GOTO CTRINH2
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
CLRC
CTRINH1
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
GOTO MAIN
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
;=================================
delay_100ms
MOVLW d'100'
MOVWF count1
d2
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
END
;***************************************************************
BÀI 20B : CHƯƠNG TRÌNH ĐIỀU KHIỂN 8 LED NỐI VỚI PORTD VÀ 1 NÚT NHẤN NỐI VỚI CHÂN RB0
CỦA PORTB. BAN ĐẦU 8 LED TẮT HẾT, NẾU NHẤN NÚT 1 LẦN THÌ 8 THÌ THỰC HIỆN CHƯƠNG
TRÌNH 1, CÒN NẾU NHẤN NÚT 2 LẦN THÌ THỰC HIỆN CHƯƠNG TRÌNH 2.
VÀ NẾU NHẤN NÚT 3 LẦN THÌ THỰC HIỆN CHƯƠNG TRÌNH 3.
ORG 0x000
GOTO START
ORG 0x008
START
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTD
CLRF PORTB
BSF STATUS,RP0
MOVLW b'11111111'
MOVWF TRISB
CLRF TRISD
BCF STATUS,RP0
;=====================================
MAIN
MOVLW b'00000000'
MOVWF PORTD
;===================================
;NHAN LAN 1
;===================================
L1 BTFSC PORTB,0
GOTO L1
CALL DELAY
L12 BTFSS PORTB,0
GOTO L12
CALL delay_100ms
;=====================================
;KIEM TRA NHAN LAN 2 KHONG?
;======================================
BTFSC PORTB,0
GOTO KTRA1
CALL DELAY
L2 BTFSS PORTB,0
GOTO L2
CALL delay_100ms
;========================================
;KIEM TRA NHAN LAN 3
;===========================================
BTFSC PORTB,0
GOTO KTRA2
CALL DELAY
L3 BTFSS PORTB,0
GOTO L3
CALL DELAY
GOTO CTRINH3
;=======================================
KTRA1
CALL delay_100ms
BTFSC PORTB,0
GOTO CTRINH1
CALL DELAY
GOTO L2
;=======================================
KTRA2
CALL delay_100ms
BTFSC PORTB,0
GOTO CTRINH2
CALL DELAY
GOTO L3
;===================================
CTRINH3
BSF STATUS,0
RLF PORTD,1
CALL delay_100ms
BTFSS STATUS,0
GOTO CTRINH3
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
CLRC
;========================================
CTRINH2
BSF STATUS,0
RRF PORTD,1
CALL delay_100ms
BTFSS STATUS,0
GOTO CTRINH2
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
CLRC
;=========================================
CTRINH1
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
GOTO MAIN
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
;=================================
delay_100ms
MOVLW d'100'
MOVWF count1
d2
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
;======================================
END
;*******************************************************************
BÀI 20C : CHƯƠNG TRÌNH ĐIỀU KHIỂN 8 LED NỐI VỚI PORTD VÀ 1 NÚT NHẤN NỐI VỚI CHÂN RB0
CỦA PORTB. BAN ĐẦU 8 LED TẮT HẾT, NẾU NHẤN NÚT 1 LẦN THÌ 8 THÌ THỰC HIỆN CHƯƠNG
TRÌNH 1, CÒN NẾU NHẤN NÚT 2 LẦN THÌ THỰC HIỆN CHƯƠNG TRÌNH 2. VÀ NẾU NHẤN NÚT 3
LẦN THÌ THỰC HIỆN CHƯƠNG TRÌNH 3.(TRONG KHI CHẠY NẾU NHÁN NÚT 1 LẦN THÌ SẼ CHẠY
LẠI CHƯƠNG TRÌNH 1, NHẤN 2 LẦN CHẠY LẠI CHƯƠNG TRÌNH 2, NHẤN 3 LẦN CHẠY LẠI CHƯƠNG
TRÌNH 3 KIỂM TRA LIÊN TỤC )
CÁCH 1:
ORG 0x000
GOTO START
ORG 0x008
START
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTD
CLRF PORTB
BSF STATUS,RP0
MOVLW b'11111111'
MOVWF TRISB
CLRF TRISD
BCF STATUS,RP0
;=====================================
MAIN
MOVLW b'00000000'
MOVWF PORTD
;===================================
;NHAN LAN 1
;===================================
L1 BTFSC PORTB,0
GOTO L1
LOOP
MOVLW b'00000000'
MOVWF PORTD
CALL DELAY
L12 BTFSS PORTB,0
GOTO L12
CALL delay_100ms
;=====================================
;KIEM TRA NHAN LAN 2 KHONG?
;======================================
BTFSC PORTB,0
GOTO KTRA1
CALL DELAY
L2 BTFSS PORTB,0
GOTO L2
CALL delay_100ms
;========================================
;KIEM TRA NHAN LAN 3
;===========================================
BTFSC PORTB,0
GOTO KTRA2
CALL DELAY
L3 BTFSS PORTB,0
GOTO L3
CALL DELAY
GOTO CTRINH3
;=======================================
KTRA
GOTO LOOP
;======================================
KTRA1
CALL delay_100ms
BTFSC PORTB,0
GOTO CTRINH1
CALL DELAY
GOTO L2
;=======================================
KTRA2
CALL delay_100ms
BTFSC PORTB,0
GOTO CTRINH2
CALL DELAY
GOTO L3
;===================================
CTRINH1
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
LAP BSF STATUS,0
RRF PORTD,1
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
BTFSS STATUS,0
GOTO LAP
GOTO CTRINH1
;=====================================
CTRINH2
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
MOVLW b'00011000'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
MOVLW b'00111100'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
MOVLW b'01111110'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
GOTO CTRINH2
;=============================================
CTRINH3
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
LAP1
BSF STATUS,0
RLF PORTD,1
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
BTFSS STATUS,0
GOTO LAP1
GOTO CTRINH3
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
;=================================
delay_100ms
MOVLW d'100'
MOVWF count1
d2
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
;======================================
END
;***************************************************************
CÁCH 2:
ORG 0x000
GOTO START
ORG 0x008
START
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW b'11111111'
MOVWF TRISB
CLRF TRISD
BCF STATUS,RP0
CLRF DEM
CLRF PORTD
;=====================================
MAIN
;===================================
;NHAN LAN 1
;===================================
L1 BTFSC PORTB,0
GOTO L1
KTRA
MOVLW b'00000000'
MOVWF PORTD
CALL DELAY
L12 BTFSS PORTB,0
GOTO L12
;=====================================
;KIEM TRA NHAN LAN 2 KHONG?
;======================================
CALL delay_100ms
KTRA11
BTFSC PORTB,0
GOTO KTRA1
CALL DELAY
L2
BTFSS PORTB,0
GOTO L2
;========================================
;KIEM TRA NHAN LAN 3
;===========================================
CALL delay_100ms
CLRF DEM
KTRA21
BTFSC PORTB,0
GOTO KTRA2
CALL delay_100ms
CLRF DEM
L3
BTFSS PORTB,0
GOTO L3
CALL delay_100ms
GOTO CTRINH3
;=======================================
KTRA1
INCF DEM
CALL DELAY
MOVF DEM,0
XORLW D'40'
BTFSS STATUS,Z
GOTO KTRA11
CLRF DEM
GOTO CTRINH1
;=======================================
KTRA2
INCF DEM
CALL DELAY
MOVF DEM,0
XORLW D'40'
BTFSS STATUS,Z
GOTO KTRA21
CLRF DEM
GOTO CTRINH2
;===================================
CTRINH1
CLRF DEM
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
LAP BSF STATUS,0
RRF PORTD,1
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
BTFSS STATUS,0
GOTO LAP
GOTO CTRINH1
;=====================================
CTRINH2
CLRF DEM
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
MOVLW b'00011000'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
MOVLW b'00111100'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
MOVLW b'01111110'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
MOVLW b'11111111'
MOVWF PORTD
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
GOTO CTRINH2
;=============================================
CTRINH3
CLRF DEM
MOVLW b'00000000'
MOVWF PORTD
CALL delay_100ms
LAP1
BSF STATUS,0
RLF PORTD,1
CALL delay_100ms
BTFSS PORTB,0
GOTO KTRA
BTFSS STATUS,0
GOTO LAP1
GOTO CTRINH3
;=============================================
;CHUONG TRINH DELAY
;===========================================
DELAY
CLRF COUNT_1
D1 DECFSZ COUNT_1
GOTO D1
RETURN
;=================================
delay_100ms
MOVLW d'100'
MOVWF count1
d2
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
;======================================
END
;***********************************************************************
C1 ANOT CHUNG
33p
X1 U1
CRYSTAL 13 33
C2 14
OSC1/CLKIN RB0/INT
34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36
RB3/PGM
33p RA0 2 37
RA0/AN0 RB4
RA1 3 38
RA1/AN1 RB5
RA2 4 39
RA2/AN2/VREF- RB6/PGC
RA3 5 40
RA3/AN3/VREF+ RB7/PGD
RA4 6
RA5 7
RA4/T0CKI
15
R9 A
RA5/AN4/SS RC0/T1OSO/T1CKI
16
R10 B
8
RC1/T1OSI/CCP2
17
R11
220R
C
RE0/AN5/RD RC2/CCP1 R12
220R
D
9 18 R13
RE1/AN6/WR RC3/SCK/SCL 220R
10 23 E
RE2/AN7/CS RC4/SDI/SDA R14
220R
F
24 R15
G
C
D
RA0
RA1
A
B
E
220R
F
RC5/SDO
25 G
RC6/TX/CK R16
220R
P
26 220R
RC7/RX/DT
220R
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877
BÀI 21 : CHƯƠNG TRÌNH HIỂN THỊ TĂNG DẦN TỪ 0 ĐÉN 59 RỒI LẶP LẠI
DÙNG NGẮT TIMER0 ĐỂ TĂNG GIÁ TRỊ:
;CHUONG TRINH HIEN THI 2 SO TANG DAN TU 0 DEN 59 ROI LAP LAI
TITLE "Tang tu 0 den 59 dung timer 0"
processor P16f877a
include <p16f877a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF &
_LVP_OFF & _CPD_OFF
; -----------------------------------------------------------------------------------------------------------
; Khai baùo bieán
;------------------------------------------------------------------------------------------------------------
count1 EQU 0x20
counta EQU 0x21 ; trình delay
countb EQU 0x22
hang_don_vi EQU 0x23
hang_chuc EQU 0x24
W_save EQU 0x25
PCLATH_save EQU 0x26
STATUS_save EQU 0x27
FSR_save EQU 0x28
DEM EQU 0x29
;-------------------------------------------------------------------------------------------------------------
; Chöông trình ngaét
;-------------------------------------------------------------------------------------------------------------
ORG 0x0004
GOTO ISR
ISR
;------------------------------------------------------------------------------------------------------------
; Ñoaïn chöông trình baét buoäc ñaàu chöông trình ngaét
;------------------------------------------------------------------------------------------------------------
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
BTFSS INTCON,TMR0IF ; KIEM TRA CO NGAT TIMER
GOTO exit_int
; =============CHUONG TRING NGAT===================
BCF INTCON,TMR0IF
;----------------------------------------------------------
INCF DEM,1
MOVLW D'200'
XORWF DEM,0
BTFSS STATUS,Z
GOTO exit_int
CLRF DEM
INCF hang_don_vi,1
MOVLW D'10'
XORWF hang_don_vi,0
BTFSS STATUS,Z
GOTO exit_int
CLRF hang_don_vi
INCF hang_chuc,1
MOVLW D'6'
XORWF hang_chuc,0
BTFSS STATUS,Z
GOTO exit_int
CLRF hang_chuc
GOTO exit_int
;---------------------------------------------------------------------
exit_int
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;----------------------------------------------------------------------------------------------------------------
; ket thuc chuong trinh ngat
;----------------------------------------------------------------------------------------------------------------
ORG 0x0000
GOTO start
ORG 0x050
;----------------------------------------------------------------------------------------------------------------
; bat dau chuong trình chính
;----------------------------------------------------------------------------------------------------------------
start
;---------------------------------------------
; khai bao cac port
;---------------------------------------------
BCF STATUS,RP1
BSF STATUS,RP0 ; BANK1
MOVLW 0x00
MOVWF TRISC ; PORTD <- output
MOVLW b'111100'
MOVWF TRISA ; PORTB<1:0> <- output
BCF STATUS,RP0 ;
CLRF PORTC
CLRF PORTA
;----------------------------------------
; Khôûi taïo Timer0
;----------------------------------------
CLRF TMR0 ; xoa thanh ghi TMR0
CLRF INTCON ; xoa thanh ghi INTCON
BSF STATUS,RP0
MOVLW b'10000001'
MOVWF OPTION_REG
; prescaler cho Timer0 va hon tan so chia
; tan so prescaler la 1:4
BCF STATUS,RP0 ; chon BANK0
BSF INTCON,TMR0IE ; cho phep ngat Timer0
BSF INTCON,PEIE ; cho phep ngat ngoai vi
BSF INTCON,GIE ; cho phep ngat toan bo cac ngat
;----------------------------------------------
CLRF hang_chuc
CLRF hang_don_vi
CLRF DEM
;----------------------------------------------
main
CALL hien_thi
GOTO main
;-------------------------------------
hien_thi
MOVF hang_don_vi,0
CALL table
MOVWF PORTC
MOVLW b'000010'
MOVWF PORTA
CALL delay_1ms
MOVF hang_chuc,0
CALL table
MOVWF PORTC
MOVLW b'000001'
MOVWF PORTA
CALL delay_1ms
RETURN
;--------------------------------------------------------------------------------------------------------
; CAC CHUONG TRINH CON DUNG CHO CHUONG TRINH CON HIEN THI
;--------------------------------------------------------------------------------------------------------
table
ADDWF PCL,1
RETLW 0xC0
RETLW 0xF9
RETLW 0xA4
RETLW 0xB0
RETLW 0x99
RETLW 0x92
RETLW 0x82
RETLW 0xF8
RETLW 0x80
RETLW 0x90
;================================
delay_1ms
MOVLW d'10'
MOVWF count1
d2 MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
END
;***********************************************************************
BÀI 22 : CHƯƠNG TRÌNH HIỂN THỊ TĂNG DẦN TỪ 0 ĐÉN 59 RỒI LẶP LẠI
DÙNG NGẮT TIMER1 ĐỂ TĂNG GIÁ TRỊ:
ORG 0x0004
GOTO ISR
;-----------------------------------------------------------------------------
; Chuong trinh ngat
;-----------------------------------------------------------------------------
ISR
;---------------------------------------------------------------------------
; doan chuong trinh bat buoc khi bat dau chuong trinh ngat
;--------------------------------------------------------------------------
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
;--------------------------------------------------------------------------------
; Kiem tra co ngat
;--------------------------------------------------------------------------------
BTFSS PIR1,TMR1IF ; kiem tra co ngat timer1
GOTO EXIT_INT
BCF T1CON,TMR1ON ; tam thoi tat timer1 de khoi tao lai
;--------------------------------------------------------------------------------
; cac thao tac chinh cua chuong trinh ngat
;--------------------------------------------------------------------------------
CLRF TMR1L ; khoi tao cac gia tri chua trong thanh
CLRF TMR1H ; ghi TMRH va TMRL
MOVLW 0x9E ; nap gia tri vao cac thanh ghi dem cua Timer1
MOVWF TMR1H ; gia tri 25000 (25000 -> 61A8h)
MOVLW 0x57 ;gia tri 10000 (10000 -> 2710h)
MOVWF TMR1L
BSF T1CON,TMR1ON ; Bat Timer1
BCF PIR1,TMR1IF ; xoa co ngat
INCF DEM,1
MOVLW D'5'
XORWF DEM,0
BTFSS STATUS,Z
GOTO EXIT_INT
CLRF DEM
INCF hang_don_vi,1
MOVLW D'10'
XORWF hang_don_vi,0
BTFSS STATUS,Z
GOTO EXIT_INT
CLRF hang_don_vi
INCF hang_chuc,1
MOVLW D'6'
XORWF hang_chuc,0
BTFSS STATUS,Z
GOTO EXIT_INT
CLRF hang_chuc
;----------------------------------------------------------------------------------------------------------------
; DOAN CHUUONG TRINH BAT BUOC KHI KE THUC CHUONG TRINH NGAT
;----------------------------------------------------------------------------------------------------------------
EXIT_INT
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;---------------------------
ORG 0x0000
GOTO START
ORG 0x050
;---------------------------------------------------------------------------------------------------
; Chuong trình chính
;---------------------------------------------------------------------------------------------------
START
;---------------------------------------------------------------
; khoi tao cac port dieu khien
;---------------------------------------------------------------
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0x00 ; PORTA <-output
MOVWF TRISA
MOVLW 0x00 ; PORTC <-output
MOVWF TRISC
BCF STATUS,RP0
;-----------------------------------------------------------------
; Khoi tao Timer1
;----------------------------------------------------------------
CLRF T1CON
CLRF INTCON
CLRF TMR1H
CLRF TMR1L
BSF STATUS,RP0 ; Chon BANK1
CLRF PIE1
BSF PIE1,TMR1IE ; Cho phep ngat Timer1
BCF STATUS,RP0 ; ChoN BANK0
CLRF PIR1 ; xoa tat ca cac co ngat
MOVLW 0x30 ; prescaler 1:8, xung dem la xung lenh, tam thoi
MOVWF T1CON ; tat Timer1
MOVLW 0x9E ; Khoi tao gia tri trong thanh ghi TMR1H
MOVWF TMR1H ; vao TMR1L (TMR1H:TMR1L = 25000)
MOVLW 0x57
MOVWF TMR1L
BSF INTCON,TMR1IE ; Cho phep ngat Timer1
BSF INTCON,PEIE ; Cho phep ngat ngoai vi
BSF INTCON,GIE ; Cho phep ngat toan cuc
BSF T1CON,TMR1ON ; Bat Timer1
;====================================================
CLRF hang_chuc
CLRF hang_don_vi
CLRF DEM
;----------------------------------------------
MAIN
CALL hien_thi
GOTO MAIN
;-------------------------------------
hien_thi
MOVF hang_don_vi,0
CALL TABEL
MOVWF PORTC
MOVLW b'000010'
MOVWF PORTA
CALL delay_1ms
MOVF hang_chuc,0
CALL TABEL
MOVWF PORTC
MOVLW b'000001'
MOVWF PORTA
CALL delay_1ms
RETURN
;--------------------------------------------------------------------------------------------------------
; CAC CHUONG TRINH CON DUNG CHO CHUONG TRINH CON HIEN THI
;--------------------------------------------------------------------------------------------------------
TABEL ADDWF PCL,1
DT 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
;================================
delay_1ms
MOVLW d'10'
MOVWF count1
d2 MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
;=======================================
END
;********************************************************************
BÀI 23 : CHƯƠNG TRÌNH NHẤN NÚT NHẤN 1 (NỐI VỚI CHÂN RB1) TĂNG ĐẾM, NHẤN NÚT NHẤN 2
(NỐI VỚI CHÂN RB2) GIẢM ĐỀM HIỂN THỊ RA LED 7 ĐOẠN NỐI VỚI PORTC
VCC
R15
R14
R13
R12
10k10k10k10k
CATOED CHUNG
A
R4
B
R5
VCC
C
R6
220R
D
R7
220R
U1 E
R8
220R
13 33 F
R9
220R
14
OSC1/CLKIN RB0/INT
34 G
R10
220R
OSC2/CLKOUT RB1 220R
1 35
MCLR/Vpp/THV RB2 220R
R11 RB3/PGM
36
10k 2 37
RA0/AN0 RB4
3 38
RA1/AN1 RB5
4 39
RA2/AN2/VREF- RB6/PGC
5 40
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI
16 A
RC1/T1OSI/CCP2
8 17 B
RE0/AN5/RD RC2/CCP1
9 18 C
RE1/AN6/WR RC3/SCK/SCL
10 23 D
RE2/AN7/CS RC4/SDI/SDA
24 E
RC5/SDO
25 F
RC6/TX/CK
26 G
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877
MOVLW b'00001111'
MOVWF TRISB ; CHAN RB0 VA RB1 INPUT, CON LAI LA OUTPUT
CLRF TRISC ; PORTA LA OUTPUT
BCF STATUS,RP0 ; VE BANK0
CLRF PORTC
CLRF COUNT
;============================================================
;CHUONG TRINH LAP VONG
;===============================
MAIN
CALL TABLE
MOVWF PORTC
BTFSC PORTB,SW1
GOTO KHONG_NHAN_SW1
CALL DELAY
C1 BTFSS PORTB,SW1
GOTO C1
CALL DELAY
TANG
INCF COUNT,1
MOVF COUNT,0
XORLW D'16'
BTFSS STATUS,Z ; KTRA DEM = 10 ? Y NHAY MAIN, N NHAY LOOP
GOTO MAIN
CLRF COUNT
;===============================================
KHONG_NHAN_SW2
GOTO MAIN
;==================================================
KHONG_NHAN_SW1
BTFSC PORTB,SW2
GOTO KHONG_NHAN_SW2
CALL DELAY
C2 BTFSS PORTB,SW2
GOTO C2
CALL DELAY
MOVF COUNT,0
XORLW D'0'
BTFSS STATUS,Z ; KTRA DEM = 10 ? Y NHAY MAIN, N NHAY LOOP
GOTO GIAM
MOVLW D'16'
MOVWF COUNT
GOTO MAIN
GIAM
DECFSZ COUNT,1
GOTO MAIN
;======================================
;CHUONG TRINH DELAY
;===========================================
DELAY
MOVLW 0xFF
MOVWF COUNT3
D2
DECFSZ COUNT3
GOTO D2
RETURN
;======================================
TABLE
MOVF COUNT,W
ADDWF PCL,1
DT 0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,
0xFE,0xDE,0xEE,0xF8,0x72,0xBC,0xF2,0xE2
‘================================================================
TABLE1
MOVF COUNT,W ; Get key count
ADDWF PCL ; and calculate jump
NOP ; into table
RETLW B'01111110' ; Code for '0' 7EH
RETLW B'00001100' ; Code for '1' 0CH
RETLW B'10110110' ; Code for '2' B6H
RETLW B'10011110' ; Code for '3' 9EH
RETLW B'11001100' ; Code for '4' CCH
RETLW B'11011010' ; Code for '5' DAH
RETLW B'11111010' ; Code for '6' FAH
RETLW B'00001110' ; Code for '7' 0EH
RETLW B'11111110' ; Code for '8' FEH
RETLW B'11011110' ; Code for '9' DEH
RETLW B'11101110' ; Code for 'A' EEH
RETLW B'11111000' ; Code for 'B' F8H
RETLW B'01110010' ; Code for 'C' 72H
RETLW B'10111100' ; Code for 'D' BCH
RETLW B'11110010' ; Code for 'E' F2H
RETLW B'11100010' ; Code for 'F' E2H
END
;****************************************************************************
RP1
10K
2
3
4
5
6
7
8
9
VCC
U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36 CATOED CHUNG
RB3/PGM
2 37 R15
RA0/AN0 RB4
3 38 A
4
RA1/AN1 RB5
39 B
R11
5
RA2/AN2/VREF- RB6/PGC
40 C
R13
220R
6
RA3/AN3/VREF+ RB7/PGD
D
R12
220R
7
RA4/T0CKI
15 E
R14
220R
RA5/AN4/SS RC0/T1OSO/T1CKI
16 A F
R9
220R
8
RC1/T1OSI/CCP2
17 B G
R10
220R
RE0/AN5/RD RC2/CCP1 220R
9 18 C
RE1/AN6/WR RC3/SCK/SCL 220R
10 23 D
RE2/AN7/CS RC4/SDI/SDA
24 E
RC5/SDO
25 F
RC6/TX/CK
26 G
RC7/RX/DT
R1
19 R2
RD0/PSP0
20 R3
100R
RD1/PSP1
21 R4
100R
RD2/PSP2
RD3/PSP3
22 R5
100R
27 R6
100R
RD4/PSP4
28 R7
100R
RD5/PSP5
29 R8
100R
RD6/PSP6
30 100R
RD7/PSP7
100R
PIC16F877
D8 D3 D1 D2 D12 D11 D9 D10
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
LED-RED
PIC.DSN
BÀI 24 : CHƯƠNG TRÌNH ĐIỂU KHIỂN 8 LED ĐƠN NỐI VỚI PORTD :
KHI NHẤN NÚT NHẤN 1 (NỐI VỚI CHÂN RB6) LED SÁNG DỊCH SANG TRÁI
KHI NHẤN NÚT NHẤN 2 (NỐI VỚI CHÂN RB7) LED SÁNG DỊCH SANG PHẢI
(SƠ ĐỒ MẠCH HÌNH TRÊN)
GOTO INIT
ORG 0x005
;=====================================
;KHAI BAO PORT I/O
;====================================================
INIT
BCF STATUS,RP1
BSF STATUS,RP0 ; CHON BANK1
MOVLW b'11111111'
MOVWF TRISB ; CHAN RB0 VA RB1 INPUT, CON LAI LA OUTPUT
CLRF TRISD ; PORTA LA OUTPUT
BCF STATUS,RP0 ; VE BANK0
MOVLW b'00000001'
CLRC
;===========================
;CHUONG TRINH LAP VONG
;===============================
MAIN
MOVLW b'00000001'
CLRC
MOVWF PORTD
KTRA
BTFSC PORTB,SW1
GOTO KHONG_NHAN_SW1
CALL DELAY
C1 BTFSS PORTB,SW1
GOTO C1
CALL DELAY
XOAY_TRAI
RLF PORTD,1
BTFSS STATUS,0
GOTO KTRA
MOVLW b'00000001'
MOVWF PORTD
CLRC
GOTO KTRA
;===============================================
KHONG_NHAN_SW2
GOTO KTRA
;==================================================
KHONG_NHAN_SW1
BTFSC PORTB,SW2
GOTO KHONG_NHAN_SW2
CALL DELAY
C2 BTFSS PORTB,SW2
GOTO C2
CALL DELAY
XOAY_PHAI
RRF PORTD,1
BTFSS STATUS,0
GOTO KTRA
MOVLW b'10000000'
MOVWF PORTD
CLRC
GOTO KTRA
;======================================
;CHUONG TRINH DELAY
;===========================================
DELAY
MOVLW 0xFF
MOVWF COUNT3
D2
DECFSZ COUNT3
GOTO D2
RETURN
;======================================
END
;*****************************************************
BÀI 26 : CHƯƠNG TRÌNH NGẮT NGOÀI RB0, TĂNG GIÁI TRỊ TỪ O DẾN 99, HIỂN THỊ RA 2 LED 7
ĐOẠN NỐI VỚI PORTD
VCC
R1
10k VCC
UP
Q1
2N2222
U1 R3R4R5R6R7R8R9
330R
330R
330R
330R
330R
330R
330R
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
36
2
RB3/PGM
37 Q2
RA0/AN0 RB4 2N2222
3 38
RA1/AN1 RB5
4 39
RA2/AN2/VREF- RB6/PGC
5 40
RA3/AN3/VREF+ RB7/PGD
6 R10
RA4/T0CKI
7
RA5/AN4/SS RC0/T1OSO/T1CKI
15 R11
16 1k
RC1/T1OSI/CCP2
8 17 1k
RE0/AN5/RD RC2/CCP1
9 18
RE1/AN6/WR RC3/SCK/SCL
10 23
RE2/AN7/CS RC4/SDI/SDA
24
RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877
delay_1ms
MOVLW d'10'
MOVWF count1
d1
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_0
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_0
DECFSZ count1,1
GOTO d1
RETURN
;======================================
DELAY
CLRF COUNT2
D1 DECFSZ COUNT2
GOTO D1
RETURN
;======================================
TABLE ADDWF PCL,1
DT 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
END
;****************************************************************************
C1
33p
X1 U1
CRYSTAL 13 33
OSC1/CLKIN RB0/INT
14 34
C2 1
OSC2/CLKOUT RB1
35
MCLR/Vpp/THV RB2
36
2
RB3/PGM
37 LCD1
RA0/AN0 RB4 LM016L
33p 3 38
RA1/AN1 RB5
4 39
RA2/AN2/VREF- RB6/PGC
5 40
RA3/AN3/VREF+ RB7/PGD
6
RA4/T0CKI
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2
8 17
RE0/AN5/RD RC2/CCP1
VDD
VSS
VEE
R1 9 18
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
RE1/AN6/WR RC3/SCK/SCL
E
10k 10 23
RE2/AN7/CS RC4/SDI/SDA
24
RC5/SDO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROCESSOR 16F877
; Clock = XT 4MHz, standard fuse settings
__CONFIG 0x3731
; LABEL EQUATES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INCLUDE "P16F877.INC" ; Standard labels
Timer1 EQU 20 ; 1ms count register
TimerX EQU 21 ; Xms count register
Var EQU 22 ; Output variable
Point EQU 23 ; Program table pointer
Select EQU 24 ; Copy of RS bit
OutCod EQU 25 ; Temp store for output
RS EQU 1 ; Register select bit
E EQU 2 ; Display enable
; PROGRAM BEGINS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0x000 ; Place machine code
NOP ; for ICD mode
BANKSEL TRISD ; Select bank 1
CLRW ; All outputs
MOVWF TRISD ; Initialise display port
BANKSEL PORTD ; Select bank 0
CLRF PORTD ; Clear display outputs
GOTO Start ; Jump to main program
; SUBROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 1ms delay with 1us cycle time (1000 cycles)-------------------
Onems
MOVLW D'249' ; Count for 1ms delay
MOVWF Timer1 ; Load count
Loop1
NOP ; Pad for 4 cycle loop
DECFSZ Timer1 ; Count
GOTO Loop1 ; until Z
RETURN ; and finish
; Delay Xms, X received in W -----------------------------------
Xms
MOVWF TimerX ; Count for X ms
LoopX
CALL Onems ; Delay 1ms
DECFSZ TimerX ; Repeat X times
GOTO LoopX ; until Z
RETURN ; and finish
; Generate data/command clock siganl E -------------------------
PulseE
BSF PORTD,E ; Set E high
CALL Onems ; Delay 1ms
BCF PORTD,E ; Reset E low
;=======================================
Mess1
MOVF Point,W ; and load it
CALL Line1 ; Get ASCII code from table
CALL Send ; and do it
INCF Point ; point to next character
;****************************************************
PHƯƠNG ÁN 1:
C3
27p
X1
4MHz
C2
U1
27p 13 33 H1
OSC1/CLKIN RB0/INT
14 34 H2
OSC2/CLKOUT RB1
35 H3
RB2
2 36 H4
RA0/AN0 RB3/PGM
C8
C7
C6
C5
C4
C3
C2
C1
3 37 H5
RA1/AN1 RB4
4 38 H6
RA2/AN2/VREF-/CVREF RB5
5 39 H7
RA3/AN3/VREF+ RB6/PGC
6 40 H8
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
C4 1
MCLR/Vpp/THV RC5/SDO
24
1u 25
RC6/TX/CK
26
RC7/RX/DT
19 C1
RD0/PSP0
20 C2
RD1/PSP1 C3
21
RD2/PSP2
R1 RD3/PSP3
22 C4
27 C5
10k RD4/PSP4
H8
H7
H6
H5
H4
H3
H2
H1
28 C6
RD5/PSP5
29 C7
RD6/PSP6
30 C8
RD7/PSP7
PIC16F877A
VCC
CỘT C1 C2 C3 C4 C5 C6 C7 C8 HEX
0 1 1 1 1 1 1 1
H1 0 0 1 0 0 0 0 0 20H
H2 0 1 0 1 0 0 0 0 50H
H3 1 0 0 0 1 0 0 0 88H
H4 1 0 0 0 1 0 0 0 88H
H5 1 1 1 1 1 0 0 0 F8H
H6 1 0 0 0 1 0 0 0 88H
H7 1 0 0 0 1 0 0 0 88H
H8 1 0 0 0 1 0 0 0 88H
PHƯƠNG PHÁP HIỂN THỊ: DỪ LIỆU BẢNG MÃ ĐƯA VÀO HÀNG, QUÉT CỘT.
GOTOMAIN
LOOP1
INCF DEM
CALL TABLE
MOVWF PORTB
GOTOLOOP
;====================================================
;CAC CHUONG TRINH CON
;==================================================
TABLE
MOVF DEM,W
ADDWF PCL,1
DT 0x20,0x50,0x88,0x88,0x0F8,0x88,0x88,0x88
;======================== ===============================
DELAY
MOVLW 0xFF
MOVWF A
DEL1
DECFSZ A
GOTO DEL1
RETURN
END
;**********************************************************
PHƯƠNG ÁN 2:
C3
27p
X1
4MHz
C2
U1
27p 13 33 H1
OSC1/CLKIN RB0/INT
C1
C2
C3
C4
C5
C6
C7
C8
14 34 H2
OSC2/CLKOUT RB1
35 H3
RB2
2 36 H4
RA0/AN0 RB3/PGM
3 37 H5
RA1/AN1 RB4
4 38 H6
RA2/AN2/VREF-/CVREF RB5
5 39 H7
RA3/AN3/VREF+ RB6/PGC
6 40 H8
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
C4 1
MCLR/Vpp/THV RC5/SDO
24
1u 25
RC6/TX/CK
26
RC7/RX/DT
19 C1
RD0/PSP0
20 C2
RD1/PSP1
21 C3
H8
H7
H6
H5
H4
H3
H2
H1
RD2/PSP2
R1 RD3/PSP3
22 C4
10k 27 C5
RD4/PSP4
28 C6
RD5/PSP5
29 C7
RD6/PSP6
30 C8
RD7/PSP7
PIC16F877A
VCC
CỘT C1 C2 C3 C4 C5 C6 C7 C8
DỮ LIỆU 1 0 0 0 0 0 0 0
H8 1 1 0 1 1 1 1 1
H7 1 0 1 0 1 1 1 1
H6 0 1 1 1 0 1 1 1
H5 0 1 1 1 0 1 1 1
H4 0 0 0 0 0 1 1 1
H3 0 1 1 1 0 1 1 1
H2 0 1 1 1 0 1 1 1
H1 0 1 1 1 0 1 1 1
HEX C0 B7H 77H B7H C0H FFH FFH FFH
H
PHƯƠNG PHÁP HIỂN THỊ: DỪ LIỆU BẢNG MÃ ĐƯA VÀO CỘT, QUÉT HÀNG.
;========================== =========================================
;CHUONG TRINH CHINH
;============================= =======================================
ORG 0x000
GOTO START
;=============================================
START
;===================================
;KHOI TAO PORT
;===========================================
BCF STATUS,RP1
BSF STATUS,RP0
CLRF TRISB
CLRF TRISD
BCF STATUS,RP0
CLRF PORTB
CLRF PORTD
;============================================
;VONG LAP CHUONG TRINH
;===========================================
MAIN
CLRF DEM
CALL TABLE
MOVWF PORTB
MOVLW b'00000001'
MOVWF PORTD
BCF STATUS,0
LOOP
CALL DELAY
RLF PORTD,1
BTFSS STATUS,0
GOTO LOOP1
GOTO MAIN
LOOP1
INCF DEM
CALL TABLE
MOVWF PORTB
GOTO LOOP
;====================================================
;CAC CHUONG TRINH CON
;==================================================
TABLE
MOVF DEM,W
ADDWF PCL,1
DT 0xC0,0xB7,0x77,0xB7,0xC0,0xFF,0xFF,0xFF
;=================================================================
DELAY
MOVLW 0xFF
MOVWF A
DEL1
DECFSZ A
GOTO DEL1
RETURN
END
;****************************************************************************
BÀI 28B : CHƯƠNG TRÌNH HIỂN THỊ VÀ DỊCH CHỮ “SPKT” RA LED MATRIX
;==========================================
MAIN
CALL DICH_PHAI
CALL DICH_TRAI
GOTOMAIN
;==========================================
DICH_TRAI
MOVLW D'44'
MOVWF DEM
LOOP4
DECFSZ DEM
MOVLW D'5'
MOVWF COUNT1
LOOP1
MOVLW D'10'
MOVWF COUNT2
LOOP3
MOVLW H'80' ;SUA
MOVWF BXOAY
MOVF DEM,0
MOVWF COUNT
LOOP2
MOVF COUNT,0
CALL TABLE
MOVWF PORTB
MOVF BXOAY,0
MOVWF PORTD
CALL DELAY
MOVLW 0x00
MOVWF PORTD
DECF COUNT,0
XORLW D'0'
BTFSC STATUS,Z
GOTOLOOP11
DECF COUNT,1
RRF BXOAY ;CO SUA
GOTOLOOP2
LOOP11
DECFSZ COUNT2
GOTO LOOP3
DECFSZ COUNT1
GOTO LOOP1
MOVF DEM,0
XORLW D'1'
BTFSC STATUS,Z
GOTOEXIT
GOTOLOOP4
;=========================================
EXIT
RETURN
;=========================================
DICH_PHAI
MOVLW 0x00
MOVWF DEM
LOOPP4
INCF DEM,1
MOVLW D'5'
MOVWF COUNT1
LOOPP1
MOVLW D'10'
MOVWF COUNT2
LOOPP3
MOVLW H'01'
MOVWF BXOAY
MOVF DEM,0
MOVWF COUNT
LOOPP2
MOVF COUNT,0
CALL TABLE
MOVWF PORTB
MOVF BXOAY,0
MOVWF PORTD
CALL DELAY
MOVLW 0x00
MOVWF PORTD
INCF COUNT,0
XORLW D'44'
BTFSC STATUS,Z
GOTOLOOPP11
INCF COUNT,1
RLF BXOAY
GOTOLOOPP2
LOOPP11
DECFSZ COUNT2
GOTO LOOPP3
DECFSZ COUNT1
GOTO LOOPP1
MOVF DEM,0
XORLW D'43'
BTFSC STATUS,Z
GOTOEXIT
GOTOLOOPP4
;=================================================
;CAC CHUONG TRINH CON
;=================================================
TABLE
ADDWF PCL,1
DT 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
DT 0xff,0xff,0xcd,0xb6,0xb6,0xd9
DT 0xff,0xff,0x80,0xb7,0xb7,0xcf
DT 0xff,0xff,0x80,0xeb,0xdd,0xbe
DT 0xff,0xff,0xbf,0xbf,0x80,0xbf,0xbf
DT 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
;==========================================================
DELAY
MOVLW 0xFF
MOVWF A
DEL1
DECFSZ A
GOTO DEL1
RETURN
END
;=============================================================
*********************************************************************************
CATOT CHUNG
VCC
Q1
2N2222
C2 C1
33p 33p R3R4R5R6R7R8R9 R10
X1 330R
330R
330R
330R
330R
330R
330R
RA0
Q2
1k
2N2222
G
C
D
A
B
E
F
CRYSTAL U1
13 33 A
14
OSC1/CLKIN RB0/INT
34 B RA1
R11
OSC2/CLKOUT RB1 Q3
VCC
35 C
RB2 1k 2N2222
RA0 2
RA0/AN0 RB3/PGM
36 D R14 R12 R13
RA1 3 37 E 10k 10k 10k
VCC RA2 RA1/AN1 RB4 F
4 38 R2
RA3 RA2/AN2/VREF-/CVREF RB5 G
5 39
RA4 RA3/AN3/VREF+ RB6/PGC RA2
6 40
RA4/T0CKI/C1OUT RB7/PGD
RA5 7 RD0
RA5/AN4/SS/C2OUT
15 RD1
1k Q4
RC0/T1OSO/T1CKI 2N2222
R1 8
RE0/AN5/RD RC1/T1OSI/CCP2
16 RD2
10k 9 17
RE1/AN6/WR RC2/CCP1
10 18
RESET RE2/AN7/CS RC3/SCK/SCL
23
RSET RSET RC4/SDI/SDA RA3
R15
1 24
3
MCLR/Vpp/THV RC5/SDO
25 1k
RC6/TX/CK
RC7/RX/DT
26 RD4
A 1 2 3
19 RD0
RD0/PSP0 RD1
20
RD1/PSP1
RD2/PSP2
RD3/PSP3
21
22
RD2
RD3
RD5
B 4 5 6
27 RD4
RD4/PSP4
28 RD5
RD5/PSP5
RD6/PSP6
RD7/PSP7
29
30
RD6
RD7
RD6
C 7 8 9
PIC16F877A
RD7
D 0 #
BÀI 29A: CHƯƠNG TRÌNH HIỂN THỊ GIÁ TRỊ QUÉT PHÍM MA TRẬN RA 2 LED 7 ĐOẠN, BAN ĐẦU
HIỂN THỊ SỐ 00, SAU KHI NHẤN PHÍM THÌ GIÁ TRỊ CỦA ĐƠN VỊ ĐƯỢC CHUYỂN SANG HÀNG
CHỤC, CÒN GIÁ TRỊ CỦA PHÍM NHẤN CHUYỂN SANG HÀNG ĐƠN VỈ.
; Initialise ports.........................................
START
BANKSEL TRISC ; Display
CLRF TRISA
CLRF TRISC ;
CLRF TRISB
MOVLW B'00000111' ; Keypad
MOVWF TRISD ; bidirectional
BANKSEL PORTC ; Display off
CLRF PORTC ; initially
CLRF PORTB
CLRF PORTA
CLRF DVI
CLRF CHUC
CLRF DVITAM
GOTOMAIN ; jump to main
; Check a row of keys .....................................
row
INCF Key ; Count first key
BTFSS PORTD,0 ; Check key
GOTO GET_KEY ; and quit if on
INCF Key ; and repeat
BTFSS PORTD,1 ; for second
GOTO GET_KEY ; key
INCF Key ; and repeat
BTFSS PORTD,2 ; for third
GOTO GET_KEY ; key
GOTO next ; go for next row
; Scan the keypad..........................................
MAIN
MOVLW 0xFF
MOVWF PORTD
CLRF Key ; Zero key count
BSF 3,0 ; Set Carry Flag
BCF PORTD,4 ; Select first row PORTD = 11101111
newrow
GOTO row ; check row
next
BSF PORTD,3 ; Set fill bit
RLF PORTD ; Select next row
BTFSC 3,0 ; 0 into carry flag?
GOTO newrow ; if not, next row
GOTO NOT_KEY ; if so, start again
GET_KEY
CALL delay_50ms
MOVF DVI,W
MOVWF DVITAM
CLRW
MOVF Key,W
MOVWF DVI
CLRW
MOVF DVITAM,W
MOVWF Key
CLRW
MOVF Key,W
MOVWF CHUC
CLRW
NOT_KEY
CALL BCD_7DOAN
CALL HIENTHI
GOTOMAIN
;==============================
BCD_7DOAN
MOVF DVI,W
CALL table
MOVWF BIEN1
MOVF CHUC,W
CALL table
MOVWF BIEN2
RETURN
;==============================
HIENTHI
MOVF BIEN1,0
MOVWF PORTB
MOVLW B'000001'
MOVWF PORTA
CALL delay_1ms
MOVF BIEN2,0
MOVWF PORTB
MOVLW B'000010'
MOVWF PORTA
CALL delay_1ms
RETURN
;======================================
delay_1ms
MOVLW d'10'
MOVWF count1
d1
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_0
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_0
DECFSZ count1,1
GOTO d1
RETURN
;=====================================
delay_50ms
MOVLW d'50'
MOVWF count1
CALL d1
RETURN
; Display code table.......................................
table
ADDWF PCL ; and calculate jump
DT 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
; Output display code......................................
END ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;***************************************************************
BÀI 29B: CHƯƠNG TRÌNH HIỂN THỊ GIÁ TRỊ QUÉT PHÍM MA TRẬN RA 4 LED 7 ĐOẠN, BAN ĐẦU
HIỂN THỊ SỐ 0000, SAU KHI NHẤN PHÍM THÌ GIÁ TRỊ CỦA PHÍM NHẤN ĐƯỢC DỊCH TỪ HÀNG DƠN
VỊ DẾN HÀNG NGHÌN SAU MỖI LẦN CÓ PHÍM DƯỢC NHẤN.
; Initialise ports.........................................
START
BANKSEL TRISA ; CHON BANK1
CLRF TRISA ‘PORTA OUTPUT
CLRF TRISB ‘PORTB OUTPUT
MOVLW B'00000111' ; Keypad
MOVWF TRISD ; bidirectional
BANKSEL PORTB ; CHON BANK1
CLRF PORTB
CLRF PORTA
CLRF DVI
CLRF CHUC
CLRF TRAM
CLRF NGHIN
CLRF DVITAM
GET_KEY
CALL delay_50ms
MOVF DVI,W
MOVWF DVITAM
MOVF CHUC,W
MOVWF CHUCTAM
MOVF TRAM,W
MOVWF TRAMTAM
MOVF Key,W
MOVWF DVI
MOVF DVITAM,W
MOVWF Key
MOVF Key,W
MOVWF CHUC
MOVF CHUCTAM,W
MOVWF Key
MOVF Key,W
MOVWF TRAM
MOVF TRAMTAM,W
MOVWF Key
MOVF Key,W
MOVWF NGHIN
NOT_KEY
CALL BCD_7DOAN
CALL HIENTHI
GOTOMAIN
;==============================
BCD_7DOAN
MOVF DVI,W
CALL table
MOVWF BIEN1
MOVF CHUC,W
CALL table
MOVWF BIEN2
MOVF TRAM,W
CALL table
MOVWF BIEN3
MOVF NGHIN,W
CALL table
MOVWF BIEN4
RETURN
;==============================
HIENTHI
MOVF BIEN1,0
MOVWF PORTB
MOVLW B'000001'
MOVWF PORTA
CALL delay_1ms
MOVF BIEN2,0
MOVWF PORTB
MOVLW B'000010'
MOVWF PORTA
CALL delay_1ms
MOVF BIEN3,0
MOVWF PORTB
MOVLW B'000100'
MOVWF PORTA
CALL delay_1ms
MOVF BIEN4,0
MOVWF PORTB
MOVLW B'001000'
MOVWF PORTA
CALL delay_1ms
RETURN
;======================================
delay_1ms
MOVLW d'10'
MOVWF count1
d1
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_0
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_0
DECFSZ count1,1
GOTO d1
RETURN
;=====================================
delay_50ms
MOVLW d'50'
MOVWF count1
CALL d1
RETURN
; Display code table.......................................
table
ADDWF PCL ; and calculate jump
DT 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
; Output display code......................................
END
;**********************************************************
BÀI 29B: CHƯƠNG TRÌNH HIỂN THỊ CHỮ “SPKT” DICH TỪ PHẢI QUA TRAI DÙNG
IC47HC595 DE DỊCH MÀU CAM, MÀU XANH, MÀU ĐỎ
H8
H7
H6
H5
H4
H3
H2
H1
H8
H7
H6
H5
H4
H3
H2
H1
H8
H7
H6
H5
H4
H3
H2
H1
H8
H7
H6
H5
H4
H3
H2
H1
C2 C3
27p 27p
X1
U6
DRT1 33
RB0/INT OSC1/CLKIN
13
4MHz
10K 34 14
RB1 OSC2/CLKOUT
35
RB2 VCC
Q0X1
Q1X1
Q2X1
Q3X1
Q4X1
Q5X1
Q6X1
Q7X1
Q0X2
Q1X2
Q2X2
Q3X2
Q4X2
Q5X2
Q6X2
Q7X2
Q0L1
Q1L1
Q2L1
Q3L1
Q4L1
Q5L1
Q6L1
Q7L1
Q0L2
Q1L2
Q2L2
Q3L2
Q4L2
Q5L2
Q6L2
Q7L2
36 2
RB3/PGM RA0/AN0
37 3
RB4 RA1/AN1
38 4
RB5 RA2/AN2/VREF-/CVREF
2
3
4
5
6
7
8
9
39 5
RB6/PGC RA3/AN3/VREF+
40 6
VCC
RB7/PGD RA4/T0CKI/C1OUT
7
RA5/AN4/SS/C2OUT
U5 U2
SER-IND 15
RC0/T1OSO/T1CKI R0
SER-INX 16 8
RC1/T1OSI/CCP2 RE0/AN5/RD 10k
Q0L2 15 11 SRCK Q0L1 15 11 SRCK SRCK 17 9
Q1L2 Q0 SH_CP SERD1 Q1L1 Q0 SH_CP SER-IND RCK RC2/CCP1 RE1/AN6/WR
1 14 1 14 18 10
Q2L2 Q1 DS Q2L1 Q1 DS G-D RC3/SCK/SCL RE2/AN7/CS
2 2 23
Q3L2 Q2 RCK Q3L1 Q2 RCK G-X RC4/SDI/SDA
3 12 3 12 24 1
Q4L2 Q3 ST_CP Q4L1 Q3 ST_CP SRCLR-D RC5/SDO MCLR/Vpp/THV
4 4 25
Q5L2 Q4 Q5L1 Q4 SRCLR-X RC6/TX/CK
5 5 26
Q5 Q5 RC7/RX/DT
Q6L2 6
Q6
Q6L1 6
Q6 C1
Q7L2 7 10 SRCLR-D Q7L1 7 10 SRCLR-D H1 19
Q7 MR Q7 MR RD0/PSP0 1u
9 13 G-D SERD1 9 13 G-D H2 20
Q7' OE Q7' OE RD1/PSP1
H3 21
H4 RD2/PSP2
74HC595 74HC595 22
H5 RD3/PSP3
27
U10 U11 H6 28
RD4/PSP4
Q0X2 SRCK Q0X115 SRCK H7 RD5/PSP5
15 11 11 29
Q1X2 Q0 SH_CP SERX1 Q1X1 1 Q0 SH_CP SER-INX H8 RD6/PSP6
1 14 14 30
Q2X2 Q1 DS Q2X1 2 Q1 DS RD7/PSP7
2
Q3X2 Q2 RCK Q3X1 3 Q2 RCK
3 12 12 PIC16F877A
Q4X2 Q3 ST_CP Q4X1 4 Q3 ST_CP
4
Q4 Q4
Q5X2 5 Q5X1 5
1
2
3
4
5
6
7
8
9
Q5 Q5
Q6X2 6 Q6X1 6
Q6 Q6
Q7X2 7 10 SRCLR-X Q7X1 7 10 SRCLR-X
Q7 MR Q7 MR
9 13 G-X SERX1 9 13 G-X
Q7' OE Q7' OE VCC
74HC595 74HC595 DRT2
10K
;=====================================
;CHUONG TRINH CHINH
;======================================
ORG 0x000
GOTOSTART
ORG 0x008
;=============================================
START
;===================================
;KHOI TAO PORT
;===========================================
BCF STATUS,RP1
BSF STATUS,RP0
CLRF TRISC
CLRF TRISD
BCF STATUS,RP0
;============================================
;VONG LAP CHUONG TRINH
;===========================================
MAIN
CALL CAM
CALL XANH
CALL DO
GOTOMAIN
;==================================================
XANH
BCF PORTC,SRCK
BCF PORTC,RCK
BSF PORTC,GD
BCF PORTC,CLRX
MOVLW 0x00
MOVWF DEM
;---------------------------------------------------------------------
X33
MOVLW D'2'
MOVWF R0 ;CHU KY QUET
INCF DEM,1
;------------------------------------------------------------------------------------
X22
BSF PORTC,SERX ;NGO VAO DATA = 1
BCF PORTC,CLRX
BSF PORTC,CLRX ;CHO PHEP COT XANH
MOVLW D'16'
MOVWF R1 ;SO COT QUET 16
MOVF DEM,0
MOVWF COUNT
;------------------------------------------------------------------------------------------
X11
BSF PORTC,SRCK ;CK TAC DONG
BCF PORTC,SRCK
BSF PORTC,RCK
BCF PORTC,RCK
MOVF COUNT,0
CALL TABLE
MOVWF HANG
BCF PORTC,GX
CALL DELAY
BSF PORTC,GX
BCF PORTC,SERX
INCF COUNT,0
XORLW D'57'
BTFSC STATUS,Z
GOTOLOOP11
INCF COUNT,1
GOTOX11
LOOP11
DECFSZ R1
GOTOX11
DECFSZ R0
GOTOX22
MOVF DEM,0
XORLW D'56'
BTFSC STATUS,Z
GOTOEXIT
GOTOX33
;===========================================
EXIT
RETURN
;============================================
DO
BCF PORTC,SRCK
BCF PORTC,RCK
BSF PORTC,GX
BCF PORTC,GD
MOVLW 0x00
MOVWF DEM
;-------------------------------------------------------------------------------
D33
MOVLW D'2'
MOVWF R0 ;CHU KY QUET
INCF DEM,1
;-----------------------------------------------------------------------------------
D22
BSF PORTC,SERD ;NGO VAO DATA = 2
BCF PORTC,CLRD
BSF PORTC,CLRD ;CHO PHEP COT DO
MOVLW D'16'
MOVWF R1 ;SO COT QUET 16
MOVF DEM,0
MOVWF COUNT
;--------------------------------------------------------------------------------------
D11
BSF PORTC,RCK
BCF PORTC,RCK
MOVF COUNT,0
CALL TABLE
MOVWF HANG
BCF PORTC,GD
CALL DELAY
BSF PORTC,GD
BCF PORTC,SERD
INCF COUNT,0
XORLW D'57'
BTFSC STATUS,Z
GOTOLOOPD11
INCF COUNT,1
GOTOD11
LOOPD11
DECFSZ R1
GOTOD11
;------------------------------------------------------------------------------------
DECFSZ R0
GOTOD22
MOVF DEM,0
XORLW D'56'
BTFSC STATUS,Z
GOTOEXIT
GOTOD33
;====================================================
CAM
BCF PORTC,SRCK
BCF PORTC,RCK
BCF PORTC,GD
BCF PORTC,GX
BCF PORTC,CLRX
BCF PORTC,CLRD
MOVLW 0x00
MOVWF DEM
;-----------------------------------------------------------------------------------
C33
MOVLW D'2'
MOVWF R0 ;CHU KY QUET
INCF DEM,1
;-----------------------------------------------------------------------------------
C22
BSF PORTC,SERX ;NGO VAO DATA = 1
BSF PORTC,SERD ;NGO VAO DATA = 2
BCF PORTC,CLRX
BSF PORTC,CLRX ;CHO PHEP COT XANH
BCF PORTC,CLRD
BSF PORTC,CLRD ;CHO PHEP COT DO
MOVLW D'16'
MOVWF R1 ;SO COT QUET 16
MOVF DEM,0
MOVWF COUNT
;-------------------------------------------------------------------------------------
C11
BSF PORTC,SRCK ;CK TAC DONG
BCF PORTC,SRCK
BSF PORTC,RCK
BCF PORTC,RCK
MOVF COUNT,0
CALL TABLE
MOVWF HANG
BCF PORTC,GX
BCF PORTC,GD
CALL DELAY
BSF PORTC,GX
BSF PORTC,GD
BCF PORTC,SERX
BCF PORTC,SERD
INCF COUNT,0
XORLW D'57'
BTFSC STATUS,Z
GOTOLOOPC11
INCF COUNT,1
GOTOC11
;----------------------------------------------------------------------------
LOOPC11
DECFSZ R1
GOTOC11
DECFSZ R0
GOTOC22
MOVF DEM,0
XORLW D'56'
BTFSC STATUS,Z
GOTOEXIT
GOTOC33
;==================================================
;CAC CHUONG TRINH CON
;==================================================
TABLE
ADDWF PCL,1
DT 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
DT 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
DT 0xff,0xff,0xcd,0xb6,0xb6,0xd9
DT 0xff,0xff,0x80,0xb7,0xb7,0xcf
DT 0xff,0xff,0x80,0xeb,0xdd,0xbe
DT 0xff,0xff,0xbf,0xbf,0x80,0xbf,0xbf
DT 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
DT 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
;===================================================
DELAY
MOVLW D'2'
MOVWF R4
DEL1
MOVLW D'100'
MOVWF A
DEL2
DECFSZ A
GOTO DEL2
DECFSZ R4
GOTO DEL1
RETURN
END
;*****************************************************
BÀI 30: THIẾT KẾ PHẦN CỨNG VỚI 2 LED 7 ĐOẠN VÀ 2 NÚT NHẤN UP_DOWN. THỰC HIỆN
CHƯƠNG TRÌNH KHI NHẤN UP (1 LẦN) SỐ HIỂN THỊ TRÊN LED TĂNG 1 ĐƠN VỊ ( KHI TĂNG NẾU
Ở 99 THÌ VỀ 0), KHI NHẤN DOWN (1 LẦN) SỐ HIỂN THỊ TRÊN LED GIẢM 1 ĐƠN VỊ ( KHI GIAM
NẾU Ở 00 THÌ VỀ 99).
HD:
C1
VCC
33p R3 R1
X1 R4
C2 CRYSTAL 10k 10k 10k UP ANOT CHUNG
33p
VCC
U1
13 33
DOWN
OSC1/CLKIN RB0/INT
R6 14
OSC2/CLKOUT RB1
34
10k 1 35
MCLR/Vpp/THV RB2
36
RB3/PGM
RA0 2 37
RA0/AN0 RB4
RA1 3 38
RA1/AN1 RB5
RA2 4 39
RA2/AN2/VREF- RB6/PGC
RA3 5 40
RA3/AN3/VREF+ RB7/PGD
RA4
RA5
6
RA4/T0CKI R9 A
7
RA5/AN4/SS RC0/T1OSO/T1CKI
15 R10 B
VCC
RC1/T1OSI/CCP2
16 R11
220R
C
8
RE0/AN5/RD RC2/CCP1
17 R12
220R
D
9
RE1/AN6/WR RC3/SCK/SCL
18 R13
220R
E
10 23 R14
220R
RE2/AN7/CS RC4/SDI/SDA
24 F
R15
G
C
D
Q3
A
B
E
220R
F
RC5/SDO
25 G
RC6/TX/CK R16
220R
P 2N2222
26 220R
RC7/RX/DT
220R
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27 Q4
RD4/PSP4 2N2222
28 R2
RD5/PSP5
29 RA0
RD6/PSP6
30 RA1
RD7/PSP7 1k
R20
1k
PIC16F877
UP EQU 0
DOWN EQU 1
;==========================
ORG 0x000
CLRF STATUS
MOVLW 0x00
MOVWF PCLATH
GOTO START
;==========================
;KHAI BAO PORTB VÀ PORTD
;==========================
START
ORG 0x005
BCF STATUS,RP1
BCF STATUS,RP0
CLRF PORTB
CLRF PORTC
CLRF PORTA
BSF STATUS,RP0
MOVLW B'00001111'
MOVWF TRISB
CLRF TRISA
CLRF TRISC
BCF STATUS,RP0
;===========================
;CHUONG TRINH LAP VONG
;===========================
CLRF CHUC
CLRF DVI
MAIN
CALL BCD_7DOAN
CALL HIENTHI
BTFSC PORTB,UP
GOTO KHONG_NHAN_UP
CALL DELAY
BTFSS PORTB,UP
GOTO $-1
CALL DELAY
TANG
INCF DVI,1
MOVF DVI,0
XORLW D'10'
BTFSS STATUS,Z
GOTO MAIN
CLRF DVI
INCF CHUC,1
MOVF CHUC,0
XORLW D'10'
BTFSS STATUS,Z
GOTO MAIN
CLRF CHUC
;
==============================================
=
KHONG_NHAN_DOWN
GOTO MAIN
;
==============================================
====
KHONG_NHAN_UP
BTFSC PORTB,DOWN
GOTO KHONG_NHAN_DOWN
CALL DELAY
BTFSS PORTB,DOWN
GOTO $-1
CALL DELAY
GIAM
MOVF DVI,0
XORLW D'0'
BTFSS STATUS,Z
GOTO GIAM_DVI
MOVLW D'9'
MOVWF DVI
GOTO KTRA_CHUC
GIAM_DVI
DECFSZ DVI,1
NOP
GOTO MAIN
KTRA_CHUC
MOVF CHUC,0
XORLW D'0'
BTFSS STATUS,Z
GOTO GIAM_CHUC
MOVLW D'9'
MOVWF CHUC
GOTO MAIN
GIAM_CHUC
DECFSZ CHUC,1
NOP
GOTO MAIN
;=================================
BCD_7DOAN
MOVF DVI,0
CALL TABLE
MOVWF BIEN1
MOVF CHUC,0
CALL TABLE
MOVWF BIEN2
RETURN
;==============================
DELAY_HIENTHI
MOVLW D'2'
MOVWF COUNT1
DEL1
MOVLW D'10'
MOVWF COUNT2
DEL2
CALL HIENTHI
DECFSZ COUNT2
GOTO DEL2
DECFSZ COUNT1
GOTO DEL1
RETURN
;===============================
HIENTHI
MOVF BIEN1,0
MOVWF PORTC
MOVLW B'000001'
MOVWF PORTA
CALL delay_10ms
MOVF BIEN2,0
MOVWF PORTC
MOVLW B'000010'
MOVWF PORTA
CALL delay_10ms
RETURN
;======================================
;CHUONG TRINH DELAY
;===========================================
DELAY
MOVLW D'10'
MOVWF COUNT3
D1 DECFSZ COUNT3
GOTO D1
RETURN
;======================================
delay_10ms
MOVLW d'10'
MOVWF count1
d2
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
;
==============================================
===========
TABLE ADDWF PCL,1
DT 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
END
;************************************************************
;=============khoi tao chuong
trinh=====================
ORG 0x0004
GOTO ISR
;-----------------------------------------------------------------------------
; Chuong trinh ngat
;-----------------------------------------------------------------------------
ISR
;---------------------------------------------------------------------------
; doan chuong trinh bat buoc khi bat dau chuong trinh ngat
;--------------------------------------------------------------------------
MOVWF W_save
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_save
MOVF PCLATH,W
MOVWF PCLATH_save
CLRF PCLATH
MOVF FSR,W
MOVWF FSR_save
;--------------------------------------------------------------------------------
; Kiem tra co ngat
;--------------------------------------------------------------------------------
BTFSS PIR1,TMR1IF ; kiem tra co ngat timer1
GOTO EXIT_INT
BCF T1CON,TMR1ON ; tam thoi tat timer1 de khoi tao lai
;--------------------------------------------------------------------------------
; cac thao tac chinh cua chuong trinh ngat
;--------------------------------------------------------------------------------
CLRF TMR1L ; khoi tao cac gia tri chua trong
thanh
CLRF TMR1H ; ghi TMRH va TMRL
MOVLW 0x61 ; nap gia tri vao cac thanh ghi dem
cua Timer1
MOVWF TMR1H ; gia tri 25000 (25000 ->
61A8H)
MOVLW 0xA8
MOVWF TMR1L
BSF T1CON,TMR1ON ; Bat Timer1
BCF PIR1,TMR1IF ; xoa co ngat
;========================
BTFSS PORTB,WS
GOTO TANG
GIAM
MOVF hang_don_vi,0
XORLW D'0'
BTFSS STATUS,Z
GOTO GIAM_DVI
MOVLW D'9'
MOVWF hang_don_vi
GOTO KTRA_CHUC
GIAM_DVI
DECFSZ hang_don_vi,1
NOP
GOTO EXIT_INT
KTRA_CHUC
MOVF hang_chuc,0
XORLW D'0'
BTFSS STATUS,Z
GOTO GIAM_CHUC
MOVLW D'9'
MOVWF hang_chuc
GOTO EXIT_INT
GIAM_CHUC
DECFSZ hang_chuc,1
NOP
GOTO EXIT_INT
;========================================
TANG
INCF hang_don_vi,1
MOVLW D'10'
XORWF hang_don_vi,0
BTFSS STATUS,Z
GOTO EXIT_INT
CLRF hang_don_vi
INCF hang_chuc,1
MOVLW D'10'
XORWF hang_chuc,0
BTFSS STATUS,Z
GOTO EXIT_INT
CLRF hang_chuc
;--------------------------------------------------------------------------------------------
--------------------
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;---------------------------
ORG 0x0000
GOTO START
ORG 0x050
;--------------------------------------------------------------------------------------------
-------
; Chuong trình chính
;--------------------------------------------------------------------------------------------
-------
START
;---------------------------------------------------------------
; khoi tao cac port dieu khien
;---------------------------------------------------------------
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0x00 ; PORTA <-output
MOVWF TRISA
MOVLW 0x00 ; PORTC <-output
MOVWF TRISC
BCF STATUS,RP0
;-----------------------------------------------------------------
; Khoi tao Timer1
;-----------------------------------------------------------------
CLRF T1CON
CLRF INTCON
CLRF TMR1H
CLRF TMR1L
BSF STATUS,RP0 ; Chon BANK1
CLRF PIE1
BSF PIE1,TMR1IE ; Cho phep ngat Timer1
BCF STATUS,RP0 ; ChoN BANK0
;================================
delay_1ms
MOVLW d'10'
MOVWF count1
d2 MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_1 ; delay 1 ms
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_1
DECFSZ count1,1
GOTO d2
RETURN
END
;
**************************************************************************
*
C1
33p
X1
CRYSTAL
C2
U1 LCD1
33p 13 33 LM016L
R1 14
OSC1/CLKIN RB0/INT
34
OSC2/CLKOUT RB1
1 35
10k MCLR/Vpp/THV RB2
36
RB3/PGM
2 37 +5V
RA0/AN0 RB4
3 38
RA1/AN1 RB5
+5V 4 39
RA2/AN2/VREF- RB6/PGC
VDD
VSS
VEE
V=5 5 40
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
RA3/AN3/VREF+ RB7/PGD
E
6
RA4/T0CKI
7 15
RA5/AN4/SS RC0/T1OSO/T1CKI RV2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+5V 16
RC1/T1OSI/CCP2
8 17
56%
RE0/AN5/RD RC2/CCP1
9 18
RE1/AN6/WR RC3/SCK/SCL
10 23
RE2/AN7/CS RC4/SDI/SDA
24 1k
RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
+0.10
+88.8 19
RV1 Volts
RD0/PSP0
20
RD1/PSP1 VSS
21
RD2/PSP2
(+) 22
RD3/PSP3
V=4.9 27
98%
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
1k
+4.90
+88.8 PIC16F877
Volts
VSS
start
CALL getADC ; read input
CALL condec ; convert to decimal
CALL putLCD ; display input
GOTO start ; jump to main loop
; SUBROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Read ADC input and store ---------------------------------------------
getADC
BSF ADCON0,GO ; start ADC..
wait
BTFSC ADCON0,GO ; ..and wait for finish
GOTO wait
MOVF ADRESH,W ; store result high byte
RETURN
; Convert input to decimal ---------------------------------------------
condec
MOVWF ADbin ; get ADC result
CLRF huns ; zero hundreds digit
CLRF tens ; zero tens digit
CLRF ones ; zero ones digit
; Calclulate hundreds --------------------------------------------------
BSF STATUS,C ; set carry for subtract
MOVLW D'100' ; load 100
sub1
SUBWF ADbin ; and subtract from result
INCF huns ; count number of loops
BTFSC STATUS,C ; and check if done
GOTO sub1 ; no, carry on
ADDWF ADbin ; yes, add 100 back on
DECF huns ; and correct loop count
; Calculate tens digit -------------------------------------------------
BSF STATUS,C ; repeat process for tens
MOVLW D'10' ; load 10
sub2
SUBWF ADbin ; and subtract from result
INCF tens ; count number of loops
BTFSC STATUS,C ; and check if done
GOTO sub2 ; no, carry on
ADDWF ADbin ; yes, add 100 back on
DECF tens ; and correct loop count
MOVF ADbin,W ; load remainder
MOVWF ones ; and store as ones digit
RETURN ; done
; Output to display ----------------------------------------------------
putLCD
BCF Select,RS ; set display command mode
MOVLW 080 ; code to home cursor
CALL Send ; output it to display
BSF Select,RS ; and restore data mode
; Convert digits to ASCII and display ----------------------------------
MOVLW 030 ; load ASCII offset
ADDWF huns ; convert hundreds to ASCII
ADDWF tens ; convert tens to ASCII
ADDWF ones ; convert ones to ASCII
;====================================
; INCLUDED ROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 1ms delay with 1us cycle time (1000 cycles)-------------------
Onems
MOVLW D'249' ; Count for 1ms delay
MOVWF Timer1 ; Load count
Loop1
NOP ; Pad for 4 cycle loop
DECFSZ Timer1 ; Count
GOTO Loop1 ; until Z
RETURN ; and finish
; Delay Xms, X received in W -----------------------------------
Xms
MOVWF TimerX ; Count for X ms
LoopX
CALL Onems ; Delay 1ms
DECFSZ TimerX ; Repeat X times
GOTO LoopX ; until Z
RETURN ; and finish
; Generate data/command clock siganl E -------------------------
PulseE
BSF PORTD,E ; Set E high
CALL Onems ; Delay 1ms
BCF PORTD,E ; Reset E low
CALL Onems ; Delay 1ms
RETURN ; done
;==============================================
Send
MOVWF OutCod ; Store output code
ANDLW 0F0 ; Clear low nybble
MOVWF PORTD ; Output high nybble
BTFSC Select,RS ; Test RS bit
BSF PORTD,RS ; and set for data
CALL PulseE ; and clock display
CALL Onems ; wait 1ms for display
SWAPF OutCod ; Swap low/high nybbles
MOVF OutCod,W ; Retrieve output code
ANDLW 0F0 ; Clear low nybble
MOVWF PORTD ; Output low nybble
BTFSC Select,RS ; Test RS bit
BSF PORTD,RS ; and set for data
CALL PulseE ; and clock display
CALL Onems ; wait 1ms for display
RETURN ; done
;======================================================
Inid
MOVLW D'100' ; Load count 100ms delay
CALL Xms ; and wait for display
MOVLW 0F0 ; Mask for select code
;-----------------------------------------------------------
; Output to display
;-----------------------------------------------------------
putLCD
BCF Select,RS ; set display command mode
MOVLW 080 ; code to home cursor
CALL Send ; output it to display
BSF Select,RS ; and restore data mode
; Convert digits to ASCII and display.......................
MOVLW 030 ; load ASCII offset
ADDWF thos ; convert thousands to ASCII
ADDWF huns ; convert hundreds to ASCII
ADDWF tens ; convert tens to ASCII
ADDWF ones ; convert ones to ASCII
;====================================
; INCLUDED ROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 1ms delay with 1us cycle time (1000 cycles)-------------------
Onems
MOVLW D'249' ; Count for 1ms delay
MOVWF Timer1 ; Load count
Loop1
NOP ; Pad for 4 cycle loop
DECFSZ Timer1 ; Count
GOTO Loop1 ; until Z
RETURN ; and finish
; Delay Xms, X received in W -----------------------------------
Xms
MOVWF TimerX ; Count for X ms
LoopX
CALL Onems ; Delay 1ms
DECFSZ TimerX ; Repeat X times
GOTO LoopX ; until Z
RETURN ; and finish
; Generate data/command clock siganl E -------------------------
PulseE
BSF PORTD,E ; Set E high
CALL Onems ; Delay 1ms
BCF PORTD,E ; Reset E low
CALL Onems ; Delay 1ms
RETURN ; done
;==============================================
Send
MOVWF OutCod ; Store output code
ANDLW 0F0 ; Clear low nybble
MOVWF PORTD ; Output high nybble
BTFSC Select,RS ; Test RS bit
BSF PORTD,RS ; and set for data
CALL PulseE ; and clock display
CALL Onems ; wait 1ms for display
SWAPF OutCod ; Swap low/high nybbles
MOVF OutCod,W ; Retrieve output code
ANDLW 0F0 ; Clear low nybble
MOVWF PORTD ; Output low nybble
BTFSC Select,RS ; Test RS bit
BSF PORTD,RS ; and set for data
CALL PulseE ; and clock display
CALL Onems ; wait 1ms for display
RETURN ; done
;======================================================
Inid
MOVLW D'100' ; Load count 100ms delay
CALL Xms ; and wait for display
MOVLW 0F0 ; Mask for select code
MOVWF Select ; High nybble not masked
MOVLW 0x30 ; Load initial nibble
MOVWF PORTD ; and output it to display
CALL PulseE ; Latch initial code
MOVLW D'5' ; Set delay 5ms
CALL Xms ; and wait
CALL PulseE ; Latch initial code again
CALL Onems ; Wait 1ms
CALL PulseE ; Latch initial code again
BCF PORTD,4 ; Set 4-bit mode
CALL PulseE ; Latch it
MOVLW 0x28 ; Set 4-bit mode, 2 lines
CALL Send ; and send code
MOVLW 0x08 ; Switch off display
CALL Send ; and send code
MOVLW 0x01 ; Clear display
CALL Send ; and send code
MOVLW 0x06 ; Enable cursor auto inc
CALL Send ; and send code
MOVLW 0x80 ; Zero display address
CALL Send ; and send code
MOVLW 0x0C ; Turn on display
CALL Send ; and send code
RETURN ; Done
END ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;**************************************************************************
BÀI 32: CHƯƠNG TRÌNH HIỂN THỊ GIÁ TRỊ QUÉT PHÍM MA TRẬN 16 BIT RA 2 LED 7 ĐOẠN, BAN
ĐẦU HIỂN THỊ SỐ 00, SAU KHI NHẤN PHÍM THÌ GIÁ TRỊ CỦA ĐƠN VỊ ĐƯỢC CHUYỂN SANG HÀNG
CHỤC, CÒN GIÁ TRỊ CỦA PHÍM NHẤN CHUYỂN SANG HÀNG ĐƠN VỈ.
CATOT CHUNG
VCC
Q1
2N2222
C2 C1
33p 33p R3R4R5R6R7R8R9 R10
X1 330R
330R
330R
330R
330R
330R
330R
RA0
Q2
1k
2N2222
G
C
D
A
E
F
CRYSTAL U1
VCC
13 33 A
14
OSC1/CLKIN RB0/INT
34 B RA1
R11
OSC2/CLKOUT RB1
35 C Q3
RB2 1k
RA0 2 36 D R14 R12 R13 R16 2N2222
RA0/AN0 RB3/PGM
RA1 3 37 E 10k 10k 10k 10k
VCC RA1/AN1 RB4
RA2 4 38 F
RA3 5
RA2/AN2/VREF-/CVREF RB5
39 G
R2
RA3/AN3/VREF+ RB6/PGC
RA4 6 40 RA2
RA4/T0CKI/C1OUT RB7/PGD
RA5 7 RD0
RA5/AN4/SS/C2OUT
15
1k Q4
RC0/T1OSO/T1CKI 2N2222
R1 8
RE0/AN5/RD RC1/T1OSI/CCP2
16 RD1
10k 9 17
RE1/AN6/WR RC2/CCP1
10 18 RD2
RESET RE2/AN7/CS RC3/SCK/SCL
23
RSET RSET
RC4/SDI/SDA
RD3 RA3
R15
1 24
MCLR/Vpp/THV RC5/SDO
25 1k
RC6/TX/CK
26
RC7/RX/DT
19 RD0
RD0/PSP0
20 RD1
0 1 2 3
RD1/PSP1
21 RD2
RD2/PSP2
22 RD3
RD3/PSP3
27 RD4 RD4
RD4/PSP4
28 RD5
4 5 6 7
RD5/PSP5
29 RD6
RD6/PSP6
30 RD7
RD7/PSP7
RD5
PIC16F877A
8 9 A B
RD6
C D E F
RD7
; Initialise ports.........................................
START
BANKSEL TRISC ; Display
CLRF TRISA
CLRF TRISB
MOVLW B'000001111' ; Keypad
MOVWF TRISD ; bidirectional
BANKSEL PORTC ; Display off
CLRF PORTC ; initially
CLRF PORTB
CLRF PORTA
CLRF DVI
CLRF CHUC
CLRF DVITAM
GOTOMAIN ; jump to main
; Check a row of keys .....................................
GET_KEY
CALL delay_50ms
CALL HIENTHI
CALL delay_50ms
CALL HIENTHI
MOVF DVI,W
MOVWF DVITAM
CLRW
MOVF KEY,W
MOVWF DVI
CLRW
MOVF DVITAM,W
MOVWF KEY
CLRW
MOVF KEY,W
MOVWF CHUC
CLRW
NOT_KEY
CALL BCD_7DOAN
CALL HIENTHI
GOTOMAIN
;==============================
BCD_7DOAN
MOVF DVI,W
CALL table
MOVWF BIEN1
MOVF CHUC,W
CALL table
MOVWF BIEN2
RETURN
;==============================
HIENTHI
MOVF BIEN1,0
MOVWF PORTB
MOVLW B'000001'
MOVWF PORTA
CALL delay_1ms
MOVF BIEN2,0
MOVWF PORTB
MOVLW B'000010'
MOVWF PORTA
CALL delay_1ms
RETURN
;======================================
delay_1ms
MOVLW d'10'
MOVWF count1
d1
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_0
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_0
DECFSZ count1,1
GOTO d1
RETURN
;=====================================
delay_50ms
MOVLW d'50'
MOVWF count1
CALL d1
RETURN
; Display code table.......................................
table
ADDWF PCL ; and calculate jump
DT 0xC0,0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80
DT 0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
; Output display code......................................
END
;************************************************************
BÀI 32B: CHƯƠNG TRÌNH HIỂN THỊ GIÁ TRỊ QUÉT PHÍM MA TRẬN 16 BIT RA 4 LED 7 ĐOẠN, BAN
ĐẦU HIỂN THỊ SỐ 0000, SAU KHI NHẤN PHÍM THÌ GIÁ TRỊ CỦA PHÍM NHẤN ĐƯỢC DỊCH TỪ HÀNG
DƠN VỊ DẾN HÀNG NGHÌN SAU MỖI LẦN CÓ PHÍM DƯỢC NHẤN.
; Initialise ports.........................................
START
BANKSEL TRISC ; Display
CLRF TRISA
CLRF TRISB
MOVLW B'000001111' ; Keypad
MOVWF TRISD ; bidirectional
BANKSEL PORTC ; Display off
CLRF PORTC ; initially
CLRF PORTB
CLRF PORTA
CLRF DVI
CLRF CHUC
CLRF DVITAM
GOTOMAIN ; jump to main
; Check a row of keys .....................................
GET_KEY
CALL HIENTHI
CALL delay_50ms
CALL HIENTHI
MOVF DVI,W
MOVWF DVITAM
MOVF CHUC,W
MOVWF CHUCTAM
MOVF TRAM,W
MOVWF TRAMTAM
MOVF KEY,W
MOVWF DVI
MOVF DVITAM,W
MOVWF KEY
MOVF KEY,W
MOVWF CHUC
MOVF CHUCTAM,W
MOVWF KEY
MOVF KEY,W
MOVWF TRAM
MOVF TRAMTAM,W
MOVWF KEY
MOVF KEY,W
MOVWF NGHIN
NOT_KEY
CALL BCD_7DOAN
CALL HIENTHI
GOTOMAIN
;==============================
BCD_7DOAN
MOVF DVI,W
CALL table
MOVWF BIEN1
MOVF CHUC,W
CALL table
MOVWF BIEN2
MOVF TRAM,W
CALL table
MOVWF BIEN3
MOVF NGHIN,W
CALL table
MOVWF BIEN4
RETURN
;==============================
HIENTHI
MOVF BIEN1,0
MOVWF PORTB
MOVLW B'000001'
MOVWF PORTA
CALL delay_1ms
MOVF BIEN2,0
MOVWF PORTB
MOVLW B'000010'
MOVWF PORTA
CALL delay_1ms
MOVF BIEN3,0
MOVWF PORTB
MOVLW B'000100'
MOVWF PORTA
CALL delay_1ms
MOVF BIEN4,0
MOVWF PORTB
MOVLW B'001000'
MOVWF PORTA
CALL delay_1ms
RETURN
;======================================
delay_1ms
MOVLW d'10'
MOVWF count1
d1
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_0
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_0
DECFSZ count1,1
GOTO d1
RETURN
;=====================================
delay_50ms
MOVLW d'50'
MOVWF count1
CALL d1
RETURN
; Display code table.......................................
table
ADDWF PCL ; and calculate jump
DT 0xC0,0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80
DT 0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
; Output display code......................................
END
;************************************************************************