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 Bài Trong Ngày 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 16-01-2007, 05:01 PM   #106
anhquangngai
Đệ tử 2 túi
 
Tham gia ngày: Sep 2006
Bài gửi: 33
:
Trích:
Nguyên văn bởi nhh View Post
Đấy là chương trình quét 16 phím bấm hiển thị lên LED 7 đoạn các số từ 0 đến 9 và các chữ A,b,C,d,E,F.
Xem hình ở file đính kèm!
Code:
;========================================
;Auhor:		NHH
;Date:		02/03/06
;Hardware:	PIC16F877A connect PORTB by R220
;========================================
	TITLE 		"Giai ma ban phim dung interrupt RB4...RB7"
	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,RBIF
	
	MOVLW	b'00000001'
	MOVWF	PORTB
	BTFSS	PORTB,4
	GOTO	DIS_1
	MOVLW	d'0'	;0
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_1
	BTFSS	PORTB,5
	GOTO	DIS_2
	MOVLW	d'1'	;1
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_2
	BTFSS	PORTB,6
	GOTO	DIS_3
	MOVLW	d'2'	;2
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_3
	BTFSS	PORTB,7
	GOTO	DIS_4
	MOVLW	d'3'	;3
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_4
	MOVLW	b'00000010'
	MOVWF	PORTB
	BTFSS	PORTB,4
	GOTO	DIS_5
	MOVLW	d'4'	;4
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_5
	BTFSS	PORTB,5
	GOTO	DIS_6
	MOVLW	d'5'	;5
	CALL	TABLE
	MOVWF	PORTC
	retfie 

DIS_6
	BTFSS	PORTB,6
	GOTO	DIS_7
	MOVLW	d'6'	;6
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_7
	BTFSS	PORTB,7
	GOTO	DIS_8
	MOVLW	d'7'	;7
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_8
	MOVLW	b'00000100'
	MOVWF	PORTB
	BTFSS	PORTB,4
	GOTO	DIS_9
	MOVLW	d'8'	;8
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_9
	BTFSS	PORTB,5
	GOTO	DIS_A
	MOVLW	d'9'	;9
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_A
	BTFSS	PORTB,6
	GOTO	DIS_b
	MOVLW	d'11'	;A
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_b
	BTFSS	PORTB,7
	GOTO	DIS_C
	MOVLW	d'12'	;b
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_C
	MOVLW	b'00001000'
	MOVWF	PORTB
	BTFSS	PORTB,4
	GOTO	DIS_d
	MOVLW	d'13'	;C
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_d
	BTFSS	PORTB,5
	GOTO	DIS_E
	MOVLW	d'14'	;d
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_E
	BTFSS	PORTB,6
	GOTO	DIS_F
	MOVLW	d'15'	;E
	CALL	TABLE
	MOVWF	PORTC
	retfie 
DIS_F
	BTFSS	PORTB,7
	GOTO	$+4
	MOVLW	d'16'	;F
	CALL	TABLE
	MOVWF	PORTC
	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'11110000'	;RB0=Input
	MOVWF	TRISB
	CLRF	TRISC
	
	BCF 	STATUS,RP0 	; chon BANK 0
	BSF	INTCON,GIE
	BSF	INTCON,RBIE	;cho phep ngat RB4...RB7

	MOVLW	d'10'
	CALL	TABLE
	MOVWF	PORTC
LOOP		
	MOVLW	b'00001111'
	MOVWF	PORTB	
	GOTO	LOOP
;----------------------------------------------------------
; Bang tra ve Digital tu 0 den 9 va  A....F
; Chi so dau truy cap la 0
; Bang o PAGE 0

	ORG 0x90
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' 		; NODISPLAY
	RETLW 	b'01110111' 		; A
	RETLW 	b'01111100' 		; B
	RETLW 	b'00111001' 		; C
	RETLW 	b'01011110' 		; d
	RETLW 	b'01111001' 		; E
	RETLW 	b'01110001' 		; F
			
	END
Ko go dc TV thong cam!

co bac nao chay thu chuong trinh nay tren phan cung chua?
Em da chay thu tren phan cung voi Thach Anh 20MHz nhung no ko chay
anh em nao da co chuong trinh chay tot tren phan cung giai ma ban phim thi post len cho em xin dc ko?
chuong trinh bac NHH viet thi chay rat tot khi mo phong bang Proteus nhung khi chay tren phan cung thi ko dc?
Mong bac nao giup em voi??
anhquangngai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-01-2007, 05:53 PM   #107
anhquangngai
Đệ tử 2 túi
 
Tham gia ngày: Sep 2006
Bài gửi: 33
:
sao khong co ai tra loi giup vay ?
bun wa!
anhquangngai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-01-2007, 12:04 PM   #108
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 anhquangngai View Post
sao khong co ai tra loi giup vay ?
bun wa!
Ở đây, code C, không chơi MPLAP, code chưa được tối ưu lắm!
http://www.picvietnam.com/forum/show...ted=1#post7001
__________________
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 19-03-2007, 01:18 PM   #109
111985
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 24
:
anh có thể nói rỏ hơn về sơ đồ hoạt động của mạch ko
111985 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2007, 10:13 PM   #110
omlun
Đệ tử 1 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 25
:
chủ đề này khá hấp dẫn!! thanks may anh
omlun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-03-2007, 08:38 AM   #111
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
Em có 1 yêu cầu đặt ra nhờ anh giúp đở. em có 1 cái tivi 1 bảng quang báo được điều khiển bằng máy tính.khi nội dung hình ảnh và âm thanh hiện lên tivi thì quang báo bằt đầu chạy chữ về nội dung hình ảnh và âm thanh đó anh chỉ em cách làm đi! EM RẤT MONG ĐưỢC SỰ GIÚP Đở CỦA ANH-THÂN CHÀO ANH
tranvanthuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-04-2007, 04:25 AM   #112
kysikodau
Nhập môn đệ tử
 
kysikodau's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 7
:
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
Ở bài này em muốn sau khi đếm đến 9 thì lặp lại từ đầu, ko biết phải lảm thế nào
kysikodau vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-04-2007, 09:15 AM   #113
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
buồn quá không ai giúp đỡ hết,
Mấy anh ơi em đang làm đề tài nghiên cứu 16f877a, em gặp đề tài mừng quá đăng kí ngay vào diễn đàn liền! em làm cái đề tài là quang báo gồm 1 ma trận 8x160 tức gồm 20 matrận led 8x8, bảng quang báo này chạy chử ngược xuôi,từ trung tâm ra,chử rớt từ bên trái qua phải-phải qua trái. các anh giúp em giải thuật với,con 2 tháng nửa là nộp rồi -em đợi tin các anh
thân chào!
tranvanthuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-06-2007, 02:36 AM   #114
loveall
Đệ tử 1 túi
 
Tham gia ngày: May 2007
Bài gửi: 15
:
xin anhh post tiếp bài cho anh em nhờ!!hôm nay ghé qua room này!thấy bài bác anhh viết hay quá!nên down Protues về tét thử ,thấy mạch chạy ok ,tự nhiên thấy yêu Pic vô cùng!!Xin anhh post thêm ít bài nữa cho anh em có cơ hội học hỏi thêm!!
loveall vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-06-2007, 07:00 AM   #115
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Trong hàm init chọn như sau: dùng pre cho timer0 với tỉ lệ 1:2
Code:
void init(void){
	// khoi tao cho các port
	// Khoi tao cho cac thanh ghi	
	OPTION  = 0x00; // dung prescaler cho timer0 voi ti le la 1:2

	// Khoi tao cho ngat Timer0
	GIE = 1; // cho phep ngat toan cuc
	T0IE = 1; // cho phep ngat timer0
	T0IF = 0; // xoa co ngat timer0
	TMR0 = 6; // khoi tao
}
[/QUOTE]

Bác Ngô ơi giúp em với,trong CCS cờ ngắt timer0 là gì vậy? em đọc trong trong thư viện 16f877a.h kô thấy no định nghĩa chỗ này.Em liều lam đại thì nó ko chịu--->em pó tay.Và cái cho phép ngắt toàn cục ko thấy ai nói đến vậy?Và cách tính khoản giá trị nạp ban đầu cho timer?
VD : em muốn tạo ra một xung với tần số là 10Khz o portD.7 .
f=100Khz =>T=1/10=0.1ms=100micro giây. |
chu ky may dai 1 micro s,
==> cần có 50 micro s tương đương với 50 lần đếm lên của timer
==> giá trị cần nạp cho timer la :
256 - 50=206=0xCE
Nếu là 8051 thi ta nạp vào thanh TH0=0xCE ;
Vậy đối với Pic 16f877A cái giá trị đó giờ phải viết vào đâu vậy bác Ngô ?giúp em với.
Các bác có thể chỉ rõ hơn về vấn đề timer này khi dùng CCS ko vậy?
Thanks các bác .
LeDuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-06-2007, 10:37 AM   #116
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Trích:
Nguyên văn bởi tranvanthuong View Post
buồn quá không ai giúp đỡ hết,
Mấy anh ơi em đang làm đề tài nghiên cứu 16f877a, em gặp đề tài mừng quá đăng kí ngay vào diễn đàn liền! em làm cái đề tài là quang báo gồm 1 ma trận 8x160 tức gồm 20 matrận led 8x8, bảng quang báo này chạy chử ngược xuôi,từ trung tâm ra,chử rớt từ bên trái qua phải-phải qua trái. các anh giúp em giải thuật với,con 2 tháng nửa là nộp rồi -em đợi tin các anh
thân chào!
Bạn cần làm những việc đó, bạn cần đưa ra thiết kế mạch, rồi hỏi xem mạch có vần đề gì chưa. Sau đó lại tiếp tục đưa source code, và hỏi tiếp. Bạn phải tự làm, và tự trình bày, thì người khác mới kiểm tra giúp được. Chẳng lẽ người ta đưa cho bạn mạch in và chương trình luôn?

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-07-2007, 12:02 PM   #117
david
Đệ tử 4 túi
 
david's Avatar
 
Tham gia ngày: Aug 2006
Bài gửi: 81
:
mới học->mong các bác giúp dỡ

Bác nào có thể giảng giúp em về phần khởi tạo cho Pic ko? Đằng sau __CONFIG viết nhưng cái gì?em ko hiểu được,mong các bác chỉ giáo
david vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-07-2007, 06:48 PM   #118
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi david View Post
Bác nào có thể giảng giúp em về phần khởi tạo cho Pic ko? Đằng sau __CONFIG viết nhưng cái gì?em ko hiểu được,mong các bác chỉ giáo
Đằng sau __CONFIG viết những cái gì còn tùy thuộc vào chip bạn đang sử dụng là chip nào. Và viết như thế nào cũng có thể còn tùy thuộc vào ngôn ngữ bạn đang sử dụng là ngôn ngữ nào.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-07-2007, 08:59 PM   #119
david
Đệ tử 4 túi
 
david's Avatar
 
Tham gia ngày: Aug 2006
Bài gửi: 81
:
em đang tìm hiểu về pic16f877a,viết bằng MPASM,nhưng em ko hiểu đàng sau _CONFIG phải khai báo những gì,căn cứ vào đầu? Mong bác chỉ giáo dùm
david vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-07-2007, 11:59 PM   #120
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi david View Post
em đang tìm hiểu về pic16f877a,viết bằng MPASM,nhưng em ko hiểu đàng sau _CONFIG phải khai báo những gì,căn cứ vào đầu? Mong bác chỉ giáo dùm
Bạn vào thư mục con 'MPASM Suite' của thư mục cài đặt MPLAB, mở tập tin 'P16F877A.INC' và đến cuối tập tin đó, bạn sẽ thấy các tổ hợp đã được định nghĩa cho từ cấu hình. Bạn chỉ dùng 1 trong những khả năng của một nhóm cấu hình, ví dụ chỉ dùng 1 trong các giá trị _CP_ALL và _CP_OFF (cho Code Protection). Tương tự cho các nhóm cấu hình khác. Bạn sẽ AND các giá trị này với nhau, ví dụ:

Code:
	__CONFIG  _HS_OSC & _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF
Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lờ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à 07:08 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