|
27-04-2009, 04:48 AM | #1 |
Đệ tử 1 túi
Tham gia ngày: Jun 2005
Bài gửi: 13
: |
Chương trình đọc encoder
Các bác cho em hỏi chương trình đọc encoder của em như thế này có ổn không vậy?
Với một vấn đề nữa là em dùng thạch anh 4MHz, nhưng em khai báo #FUSES XT thì nó không chạy được mà phải khai báo là HS, em không hiểu vì sao? Code:
#include "E:\Mo phong\Doc encoder\Doc encoder.h" #include "def_877a.h" #include<lcd_lib_4bit.c> #use delay(clock=4000000) int8 nghin,tram,chuc,donvi; int16 count,so_vong,int_count1,x; void tinhtoan_hienthi(int16 x); #define INTS_PER_SECOND1 4 #int_rtcc // Ngat Timer 0 void Timer0_isr() { count++; } #INT_TIMER1 // Chuong trinh ngat Timer 1 void Timer11_isr() { SET_TIMER1(12140); if(--int_count1==0) { int_count1 = INTS_PER_SECOND1; so_vong = (count*255 + get_timer0())*60/100; count = 0; set_timer0(0); } } void tinhtoan_hienthi(int16 x) // thuc hien tach so va dua ra hien thi luon { nghin = x / 1000 + 0x30; x = x % 1000; tram = x / 100 + 0x30; // tách so hang tram x = x % 100; // chia lay phan du chuc = x / 10 + 0x30; // tach lay phan chuc donvi = x % 10 + 0x30; // phan don vi lcd_putcmd(0xC0); printf(lcd_putchar,"toc do="); lcd_putchar(nghin); lcd_putchar(tram); lcd_putchar(chuc); lcd_putchar(donvi); } void init() { lcd_putcmd(0x80); int_count1 = INTS_PER_SECOND1;//4 lan 1 giay setup_timer_0 (RTCC_DIV_1|RTCC_EXT_H_TO_L); // Timer0 is Counter set_timer0(0); setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // Timer1 is Timer set_timer1(12140); enable_interrupts(INT_RTCC); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); count = 0; lcd_init(); delay_ms(200); printf(lcd_putchar,"toc do dong co"); } void main() { init(); so_vong = 0; // a = 0; TRISA = 0xFF; // trisB = 0xFF; // portb = 0xff; RD2 = 1; trisD = 0; // lcd_init(); // delay_ms(200); // printf(lcd_putchar,"Liencoi"); while(1) // doan chuong trinh hien thi len LCD { tinhtoan_hienthi(so_vong); delay_ms(500); } } |
27-04-2009, 08:22 AM | #2 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
theo mình được biết khai báo XT khi dao động ngoài =< 2 Mhz
|
29-10-2009, 12:21 AM | #3 |
Nhập môn đệ tử
Tham gia ngày: Oct 2009
Bài gửi: 9
: |
các anh ơi! anh nào có thể chỉ em viết chương trình vdk đọc encoder và xuất ra tín hiệu điều khiển 1 động cơ "DC servo" ko? để làm cơ cấu master_slave 1 khớp đó .cảm ơn
thay đổi nội dung bởi: nguyentrivysv, 13-11-2009 lúc 01:01 AM. |
04-11-2009, 08:57 PM | #4 |
Nhập môn đệ tử
Tham gia ngày: Oct 2009
Bài gửi: 2
: |
đây là phần dịch đo tốc độ động cơ dùng encoder = phần mềm keilc mọi người cùng tham khảo nhé: ORG 0000H
LJMP MAIN ORG 000BH LJMP TIMER ORG 0013H LJMP DEM ORG 0030H MAIN: MOV TMOD,#01H MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) MOV IE,#10000111B SETB TR0 SETB IT1 MOV 40H,#0 MOV R3,#20 HERE: SJMP HERE DEM: INC 40H RETI TIMER: CLR TF0 ;xoa co tran TF0 MOV TH0,#HIGH(-50000) ;nap gia tri dem cho timer MOV TL0,#LOW(-50000) ;nap gia tri dem cho timer DJNZ R3,EXIT ;giam R3 roi nhay den nhan ?it neu R=0 MOV R3,#20 ;nap lai gia tri cho R3 CALL HIENTHI ;goi chuong trinh hien thi EXIT: RETI ;quay lai chuong trình chinh khi goi ngat HIENTHI: MOV A,40H ;nap gia tri cua o nho 40h vao thanh ghi a MOV B,#10 ;nap gia tri cho thanh ghi b=10 DIV AB ;chia a cho b MOV DPTR,#MALED ;nap chuong trinh ma led 7 thanh vao thanh ghi dia chi MOVC A,@A+DPTR MOV P2,A ;dua gia tri thanh ghi a ra cong p0 SETB P1.0 ;lap gia tri chan p2.0 CLR P1.0 ;xoa chan p2.0 MOV A,B ;nap gia tri trong thanh ghi b vao thanh ghi b MOVC A,@A+DPTR MOV P2,A SETB P1.1 CLR P1.1 MOV 40H,#0 JMP EXIT MALED : DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END |
|
|