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 chinhnguyen9Sản phẩm không có thương hiệu rõ ràng gồm 3 kiểu 30A;60A và 100A có vẽ ngoaài khá bắt mắt. Tôi đã tin và mua 1 con 30A
Lắp vào hệ thống thấy dấu hiệu:
Phận hiển thị điện áp pin lưu trữ và dòng sạc ổn
Sau khi lắp pin lưu trữ , khi hở mach điên...-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 03:30 -
-
bởi Abril9Chào mọi người, động cơ bước có hộp số (https://www.oyostepper.es/category-2...eductores.html) trên thiết bị của tôi đã được sử dụng khoảng sáu tháng. Gần đây, tôi nhận thấy dầu rò rỉ từ trục đầu ra. Mỡ bôi trơn đã bị chảy và nhỏ giọt...
-
Channel: Các hệ thống tự động hóa khác
27-03-2026, 13:26 -
-
bởi AbirChào mọi người, gần đây tôi có một ý tưởng mới.
Tôi muốn nâng cấp thiết bị của mình để tăng tốc độ, vì vậy tôi đã thay đổi nguồn cấp cho mạch điều khiển từ 24V lên 48V. Động cơ vẫn giữ nguyên và dòng điện định...-
Channel: Điện tử công nghiệp
27-03-2026, 09:49 -
-
bởi nguyendinhvanCó một chi tiết sai cơ bản trong kỹ thuật điện tử....
-
Channel: Tâm tình dân kỹ thuật
26-03-2026, 19:31 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Bài hát mới, nhạc Phật: Về Giữa Chiêm Bao, sáng tác: Hoàng Đình Thường.
[Verse 1] Nhân gian bao thay đổi
ĐỜI là giấc CHIÊM BAO
Người mê lầm tranh đấu
KHỔ ĐAU mãi LUÂN HỒI.
VÔ THƯỜNG nào ai thấu
THAM vơ...-
Channel: Tâm tình dân kỹ thuật
25-03-2026, 19:01 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi davidcopyBạn muốn hỏi nguyên lý làm việc của mạch nào...
-
Channel: Hỗ trợ học tập
24-03-2026, 22:50 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi N_Tu_Hoc_HoiBạn cần sơ đồ mạch ổn áp bao nhiêu Volt, Nếu giống anh bạn guiwr có khả năng ổn áp dùng iC họ 78XX, 79XX. Những mạch này bạn tim kiếm trên google sẽ thấy!!
-
Channel: Hỗ trợ học tập
23-03-2026, 02:32 -
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:06

Comment