PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Chương trình dịch & các công cụ mô phỏng

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

Chương trình dịch & các công cụ mô phỏng Khu vực này chỉ có thành viên diễn đàn mới được vào

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 07-07-2008, 06:57 PM   #1
sirbill
Nhập môn đệ tử
 
Tham gia ngày: Jun 2008
Bài gửi: 3
:
Không thể mô phỏng chính xác bằng Proteus 7.2

Chào các anh. Em dùng Proteus 7.2 SP6 mô phỏng mạch test 16F887, dùng đoạn code sau để chạy PIC nhưng khi chạy lại không đúng như yêu cầu:
INCLUDE <P16F887.inc>
;--------------------------------------------------------------
ORG 0X0000
GOTO MAIN

ORG 0X0005
MAIN
BANKSEL TRISB
MOVLW D'00000000'
MOVWF TRISB
BANKSEL PORTB
MOVLW D'10000011'
MOVWF PORTB
GOTO $
END
Nếu đúng như đoạn code trên thì các chân RB0,1,7 sẽ sáng tuy nhiên khi cho chạy mạch thì chân RB0,1,3,7 lại sáng, dù đã set chân RB3 mức thấp. Mong các anh chỉ giúp em. Mạch mô phỏng trong Proteus em gửi theo file đính kèm.
Hình Kèm Theo
File Type: jpg Mach Mau.JPG (125.8 KB, 24 lần tải)
sirbill vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-07-2008, 08:53 PM   #2
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 sirbill View Post
Chào các anh. Em dùng Proteus 7.2 SP6 mô phỏng mạch test 16F887, dùng đoạn code sau để chạy PIC nhưng khi chạy lại không đúng như yêu cầu:
INCLUDE <P16F887.inc>
;--------------------------------------------------------------
ORG 0X0000
GOTO MAIN

ORG 0X0005
MAIN
BANKSEL TRISB
MOVLW D'00000000'
MOVWF TRISB
BANKSEL PORTB
MOVLW D'10000011'
MOVWF PORTB
GOTO $
END
Nếu đúng như đoạn code trên thì các chân RB0,1,7 sẽ sáng tuy nhiên khi cho chạy mạch thì chân RB0,1,3,7 lại sáng, dù đã set chân RB3 mức thấp. Mong các anh chỉ giúp em. Mạch mô phỏng trong Proteus em gửi theo file đính kèm.
Không rõ bạn cấu hình chip ra sao khi viết code. Chân RB3 sẽ không chịu ảnh hưởng của TRISB nếu bạn bật bit LVP trong từ cấu hình của PIC16F887. Bạn cũng nên xóa thanh ghi ANSELH.

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 07-07-2008, 11:21 PM   #3
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
Ban Cần Thêm Các Câu Lệnh để Set Các Coniguration Bit Trong Css C.trong Tài Liệu Chỉ Dẫn Của Bác Falleaf Có Mà Bro! Chúc Vui!

Configuration Bit.mình Viết Sai,xin đính Chính Lại

namqn: Bạn sirbill đang viết code hợp ngữ, còn bạn đề cập đến CCS C.

thay đổi nội dung bởi: namqn, 08-07-2008 lúc 01:03 AM.
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-07-2008, 11:44 PM   #4
sirbill
Nhập môn đệ tử
 
Tham gia ngày: Jun 2008
Bài gửi: 3
:
Trích:
Nguyên văn bởi namqn View Post
Không rõ bạn cấu hình chip ra sao khi viết code. Chân RB3 sẽ không chịu ảnh hưởng của TRISB nếu bạn bật bit LVP trong từ cấu hình của PIC16F887. Bạn cũng nên xóa thanh ghi ANSELH.

Thân,
Anh có thể hướng dẫn rõ thêm cho em được không, em mới học nên chưa biết được nhiều. Cụ thể nếu theo đoạn code em ghi, thì chỉ có chân RB0,1,7 sẽ sáng còn các chân còn lại không sáng, nhưng khi chạy thì có thêm chân RB3 sáng( em không hiểu chỗ này). Cấu hình chip có phải là __CONFIG không anh, em không có khai báo phần đó, tuy nhiên em đã thử thêm vào __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC THÌ BỊ BÁO LỖI NHƯ SAU:Error[126] E:\TAI LIEU\PIC\SAVED FILE\MACH THU.ASM 2 : Argument out of range (not a valid config register address). Mong anh chỉ giúp.
sirbill vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2008, 01:19 AM   #5
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
Ví dụ về khai báo cấu hình cho PIC16F887:
Code:
	__CONFIG	_CONFIG1	_DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC
	__CONFIG	_CONFIG2	_WRT_OFF & _BOR21V
Bạn điều chỉnh lại cho thích hợp với ý định của bạn.

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 21-07-2008, 05:39 PM   #6
dark_electron
Đệ tử 2 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 27
:
Proteus ko mô phỏng được ngắt? Hay chương trình viết sai?

Hi các bác,
Em có viết đoạn chương trình sau để quét 4 con LED, thực tế em lắp mạch và chạy được rồi tuy nhiên khi mô phỏng bằng Proteus 7.2sp6 thì chương trình báo stack underflow, chạy được vài ngắt rồi đứng yên không chịu chạy nữa. Code như dưới đây:
Code:
	list      p=16f628A           ; list directive to define processor
	#include <p16F628A.inc>       ; processor specific variable definitions

	errorlevel  -302              ; suppress message 302 from list file

	__CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT

;**********************************************************************
;***** CONSTANTS DEFINITIONS WRITTEN HERE
	w_temp        	EQU     0x7D        ; variable used for context saving 
	status_temp   	EQU     0x7E        ; variable used for context saving
	pclath_temp   	EQU     0x7F		; variable used for context saving 

	LED_CTRL_TRIS	EQU		TRISA
	LED_CTRL_PORT	EQU		PORTA		; dat PORTA la cung la PORT co chan dieu khien quet LED
	LED1			EQU		0			; dat chan RA0 dieu khien LED1
	LED2			EQU		1
	LED3			EQU		2
	LED4			EQU		3
	
	LED_DATA_TRIS	EQU 	TRISB
	LED_DATA_PORT	EQU		PORTB		; dat PORTB la PORT cap data cho LED

;***** VARIABLES DEFINITIONS WRITTEN HERE
	ORG 			0x20 				;start of general purpose registers
;***** VARIABLES FOR MAIN PROG
	LED_COUNT		RES		1			; counter for selecting of LED to send data to
	LED4_DATA		RES		1			; LED data register
	LED3_DATA		RES		1
	LED2_DATA		RES		1
	LED1_DATA		RES		1
;**********************************************************************
	ORG    			0x000             	; processor reset vector
	goto    		BEGIN          		; go to beginning of program
	ORG    			0x0004
	goto			INTERRUPT
	ORG     		0x0005             	; interrupt vector location

;**********************************************************************
;***** 	MAIN PROGRAM GOES HERE
BEGIN	
	movlw			0x07
	movwf			CMCON				;turn comparators off

Initialise	
	clrf			PORTA
	clrf			PORTB	
	clrf 			INTCON 				; disable all Interrupt sources and some Interrupt Flags
SetPorts	
	bsf 			STATUS,		RP0			
	movlw			0x00				; dat cac chan cap DATA cho LED la chan Out
	movwf			LED_DATA_TRIS
	
	movlw			0x00				; cac chan dieu khien LED la Out
	movwf			LED_CTRL_TRIS
	bcf 			STATUS,		RP0			

Main
;****** ENABLE TIMER0 INTERRUPT
	movlw 			b'10100000' 		
	movwf 			INTCON 				 ; Enable General Interrupt and Timer0 Interrupt
	bsf 			STATUS, RP0 		 ; select bank 1	
	movlw 			b'11000011' 		
	movwf 			OPTION_REG			 ; Initialise Timer0 with 1:16 prescaler
	bcf 			STATUS, RP0 		 ; select bank 0	
;***** 
	movlw			b'10111111'			; so 0
	movwf			LED4_DATA			; set LED data register number 0
 	movlw   		b'10000110'			; so 1
 	movwf			LED3_DATA			
   	movlw   		b'11011011'			; so 2
	movwf			LED2_DATA
	movlw   		b'11001111'			; so 3
	movwf			LED1_DATA

	clrf			LED_COUNT
	goto			$

;**********************************************************************
;***** INTERRUPT SUB-ROUTINES WRITTEN HERE
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
;*****
	clrf 			STATUS 						; Chon bank 0
	btfsc 			INTCON, 	T0IF 			; Ngat tran timer0 da xay ra chua?
	goto 			T0_INT 				
INT_ERROR 						
	goto 			END_ISR 			 
T0_INT 											; Xu ly ngat tran timer0
LED4_OUT	
	bcf				LED_CTRL_PORT,	LED1
	clrf			LED_DATA_PORT

	movf			LED_COUNT,	W
	xorlw			d'0'
	btfss			STATUS,		Z				; kiem tra xem co dung thu tu LED4 ko?
	goto			LED3_OUT					; neu ko dung thi qua quet LED3
	movf			LED4_DATA,	W				; neu dung thi quet LED4
	movwf			LED_DATA_PORT				; send DATA to LED4 (pin RA3 of PORTA)
	bsf				LED_CTRL_PORT,	LED4
	incf			LED_COUNT,	F
	goto			END_ISR

LED3_OUT
	bcf				LED_CTRL_PORT,	LED4		; tat LED4
	clrf			LED_DATA_PORT				; xoa data
	
	movf			LED_COUNT,	W
	xorlw			d'1'
	btfss			STATUS,		Z
	goto			LED2_OUT
	movf			LED3_DATA,	W
	movwf			LED_DATA_PORT				; send DATA to LED3 (pin RA2 of PORTA)
	bsf				LED_CTRL_PORT,	LED3
	incf			LED_COUNT,	F
	goto			END_ISR
			
LED2_OUT
	bcf				LED_CTRL_PORT,	LED3
	clrf			LED_DATA_PORT
	
	movf			LED_COUNT,	W
	xorlw			d'2'
	btfss			STATUS,		Z
	goto			LED1_OUT
	movf			LED2_DATA,	W
	movwf			LED_DATA_PORT				; send DATA to LED2 (pin RA1 of PORTA)
	bsf				LED_CTRL_PORT,	LED2
	incf			LED_COUNT,	F
	goto			END_ISR

LED1_OUT
	bcf				LED_CTRL_PORT,	LED2
	clrf			LED_DATA_PORT

	movf			LED_COUNT,	W
	xorlw			d'3'
	btfss			STATUS,		Z
	goto			END_ISR
	movf			LED1_DATA,	W
	movwf			LED_DATA_PORT				; send DATA to LED2 (pin RA0 of PORTA)
	bsf				LED_CTRL_PORT,	LED1
	clrf			LED_COUNT					; reset LED counter
	goto			END_ISR

END_ISR
	bcf 			INTCON, T0IF 				; Xoa co ngat tran timer0
;*****
	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

;**********************************************************************
	END                       		; directive 'end of program'
Như vậy là proteus ko hỗ trợ ngắt cho PIC16 hở các bác? Hay là chương trình em viết sai? Nếu sai thì sai chỗ nào các bác chỉ dùm em với. Thanks.

thay đổi nội dung bởi: dark_electron, 22-07-2008 lúc 08:24 AM.
dark_electron 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


Múi giờ GMT. Hiện tại là 12:41 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