Thông báo

Collapse
No announcement yet.

Kỹ Thuật Bảng Trong Pic ?

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    rất cảm ơn các bạn :
    tranvanthuon (xt -->hs)
    namqn đã giúp tôi hiểu rỏ hơn về lệnh RETURN, GOTO
    falleaf giúp tôi hiểu rỏ về kỹ thuật bảng chuẩn
    và các bạn khác đã nhiệt tình giúp đỡ
    thân,

    Comment


    • #17
      Nhân tiện đó vui các chuyên gia PIC tý nhỉ?
      Giả sử vẫn cách viết trên nhưng có sửa thành

      Ví dụ:

      Đặt các tham số

      GOTO TEST_CHUONGTRINH
      KETTHUC:
      Làm tiếp việc khác...


      TEST_CHUONGTRINH
      MOVWF KEY_VAL
      TABLE_ENTRY ;KHI PRESET_FLAG=1
      MOVF KEY_VAL, W
      ADDWF PCL, F
      GOTO ROUTINE_PRESET ;0
      GOTO ROUTINE_NEXT ;1
      GOTO ROUTINE_ONOFF ;2
      GOTO ROUTINE_SAVE ;3
      GOTO ROUTINE_NUMBER ;4
      GOTO ROUTINE_NUMBER ;5
      GOTO ROUTINE_NUMBER ;6
      GOTO ROUTINE_UNDO ;7
      GOTO ROUTINE_NUMBER ;8
      GOTO ROUTINE_NUMBER ;9
      GOTO ROUTINE_NUMBER ;10
      GOTO ROUTINE_NUMBER ;11
      GOTO ROUTINE_NUMBER ;12
      GOTO ROUTINE_NUMBER ;13
      GOTO ROUTINE_NUMBER ;14
      GOTO ROUTINE_CLEAR ;15
      RETURN ;16
      ROUTINE_PRESET

      MOVLW B'00000001'
      MOVWF PORTB
      GOTO KETTHUC


      Vậy có được không?
      Khi nào được? Khi nào không? Tại sao?
      Với dòng PIC nào cần chú ý. Dòng nào thì không?
      Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

      Biến tần
      Máy giặt
      Lò vi sóng
      Bếp từ.
      Tủ lạnh.
      Điều hòa

      Comment


      • #18
        Chương trình này anh nhấn số 16 thì điếc, còn lại cấu trúc toàn bộ GOTO, không ảnh hưởng gì về mặt cấu trúc chương trình.

        Chúc vui
        Falleaf
        Công ty TNHH Thương mại và Giao nhận R&P
        58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
        mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

        Comment


        • #19
          Có F đây rồi.
          Phần đặt các tham số đã có rồi ( coi như vậy).
          if ( KEY_VAL < 16) Đố vui;
          else FINISHED;

          Các chuyên gia PIC giải thử xem.
          Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

          Biến tần
          Máy giặt
          Lò vi sóng
          Bếp từ.
          Tủ lạnh.
          Điều hòa

          Comment


          • #20
            Kaka, cứ lâu lâu bác lại nhảy lên chơi, chắc độ rày bác bắt đầu làm xong mấy vụ ngon rồi nên lên chơi ạ. Hôm nào bác nhắn em ghi cái số em lại, ra ngoài đó anh em mình làm chầu bia phát.

            Cái bảng, có rất nhiều trường hợp không được, nếu viết dài sang page khác là chết một chú. Do vậy cái chỗ "Làm việc khác" của bác phải ngăn ngắn thôi. Cái này có note trong cái tutorial rồi mà.

            Còn dòng nào được dòng nào không thì em chịu , làm con nào xem con đó, chứ bác hỏi thế này nó có cả lô cả lốc con, bó chiu .

            Chúc vui.
            Falleaf
            Công ty TNHH Thương mại và Giao nhận R&P
            58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
            mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

            Comment


            • #21
              bạn Minh Hà cho tôi hỏi nếu bây giờ trong chương trình con ROUTINE_PRESET
              tôi lạl truy xuất 1 bảng nữa THÌ NÓ CÓ CHẠY KHÔNG



              GOTO TEST_CHUONGTRINH
              KETTHUC:
              Làm tiếp việc khác...


              TEST_CHUONGTRINH
              MOVWF KEY_VAL
              TABLE_ENTRY ;KHI PRESET_FLAG=1
              MOVF KEY_VAL, W
              ADDWF PCL, F
              GOTO ROUTINE_PRESET ;0
              GOTO ROUTINE_NEXT ;1
              GOTO ROUTINE_ONOFF ;2
              GOTO ROUTINE_SAVE ;3
              GOTO ROUTINE_NUMBER ;4
              GOTO ROUTINE_NUMBER ;5
              GOTO ROUTINE_NUMBER ;6
              GOTO ROUTINE_UNDO ;7
              GOTO ROUTINE_NUMBER ;8
              GOTO ROUTINE_NUMBER ;9
              GOTO ROUTINE_NUMBER ;10
              GOTO ROUTINE_NUMBER ;11
              GOTO ROUTINE_NUMBER ;12
              GOTO ROUTINE_NUMBER ;13
              GOTO ROUTINE_NUMBER ;14
              GOTO ROUTINE_CLEAR ;15
              RETURN ;16
              ROUTINE_PRESET
              CALL TRANSITION_KEY
              MOVLW B'00000001'
              MOVWF PORTB
              GOTO KETTHUC



              TRANSITION_KEY
              ADDWF PCL,F ;PHIM KEY
              RETLW 0XF0 ;PRESET 0
              RETLW 0XE0 ;NEXT 1
              RETLW 0XD0 ;ON_OFF 2
              RETLW 0XC0 ;SAVE 3
              RETLW 0X30 ;3 4
              RETLW 0X60 ;6 5
              RETLW 0X90 ;9 6
              RETLW 0XB0 ;UNDO 7
              RETLW 0X20 ;2 8
              RETLW 0X50 ;5 9
              RETLW 0X80 ;8 10
              RETLW 0X00 ;0 11
              RETLW 0X10 ;1 12
              RETLW 0X40 ;4 13
              RETLW 0X70 ;7 14
              RETLW 0XA0 ;CLEAR 15

              Comment


              • #22
                Nếu bạn chạy GOTO như vậy, nguyên lý là gọi bảng không có vấn đề gì. Kể cả CALL gọi một hàm, trong hàm đó có CALL cũng không sao cả. Chỉ lưu ý là số Stack tối đa của chip là bao nhiêu, tại mỗi thời điểm chúng ta phải tính toán được xem số Stack tối đa có thể chiếm lúc đó là bao nhiêu.

                Chúc vui
                Falleaf
                Công ty TNHH Thương mại và Giao nhận R&P
                58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
                mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

                Comment


                • #23
                  Đây là đoạn mã trích trong File kèm theo

                  Code:
                  ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  ROUTINE_NUMBER
                  					MOVF	KEY_VAL, W
                  ;					MOVLW	.14
                  					CALL	TRANSITION_KEY
                  ;					MOVLW	0X70
                  					MOVWF KEY_TRANSITION
                  
                  					MOVF	FLAG_UNDO, W
                  					BTFSC	STATUS, Z
                  					GOTO	EXIT_SERVICE
                  					MOVLW	.1
                  					XORWF	FLAG_UNDO, W
                  					BTFSC	STATUS, Z
                  					GOTO	CONSO_DONVI		
                  					MOVLW	.2
                  					XORWF	FLAG_UNDO, W
                  					BTFSC	STATUS, Z
                  					GOTO	CONSO_CHUC	
                  					MOVLW	.3
                  					XORWF	FLAG_UNDO, W
                  					BTFSS	STATUS, Z
                  					GOTO	EXIT_SERVICE
                  CONSO_TRAM	
                  
                  					MOVLW	0X20			;xac dinh dia chi con so cua nhom dang chon
                  					ADDWF	NEXT, W
                  					ADDWF	NEXT, W
                  					ADDWF	NEXT, W
                  					MOVWF	FSR
                  					MOVLW	B'00001111'		;XOA 4 BIT CAO CUA LED HIEN TAI
                  					ANDWF	INDF, F
                  					MOVF	KEY_TRANSITION, W			;DUA GIA TRI MOI 4 BIT CAO CUA KEY VAO LED HIEN TAI
                  					IORWF	INDF, F
                  					DECF	FLAG_UNDO, F
                  
                  					GOTO	EXIT_SERVICE
                  
                  	
                  CONSO_CHUC
                  					GOTO	EXIT_SERVICE	
                  	
                  CONSO_DONVI
                  
                  					GOTO	EXIT_SERVICE
                  
                  
                  
                  
                  TRANSITION_KEY						
                  					ADDWF	PCL,F	;PHIM	KEY
                  					DT	0XF0		;PRESET	0
                  					DT	0XE0		;NEXT	1
                  					DT	0XD0		;ON_OFF	2
                  					DT	0XC0		;SAVE	3
                  					DT	0X30		;3		4
                  					DT	0X60		;6		5
                  					DT	0X90		;9		6
                  					DT	0XB0		;UNDO	7
                  					DT	0X20		;2		8
                  					DT	0X50		;5		9
                  					DT	0X80		;8		10	
                  					DT	0X00		;0		11
                  					DT	0X10		;1		12
                  					DT	0X40		;4		13
                  					DT	0X70		;7		14
                  					DT	0XA0		;CLEAR	15
                  					RETURN			;		16
                  ADDRESS_GROUP							;DIA CHI NHOM
                  					MOVLW	.3
                  					MOVWF	TEMP
                  
                  ADDRESS_GRP			MOVLW	0X20			;xac dinh dia chi con so cua nhom dang chon
                  					ADDWF	NEXT, W
                  					ADDWF	NEXT, W
                  					ADDWF	NEXT, W
                  					RETURN
                  ;````````````````````````````
                  DICH_CONSO			MOVLW	B'11110000'		;
                  					ANDWF	INDF, W			;LUU 4 BIT CAO CUA LED HIEN TAI VAO TEMP
                  					MOVWF	TEMP
                  					MOVLW	B'00001111'		;XOA 4 BIT CAO CUA LED HIEN TAI
                  					ANDWF	INDF, F
                  					MOVF	KEY_TRANSITION, W			;DUA GIA TRI MOI 4 BIT CAO CUA KEY VAO LED HIEN TAI
                  					IORWF	INDF, F
                  					RETURN
                  ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  Attached Files

                  Comment


                  • #24
                    bạn có thể cho biết tại sao không ?
                    ở thủ tục ROUTINE_NUMBER :KEY_VAL có giá trị 4,5,6,8,9,10,11,12,13,14

                    trong đoạn chương trình trên :
                    trường hợp 1:
                    là trường hợp bên trên kết quả hiển thị thưc tế cho biết rằng:
                    khi KEY_VAL=4 ;5;6 thì
                    KEY_TRANSITION=0x00
                    khi KEY_VAL=9;10;11;12;13;14 thì
                    KEY_TRANSITION=0xF0


                    trường hợp 2 :

                    ROUTINE_NUMBER
                    ; MOVF KEY_VAL, W
                    MOVLW .14
                    CALL TRANSITION_KEY

                    ; MOVLW 0X70
                    MOVWF KEY_TRANSITION

                    kết quả hiển thị thực tế cho biết được TRANSITION_KEY=0xF0

                    trường hợp 3 :

                    ROUTINE_NUMBER
                    MOVF KEY_VAL, W
                    MOVLW .14
                    CALL TRANSITION_KEY
                    MOVLW 0X70
                    MOVWF KEY_TRANSITION


                    kết quả hiển thị thực tế cho biết KEY_TRANSITION=0x70
                    Last edited by phamkhuyen; 04-07-2007, 06:46.

                    Comment


                    • #25
                      F xin chịu thua, bây giờ F kô thể nào có thời gian đọc code của bạn để phân tích được. Việc phân tích này chỉ phù hợp với những người hiện đang làm việc thường xuyên với PIC, họ mới có độ nhạy nhất định để giải quyết giúp bạn thôi. 3 năm nay F không nạp cho một con PIC nào cả rồi thì làm sao còn đủ cái độ nhạy đó nữa .

                      Chúc vui.
                      Falleaf
                      Công ty TNHH Thương mại và Giao nhận R&P
                      58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
                      mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

                      Comment


                      • #26
                        Trường hợp 3: bạn tự nạp con số 0x70 vào KEY_TRANSITION thì đương nhiên là KEY_TRANSITION phải có giá trị đó rồi, bất kể hàm CALL TRANSITION_KEY hoạt động thế nào.

                        Còn 2 trường hợp 1 và 2, bạn phải gửi chương trình cụ thể thì mới xem được, vì trong đoạn post của bạn theo logic thì nó phải chạy đúng. Lỗi này liên quan đến mạch chương trình chính, đến PCLATH...Phải có chương trình đầy đủ mới test được.

                        Thân,

                        Comment

                        Về tác giả

                        Collapse

                        phamkhuyen Tìm hiểu thêm về phamkhuyen

                        Bài viết mới nhất

                        Collapse

                        Đang tải...
                        X