PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 11-09-2006, 10:46 PM   #1
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Smile

Trích:
Nguyên văn bởi nhh View Post
Đây là chương trình đếm số lần switch on từ 1 đến 9 hiển thị lên LED 7 đoạn,dùng ngắt ngoài RB0 và kỹ thuật bảng.

Code:
;========================================
;Auhor:		NHH
;Date:		02/03/06
;Hardware:	PIC16F877A ,Crystal 10MHz
;========================================
	TITLE 		"Count button on by Interrupt RB0"
	PROCESSOR	PIC16f877A 
	INCLUDE<P16f877A.inc> 
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;========================================
	COUNT	EQU	0x20	
w_temp		EQU	0x71		; variable used for context saving 
status_temp	EQU	0x72		; variable used for context saving
pclath_temp	EQU	0x73		; variable used for context saving			

;=============================================================================
;CHUONG TRINH CHINH
;=============================================================================
	ORG 0000h
	GOTO 	MAIN
	ORG 0004h
	GOTO	INTERRUPT

;==============================INTERRUPT PROGRAM===========================		
INTERRUPT
	movwf w_temp	 ; save off current W register contents
	movf STATUS,w 	; move status register into W register
	movwf status_temp	 ; save off contents of STATUS register
	movf PCLATH,w	 ; move pclath register into w register
	movwf pclath_temp 	; save off contents of PCLATH register
;******************************************************************************
	BCF	INTCON,INTF	;xoa co int
	INCF	COUNT,F
	MOVLW	d'10'
	SUBWF	COUNT,W
	BTFSS	STATUS,0
	GOTO	$+2
	GOTO	NODISPLAY
	MOVF	COUNT,W
	CALL	TABLE
	MOVWF	PORTD
	retfie 			; return from interrupt
NODISPLAY			;khong hien thi neu vuot qua 9
	MOVLW	d'10'
	CALL	TABLE
	MOVWF	PORTD
	RETFIE

;******************************************************************************
	movf pclath_temp,w 		; retrieve copy of PCLATH register
	movwf PCLATH 		; restore pre-isr PCLATH register contents
	movf status_temp,w 		; retrieve copy of STATUS register
	movwf STATUS 		; restore pre-isr STATUS register contents
	swapf w_temp,f
	swapf w_temp,w 		; restore pre-isr W register contents
	retfie 			; return from interrupt
;==============	CHUONG TRINH CHINH===============
MAIN
	BCF 	STATUS,RP1
	BSF 	STATUS,RP0 		; chon BANK 1
	MOVLW	b'11111111'		;RB0=Input
	MOVWF	TRISB
	CLRF	TRISD
	BCF	OPTION_REG,INTEDG	;interrupt canh xuong
	BCF 	STATUS,RP0 		; chon BANK 0
	BSF	INTCON,GIE		;cho phep interrupt toan cuc
	BSF	INTCON,INTE		;cho phep interrupt RB0
	
	CLRF	COUNT	
	MOVLW	d'0'
	CALL	TABLE	
	MOVWF	PORTD
	
	GOTO	$
;----------------------------------------------------------
; Bang tra ve Digital tu 0 den 9 va OFF
; Chi so dau truy cap la 0
; Bang o PAGE 0

	ORG 0x80
TABLE
;----------------------------------------------------------
	ADDWF 	PCL, F 		; bat dau tai 0x80
	RETLW 	b'00111111' 		; 0
	RETLW 	b'00000110' 		; 1
	RETLW 	b'01011011' 		; 2
	RETLW 	b'01001111' 		; 3
	RETLW 	b'01100110' 		; 4
	RETLW 	b'01101101' 		; 5
	RETLW 	b'01111101' 		; 6
	RETLW 	b'00000111' 		; 7
	RETLW 	b'01111111' 		; 8
	RETLW 	b'01101111' 		; 9
	RETLW 	b'00000000' 		; OFF
		
	END
Anh nhh cho em hỏi phát: theo em biết ngắt xảy ra ở chân RB0 khi có sự thay đổi mức logic trên nó, như vậy khi ta bấm phím thì RB0 sẽ bằng 0 ( lúc đầu RB0 bằng 1) sẽ tạo ngắt nhưng khi ta nhả phím ra thì lúc đó chân RB0 sẽ chuyển mức logic từ 0 lên 1 ngay ( chưa kể đến trường hợp rung phím nữa )
==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ?
À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop
@nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh

thay đổi nội dung bởi: spirit, 12-09-2006 lúc 11:42 AM.
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-09-2006, 09:52 PM   #2
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi spirit View Post
Anh nhh cho em hỏi phát: theo em biết ngắt xảy ra ở chân RB0 khi có sự thay đổi mức logic trên nó, như vậy khi ta bấm phím thì RB0 sẽ bằng 0 ( lúc đầu RB0 bằng 1) sẽ tạo ngắt nhưng khi ta nhả phím ra thì lúc đó chân RB0 sẽ chuyển mức logic từ 0 lên 1 ngay ( chưa kể đến trường hợp rung phím nữa )
==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ?
À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop
@nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh
Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
+ Ngắt cạnh xuống: low to high
Code:
BCF	OPTION_REG,INTEDG	;interrupt cạnh xuống
+ Ngắt cạnh lên: high to low
Code:
BSF	OPTION_REG,INTEDG	;interrupt cạnh lên
Khi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.

Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính.

Chúc thành công!
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-10-2006, 01:12 PM   #3
spirit
Đệ tử 2 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 42
:
Talking Giúp em với

Trích:
Nguyên văn bởi nhh View Post
Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
+ Ngắt cạnh xuống: low to high
Code:
BCF	OPTION_REG,INTEDG	;interrupt cạnh xuống
+ Ngắt cạnh lên: high to low
Code:
BSF	OPTION_REG,INTEDG	;interrupt cạnh lên
Khi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.

Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính.

Chúc thành công!
+Ra vậy,em hiểu rồi nhưng còn đối với các ngắt RB4..RB7 thì sao hả anh , em đọc trong datasheet không thấy Microchip nhắc đến ngắt cạnh lên hay xuống mà chỉ nói xảy ra ngắt khi có sự thay đổi mức LOGIC trên chân.
+Khi cấu hình là ngõ vào thì cần phải có lệnh BCF option_reg,not_RBPU để cho phép điện trở kéo lên bên trong phải không ạ? Nhưng em thấy bài quét phím 4x4 của anh em thấy không có lệnh này.
+Chương trình quét phím 4x4 của anh khi mô phỏng Proteus thì chính xác nhưng khi em đem ra mạch thật test thử thì không đúng nữa.(không biết anh đã test thử trên mạch thật chưa?) à,khi em đem ra mạch thật test thì ngõ xuất LED 7 đoạn là Port D chứ không phải Port C .
Mong anh giải đáp giúp em một số thăc mác trên,chờ tin anh
@NHH:Anh học BK Tphcm phải không ? Nếu anh học ở đó thì anh có thể cho em gặp riêng không ?
@picpicpic :Bạn qua dientuvietnam.net xem sao

thay đổi nội dung bởi: spirit, 15-10-2006 lúc 01:34 PM.
spirit vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
TUT về USART trong PIC16F877A mafd_47a MPASM 16 19-02-2025 05:32 AM
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 28 28-01-2025 10:45 PM
Bộ so sánh và PWM cho PIC16F877A anhquangngai Cơ bản về vi điều khiển và PIC 24 08-09-2012 09:00 AM
Pic16f877a TỪ DỄ TỚi KhÓ ntc Cơ bản về vi điều khiển và PIC 373 23-05-2009 10:24 PM
CCS C for PIC16F877A nhh Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 405 24-04-2008 12:00 PM


Múi giờ GMT. Hiện tại là 06:42 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam