Chào các bác ạ, em đang làm cái bài như sau. Dùng 2 timer. Dùng để sau 1 thời gian t nhất định, thì sẽ gửi 1 ký tự qua RS232 lên vi tính. Nhưng cái khổ là giờ, nếu dùng 2 timer thì cái TMOD lúc đầu sẽ khai báo là ntn ạ? Em chưa hiểu đoạn này, các bác giúp em, em xin cảm ơn các bác.
Thông báo
Collapse
No announcement yet.
Cách khai báo 2 timer cùng 1 lúc
Collapse
X
-
Nguyên văn bởi qwerty68 Xem bài viếtChào các bác ạ, em đang làm cái bài như sau. Dùng 2 timer. Dùng để sau 1 thời gian t nhất định, thì sẽ gửi 1 ký tự qua RS232 lên vi tính. Nhưng cái khổ là giờ, nếu dùng 2 timer thì cái TMOD lúc đầu sẽ khai báo là ntn ạ? Em chưa hiểu đoạn này, các bác giúp em, em xin cảm ơn các bác.
Comment
-
Nguyên văn bởi Ck33spkt Xem bài viếtĐồng chí này không đọc kỹ về ngắt à? 2 timer đó có liên quan gì tới nhau đâu, nên khai báo cả 2 timer luôn chứ sao!
Code:#include <REGX51.H> #include<string.h> void send(unsigned char a); //khai báo nguyên m?u hàm g?i 1 ký t? void sendchuoi(char *a); //khai báo nguyên m?u hàm g?i 1 chu?i void number(unsigned int i); void main(void) //Chuong trình chính { EA=1; ET0=1; TMOD=0x20; //Ch?n Timer1, ch? d? 2 TMOD=0x01; SCON=0x50; TH0=0xf6; TL0=0x36; TH1=0xFD; //Cài d?t t?c d? 9600 baud //0101 0000: Ch?n ch? d? 1, Cho phép nh?n TR1=1; //Kh?i d?ng Timer1 TR0=1; while(1) //Vòng l?p vô h?n { ; } } void send(unsigned char a) //Ð?nh nghia hàm g?i 1 ký t? { SBUF=a; //Ghi 1 byte d? li?u vào thanh ghi SBUF while(TI==0){} //vòng l?p d? d?i c? truy?n TI lên 1 TI=0; //Xóa c? truy?n TI sau khi truy?n xong } void sendchuoi(unsigned char *a) //Ð?nh nghia hàm g?i 1 chu?i ký t? { int i,n; //Khai báo bi?n c?c b? s? nguyên: i,n n=strlen(a); //Tính d? dài c?a chu?i *a, luu vào bi?n n for(i=0;i<n;i++) //Vòng l?p d? g?i l?n lu?t t?ng ký t? lên, { //cho d?n khi h?t chu?i *a (ký t? th? n-1). send(a[i]); //G?i hàm g?i 1 ký t?. } } void number(unsigned int i) { unsigned char a,b,c,d,e; e=i%10; i=i/10; d=i%10; i=i/10; c=i%10; i=i/10; b=i%10; a=i/10; send(a+48); send(b+48); send(c+48); send(d+48); send(e+48); } void timer(void) interrupt 1 { TF0=0; TH0=0xf6; TL0=0x36; j++; //lcdcontrol(0x87); if(j==1000) { number(7); send(10); j=0; //i=0; } }
Comment
-
Nguyên văn bởi qwerty68 Xem bài viếtCode:TMOD=0x20; //Ch?n Timer1, ch? d? 2 TMOD=0x01; }
Comment
-
Nguyên văn bởi hoadang Xem bài viếtlệnh TMOD sau sẽ thay đổi giá trị trước đó của thanh ghi TMOD. đọc lại kỹ thuật AND, OR bit.
Comment
-
hoặc bạn dùng set/clear từng bit. trong header file của chip có định nghĩa các bit cho thanh ghi TMOD rồi.
hoặc như mình nói dùng AND hoặc OR các giá trị với nhau.
hoặc cách nữa là viết giá trị cho từng bit của TMOD trên giấy, rồi ghép lại được giá trị TMOD, sau đó gán giá trị đó co TMOD là được.
Comment
-
Nguyên văn bởi hoadang Xem bài viếthoặc bạn dùng set/clear từng bit. trong header file của chip có định nghĩa các bit cho thanh ghi TMOD rồi.
hoặc như mình nói dùng AND hoặc OR các giá trị với nhau.
hoặc cách nữa là viết giá trị cho từng bit của TMOD trên giấy, rồi ghép lại được giá trị TMOD, sau đó gán giá trị đó co TMOD là được.
Comment
-
Nguyên văn bởi hoadang Xem bài viếtvậy chế độ timer 1 và timer 2, bạn muốn dùng chế độ thứ mấy?
Còn timer1 thì ở chế độ 2 để kết nối nối tiếp với máy tính qua cổng RS232 bạn ạ.
Comment
-
đầu tiên mình xin lỗi vì nói các bit của TMOD được định nghĩa trong header file. Nhớ lộn, TMOD không nằm trong phần bit addressable.
timer 0 dùng ở chế độ 1, timer 1 dùng ở chế độ 2:
- TMOD=0b00100001; (gọn hơn thì viết TMOD=0x21H;
- hoặc: timer 0 mode 1: TMOD=0x01;
timer 1 mode 2: TMOD=0x20;
=> vậy giá trị của TMOD để config cho hai timer với các chế độ như trên sẽ là TMOD=0x01 | 0x20;
- hoặc trong header file có định nghĩa
/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_ 0x01
#define T0_M1_ 0x02
#define T0_CT_ 0x04
#define T0_GATE_ 0x08
#define T1_M0_ 0x10
#define T1_M1_ 0x20
#define T1_CT_ 0x40
#define T1_GATE_ 0x80
#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F
vậy để dùng các timer với các mode như trên thì TMOD=T0_M0 | T1_M1;
Comment
-
Nguyên văn bởi hoadang Xem bài viếtđầu tiên mình xin lỗi vì nói các bit của TMOD được định nghĩa trong header file. Nhớ lộn, TMOD không nằm trong phần bit addressable.
timer 0 dùng ở chế độ 1, timer 1 dùng ở chế độ 2:
- TMOD=0b00100001; (gọn hơn thì viết TMOD=0x21H;
- hoặc: timer 0 mode 1: TMOD=0x01;
timer 1 mode 2: TMOD=0x20;
=> vậy giá trị của TMOD để config cho hai timer với các chế độ như trên sẽ là TMOD=0x01 | 0x20;
- hoặc trong header file có định nghĩa
/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_ 0x01
#define T0_M1_ 0x02
#define T0_CT_ 0x04
#define T0_GATE_ 0x08
#define T1_M0_ 0x10
#define T1_M1_ 0x20
#define T1_CT_ 0x40
#define T1_GATE_ 0x80
#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F
vậy để dùng các timer với các mode như trên thì TMOD=T0_M0 | T1_M1;
Comment
Bài viết mới nhất
Collapse
-
bởi ww88vipWW88, một trong những đơn vị tiên phong trong lĩnh vực cá cược trực tuyến, tự hào mang đến cho người chơi những trải nghiệm giải trí đỉnh cao với hệ sinh thái sản phẩm đa dạng. Từ cá cược thể thao đầy kịch tính đến casino trực...
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 12:46 -
-
bởi tungdqEm cần tìm sơ đồ mạch một số Main máy tính đời cao như Asrock B560M-HDV, các cao nhân chỉ giúp với. Thank!
-
Channel: Các mạch điện ứng dụng
hôm nay, 08:27 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment