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
-
Đồ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!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
-
Khổ nỗi em khai báo cả 2 timer thì nó không chạy ấy ạ. Cắm vào thì PC chả nhận được tín hiệu gì cả. Đây code đây các bác xem thử :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
-
lệnh TMOD sau sẽ thay đổi giá trị trước đó của thanh ghi TMOD. đọc lại kỹ thuật AND, OR bit.Nguyên văn bởi qwerty68 Xem bài viếtCode:TMOD=0x20; //Ch?n Timer1, ch? d? 2 TMOD=0x01; }
Comment
-
Thế thì phải làm thế nào để khai báo được cả 2 cái TMOD cho 2 cái timer cùng 1 lúc ạ?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
-
Bạn có thể làm mẫu cho mình cái này được không hả bạn? Hay bạn gửi cho mình tài liệu cũng được. Chứ thực sự do mình cũng không học điện tử, mà chỉ làm ngành có liên quan mà thôi, nên nhiều cái không biết bạn ạ. Thank bạn nhiều.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
-
Mình dùng timer0 chế độ 1 để sau 1 khoảng thời gian nhất định, thì sẽ gửi biến ra được.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
-
Mình xin chân thành cảm ơn bạn. Mình chỉ thay thế 2 dòng kia thành 1 dòng TMOD=0x01 | 0x20; là nó đã chạy được rồi. Thank bạn rất nhiều.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 theidiotcatViệc lựa chọn một chiếc laptop gaming phù hợp với nhu cầu, ngân sách chưa bao giờ là dễ dàng. Và điều đó càng khó hơn trong năm 2026 khi mà mức giá liên tục tăng.
Nếu bạn chưa biết nên chọn một chiếc laptop gaming như thế nào...-
Channel: Đánh giá sản phẩm DTVN
26-06-2026, 10:29 -
-
bởi theidiotcatVới mức ngân sách 20 - 30 triệu đồng trong năm 2026, các bạn sinh viên và dân văn phòng có thể tìm thấy nhiều lựa chọn cao cấp, mạnh mẽ, pin “trâu”, đặc biệt là các mẫu laptop AI hỗ trợ cho học tập và làm việc.
Trong phân...-
Channel: Đánh giá sản phẩm DTVN
26-06-2026, 10:25 -
-
bởi theidiotcatDưới đây là một số mẫu laptop nổi bật trong phân khúc dưới 20 triệu giúp các bạn văn phòng, sinh viên và đặc biệt là tân sinh viên có thể dễ dàng lựa chọn được mẫu laptop phù hợp với nhu cầu và ngân sách của mình.
Thị...-
Channel: Đánh giá sản phẩm DTVN
26-06-2026, 10:07 -
-
bởi theidiotcatViệc chọn mua một bộ máy tính phục vụ cho các nhu cầu làm việc văn phòng và sử dụng cơ bản hàng ngày đang trở nên dễ dàng và tiết kiệm hơn bao giờ hết. Thay vì phải đau đầu trích ngân sách để mua cả vi xử lý lẫn card đồ họa rời...
-
Channel: Đánh giá sản phẩm DTVN
25-06-2026, 11:23 -
-
bởi theidiotcatViệc nâng cấp từ một dàn máy tính cũ lên cấu hình mới luôn khiến nhiều người đắn đo về mức chi phí bỏ ra. Nếu bạn đang tìm kiếm một sự lột xác hoàn toàn về hiệu năng mà vẫn cân đối được dòng tiền, combo giữa vi xử lý Ryzen...
-
Channel: Đánh giá sản phẩm DTVN
25-06-2026, 11:06 -
-
Trả lời cho Lực dọc trục làm hỏng ổ bi.bởi nguyendinhvanVí dụ một trang như thế này
...-
Channel: Điện tử công suất
24-06-2026, 19:57 -
-
Trả lời cho Lực dọc trục làm hỏng ổ bi.bởi nguyendinhvanỔ bi có loại chịu lực dọc, loại chịu lực ngang.
Bạn kiếm một quyển Data cũng một hãng vòng bi nào đó. Họ sẽ cấp cho bạn đủ thông số kỹ thuật.
Khi lựa chọn được mã sản phẩm, bạn chỉ việc tìm mua mã đó, hoặc đặt hàng....-
Channel: Điện tử công suất
24-06-2026, 19:52 -
-
bởi GargiChào mọi người, tôi đang gặp một vấn đề kỹ thuật và muốn được nghe ý kiến của mọi người.
Tôi đã lắp một đĩa xích vào trục đầu ra của hộp số hành tinh bánh răng xoắn dùng cho truyền động xích. Sau vài tháng hoạt động, ổ bi đầu ra bị hỏng.
Bản thân...-
Channel: Điện tử công suất
24-06-2026, 13:22 -
-
bởi vi van phamSau hàng chục năm, không biết có ai còn nghĩ gì về tôi? Riêng tôi, nhớ nhiều về dientuviet nam. net. Ngày ấy tìm 1 người bạn đam mê về điện từ khó như trúng số độc đăc. Tôi đã trúng số độc đắc khi được mời về dientuvietnam.net...
-
Channel: Tâm tình dân kỹ thuật
23-06-2026, 22:43 -

...
Comment