chương trình sử dụng timer trong vi điều khiển

14 2.1K 1
chương trình sử dụng timer trong vi điều khiển

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NGÔN NGỮ C TRONG 8951 ( dùng 8951) Đề bài: Viết chương trình điều khiển bóng đèn theo qui luật: 300mS sáng, 300mS tắt (delay sử dụng timer0, mode 16 bit); P1.0 nối bóng đèn Viết chương trình xuất chuỗi xung 500Hz loa (delay sử dụng timer1, mode 2); P2.5 nối loa viết chương trình hiển thị các số tăng dần từ -9, lặp lại vô hạn lần; thời gian delay 471ms dùng timer 1, mode1, thạch anh 12Mhz viết chương trình hiển thị led sáng, dịch dần từ D1 đến D8 Lặp lại vô hạn lần, thời gian delay là 450ms, dùng timer0, mode2 VCT thực hien hiển thị các led sáng dần từ D8 đến D1 Lặp lại vô hạn lần, thời gian delay là 451ms, dùng timer0, mode1 VCT hiển thị led tắt dần từ D1 đến D8, lặp lại quá trình lần Thời gian delay là 1450ms, dùng timer0, mode1 VCT hiển thị l led sáng dịch dần từ D8 đến D1, lặp lại quá trình 276 lần Thời gian delay là 1450ms, dùng timer0, mode1 VCT hiển thị led sáng dần từ ngoài vào (D1,D8; D1,D2,D7,D8; D1,D2,D3,D6,D7,D8; D1-D8) Lặp lại quá trình lần, đồng thời hiển thị số lần led đoạn Thời gian delay là 450ms, dùng timer0, mode1 Viết chương trình truyền byte 41H và 30H từ vi điều khiển sang VĐK 2; ở VĐK2 sẽ nhận byte và lưu vào các biến data1 và data2 (xem có sẵn mạch, XTAL = 11,0592Mhz; tốc độ truyền/ nhận là 2400bps; chế độ truyền bit) 10 Viết chương trình truyền 10 byte dữ liệu bảng data a[10] từ vi điều khiển sang VĐK 2; ở VĐK2 sẽ nhận và kiểm tra lỗi parity, nếu không có lỗi sẽ lưu vào bảng data b[10] ngược lại sẽ tăng số đếm byte lỗi CntErr lên đơn vị (xem có sẵn mạch, XTAL = 11,0592Mhz; tốc độ truyền/ nhận là 9600bps(TH1=-3); chế độ truyền bit; tất cả các byte dữ liệu bảng a[10] 8; while(!TF0);// chờ timer tràn TF0 = 0; } TR0 = 0; // ngắt xung } void main() { unsigned char i,j; TMOD = 0x01;// timer0, mode2 (8bit, autoreload) i=0; j = 0; P3 = 0x20; // mở nguồn led (P3.5 = 1) while(j < 7) { P2 = CODE[j]; P0 = a[i]; Delay(); // delay 450ms i++; if (i == 5) {i = 0; j++;} } P2 = CODE[j]; while(1); } YÊU CẦU: Viết chương trình xuất chuỗi xung 500Hz loa (delay sử dụng timer1, mode 2); P2.5 nối loa #include at 0xa5 sbit loa; // chương trình delay 1ms, timer1, mode2 Void delay1() { Data unsigned char cnt; TH1 = -200; // = 56 TL1 = -200; // 200 xung tràn timer1 TR1 = 1; cấp xung cho bộ đếm cnt = 0; While (cnt < 5) { While(!TF1);// chờ tràn timer TF1 = 0; cnt++; } } void main() { TMOD = 0x20; While(1) { If (!loa) loa = 1; Else loa = 0; Delay1(); // 1ms } } Bài tập: viết chương trình hiển thị các số tăng dần từ -9, lặp lại vô hạn lần; thời gian delay 471ms dùng timer 1, mode1, thạch anh 12Mhz #include data unsigned char CODE[12] = {0xc0,0xf9,0xa4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0Xff,0Xbf}; at 0xb5 sbit Q4;// p3.5 void delay471()// 471000 xung { Data unsigned char i; TR1 = 1; // cấp xung cho bộ đếm for (i = 0; i < 10; i++) { TL1 = -47100;// byte thấp TH1 = -47100>> 8; //byte cao While(!TF1);// chờ timer tràn TF1 = 0; } TR1 = 0; // ngắt xung } Void main() { Data unsigned char cnt; Cnt = 0; P3 = 0; TMOD = 0x01;//timer0 mode1 For ( ; ; ) { P2 = CODE[cnt]; Q4 = 1;// mạch test Q4 = Cnt = cnt + 1; Cnt = cnt % 10;// % chia lấy phần dư Delay471(); } } BT2: viết chương trình hiển thị led sáng, dịch dần từ D1 đến D8 Lặp lại vô hạn lần, thời gian delay là 450ms, dùng timer0, mode2 #include data unsigned char CODE[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delay450() {TR0=1;//cap xung cho bo dem Data unsigned char k; For(k=0;k8; while (!TF0);//cho timer tran TF0=0;} TR0=0;//ngat xung } void main() { BT1: VCT thực hien hiển thị các led sáng dần từ D8 đến D1 Lặp lại vô hạn lần, thời gian delay là 451ms, dùng timer0, mode1 #include Data unsigned char CODE[9]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; Void delay450() { Data unsigned char k; TR0=1;//cap xung cho bo dem for (k=0;k>8; While(!TF0);//cho tran timer0 TF0=0; } TR0=0;//ngat xung } Void main() {data unsigned char i; P0=0; i=0; TMOD=0x01;//timer0 mode1 For(;;) {P0=CODE[i]; i++; i=i%9; delay451();} } BT3: VCT hiển thị led tắt dần từ D1 đến D8, lặp lại quá trình lần Thời gian delay là 1450ms, dùng timer0, mode1 BT4: VCT hiển thị l led sáng dịch dần từ D8 đến D1, lặp lại quá trình 276 lần Thời gian delay là 1450ms, dùng timer0, mode1 BT5: VCT hiển thị led sáng dần từ ngoài vào (D1,D8; D1,D2,D7,D8; D1,D2,D3,D6,D7,D8; D1-D8) Lặp lại quá trình lần, đồng thời hiển thị số lần led đoạn Thời gian delay là 450ms, dùng timer0, mode1 Ngày ¼ Ví dụ 01: Viết chương trình truyền byte 41H và 30H từ vi điều khiển sang VĐK 2; ở VĐK2 sẽ nhận byte và lưu vào các biến data1 và data2 (xem có sẵn mạch, XTAL = 11,0592Mhz; tốc độ truyền/ nhận là 2400bps; chế độ truyền bit) - VĐK 01: #include void main() { SCON = 0x50;// chế độ bit TMOD = 0x20;//timer mode TH1 = -12;//xem kĩ slide TR1 = 1; // mở timer1 để phát tốc độ SBUF= 0x41;// truyền byte 41H,ghi vao ghi đệm SBUF while(!TI); // chờ truyền xong, bit truyền TI TI = 0;//truyền xong gán lại TI=0 SBUF = 0x30;// truyền byte 30H while(!TI); // chờ truyền xong TI = 0; while(1);// kết thúc (dừng) } VĐK 02: #include data unsigned char data1, data2; void main() { SCON =0x50; TMOD = 0x20;//timer mode TH1 = -12; TR1 = 1; // mở timer1 để phát tốc độ while(!RI);// chờ nhận xong byte data1 = SBUF;//dat vao data1 byte vua nhận RI = 0;//gán lại sau nhận while(!RI);// chờ nhận xong byte data2 = SBUF; RI = 0; while(1);// kết thúc (dừng) } - Ví dụ 02: Viết chương trình truyền 10 byte dữ liệu bảng data a[10] từ vi điều khiển sang VĐK 2; ở VĐK2 sẽ nhận và kiểm tra lỗi parity, nếu không có lỗi sẽ lưu vào bảng data b[10] ngược lại sẽ tăng số đếm byte lỗi CntErr lên đơn vị (xem có sẵn mạch, XTAL = 11,0592Mhz; tốc độ truyền/ nhận là 9600bps(TH1=-3); chế độ truyền bit; tất cả các byte dữ liệu bảng a[10] 8; TL0=-1000;//1ms thì tràn P2=CODE[LED1]; Q1=1; dl(); Q1=0; P2=CODE[LED2]; Q2=1; dl(); Q2=0; P2=CODE[LED3]; Q3=1; dl(); Q3=0; P2=CODE[LED4]; Q4=1; dl(); Q4=0; }//chương trình ngắt timer0, sau mỗi lần ngắt thì TF0 được đưa về Void main() {TMOD=0X11;//sử dụng timer1, mode1; timer0 mode1 TH0=-1000>>8; TL0=-1000; EA=1;//Có sử dụng ngắt ET0=1;//sử dụng ngắt timer0 TR0=1;//bắt đầu đưa xung vào bộ đếm Cnt=0; LED1=10; LED2=10; … BT: viết chương trình htực hiện Nhấn SW1: tăng số hiển thị led 3,4 một đv (00 - 99); led 1,2 hiển thị “In” Nhấn SW2 giảm hiển thị led 3,4 một đv (99 - 00); led 1,2 hiển thị “dE” Nhấn SW3: hiển thị chữ “STOP” (dùng ngắt timer1 để quét led; chu kì quét là 1.2ms) #include Data unsigned char CODE[16]={0x…} Data unsigned char LED1,LED2,LED3,LED4; Data unsigned char cnt; at 0x90 sbit SW1; at 0x91 sbit SW2; at 0x92 sbit SW3; At 0xb2 sbit Q1; At 0xb3 sbit Q2; At 0xb4 sbit Q3; At 0xb5 sbit Q4; void dl() {data unsigned char i; For(i=0;i>8; TL0=-1200;//1ms thì tràn P2=CODE[LED1]; Q1=1; dl(); Q1=0; P2=CODE[LED2]; Q2=1; dl(); Q2=0; P2=CODE[LED3]; Q3=1; dl(); Q3=0; P2=CODE[LED4]; Q4=1; dl(); Q4=0; }//chương trình ngắt timer0, sau mỗi lần ngắt thì TF0 được đưa về Void main() {TMOD=0X11;//sử dụng timer1, mode1; timer0 mode1 TH0=-1200>>8; TL0=-1200; EA=1;//Có sử dụng ngắt ET0=1;//sử dụng ngắt timer0 TR0=1;//bắt đầu đưa xung vào bộ đếm Cnt=0; LED1=10; LED2=10; LED3=10; LED4=10; While(1) { if(!SW1) {LED1=1;//chữ I LED2=11;//chữ n cnt++;cnt=cnt%100; LED3=cnt/10;//khai báo là nguyên nên là chia lấy nguyên LED4=cnt%10; } if(!SW2) {LED1=12;//chữ d LED2=13;//chữ E cnt ; if(cnt==255) cnt=99; LED3=cnt/10; LED4=cnt%10; Delay();} if(!SW3) {LED1=…} [...].../ /chương trình ngắt timer 0 Void (biến nếu có) interrupt 1 using 0/1 / /chương trình ngắt ngoài 1 Void (biến nếu có) interrupt 2 using 0/1 / /chương trình ngắt timer 1 Void (biến nếu có) interrupt 3 using 0/1 / /chương trình ngắt truyền thông Void (biến nếu có) interrupt 4 using 0/1 Void main(){} BT :Vi ́t... main(){} BT :Vi ́t chương trình hiển thị các số tăng dần từ 0 đến 25 trên 2 led 3,4(thời gian tăng 1 đơn vi là 400ms) HD:dùng ngắt timer0 để quét led; sử dụng timer1 để vi ́t chương trình delay #include Data unsigned char CODE[10]={0x…} Data unsigned char LED1,LED2,LED3,LED4; Data unsigned char cnt; At 0xb2 sbit Q1; At 0xb3 sbit Q2; At 0xb4 sbit Q3; At 0xb5 sbit Q4; / /chương trình... }/ /chương trình ngắt timer0 , sau mỗi lần ngắt thì TF0 được đưa về 0 Void main() {TMOD=0X11;//sử dụng timer1 , mode1; timer0 mode1 TH0=-1000>>8; TL0=-1000; EA=1;//Có sử dụng ngắt ET0=1;//sử dụng ngắt timer0 TR0=1;//bắt đầu đưa xung vào bộ đếm Cnt=0; LED1=10; LED2=10; … BT: vi ́t chương trình htực hiện Nhấn SW1: tăng số hiển thị trên led 3,4 một đv (00 - 99); led 1,2 hiển thị... P2=CODE[LED2]; Q2=1; dl(); Q2=0; P2=CODE[LED3]; Q3=1; dl(); Q3=0; P2=CODE[LED4]; Q4=1; dl(); Q4=0; }/ /chương trình ngắt timer0 , sau mỗi lần ngắt thì TF0 được đưa về 0 Void main() {TMOD=0X11;//sử dụng timer1 , mode1; timer0 mode1 TH0=-1200>>8; TL0=-1200; EA=1;//Có sử dụng ngắt ET0=1;//sử dụng ngắt timer0 TR0=1;//bắt đầu đưa xung vào bộ đếm Cnt=0; LED1=10; LED2=10; LED3=10; LED4=10; While(1)... TL1=-40000; TR1=1;//mở xung clock timer1 While(!TF1); TF1=0; } } void dl() {data unsigned char i; For(i=0;i>8; TL0=-1000;//1ms thì tràn P2=CODE[LED1]; Q1=1; dl(); Q1=0; P2=CODE[LED2]; Q2=1; dl(); Q2=0; P2=CODE[LED3]; Q3=1; dl(); Q3=0; P2=CODE[LED4]; Q4=1; dl(); Q4=0; }/ /chương trình ngắt timer0 , sau mỗi lần ngắt thì TF0... số hiển thị trên led 3,4 một đv (00 - 99); led 1,2 hiển thị “In” Nhấn SW2 giảm hiển thị trên led 3,4 một đv (99 - 00); led 1,2 hiển thị “dE” Nhấn SW3: hiển thị chữ “STOP” (dùng ngắt timer1 để quét led; chu kì quét là 1.2ms) #include Data unsigned char CODE[16]={0x…} Data unsigned char LED1,LED2,LED3,LED4; Data unsigned char cnt; at 0x90 sbit SW1; at 0x91 sbit SW2; at ... 0/1 / /chương trình ngắt timer Void (biến nếu có) interrupt using 0/1 / /chương trình ngắt ngoài Void (biến nếu có) interrupt using 0/1 / /chương. .. ngắt timer Void (biến nếu có) interrupt using 0/1 / /chương trình ngắt truyền thông Void (biến nếu có) interrupt using 0/1 Void main(){} BT :Vi ́t chương. .. while(1); } YÊU CẦU: Vi ́t chương trình xuất chuỗi xung 500Hz loa (delay sử dụng timer1 , mode 2); P2.5 nối loa #include at 0xa5 sbit loa; // chương trình delay 1ms, timer1 , mode2 Void

Ngày đăng: 16/12/2015, 09:54

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan