kidmaster08
17-12-2012, 12:55 AM
mình dùng asm viết thì mô phỏng được đếm tần số và hiển thị ra LCD như thế này
chương trình dùng thuật toán đếm số xung trong thời gian là 1s. hiện tại mình chỉ cho đếm tối đa là 33MHz. các bít cấu hình được MPlab định nghĩa rồi. sử dụng thạch anh 4Mhz. sau đây la code :
PROCESSOR 16F877A
INCLUDE <P16F877A.INC>
E EQU 0
RS EQU 1
RW EQU 2
BUFF0 EQU 0X27
BUFF1 EQU 0X28
BUFF2 EQU 0X29
BUFF3 EQU 0X31
BUFF4 EQU 0X32
BUFF5 EQU 0X33
BUFF6 EQU 0X38
BUFF7 EQU 0X39
CNTW EQU 0X34
CNT1 EQU 0X35
CNT2 EQU 0X36
WORKA EQU 0X41
WORKB EQU 0X45
CNTA EQU 0X42
CNTB EQU 0X43
CNTW1 EQU 0X43
CNTW2 EQU 0X44
; BAT DAU CHUONG TRINH
ORG 0X00
GOTO START
START
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0X00
MOVWF TRISB
CLRF PIE1
MOVLW 0X00
MOVWF TRISD
MOVLW 0XFF
MOVWF TRISC
CLRF OPTION_REG
BSF OPTION_REG,7
BCF STATUS,RP0
MOVLW 0X0E
MOVWF T1CON ; THIET LAP THONG SO CHO BO DEM TMR1 : CHAN DEM TU RC0, HE SO CHIA =1, DEM KO DONG BO
CLRF PIR1
;THIET LAP BAN DAU CHO LCD
CALL WAITLCD
BCF PORTB,RS
MOVLW 0X38
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BCF PORTB,RS
MOVLW 0X01
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BCF PORTB,RS
MOVLW 0X0C
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
LOOP
CLRF BUFF0
CLRF BUFF1
CLRF BUFF2
CLRF BUFF3
CLRF BUFF4
CLRF BUFF5
CLRF BUFF6
CLRF BUFF7
CLRF CNTA
CLRF CNTB
CLRF CNTW1
CLRF WORKA
CLRF WORKB
CLRF CNTW2
CLRF TMR1H
CLRF TMR1L
CLRF CNT1
CLRF CNT2
BCF PIR1,TMR1IF
BSF T1CON,TMR1ON ; BAT DAU DEM
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CALL TMRCHK
CALL TMRCHK
CALL TMRCHK
CALL TMRCHK
CALL TMRCHK
CALL TMRCHK
CALL TMRCHK
CALL TMRCHK
CALL TMRCHK
CALL TMRCHK
BCF T1CON,TMR1ON
MOVF CNTW1,0 ; TAT BO DEM DE XU LY KET QUA DEM
MOVWF CNTA
MOVF CNTW2,0
MOVWF CNTB
MOVF TMR1H,0
MOVWF CNT1
MOVF TMR1L,0
MOVWF CNT2
BTFSS PIR1,TMR1IF
GOTO HH0
MOVLW 0XFF
SUBWF CNTA,0
BTFSC STATUS,Z ;CNTA DA BANG 255 HAY CHUA ?
GOTO HH1
INCF CNTA
GOTO HH0
HH1
CLRF CNTA
INCF CNTB
HH0 ; LUC NAY CNTA,CNTB LUU SO LAN TRAN, CNT1 VA CNT2 LUU TRONG TMR1H VA TMR1L
MOVLW 0X02
SUBWF CNTB,0
BTFSC STATUS,C
GOTO OVER
MOVLW 0X02
SUBWF CNTB,0
BTFSC STATUS,Z
GOTO OVER
BTFSS CNTB,0 ; BAT DAU VIET NHU CHUONG TRINH CU
GOTO CD1
MOVLW d'1'
MOVWF BUFF0
MOVLW d'6'
MOVWF BUFF1
MOVLW d'7'
MOVWF BUFF2
MOVLW d'7'
MOVWF BUFF3
MOVLW d'7'
MOVWF BUFF4
MOVLW d'2'
MOVWF BUFF5
MOVLW d'1'
MOVWF BUFF6
MOVLW d'6'
MOVWF BUFF7
CD1
BTFSS CNTA,7
GOTO CD2
MOVLW d'8'
ADDWF BUFF1
MOVLW d'3'
ADDWF BUFF2
MOVLW d'8'
ADDWF BUFF3
MOVLW d'8'
ADDWF BUFF4
MOVLW d'6'
ADDWF BUFF5
MOVLW d'0'
ADDWF BUFF6
MOVLW d'8'
ADDWF BUFF7
CD2
BTFSS CNTA,6
GOTO CD3
MOVLW d'4'
ADDWF BUFF1,1
MOVLW d'1'
ADDWF BUFF2
MOVLW d'9'
ADDWF BUFF3
MOVLW d'4'
ADDWF BUFF4
MOVLW d'3'
ADDWF BUFF5
MOVLW d'0'
ADDWF BUFF6
MOVLW d'4'
ADDWF BUFF7
CD3
BTFSS CNTA,5
GOTO CD4
MOVLW d'2'
ADDWF BUFF1
MOVLW d'0'
ADDWF BUFF2
MOVLW d'9'
ADDWF BUFF3
MOVLW d'7'
ADDWF BUFF4
MOVLW d'1'
ADDWF BUFF5
MOVLW d'5'
ADDWF BUFF6
MOVLW d'2'
ADDWF BUFF7
CD4
BTFSS CNTA,4
GOTO CD5
MOVLW d'1'
ADDWF BUFF1
MOVLW d'0'
ADDWF BUFF2
MOVLW d'4'
ADDWF BUFF3
MOVLW d'8'
ADDWF BUFF4
MOVLW d'5'
ADDWF BUFF5
MOVLW d'7'
ADDWF BUFF6
MOVLW d'6'
ADDWF BUFF7
CD5
BTFSS CNTA,3
GOTO CD6
MOVLW d'5'
ADDWF BUFF2
MOVLW d'2'
ADDWF BUFF3
MOVLW d'4'
ADDWF BUFF4
MOVLW d'2'
ADDWF BUFF5
MOVLW d'8'
ADDWF BUFF6
MOVLW d'8'
ADDWF BUFF7
CD6
BTFSS CNTA,2
GOTO CD7
MOVLW d'2'
ADDWF BUFF2
MOVLW d'6'
ADDWF BUFF3
MOVLW d'2'
ADDWF BUFF4
MOVLW d'1'
ADDWF BUFF5
MOVLW d'4'
ADDWF BUFF6
MOVLW d'4'
ADDWF BUFF7
CD7
BTFSS CNTA,1
GOTO CD8
MOVLW d'1'
ADDWF BUFF2
MOVLW d'3'
ADDWF BUFF3
MOVLW d'1'
ADDWF BUFF4
MOVLW d'0'
ADDWF BUFF5
MOVLW d'7'
ADDWF BUFF6
MOVLW d'2'
ADDWF BUFF7
CD8
BTFSS CNTA,0
GOTO CD9
MOVLW d'6'
ADDWF BUFF3
MOVLW d'5'
ADDWF BUFF4
MOVLW d'5'
ADDWF BUFF5
MOVLW d'3'
ADDWF BUFF6
MOVLW d'6'
ADDWF BUFF7
CD9
BTFSS CNT1,7
GOTO CD10
MOVLW d'3'
ADDWF BUFF3
MOVLW d'2'
ADDWF BUFF4
MOVLW d'7'
ADDWF BUFF5
MOVLW d'6'
ADDWF BUFF6
MOVLW d'8'
ADDWF BUFF7
CD10
BTFSS CNT1,6
GOTO CD11
MOVLW d'1'
ADDWF BUFF3
MOVLW d'6'
ADDWF BUFF4
MOVLW d'3'
ADDWF BUFF5
MOVLW d'8'
ADDWF BUFF6
MOVLW d'4'
ADDWF BUFF7
CD11
BTFSS CNT1,5
GOTO CD12
MOVLW d'8'
ADDWF BUFF4
MOVLW d'1'
ADDWF BUFF5
MOVLW d'9'
ADDWF BUFF6
MOVLW d'2'
ADDWF BUFF7
CD12
BTFSS CNT1,4
GOTO CD13
MOVLW d'4'
ADDWF BUFF4
MOVLW d'0'
ADDWF BUFF5
MOVLW d'9'
ADDWF BUFF6
MOVLW d'6'
ADDWF BUFF7
CD13
BTFSS CNT1,3
GOTO CD14
MOVLW d'2'
ADDWF BUFF4
MOVLW d'0'
ADDWF BUFF5
MOVLW d'4'
ADDWF BUFF6
MOVLW d'8'
ADDWF BUFF7
CD14
BTFSS CNT1,2
GOTO CD15
MOVLW d'1'
ADDWF BUFF4
MOVLW d'0'
ADDWF BUFF5
MOVLW d'2'
ADDWF BUFF6
MOVLW d'4'
ADDWF BUFF7
CD15
BTFSS CNT1,1
GOTO CD16
MOVLW d'5'
ADDWF BUFF5
MOVLW d'1'
ADDWF BUFF6
MOVLW d'2'
ADDWF BUFF7
CD16
BTFSS CNT1,0
GOTO CD17
MOVLW d'2'
ADDWF BUFF5
MOVLW d'5'
ADDWF BUFF6
MOVLW d'6'
ADDWF BUFF7
CD17
BTFSS CNT2,7
GOTO CD18
MOVLW d'1'
ADDWF BUFF5
MOVLW d'2'
ADDWF BUFF6
MOVLW d'8'
ADDWF BUFF7
CD18
BTFSS CNT2,6
GOTO CD19
MOVLW d'6'
ADDWF BUFF6
MOVLW d'4'
ADDWF BUFF7
CD19
BTFSS CNT2,5
GOTO CD20
MOVLW d'3'
ADDWF BUFF6
MOVLW d'2'
ADDWF BUFF7
CD20
BTFSS CNT2,4
GOTO CD21
MOVLW d'1'
ADDWF BUFF6
MOVLW d'6'
ADDWF BUFF7
CD21
BTFSS CNT2,3
GOTO CD22
MOVLW d'8'
ADDWF BUFF7
CD22
BTFSS CNT2,2
GOTO CD23
MOVLW d'4'
ADDWF BUFF7
CD23
BTFSS CNT2,1
GOTO CD24
MOVLW d'2'
ADDWF BUFF7
CD24
BTFSS CNT2,0
GOTO CONVERT
MOVLW d'1'
ADDWF BUFF7
CONVERT
MOVLW 0X0A
SUBWF BUFF7,0
BTFSS STATUS,C
GOTO CR1
MOVLW 0X0A
SUBWF BUFF7,1
INCF BUFF6
GOTO CONVERT
CR1
MOVLW 0X0A
SUBWF BUFF6,0
BTFSS STATUS,C
GOTO CR2
MOVLW 0X0A
SUBWF BUFF6,1
INCF BUFF5
GOTO CR1
CR2
MOVLW 0X0A
SUBWF BUFF5,0
BTFSS STATUS,C
GOTO CR3
MOVLW 0X0A
SUBWF BUFF5,1
INCF BUFF4
GOTO CR2
CR3
MOVLW 0X0A
SUBWF BUFF4,0
BTFSS STATUS,C
GOTO CR4
MOVLW 0X0A
SUBWF BUFF4,1
INCF BUFF3
GOTO CR3
CR4
MOVLW 0X0A
SUBWF BUFF3,0
BTFSS STATUS,C
GOTO CR5
MOVLW 0X0A
SUBWF BUFF3,1
INCF BUFF2
GOTO CR4
CR5
MOVLW 0X0A
SUBWF BUFF2,0
BTFSS STATUS,C
GOTO CR6
MOVLW 0X0A
SUBWF BUFF2,1
INCF BUFF1
GOTO CR5
CR6
MOVLW 0X0A
SUBWF BUFF1,0
BTFSS STATUS,C
GOTO DOCKQ
MOVLW 0X0A
SUBWF BUFF1,1
INCF BUFF0
GOTO CR6
DOCKQ
MOVLW d'48'
ADDWF BUFF0,1
ADDWF BUFF1,1
ADDWF BUFF2,1
ADDWF BUFF3,1
ADDWF BUFF4,1
ADDWF BUFF5,1
ADDWF BUFF6,1
ADDWF BUFF7,1
BCF PORTB,RS
MOVLW 0X80
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'.'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'T'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'A'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'N'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #' '
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'S'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'O'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #' '
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'C'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'O'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'N'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'G'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #' '
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'T'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'A'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'C'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BCF PORTB,RS
MOVLW 0XC2
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVF BUFF0,0
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVF BUFF1,0
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'.'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVF BUFF2,0
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVF BUFF3,0
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVF BUFF4,0
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #' '
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVF BUFF5,0
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVF BUFF6,0
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVF BUFF7,0
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'M'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'H'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'z'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
GOTO LOOP
TMRCHK ; XU LY THOI GIAN THUC, CAN THAN
MOVLW d'189'
MOVWF WORKB
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
; NOP
TMRCHK1
MOVLW d'25'
MOVWF WORKA
KT
BTFSS PIR1,TMR1IF
GOTO XX1
BCF PIR1,TMR1IF
MOVLW 0XFF
SUBWF CNTW1,0
BTFSS STATUS,Z
GOTO XXX
INCF CNTW2
CLRF CNTW1
GOTO XX2
XXX
INCF CNTW1
GOTO XX2
XX1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
XX2
nop
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ WORKA
GOTO KT
DECFSZ WORKB ; XEM LAI TAI DAY
GOTO TMRCHK1
RETURN
OVER
BCF PORTB,RS
MOVLW 0X81
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'.'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'O'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'V'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'E'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
MOVLW #'R'
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
goto LOOP
WAITLCD
BCF PORTB,E
BSF PORTB,RW
BSF STATUS,RP0
MOVLW 0XFF
MOVWF TRISD
BCF STATUS,RP0
WAIT1
BTFSC PORTD,7
GOTO WAIT1
BSF PORTB,RS
BCF PORTB,RW
BSF STATUS,RP0
MOVLW 0X00
MOVWF TRISD
BCF STATUS,RP0
RETURN
END
kidmaster08
17-12-2012, 01:09 AM
Mình xin giải thích chung chương trình mình như sau :
-thiết lập cho Timer1 có hệ số chia 1, các chân rb0,1,2 nối vơi E,rs,rw của LCD.chọn đếm không đồng bộ
- cho phép Timer1 hoạt động, từ thời điểm này bắt đầu đếm. 10 lần gọi nhãn tmrchk và các lệnh nop được bố trí để sau khi ngưng hoạt động của timer1 thời gian đạt đưc là 1s. trong thời gian 1s này cntw1 và cntw2 sẽ cập nhật số lần tràn của timer. sau khi dừng timer1 sẽ xử lý từng bít của các thanh ghi này và xuất giá trị trong các thanh ghi Buff0 đến buff7. để hiển thị ra lcd, đổi các thanh ghi này ra ma asii bằng cách cộng thêm 48 đơn vị.
- đến phần hiển thị chắc các bạn đã hiểu
mình đã mô phỏng rất tốt nhưng vì bận quá mình chưa thử, đáng tiếc là pic 16f877a không có lệnh nhân chia nên lập trình dài, cộng với bank thanh ghi cung nhiều nên đảo băng không thích cho lắm.haizz
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.