![]() |
Cùng thảo luận về ASM và ứng dụng của PIC
-em xin chào anh nhh và các anh.em mới học pic6f877a băng ASM nên muốn làm thưấmy cái mạch ứng dụng nhưng đang bí quá.Em rất mong anh em cùng nhau thảo luận về pic như thế này.
-em có vấn đề chưa hiểu mong anh các anh giúp đỡ em nghen.em đang làm thử cái mạch chạy chữ, dùng 2 con led matrix 8 nhan 8 dịch sang trái theo lập trình sẵn. em dùng 138 để quét cột, ngõ ra mắc với 8 con A1015 dùng port C, con 595 để xuất dữ liệu ra các cột dùng Port B. thì lý thuyết là vậy. nhưng bây giờ là cái code. do em mới học ASM à. nên việc viết code cái này em thấy hơi kho khó. em chỉ viết được chương trình đưa 8 byte(1 ký tự) xuất ra led thôi( dựa vào tài liệu co sẵn). chỉ là đưa byte ra thôi. nhưng em không biết nên thêm delay chỗ nào cho ảnh không bị giật hết ? với lại đó chỉ là 1 ký tự nên em viết dài vậy. còn mà em muốn lập trình cho chữ CHAU dịch trái chẳng hạn. thì viết như em chắc là die mất quá.em biết là cách của em là vô cùng dở, nhưng em chỉ mới tìm hiểu được nhiêu đó thôi. em có nghe nói là viết bảng table cho ký tự.nhưng em không hiểu viết bảng như thế nào cả.em nghĩ là lập bảng cho toàn bộ chữ CHAU.nhưng không biết lập như thế nào và liên kết như thế nào với đoạn chương trình chính? và cả delay nữa.em đang kẹt chỗ này.hichic.đây là code: PROCESSOR 16F877A INCLUDE <P16F877A.INC> SENDREG EQU 20H COUNT EQU 21H #DEFINE DATA PORTB,0 #DEFINE CLOCK PORTB,1 #DEFINE CLEAR PORTB,2 #DEFINE LATCH PORTB,3 ORG 0000H START BCF STATUS,5 BCF STATUS,6 CLRF PORTB CLRF PORTC BSF STATUS,5 CLRF PORTB CLRF PORTC BCF STATUS,5 ;-------------CHUONG TRINH------------- MAIN BSF PORTB,2 BCF CLEAR NOP BSF CLEAR MOVLW 0FFH CALL SEROUT MOVLW D'0' MOVWF PORTC BSF LATCH NOP BCF LATCH ;-------------XONG BYTE1--------------- MOVLW 1H CALL SEROUT MOVLW D'1' MOVWF PORTC BSF LATCH NOP BCF LATCH ;-------------XONG BYTE2--------------- MOVLW 0H CALL SEROUT MOVLW D'2' MOVWF PORTC BSF LATCH NOP BCF LATCH ;-------------XONG BYTE3--------------- MOVLW 0CCH CALL SEROUT MOVLW D'3' MOVWF PORTC BSF LATCH NOP BCF LATCH ;-------------XONG BYTE4--------------- MOVLW 0CCH CALL SEROUT MOVLW D'4' MOVWF PORTC BSF LATCH NOP BCF LATCH ;-------------XONG BYTE5--------------- MOVLW 0H CALL SEROUT MOVLW D'5' MOVWF PORTC BSF LATCH NOP BCF LATCH ;-------------XONG BYTE6--------------- MOVLW 1H CALL SEROUT MOVLW D'6' MOVWF PORTC BSF LATCH NOP BCF LATCH ;-------------XONG BYTE7--------------- MOVLW 0FFH CALL SEROUT MOVLW D'7' MOVWF PORTC BSF LATCH NOP BCF LATCH GOTO MAIN SEROUT MOVWF SENDREG MOVLW 08H MOVWF COUNT TESTBIT BCF DATA BTFSC SENDREG,7 BSF DATA BSF CLOCK NOP BCF CLOCK RLF SENDREG DECFSZ COUNT,1 GOTO TESTBIT RETURN END trong room này em thấy nhiều anh rành về ASM ghê. em cứ thắc mắc hoài mà không biết hỏi đâu.các anh viết lại giúp em với. cho em biết là nên thêm chỗ nào và viết như thế nào là tối ưu nha. Sửa giúp em thì tốt quá cho em tham khảo -Xong cái này em định viết chương trình hiển thị chữ ra led mt dùng bàn phím hex. mong được sự giúp đỡ của các anh. em xin cảm ơn trước. dưới đây là file mô phỏng và code. em không up lên được nên phải làm vậy.các anh xem giúp em ngen. code: http://www.mediafire.com/download.php?omm32vqnmyi mô phỏng: http://www.mediafire.com/download.php?n5jo5uiim2g |
Trích:
http://www.picvietnam.com/forum/showthread.php?t=3289 Thân, |
Nhờ các anh giúp đỡ em cái ASM này
dạ em có làm vậy mà. biết bao nhiêu lần rồi mà có đươc đâu nên em mới up link lên đấy chứ. biết là up link như vậy là không được nhưng biết làm sao bây giờ.hichic. em quyết tâm không bỏ cuộc đâu. em lại viết chương trình nữ nè. giúp em với anh nampn ơi.
. Em đang thử viết chương trình hiên thử chữ A, em viết thử theo cách tra bảng. nhưng sao lạ quá. Tạo file hex thì ok. Còn vào proteus chẳng thấy chữ A nào hết vậy các anh?(em vẫn dùng mạch như đã Up phía trên). Hinh như là cái bảng của em là vô tác dụng hay sao đấy. em thấy CALL vậy là vẫn như bình thường nhưng sao chương trình không nhảy xuống được cái bảng này. Với lại em mô phỏng đã không được mà sao nó lại hiện ra cái cột đáng ghét ở con led thứ 2. em quyết tâm không bỏ cuộc đâu.nhưng sao toàn mắc lỗi không vậy ta.hic hic.các anh xem thử em đã sai nơi nào vậy. em không tìm ra được. dưới đây là đoạn chương trình(em có tham khảo): PROCESSOR 16F877A INCLUDE <P16F877A.INC> ;-------------------------------------------- ;KHAI BAO BIEN ;-------------------------------------------- SENDREG EQU 20H COUNT EQU 21H COUNT_138 EQU 22H ;DEM CHO 138 COUNT_8BYTE EQU 23H ;DEM CHO 8BYTE COUNT1 EQU 24H COUNTA EQU 25H COUNTB EQU 26H ;-------------------------------------------- ;DINH NGHIA PHAN CUNG ;-------------------------------------------- #DEFINE DATA PORTB,0 #DEFINE CLOCK PORTB,1 #DEFINE CLEAR PORTB,2 #DEFINE LATCH PORTB,3 ;-------------------------------------------- ;CHUONG TRINH CHINH ;-------------------------------------------- ORG 0000H START ;CHUONG TRINH CHINH BCF STATUS,5 BCF STATUS,6 CLRF PORTB CLRF PORTC BSF STATUS,5 CLRF PORTB ;CHON BR3:RB0 LA OUTPUT CLRF PORTC ;CHON RB2:RB0 LA INPUT BCF STATUS,5 ;CHON BANK1 ;============CHUONG TRINH CHINH============== CLRF COUNT_138 CLRF COUNT_8BYTE MAIN MOVLW 04H MOVWF PORTB ;DUA CHAN SCLK LEN CAO MOVLW D'255' MOVWF PORTC BCF CLEAR ;RESET DU LIEU TRONG 74HC595 NOP ;clear tac dong canh XUONG BSF CLEAR ;DUA PIN SCLR TRO VE MUC LOGIC CAO DI MOVF COUNT_8BYTE,0 ;DUA GIA TRI COUNT_8BYTE VAO ;THANH GHI W CALL TABLE ;GOI CHUONG TRINH CON TABLE CALL SEROUT ;GOI CHUONG TRINH CON DUA 8BIT VAO 595 INCF COUNT_138,1 ;TANG COUNT_138 LEN 1 KET QUA LUU ;TRONG COUNT_138 BSF LATCH NOP BCF LATCH CALL DELAY_8ms ;TAO TRE 8ms LUU 1 BYTE TREN LED MT INCF COUNT_8BYTE,1 ;TANG COUNT_8BYTE LEN 1 KET ;QUA LUU TRONG COUNT_8BYTE XORWF D'8' ;XOR COUNT_8BYTE VOI 8 BTFSS STATUS,Z ;KT BIT Z GOTO DI ;NEU Z CHUA BANG 0 THI TIEP TUC LAY DU ;LIEU TRONG BANG TRA GOTO MAIN SEROUT MOVWF SENDREG MOVLW 08H MOVWF COUNT TESTBIT BCF DATA BTFSC SENDREG,7 BSF DATA BSF CLOCK NOP BCF CLOCK RLF SENDREG DECFSZ COUNT,1 GOTO TESTBIT RETURN TABLE ADDWF PCL,F RETLW B'11111111' RETLW B'00000001' RETLW B'00000000' RETLW B'11100100' RETLW B'11100100' RETLW B'00000000' RETLW B'00000001' RETLW B'11111111' DELAY_8ms MOVLW D'100' MOVLW COUNT1 LOOP MOVLW 0C7H MOVWF COUNTA MOVLW 01H MOVWF COUNTB LOOP1 DECFSZ COUNTA,1 GOTO $+2 DECFSZ COUNTB,1 GOTO LOOP1 DECFSZ COUNT1,1 GOTO LOOP1 RETURN END mà anh nampn ơi. em thấy anh nhh rất giỏi cái ASM này thì phải. chắc là ảnh bận nên không trả lời em quá. mong các anh giúp đỡ em hoàn thành cái này với. |
Hic.ko ai giúp em hết vậy ta.1 lời khuyên cũng được mà.em xin phép ad và mod cho em được phép duy trì luồng này nghen.
|
Xem giúp em code ASM sai chỗ nào
Đi học về => truy cập inter xem chủ đề hy vọng sẽ có nhiều anh quan tâm và giúp đỡ => chẳng thấy 1 lời khuyên nào dù chỉ là gợi mở => chán nản => shut down máy tính.
|
Trích:
phân tích c/t cửa bạn nhé: PROCESSOR 16F877A INCLUDE <P16F877A.INC> thiếu câú hình cho pic ;-------------------------------------------- ;KHAI BAO BIEN ;-------------------------------------------- SENDREG EQU 20H COUNT EQU 21H COUNT_138 EQU 22H ;DEM CHO 138 COUNT_8BYTE EQU 23H ;DEM CHO 8BYTE COUNT1 EQU 24H COUNTA EQU 25H COUNTB EQU 26H ;-------------------------------------------- ;DINH NGHIA PHAN CUNG ;-------------------------------------------- #DEFINE DATA PORTB,0 #DEFINE CLOCK PORTB,1 #DEFINE CLEAR PORTB,2 #DEFINE LATCH PORTB,3 ;-------------------------------------------- ;CHUONG TRINH CHINH ;-------------------------------------------- ORG 0000H START ;CHUONG TRINH CHINH BCF STATUS,5 BCF STATUS,6 CLRF PORTB CLRF PORTC BSF STATUS,5 CLRF PORTB ;CHON BR3:RB0 LA OUTPUT;dùng tris để định i/o port CLRF PORTC ;CHON RB2:RB0 LA INPUT BCF STATUS,5 ;CHON BANK1 ;============CHUONG TRINH CHINH============== CLRF COUNT_138 CLRF COUNT_8BYTE MAIN MOVLW 04H MOVWF PORTB ;DUA CHAN SCLK LEN CAO MOVLW D'255' MOVWF PORTC BCF CLEAR ;RESET DU LIEU TRONG 74HC595 NOP ;clear tac dong canh XUONG BSF CLEAR ;DUA PIN SCLR TRO VE MUC LOGIC CAO DI MOVF COUNT_8BYTE,0 ;DUA GIA TRI COUNT_8BYTE VAO ;THANH GHI W CALL TABLE ;GOI CHUONG TRINH CON TABLE CALL SEROUT ;GOI CHUONG TRINH CON DUA 8BIT VAO 595 INCF COUNT_138,1 ;TANG COUNT_138 LEN 1 KET QUA LUU ;TRONG COUNT_138 ;tăng lên rồi xuât đi đâu để d/k quét matrix BSF LATCH NOP BCF LATCH CALL DELAY_8ms ;TAO TRE 8ms LUU 1 BYTE TREN LED MT INCF COUNT_8BYTE,1 ;TANG COUNT_8BYTE LEN 1 KET ;QUA LUU TRONG COUNT_8BYTE XORWF D'8' ;XOR COUNT_8BYTE VOI 8 BTFSS STATUS,Z ;KT BIT Z GOTO DI ;NEU Z CHUA BANG 0 THI TIEP TUC LAY DU ;LIEU TRONG BANG TRA GOTO MAIN SEROUT MOVWF SENDREG MOVLW 08H MOVWF COUNT TESTBIT BCF DATA BTFSC SENDREG,7 BSF DATA BSF CLOCK NOP BCF CLOCK RLF SENDREG DECFSZ COUNT,1 GOTO TESTBIT RETURN TABLE;bảng tra dạng này lên đưa lên đầu c/t ADDWF PCL,F RETLW B'11111111' RETLW B'00000001' RETLW B'00000000' RETLW B'11100100' RETLW B'11100100' RETLW B'00000000' RETLW B'00000001' RETLW B'11111111' DELAY_8ms;bạn tính lại chỗ này thời gian quá dài MOVLW D'100' MOVLW COUNT1 LOOP MOVLW 0C7H MOVWF COUNTA MOVLW 01H MOVWF COUNTB LOOP1 DECFSZ COUNTA,1 GOTO $+2 DECFSZ COUNTB,1 GOTO LOOP1 DECFSZ COUNT1,1 GOTO LOOP1 RETURN END bạn coi lại nhé rôi tính tiếp. |
Trích:
|
đầu tiên cho em được cảm ơn anh đã bỏ tí thời gian đọc bài của em. dạ được, để em xem lại. em sẽ có câu trả lời sớm nhất cho anh vào ngày mai. em đang ngồi mạng không mang USB theo. nhưng em up mấy lần rồi cứ báo lỗi hoài à. em đã nén rất nhiều dạng nhưng cung không được. để mai em cố gáng lại xem sao. giờ em xem lại đã. 1 lần nữa xin cảm ơn anh nhiều nghen.
|
Báo cáo : Thất bại lần 1
á á. anh ơi em đã sửa lại rồi đó. cái đoạn cấu hình thì em biết, nhưng khi chạy để chuyển sang fire hex là báo lỗi liền à. nên em không đánh vào.ngồi từ sáng tới giờ. suy nghĩ => thất bại => làm lụi => cuối cùng là cái mạch mô phỏng chạy như vậy đây. em thử rồi cái table hôm nay có call được, nhưng hình như là chỉ tới dòng thứ 2 à. trong khi đó hình như mọi thứ có vẻ ổn mà ta. ngồi hoài mà không biết cái ngu của mình là ở đâu. anh giúp em tìm ra cái ngu của em với. buồn quá vội vã ra mạng nên quên chép file mô phỏng rồi. chán ghê.
em không up file lên được. báo lỗi hoài à. em gửi cho anh code đấy. anh xem giúp em với nghen. |
Herher. Sau mấy ngày mò mẫm ráp code thì đã có chữ A. hehe. cuối cùng thì em 138 đã quét được rầu. em 595 còn nhịp nhịp nữa chứ.tuy chưa được bi nhiêu cũng cảm thấy có gì đó vui vui. Bây giò lại đi tiếp bước nữa đây.
1.chạy chữ trên 1 led 2.chạy trên nhiều led mô phỏng: http://www.mediafire.com/download.php?013gyj1mjjz |
Múi giờ GMT. Hiện tại là 09:17 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam