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 06-06-2007, 04:59 PM   #1
dtnbk
Nhập môn đệ tử
 
Tham gia ngày: Jul 2006
Bài gửi: 2
:
Question Xin Mọi Người Giúp đỡ

Em Dùng đoạn Chương Trình Này để Thực Hành Ngắt.
Dùng Pic16f84a
A0,a1,a2,a3,a4 Là Input
B0 Là Input Dùng Cho Việc Ngắt
B1,..,b7 Là Các Chân Output
ý định Là Khi Nhấn Switch Nối ở Các Chân Porta Thì Ghi Lại Giá Trị Của Porta Và Cộng Dồn Vào Cho Count.khi Bấm Ngắt Thì Kiểm Tra Giá Trị Của Count Xem Có Bằng Giá Trị Bất Kì Mà Mình Gán Vào W Hay Ko.nếu Bằng Thì Bật B6, Nếu Ko Bằng Thì Bật B5.
Nhưng Sau Khi Nạp Xong Thì Kết Quả Ko Như Mong đợi. Lúc đúng Lúc Sai. Mong Các Sửa Giúp .thanks
Code:
Org		0x0000
	
		Count	Equ		0ch
		Count1	Equ		0dh
		W_save	Equ		0eh
		Stat_sv	Equ		0fh
		Goto	Main
;----------interrupt Routine---------------------
Org		0x0004
		Movwf	W_save		;ghi Lai Tri W Va Status 
		Swapf	Status,0
		Clrf	Status
		Movwf	Stat_sv

		Clrw                     ;
		Movlw	B'00001111'      ;gia tri cho vao W de so sanh voi count
                Clrf    Status           ;xoa status
		Subwf	Count,0          ;
		Btfss	Status,z         ;neu Z=1 thì count=w --->escape set B6
		Goto	Alarm            ;neu Z=0 thi count!=w ---->alarm
		Goto	Escape
Alarm
		Bsf	Portb,5	         ;set b5 để nhận biết trường hợp
		Btfss	Portb,0          ;kiểm tra nếu vẫn nhấn b0 thì ko thoát
		Goto	$+2
		Goto	$-2
					;tra Ve Tri W Va Status 
		Swapf	Stat_sv,w
		Movwf	Status
		Swapf	W_save,f
		Swapf	W_save,w

		Bcf	Intcon,1        ;xóa intcon,1 để có thể nhận interrupt 
		Retfie
Escape
		Bsf	Portb,6          ;set b6 để nhận biết trường hợp
		Btfss	Portb,0          ;kiểm tra nếu vẫn nhấn b0 thì ko thoát ra
		Goto	$+2
		Goto	$-2

					;tra Ve Tri W Va Status 
	        Swapf	Stat_sv,w
		Movwf	Status
		Swapf	W_save,f
		Swapf	W_save,w

		Bcf	Intcon,1        ;
		Retfie
;----------main Program----------------------------

Main		
		Bsf	Intcon,7	;global Interrupt Enable
		Bsf	Intcon,4	;rb0 Interrrup
		Bcf	Intcon,1	;để nhận interrupt
		Bsf	Status,5	;goto Bank 1
		Movlw	B'11111'
		Movwf	Trisa				
		Movlw	B'00000001'
		Movwf	Trisb
;-------------------------------------------------------------------------------		
Start
		Bcf	Status,5	;bank 0
		Clrf	Portb
		Clrf	Porta
		Clrf	Count			
		Movlw	01h         ;chỉ là 1 giá trị cho vào count làm trị ban đầu
		Movwf	Count
;----------------------------------------------------------------------------	
Loop	
		Clrf	Count1        
		Bsf	Portb,2     ;chỉ là led bật để nhận biết vị trí trong loop
		Clrw	
		Swapf	Porta,w      ;ghi trị porta vào w và chuyển vào count1	
		Movwf	Count1

		Bcf	Status,z     ;đoạn kiểm tra xem có nhấn nút nào ko 
		Sublw	B'00000000'  ;nếu ko nhấn thì ko clearporta
		Btfss	Status,z     
		Call	Clearporta
		Swapf	Count1,w     ;W=swapf(swapf(porta))	
		Addwf	Count,f	     ; cộng w và count lưư lại ở count	
	                              ;đoạn kiểm tra xem có từ interrupt ra hay ko
		Btfsc	Portb,5       
		Goto	Start        ;nếu từ interrupt ra thì chạy lại start
		Btfss	Portb,6
		Goto	Loop	     ;neu ko tu interrupt ra thi lặp lại loop
		Goto	Start        ;nếu từ interrupt ra thì chạy lại start
;-------------------------------------------------------------------------------
Clearporta		              ;đoạn xoá porta về 00000
		Bcf	Portb,2       ;chỉ  là 1 led nhận biết vị trí 
		Bsf	Portb,1
		Swapf	Porta,w
		Sublw	0h
		Btfss	Status,z
		Goto	Clearporta
		Bcf	Portb,1
		Return
	
	End

thay đổi nội dung bởi: dtnbk, 06-06-2007 lúc 09:14 PM.
dtnbk 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à 09:45 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