![]() |
|
Tài trợ cho PIC Vietnam |
Cảm biến Camera, siêu âm, hồng ngoại, gyro, la bàn... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#16 |
Trưởng lão PIC bang
Tham gia ngày: Dec 2005
Bài gửi: 315
: |
Ví dụ đây là một "khung chương trình" của 89C52
Code:
;******************************************************** ;* Clock 24 MHz, 1 chu ky 0.5 us ;******************************************************** ; Khai bao cac hang so khoi dong ban dau o day ; Khai bao bien o day ;----------------------------- Start: mov a,#0Ch da a djnz r0,$ clr EA clr ET0 clr ET1 clr EX0 clr EX1 jmp Clear_RAM ;---------------------------------------------------------------------------- ; Clear RAM internal 20h - 0FFh for 89C52 ;---------------------------------------------------------------------------- Clear_RAM: mov r0,#20h CLR_loop: mov @r0,#0 inc r0 cjne r0,#0ffh,CLR_loop mov sp,#Stack ;---------------------------------------------------------------------------- ; Setup cac tham so khac o day ;-------------------------------------------------------- ; Vong quet chuong trinh chinh ;-------------------------------------------------------- Main: jbc flg_time.0,prg10us n100us: jbc flg_time.1,prg100us n1ms: jbc flg_time.2,prg1ms n10ms: jbc flg_time.3,prg10ms n100ms: jbc flg_time.4,prg100ms n1sec: jbc flg_time.5,prg1sec n1minute: jmp Main ;~~~~~~~~~~~~~~~~~~~~~~~~~~ prg10us: ;cac lenh cua vong quet 10us jmp n100us ;~~~~~~~~~~~~~~~~~~~~~~~~~~ prg100us: ;cac lenh cua vong quet 100us jmp n1ms ;~~~~~~~~~~~~~~~~~~~~~~~~~~ prg1ms: ;cac lenh cua vong quet 1ms jmp n10ms ;~~~~~~~~~~~~~~~~~~~~~~~~~~ prg10ms: ;cac lenh cua vong quet 10ms jmp n100ms ;~~~~~~~~~~~~~~~~~~~~~~~~~~ prg100ms: ;cac lenh cua vong quet 100ms jmp n1sec ;---------------------------------------------------------- ; Thu tuc xu ly cac ngat ;---------------------------------------------------------- IntTimer0: push 0 clr TR0 ; cam timer 0 ;cac lenh trong ngat Timer0 endtimer0: setb TR0 ; Cho phep timer 0 pop 0 reti ;---------------------------- ;Tao chu ky vong quet khac nhau IntTimer1: push 0 clr TR1 ; cam timer 1 setb flg_time.0 ;bit 0 : da thay doi 10us mov r0,#cn_10us inc @r0 cjne @r0,#10,endtimer1 setb flg_time.1 ;bit 1: da thay doi 100us mov @r0,#0 mov r0,#cn_100us inc @r0 cjne @r0,#10,endtimer1 setb flg_time.2 ;bit 2: da thay doi 1ms=1000us mov @r0,#0 mov r0,#cn_1ms inc @r0 cjne @r0,#10,endtimer1 setb flg_time.3 ;bit 3: da thay doi 10ms mov @r0,#0 mov r0,#cn_10ms inc @r0 cjne @r0,#10,endtimer1 setb flg_time.4 ;bit 4: da thay doi 100ms mov @r0,#0 mov r0,#cn_100ms inc @r0 cjne @r0,#10,endtimer1 setb flg_time.5 ;bit 5: da thay doi 1sec=1000ms mov @r0,#0 mov r0,#cn_1sec inc @r0 cjne @r0,#60,endtimer1 setb flg_time.6 ;bit 6: da thay doi 1minute=60s mov @r0,#0 mov r0,#cn_1minute inc @r0 cjne @r0,#60,endtimer1 setb flg_time.7 ;bit 7: da thay doi 1hour=60minutes mov @r0,#0 mov r0,#cn_1hour inc @r0 endtimer1: mov TL1,#Low(MotorPulse) mov TH1,#High(MotorPulse) setb TR1 pop 0 reti ;---------------------------- IntEx0: reti ;---------------------------- IntRS232: reti ;---------------------------- IntEx1: reti ;---------------------------- endprog: db ' End of program at here, bye!' END
__________________
Sống là động nhưng lòng luôn bất động, Sống là thương nhưng lòng chẳng vấn vương, Sống yên vui danh lợi vẫn coi thường, Tâm bất biến giữa dòng đời vạn biến. Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài: http://www.picvietnam.com/forum//showthread.php?t=1263 |
![]() |
![]() |
![]() |
#17 |
Đệ tử 1 túi
|
Xin hỏi rằng nếu tốc độ xử lý không xử lý được số xung thì có thể dùng biện pháp phần cứng nào để xử lý ko?
(liệu có thể dùng bộ đếm như kiểu chia tần không?, lúc đó pha còn chính xác ko nhỉ) Giúp em với nhé, em đang phải đọc 1 encoder quang mà vẫn chưa thành công. Cám ơn mọi người trước! |
![]() |
![]() |
![]() |
#18 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#19 |
Đệ tử 1 túi
|
Cảm ơn anh Nam, em cũng đã nghĩ như vậy.
Em chưa hiểu đoạn anh nói về cách "đọc giá trị tức thời của bộ đếm ngoài qua 4 đường I/O của PIC, các bit cao hơn sẽ nằm trong vi điều khiển" lắm Em nghĩ đơn giản là dùng bộ đếm 4bit thì tốc độ xung sẽ giảm 16 lần, và xung đó chính là xung thể hiện ở bit cao nhất bộ đếm. Như vậy thì ta tiến hành đếm xung ở chân này của bộ đếm? (vì vậy mà em mới hỏi về pha, em định cho cả 2 kênh A,B qua 2 bộ đếm để giảm tốc độ xung, sau đó giải mã như bình thường?) |
![]() |
![]() |
![]() |
#20 | |
Trưởng lão PIC bang
Tham gia ngày: Dec 2005
Bài gửi: 315
: |
Trích:
- Trường hợp encoder phát xung trên hai kênh A và B: mình nghĩ là không dùng được giải pháp bộ đếm nhị phân ngoài được vì khi đó thông tin về độ lệch pha giữa A và B (để quyết định chiều quay của encoder) bị mất hay nói cách khác là không thể nhận biết được khi lập trình trên PIC. Tôi nghĩ thông tin đã đủ, bạn làm mạch thử nghiệm và thông báo kết quả cho mọi người nhé.
__________________
Sống là động nhưng lòng luôn bất động, Sống là thương nhưng lòng chẳng vấn vương, Sống yên vui danh lợi vẫn coi thường, Tâm bất biến giữa dòng đời vạn biến. Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài: http://www.picvietnam.com/forum//showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#21 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#22 | |
Trưởng lão PIC bang
Tham gia ngày: Dec 2005
Bài gửi: 315
: |
Trích:
Nguyên lý của SR-FF: ![]() Theo hình vẽ, giả sử nếu sử dụng chân Set (S) cho cổng A, chân Reset (R) cho cổng B thì: - Nếu A sớm pha hơn B (S=1, R=0) thì suy ra encoder quay thuận (Q=1) - Nếu A chậm pha hon B (S=0, R=1) thì suy ra encoder quay nghịch (Q=0) Vì vậy ta có thể sử dụng chân Q như chân địch chiều quay. Vấn đề giờ có thể quy về "Trường hợp encoder chỉ phát xung trên một chân, hướng (chiều) của xung được quy định bởi 1 chân khác".
__________________
Sống là động nhưng lòng luôn bất động, Sống là thương nhưng lòng chẳng vấn vương, Sống yên vui danh lợi vẫn coi thường, Tâm bất biến giữa dòng đời vạn biến. Chú ý: đề nghị các thành viên đọc luồng dưới đây trước khi post bài: http://www.picvietnam.com/forum//showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#23 | |
Trưởng lão PIC bang
|
Trích:
Chẳng hạn, kênh A đưa vào chân D và kênh B đưa vào chân clock: - Nếu A sớm pha hơn B, thì lúc có clock (tức là B lên 1) logic '1' được đưa vào FF (chiều thuận) - Nếu A chậm pha hơn B, thì lúc có clock (tức là B lên 1) logic '0' được đưa vào FF (chiều nghịch) Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#24 |
Đệ tử 4 túi
Tham gia ngày: Jul 2007
Bài gửi: 66
: |
mình dùng con 18f4331 để đọc encoder,con này có module đọc encoder nhưng trong tập lệnh của CCS ko thấy có lệnh nào sử dụng cho module này cả,có bạn nào làm đọc encoder rồi chỉ mình với,
|
![]() |
![]() |
![]() |
|
|