PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > MPASM

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

MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ...

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 13-03-2010, 09:37 PM   #1
kigisun
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 1
:
Xin giúp đỡ về TMR0 trong PIC16F877A

Mình mới vừa học PIC không lâu. Nhưng đụng đến TMR0 thì không hiểu sao chương trình chạy không như ý. Mình muốn làm mạch chớp tắt 8 LED qua giao tiếp với POTRB. Mình không hiểu sao đoạn code thứ nhất thì Proteus chạy đúng còn đoạn code thứ hai lại sai??? Xin các bạn giúp đỡ!!!

Code 1:

Code:
;=================================================
; Phan khoi tao PIC
#include <p16F877A.inc>
__CONFIG _WDT_OFF & _CP_OFF  & _PWRTE_ON  & _HS_OSC  
;=================================================

;=================================================
; Phan dinh nghia
#DEFINE LED1 PORTB,	7
#DEFINE LED2 PORTB,	6
#DEFINE LED3 PORTB,	5
#DEFINE LED4 PORTB,	4
#DEFINE LED5 PORTB,	3
#DEFINE LED6 PORTB,	2
#DEFINE LED7 PORTB,	1
#DEFINE LED8 PORTB,	0
;=================================================

;=================================================
; Phan khai bao cac bien
;-------------------------
; Bien nam o Bank 0
;-------------------------
	ORG	0x0A0
	W_SAVE RES	1
	STATUS_SAVE RES 1
	PCH_SAVE RES 1
	FSR_SAVE RES 1
	VARIABLE_A RES 1
;=================================================

;=================================================
;-------------------------------------------------
; Chuong trinh ngat
;-------------------------------------------------
	ORG 0x0004
;-------------------------------------------------
; Sao luu cac thanh ghi quan trong
;-------------------------------------------------
	MOVWF W_SAVE  ; W_SAVE = W
	SWAPF	STATUS,W
	CLRF STATUS
	MOVWF	STATUS_SAVE ; STATUS_SAVE = SWAP_NIBBLE(STATUS)

	MOVF PCLATH, W
	MOVWF	PCH_SAVE	; PCH_SAVE = PCLATH
	CLRF	PCLATH	; PCLATH = 0
	MOVF	FSR, W
	MOVWF	FSR_SAVE	; FSR_SAVE= FSR

;-------------------------------------------------
;  Doan chuong trinh ngat bat dau tai day
;-------------------------------------------------
	BCF INTCON, TMR0IF   ; Xoa co ngat TMR0IF
	COMF LED1

;------------------------------------------------

;-------------------------------------------------
;  Ket thuc chuong trinh ngat
;-------------------------------------------------
END_INT
	MOVF FSR_SAVE, W
	MOVWF	FSR	;FSR=FSR_SAVE
	MOVF	PCH_SAVE, W
	MOVWF	PCLATH	;PCLATH = PCH_SAVE
	SWAPF	STATUS_SAVE, W
	MOVWF STATUS
	SWAPF W_SAVE, F
	SWAPF W_SAVE, W
	RETFIE
;=================================================


;=================================================
; Chuong trinh chinh
	ORG 0x0000
	GOTO MAIN

	ORG 0x0050
MAIN
	BSF STATUS, RP0
	BCF STATUS, RP1  ; BANK1
	CLRF TRISB
	BCF STATUS, RP0  ; BANK0
	CLRF PORTB
	;----------------------------------------
	; Khoi tao TIMER0
	;----------------------------------------
	CLRF TMR0
	BSF STATUS, RP0  ; BANK1
	MOVLW b'00000001'  ; Tat chuc nang dien tro keo len coa PORTB
	MOVWF OPTION_REG   ; Chon xung dem la xung len
					   ; Gan Prescaler cho TMR0
					   ; Tan so chia 1:4
	BCF STATUS, RP0    ; BANK0
	CLRF INTCON
	BSF INTCON, TMR0IE  ; Cho phep ngat TMR0
	BSF INTCON, PEIE    ; Cho phep ngat ngoai vi
	BSF INTCON, GIE     ; Cho phep toan bo ngat

	BCF LED1
	GOTO $
END
;=================================================
Code 2:

Code:
;=================================================
; Phan khoi tao PIC
#include <p16F877A.inc>
__CONFIG _WDT_OFF & _CP_OFF  & _PWRTE_ON  & _HS_OSC  
;=================================================

;=================================================
; Phan dinh nghia
#DEFINE LED1 PORTB,	7
#DEFINE LED2 PORTB,	6
#DEFINE LED3 PORTB,	5
#DEFINE LED4 PORTB,	4
#DEFINE LED5 PORTB,	3
#DEFINE LED6 PORTB,	2
#DEFINE LED7 PORTB,	1
#DEFINE LED8 PORTB,	0
;=================================================

;=================================================
; Phan khai bao cac bien
;-------------------------
; Bien nam o Bank 0
;-------------------------
	ORG	0x0A0
	W_SAVE RES	1
	STATUS_SAVE RES 1
	PCH_SAVE RES 1
	FSR_SAVE RES 1
	VARIABLE_A RES 1
;=================================================

;=================================================
;-------------------------------------------------
; Chuong trinh ngat
;-------------------------------------------------
	ORG 0x0004
;-------------------------------------------------
; Sao luu cac thanh ghi quan trong
;-------------------------------------------------
	MOVWF W_SAVE  ; W_SAVE = W
	SWAPF	STATUS,W
	CLRF STATUS
	MOVWF	STATUS_SAVE ; STATUS_SAVE = SWAP_NIBBLE(STATUS)

	MOVF PCLATH, W
	MOVWF	PCH_SAVE	; PCH_SAVE = PCLATH
	CLRF	PCLATH	; PCLATH = 0
	MOVF	FSR, W
	MOVWF	FSR_SAVE	; FSR_SAVE= FSR

;-------------------------------------------------
;  Doan chuong trinh ngat bat dau tai day
;-------------------------------------------------
	BCF INTCON, TMR0IF   ; Xoa co ngat TMR0IF

	MOVLW VARIABLE_A
	SUBLW 0xFF	 ; Dao trang thai PORTB	
	BCF STATUS, RP0
	BCF STATUS, RP1  ; BANK0
	MOVWF PORTB   ; 0xFF - W -> W -> PORTB
;------------------------------------------------

;-------------------------------------------------
;  Ket thuc chuong trinh ngat
;-------------------------------------------------
END_INT
	MOVF FSR_SAVE, W
	MOVWF	FSR	;FSR=FSR_SAVE
	MOVF	PCH_SAVE, W
	MOVWF	PCLATH	;PCLATH = PCH_SAVE
	SWAPF	STATUS_SAVE, W
	MOVWF STATUS
	SWAPF W_SAVE, F
	SWAPF W_SAVE, W
	RETFIE
;=================================================


;=================================================
; Chuong trinh chinh
	ORG 0x0000
	GOTO MAIN

	ORG 0x0050
MAIN
	BSF STATUS, RP0
	BCF STATUS, RP1  ; BANK1
	CLRF TRISB
	BCF STATUS, RP0  ; BANK0
	CLRF PORTB
	;----------------------------------------
	; Khoi tao TIMER0
	;----------------------------------------
	CLRF TMR0
	BSF STATUS, RP0  ; BANK1
	MOVLW b'00000001'  ; Tat chuc nang dien tro keo len coa PORTB
	MOVWF OPTION_REG   ; Chon xung dem la xung len
					   ; Gan Prescaler cho TMR0
					   ; Tan so chia 1:4
	BCF STATUS, RP0    ; BANK0
	CLRF INTCON
	BSF INTCON, TMR0IE  ; Cho phep ngat TMR0
	BSF INTCON, PEIE    ; Cho phep ngat ngoai vi
	BSF INTCON, GIE     ; Cho phep toan bo ngat


	MOVLW 0x00;
	MOVWF VARIABLE_A   ; Luu trang thai cac LED
	GOTO $
END
;=================================================

thay đổi nội dung bởi: namqn, 13-03-2010 lúc 10:06 PM. Lý do: định dạng code
kigisun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ð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à 06:38 AM.


Đượ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