Lập nhóm PIC16F877A

Collapse
This is a sticky topic.
X
X
 
  • Giờ
  • Show
Clear All
new posts
  • falleaf
    PIC Bang chủ
    • May 2005
    • 2627

    #91
    Nguyên văn bởi dohoangnam View Post
    tôi thấy tất cả các diễn đàn đều rất hay. Cả chuyện bác F muốn giúp các bạn học qua một công việc cụ thể nữa. Tất cả đều là ý tưởng tốt. Nhưng tôi có chút ý kiến. Học về 1 con 16f877a này cũng tốt. Nhưng chúng ta học bằng các dự án như bác F làm thì tốt hơn học "chay" thế này. Nhưng mới cái bắt đầu mà bác F đã yêu cầu nặng anh em quá. Anh em sv chủ yếu là ít tiền. Đấy là cái thứ nhất (kể cả vài trăm ngàn thôi cũng khó khăn), thứ 2 tôi thấy công việc ấy cũng hơi nặng so với sức chung của mọi người. Hy vọng các anh em admin quan tâm hơn nữa.
    Thân.
    Câu chuyện học PIC của F, chắc F cũng đã kể cả trăm lần rồi, trên chat và cả trên diễn đàn. Lúc trước F học PIC, hoàn toàn là học chay, không có con PIC trong tay, tự ngồi nghĩ tự viết chương trình, tự làm mô phỏng với MPLAB, tự nhìn các con số nhảy để mà hình dung.

    Đó là chuyện hồi trước F học, bây giờ các bạn có nhiều công cụ để học, thoải mái hơn, thông tin nhiều hơn. Điều đó là tốt hơn rất nhiều. Như vậy học chay hay không chay, tùy thuộc vào mỗi người. Có người thì thông minh theo kiểu tưởng tượng (vd F cũng là kiểu đó, cho nên ngồi tưởng tượng tốt). Có người thông minh theo kiểu trực quan (vd như F nhìn vào cái máy mà nó dập bụp bụp bụp, F khó mà học hiểu cái đó, nhưng có nhiều người nhìn vào cái máy thôi, lại hiểu ngay và có thể chế cái máy tương tự).... Đó là cách người ta nói về trí thông minh của loài người, mỗi người có một khả năng thông minh khác nhau.

    Do vậy, F không cho rằng cách học nào tốt hơn cách học nào, mà chỉ khuyên mọi người chọn cách học tốt nhất cho chính mình.

    Về vấn đề tài chính để học. Sự thực là picvietnam đã hỗ trợ 120K (theo giá thị trường) cho một đề tài nghiên cứu của các bạn, mà đề tài đó theo kinh nghiệm thực hành của các bạn kể trên khi khoảng 200 - 300K.

    Đúng là con số khá lớn đối với một số bạn sinh viên. Nhưng nếu các bạn không nhân những cơ hội này đầu tư vào để học, để thực hành, thì các bạn sẽ tốn nhiều cái 100K vào những việc vô bổ khác. Hãy can đảm nói với bạn gái của mình rằng, anh muốn dành một chút tiền để đầu tư vào việc học.

    Nếu các bạn thực sự học và làm việc, khi các bạn kết thúc dự án, và có kết quả khả dĩ vì những tìm hiểu học tập của các bạn. F sẽ mua lại mô hình đó cho các bạn. (miễn sao đừng bán mắc cho F, vì F không có tiền nhiều đâu, chỉ là giúp đỡ các bạn thực sự khó khăn thôi, hihi..).

    Nói để các bạn thấy việc này. Để làm cái mô hình của F ở bên Hàn, giáo sư đã phải bỏ 5000$ tới thời điểm này mà chưa ra cái hình thù gì cả. Trong khi đó, ở VN mà làm thì cái mô hình F đang làm về haptics 1 bậc tự do, thì thực ra chỉ là 2 cái động cơ, mấy miếng nhôm lớn. Cùng lắm chỉ 3 triệu động là căng. Tất nhiên động cơ và driver mua mới thì tốn kém, còn mua ở nhà mình chơi đồ cũ, nhưng có ảnh hưởng gì nhiều đâu.

    Vậy nên việc nghiên cứu ở nước ngoài, còn khó khăn hơn ta nhiều, về nhiều khía cạnh, nhất là chi phí đầu tư thử nghiệm. Có những cái quá cao cấp, thì chúng ta không làm được, nhưng tốn 500K đi nữa, để học một bộ điều khiển mà 90% các bộ điều khiển công nghiệp phải sử dụng thì F không nghĩ nó là quá nhiều. Và nó rẻ ngang với việc theo một lớp học PIC. Trong khi học cái này thì có thể giữ được mô hình, lại có thêm 2 con PIC...

    Các bạn tính toán thật kỹ vì cơ hội không có lần thứ hai đâu . Đây là lần đầu tiên, F thực hiện việc này, chủ yếu để thử nghiệm mô hình dự án mở trên mạng, sau đó, tất nhiên, nếu có thể, F sẽ kêu gọi những nhà tài trợ cho các dự án kiểu như thế này. Lúc đó sẽ tốt hơn cho các bạn, nhưng bây giờ tiếng nói của F chưa đủ mạnh với những nhà tài trợ, vì ... các bạn chưa làm xong dự án .

    Chúc vui.
    Công ty TNHH Thương mại và Giao nhận R&P
    store.hn@rpc.vn - store.hcm@rpc.vn

    Học PIC như thế nào?

    Comment

    • spirit
      Đệ tử 2 túi
      • Aug 2006
      • 42

      #92
      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
      Anh nhh cho em hỏi phát: theo em biết ngắt xảy ra ở chân RB0 khi có sự thay đổi mức logic trên nó, như vậy khi ta bấm phím thì RB0 sẽ bằng 0 ( lúc đầu RB0 bằng 1) sẽ tạo ngắt nhưng khi ta nhả phím ra thì lúc đó chân RB0 sẽ chuyển mức logic từ 0 lên 1 ngay ( chưa kể đến trường hợp rung phím nữa )
      ==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ?
      À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop
      @nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh
      Last edited by spirit; 12-09-2006, 10:42 AM.

      Comment

      • sonny
        Nhập môn đệ tử
        • Aug 2006
        • 3

        #93
        Bác nào biết về A/D converter trong PIC16F877A xin chỉ dùm. Tui đã đọc rồi nhưng thấy khó hiểu quá, nhất là chế độ sleep của nó và cơ chế biến đổi từ tín hiệu analog thành 10 bit đầu ra.
        Cám ơn các bác nhiều!

        Comment

        • nhh
          Đệ tử 9 túi
          • Feb 2006
          • 174

          #94
          Nguyên văn bởi spirit View Post
          Anh nhh cho em hỏi phát: theo em biết ngắt xảy ra ở chân RB0 khi có sự thay đổi mức logic trên nó, như vậy khi ta bấm phím thì RB0 sẽ bằng 0 ( lúc đầu RB0 bằng 1) sẽ tạo ngắt nhưng khi ta nhả phím ra thì lúc đó chân RB0 sẽ chuyển mức logic từ 0 lên 1 ngay ( chưa kể đến trường hợp rung phím nữa )
          ==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ?
          À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop
          @nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh
          Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
          + Ngắt cạnh xuống: low to high
          Code:
          BCF	OPTION_REG,INTEDG	;interrupt cạnh xuống
          + Ngắt cạnh lên: high to low
          Code:
          BSF	OPTION_REG,INTEDG	;interrupt cạnh lên
          Khi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

          Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.

          Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính.

          Chúc thành công!
          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

          Comment

          • spirit
            Đệ tử 2 túi
            • Aug 2006
            • 42

            #95
            Nguyên văn bởi nhh View Post
            Code:
            ;========================================
            ;Author:		NHH
            ;Date:		02/03/06
            ;Hardware:	PIC16F877A ,Crystal 4MHz
            ;========================================
            	PROCESSOR	PIC16f877A 
            	INCLUDE<P16f877A.inc> 
            	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
            ;========================================
            	COUNT		EQU	0x20
            	COUNT1		EQU	0x21
            	COUNT2		EQU	0x22
            	COUNT3		EQU	0x23
            	COUNT4		EQU	0x24
            	COUNT5		EQU	0x25
            	COUNT6		EQU	0x26
            	COUNT7		EQU	0x27
            	
            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 	0x00
            	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
            ;******************************************************************************
            	DECFSZ	COUNT,F
            	GOTO	CHECK
            	MOVLW	d'1'
            	MOVWF	COUNT	
            	INCF	COUNT1,F
            	GOTO	CHECK	
            BACK	BCF	INTCON,TMR0IF	;xoa co ngat TMR0
            ;******************************************************************************
            	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
            
            CHECK	
            	CALL	CHECK1
            	CALL	CHECK2
            	CALL	CHECK3
            	CALL	CHECK4
            	CALL	CHECK5
            	GOTO	BACK
            ;==============	CHUONG TRINH CHINH===============
            MAIN
            	BCF 	STATUS,RP1
            	BSF 	STATUS,RP0 		; chon BANK 1
            	MOVLW	b'11111111'		;PORTA=Input
            	MOVWF	TRISA
            	MOVLW	b'00000001'		;RB0=Input
            	MOVWF	TRISB
            	CLRF	TRISD
            ;------------------------------
            ;Khoi tao ngat Timer0
            ;------------------------------
            	BSF	OPTION_REG,PS0		;TMR0 rate 1: 64
            	BSF	OPTION_REG,PS1
            	BCF	OPTION_REG,PS2
            	BCF	OPTION_REG,PSA		;Prescaler is assigned to the Timer0 module
            	BCF	OPTION_REG,T0CS		
            	BCF 	STATUS,RP0 		;select BANK 0
            
            	BSF	INTCON,GIE
            	BSF	INTCON,TMR0IE
            	BCF	INTCON,TMR0IF
            
            	MOVLW	d'246'
            	MOVWF	COUNT
            	CLRF	COUNT1
            	CLRF	COUNT2
            	CLRF	COUNT3
            	CLRF	COUNT4
            	CLRF	COUNT5
            	CLRF	COUNT6
            	CLRF	COUNT7
            LOOP
            	CALL	DISPLAY1
            	CALL	DISPLAY2
            	CALL	DISPLAY3
            	CALL	DISPLAY4
            	CALL	DISPLAY5
            	CALL	DISPLAY6
            	
            	BTFSC	PORTB,0
            	GOTO	LOOP
            	GOTO	MODIFY
            MODIFY
            	BCF	INTCON,GIE
            	
            	BTFSC	PORTA,0
            	GOTO	$+2
            	CALL	LED34
            	BTFSC	PORTA,1
            	GOTO	$+2
            	CALL	LED56
            	BTFSS	PORTB,0
            	GOTO	MODIFY
            	BSF	INTCON,GIE
            	GOTO	LOOP
            LED34
            	INCF	COUNT3,F
            	MOVLW	d'10'
            	SUBWF	COUNT3,W
            	BTFSS	STATUS,0
            	RETURN
            	CLRF	COUNT3
            	INCF	COUNT4,F
            	MOVLW	d'6'
            	SUBWF	COUNT4,W
            	BTFSS	STATUS,0
            	RETURN
            	CLRF	COUNT4
            	RETURN
            LED56
            	INCF	COUNT5,F
            	MOVLW	d'4'
            	SUBWF	COUNT5,W
            	BTFSS	STATUS,0
            	RETURN
            	MOVLW	d'2'
            	SUBWF	COUNT6,W
            	BTFSS	STATUS,0
            	GOTO	LED5
            	CLRF	COUNT6
            	RETURN
            	
            LED5
            	MOVLW	d'10'
            	SUBWF	COUNT5,W
            	BTFSS	STATUS,0
            	GOTO	MODIFY
            	CLRF	COUNT5
            	INCF	COUNT6,F
            	GOTO	MODIFY
            
            ;============CHUONG TRINH CON===
            DISPLAY1
            	MOVLW	b'11111101'
            	MOVWF	PORTB
            	MOVF	COUNT1,W
            	CALL	TABLE
            	MOVWF	PORTD
            	CALL	DECREATE
            	CLRF	PORTB
            	CLRF	PORTD		
            	RETURN
            DISPLAY2
            	MOVLW	b'11111011'
            	MOVWF	PORTB
            	MOVF	COUNT2,W
            	CALL	TABLE
            	MOVWF	PORTD
            	CALL	DECREATE
            	CLRF	PORTB
            	CLRF	PORTD
            	RETURN
            DISPLAY3
            	MOVLW	b'11110111'
            	MOVWF	PORTB
            	MOVF	COUNT3,W
            	CALL	TABLE
            	MOVWF	PORTD
            	CALL	DECREATE
            	CLRF	PORTB
            	CLRF	PORTD
            	RETURN
            DISPLAY4
            	MOVLW	b'11101111'
            	MOVWF	PORTB
            	MOVF	COUNT4,W
            	CALL	TABLE
            	MOVWF	PORTD
            	CALL	DECREATE
            	CLRF	PORTB
            	CLRF	PORTD
            	RETURN
            DISPLAY5
            	MOVLW	b'11011111'
            	MOVWF	PORTB
            	MOVF	COUNT5,W
            	CALL	TABLE
            	MOVWF	PORTD
            	CALL	DECREATE
            	CLRF	PORTB
            	CLRF	PORTD
            	RETURN
            DISPLAY6
            	MOVLW	b'10111111'
            	MOVWF	PORTB
            	MOVF	COUNT6,W
            	CALL	TABLE
            	MOVWF	PORTD
            	CALL	DECREATE
            	CLRF	PORTB
            	CLRF	PORTD
            	RETURN
            
            DECREATE
            	DECFSZ	COUNT7
            	GOTO	DECREATE
            	RETURN
            
            ;........................................................
            CHECK1
            	MOVLW	d'10'
            	SUBWF	COUNT1,W
            	BTFSS	STATUS,0
            	GOTO	BACK
            	CLRF	COUNT1
            	INCF	COUNT2,F
            	RETURN
            CHECK2
            	MOVLW	d'6'
            	SUBWF	COUNT2,W
            	BTFSS	STATUS,0
            	GOTO	BACK
            	CLRF	COUNT2
            	INCF	COUNT3,F
            	RETURN
            CHECK3
            	MOVLW	d'10'
            	SUBWF	COUNT3,W
            	BTFSS	STATUS,0
            	GOTO	BACK
            	CLRF	COUNT3
            	INCF	COUNT4,F
            	RETURN
            CHECK4
            	MOVLW	d'6'
            	SUBWF	COUNT4,W
            	BTFSS	STATUS,0
            	GOTO	BACK	
            	CLRF	COUNT4
            	INCF	COUNT5,F
            	RETURN
            CHECK5
            	MOVLW	d'10'
            	SUBWF	COUNT5,W
            	BTFSS	STATUS,0
            	GOTO	BACK	
            	CLRF	COUNT5
            	INCF	COUNT6,F
            	RETURN
            CHECK6
            	INCF	COUNT5,F
            	MOVLW	d'4'
            	SUBWF	COUNT5,W
            	BTFSS	STATUS,0
            	RETURN
            	MOVLW	d'2'
            	SUBWF	COUNT6,W
            	BTFSS	STATUS,0
            	CALL	LED_5
            	CLRF	COUNT6
            	RETURN
            	
            LED_5
            	MOVLW	d'10'
            	SUBWF	COUNT5,W
            	BTFSS	STATUS,0
            	RETURN
            	CLRF	COUNT5
            	INCF	COUNT6,F
            	RETURN
            ;----------------------------------------------------------
            
            ; Bang tra ve Digital tu 0 den 9 va OFF
            ; Chi so dau truy cap la 0
            ; Bang o PAGE 0
            
            	ORG 07F0h
            TABLE
            ;----------------------------------------------------------
            	ADDWF 	PCL, F 			; bat dau tai 0x90
            	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'00111111' 		; 0
            		
            	END
            Anh NHH xem lại chương trình nay đi,em mắc mạch như trong hình ( mô phỏng bằng Proteus )nhưng chương trình chạy không đúng.

            Comment

            • newuser
              Đệ tử 4 túi
              • Feb 2006
              • 66

              #96
              Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
              + Ngắt cạnh xuống: low to high

              Code:
              BCF OPTION_REG,INTEDG ;interrupt cạnh xuống+ Ngắt cạnh lên: high to low

              Code:
              BSF OPTION_REG,INTEDG ;interrupt cạnh lênKhi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

              Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.
              Nếu mình nhớ không nhầm thì bit INTEDG chỉ xác định sườn tác động cho ngắt ngoài thôi mà! Đâu có liên quan gì đến ngắt thay đổi đâu.
              Theo đúng nghĩa của ngắt thay đổi, sườn lên hay sườn xuống đều phải gây ngắt và việc lựa chọn sườn tác động nào để gây ngắt là do người lập trình quyết định. Các bạn có thể tham khảo ở một appnote của Microchip vận dụng ngắt onchange để dùng như ngắt ngoài sẽ rõ.

              Comment

              • picpicpic
                Đệ tử 2 túi
                • Jan 2006
                • 36

                #97
                Sao không thấy bác nào viết về ADC, PWM vậy nhỉ !
                ************************************************** **
                The only wrong thing would be to deny what your heart truly feels!
                ************************************************** **

                Comment

                • spirit
                  Đệ tử 2 túi
                  • Aug 2006
                  • 42

                  #98
                  Giúp em với

                  Nguyên văn bởi nhh View Post
                  Ngắt ngoài có 2 kiểu, bằng thay đổi trạng thái chân:
                  + Ngắt cạnh xuống: low to high
                  Code:
                  BCF	OPTION_REG,INTEDG	;interrupt cạnh xuống
                  + Ngắt cạnh lên: high to low
                  Code:
                  BSF	OPTION_REG,INTEDG	;interrupt cạnh lên
                  Khi khai báo ngắt, ta phải khai báo cho pic biết sử dụng ngắt nào.

                  Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra.

                  Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính.

                  Chúc thành công!
                  +Ra vậy,em hiểu rồi nhưng còn đối với các ngắt RB4..RB7 thì sao hả anh , em đọc trong datasheet không thấy Microchip nhắc đến ngắt cạnh lên hay xuống mà chỉ nói xảy ra ngắt khi có sự thay đổi mức LOGIC trên chân.
                  +Khi cấu hình là ngõ vào thì cần phải có lệnh BCF option_reg,not_RBPU để cho phép điện trở kéo lên bên trong phải không ạ? Nhưng em thấy bài quét phím 4x4 của anh em thấy không có lệnh này.
                  +Chương trình quét phím 4x4 của anh khi mô phỏng Proteus thì chính xác nhưng khi em đem ra mạch thật test thử thì không đúng nữa.(không biết anh đã test thử trên mạch thật chưa?) à,khi em đem ra mạch thật test thì ngõ xuất LED 7 đoạn là Port D chứ không phải Port C .
                  Mong anh giải đáp giúp em một số thăc mác trên,chờ tin anh
                  @NHH:Anh học BK Tphcm phải không ? Nếu anh học ở đó thì anh có thể cho em gặp riêng không ?
                  @picpicpic :Bạn qua dientuvietnam.net xem sao
                  Last edited by spirit; 15-10-2006, 12:34 PM.

                  Comment

                  • spirit
                    Đệ tử 2 túi
                    • Aug 2006
                    • 42

                    #99
                    Hic,anh NHH đâu rồi trả lời giúp em đi

                    Comment

                    • newuser
                      Đệ tử 4 túi
                      • Feb 2006
                      • 66

                      #100
                      Ra vậy,em hiểu rồi nhưng còn đối với các ngắt RB4..RB7 thì sao hả anh , em đọc trong datasheet không thấy Microchip nhắc đến ngắt cạnh lên hay xuống mà chỉ nói xảy ra ngắt khi có sự thay đổi mức LOGIC trên chân.
                      mình đã nói ở trên đây thôi, chẳng có bit nào xác định sườn tác động của ngắt onchange cả, sườn lên hay sườn xuống đều có thể gây ngắt, nếu có bit để mà chọn sườn tác động thì còn gì là ngắt do thay đổi trạng thái (onchange)? muốn ngắt xảy ra theo sườn nào thì bạn phải viết chương trình thôi

                      Comment

                      • spirit
                        Đệ tử 2 túi
                        • Aug 2006
                        • 42

                        #101
                        Nguyên văn bởi newuser View Post
                        mình đã nói ở trên đây thôi, chẳng có bit nào xác định sườn tác động của ngắt onchange cả, sườn lên hay sườn xuống đều có thể gây ngắt, nếu có bit để mà chọn sườn tác động thì còn gì là ngắt do thay đổi trạng thái (onchange)? muốn ngắt xảy ra theo sườn nào thì bạn phải viết chương trình thôi
                        Mình xem trong datasheet thì thấy như sau:
                        OPTION_REG REGISTER (ADDRESS 81h, 181h)

                        Bit6: INTEDG : Interrupt Edge Select bit
                        1 = Interrupt on rising edge of RB0/INT pin
                        0 = Interrupt on falling edge of RB0/INT pin

                        Vậy thì có bit INTEDG chọn cạnh ngắt lên hay xuống mà Newuser ?

                        Mình cũng đã xem apnote AN552:Implementing Wake-up on Key Stroke của Microchip rồi cũng thấy không nói về bit xác định sườn ngắt chân RB4...RB7

                        Chắc có lẽ như bạn nói là không có bit để chọn cạnh ngắt như RB0 mà mình phải xác định trong chương trình của mình.

                        Còn chương trình quét phím 4x4 của anh NHH trên mình đã test thử trên Proteus thì chạy tốt nhưng khi đem ra mạch thật thì không chạy được
                        Bạn test giùm minh nhé Newuser,mình cũng đã thử viết lại nhiều lần rồi nhưng vãn chưa được.
                        Mình có nhiều vấn đề vẫn chưa thông lắm bạn Newuser giúp mình nhé

                        Comment

                        • newuser
                          Đệ tử 4 túi
                          • Feb 2006
                          • 66

                          #102
                          Nguyên văn bởi spirit View Post
                          Mình xem trong datasheet thì thấy như sau:
                          OPTION_REG REGISTER (ADDRESS 81h, 181h)

                          Bit6: INTEDG : Interrupt Edge Select bit
                          1 = Interrupt on rising edge of RB0/INT pin
                          0 = Interrupt on falling edge of RB0/INT pin

                          Vậy thì có bit INTEDG chọn cạnh ngắt lên hay xuống mà Newuser ?

                          Mình cũng đã xem apnote AN552:Implementing Wake-up on Key Stroke của Microchip rồi cũng thấy không nói về bit xác định sườn ngắt chân RB4...RB7

                          Chắc có lẽ như bạn nói là không có bit để chọn cạnh ngắt như RB0 mà mình phải xác định trong chương trình của mình.

                          Còn chương trình quét phím 4x4 của anh NHH trên mình đã test thử trên Proteus thì chạy tốt nhưng khi đem ra mạch thật thì không chạy được
                          Bạn test giùm minh nhé Newuser,mình cũng đã thử viết lại nhiều lần rồi nhưng vãn chưa được.
                          Mình có nhiều vấn đề vẫn chưa thông lắm bạn Newuser giúp mình nhé
                          trời đất, có ai nói là không có bit chọn sườn tác động cho ngắt ngoài (RB0/INT) đâu? Ngắt onchange chỉ có ở các chân của PORTB<4:7> thôi, đúng không?
                          để đảm bảo là không có ngắt không mong muốn xảy ra mỗi khi nhả phím thì bạn phải viết thêm một đoạn code kiểm tra trạng thái chân gây ngắt onchange, chắc chắn rằng trạng thái chân này đã trở về mức logic ban đầu(trạng thái trước khi nhấn phím), nếu chưa về trạng thái ban đầu thì chưa xoá cờ báo ngắt. Tôi không biết đoạn chương trình của bạn nhh, nhưng theo tôi suy đoán,Proteus đã lý tưởng hoá việc nhấn phím -->không khử nảy phím nhấn.
                          bạn đọc appnote này xem
                          Attached Files
                          Last edited by newuser; 18-10-2006, 10:13 PM.

                          Comment

                          • spirit
                            Đệ tử 2 túi
                            • Aug 2006
                            • 42

                            #103
                            Thanks newuser đúng là cái mình cần.

                            Comment

                            • pisco
                              Nhập môn đệ tử
                              • Oct 2006
                              • 1

                              #104
                              pic

                              em cung moi nghien cuu ve con pic6f877a , em cung thay mach nap cua may bac nhung sao ko thay co bo nguon cung cap cho no vay

                              Comment

                              • spirit
                                Đệ tử 2 túi
                                • Aug 2006
                                • 42

                                #105
                                Đề nghị bạn post tiếng việt có dấu,nếu bạn ở tpHCM bạn có thể qua cửa hàng (của PICVIETNAM ) : STH ở đường Lạc Long Quân gần chỗ giao với Âu Cơ

                                Comment

                                Working...