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 ...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 24-12-2007, 01:21 PM   #1
Jerry
Đệ tử 5 túi
 
Jerry's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 100
:
Thêm nữa, trong phần khởi tạo cho Timer1, bạn xoá thanh ghi INTCON, điều này làm cho bit GIE và PEIE trong thanh ghi này bị xóa. Hai bit này bị xoá thì không bao giờ có bất cứ ngắt nào xảy ra. Do vậy đoạn khởi tạo cho Timer1 bạn sửa như sau:
Code:
;==================================================================================================
;KHOI TAO TIMER1
;==================================================================================================
	CLRF	T1CON
	CLRF	INTCON

	CLRF	PIR1
	MOVLW	0XFC
	MOVWF	TMR1H
	MOVLW	0X17
	MOVWF	TMR1L

	BSF	STATUS,RP0
	CLRF	PIE1
	BSF	PIE1,TMR1IE
	BCF	STATUS,RP0

	BSF	INTCON,PEIE
	BSF	INTCON,GIE
__________________
Do more than exist, LIVE
Jerry vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-12-2007, 04:05 PM   #2
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Làm như bạn hướng dẫn nó đã chạy được nhưng vẫn không ổn định, luc được lúc không (mình thử trên mạch test riêng chứ ko phải mạch đồ án)
Trích:
Nguyên văn bởi Jerry View Post
2.
Code:
	MOVLW		b'00000000'
	MOVWF		PORTC
	MOVLW		b'00000000'
	MOVWF		PORTB
	MOVLW		b'00100000'
	MOVWF		PORTB
	MOVLW		b'01000000'
	MOVWF		PORTB
	MOVLW		b'01100000'
	MOVWF		PORTB
	MOVLW		b'10000000'
	MOVWF		PORTB	
	MOVLW		b'10100000'
	MOVWF		PORTB
	MOVLW		b'11000000'
	MOVWF		PORTB
	MOVLW		b'11100000'
	MOVWF		PORTB
Đoạn này bạn có chú thích là ban đầu cho các LED đều hiển thị 0 hết. Thế thì chỉ cần viết thế này thôi chứ:
Code:
	MOVLW		b'00000000'
	MOVWF		PORTC
	MOVLW		b'00000000'
	MOVWF		PORTB
hoặc thế này nếu bạn muốn PORTB cuối cùng có giá trị b’1110 0000’
Code:
	MOVLW		b'00000000'
	MOVWF		PORTC
	MOVLW		b'11100000'
	MOVWF		PORTB
Không hiểu bạn thay đổi liên tục giá trị ghi vào cổng B như vậy để làm gì. Nhưng nên nhớ là 1 lệnh của PIC thường chiếm có 1 chu kỳ máy, nghĩa là nếu bạn dùng thạch anh dao động 4 MHz, mỗi lệnh chỉ xảy ra trong 1us, rất rất nhỏ. Vậy bạn thay đổi PORTB liên tục như thế chẳng có ý nghĩa gì cả.
À, cái này là do cái mạch của mình. Mình sử dụng 74138 để chọn led, nên 3 bit 7,6,5 của portB mình đưa vào 74138 để chọn led muốn hiển thị, bit4 bỏ, 4 bit cuối 3,2,1,0 mình đưa vào IC 7447 để giải mã từ BCD sang mã led 7 đoạn hiển thị. Lúc đầu giữa các lệnh trên mình có sử dụng delay10ms nhưng về sau thấy ko delay vẫn hiển thị tốt do đó bỏ luôn. Mình nghĩ có lẽ việc sử dụng giãi mã, chốt, IC chọn led ảnh hưởng lớn đến hoạt động của mạch.
Cái quan trọng với mình là : trong một chương trình chỉ sử dụng ngắt timer1 (vào đầu chương trình là ngắt chạy luôn) mà chạy còn thiếu ổn định ,lúc được lúc không nên khi đưa vào đồ án, chương trình chạy theo tuần tự, trong đó việc ngắt timer1 xảy ra sau các đoạn chương trình khác nên nó ko bao giờ chạy được cả, ngắt chỉ xảy ra một lần rồi thôi.
uydanh 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à 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