![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 4 túi
Tham gia ngày: Oct 2008
Bài gửi: 71
: |
cho em tham gia với!
Nhân tiện em xin đưa chương trình "đo nhiệt độ "dùng cảm biến nhiệt LM35DZ hiển thị trên 2 led 7 đoạn anode chung ,dùng pic16f877a (phí quá,nhưng chip này do Thầy em cho). cai mach in em vẽ thiếu chân nguồn cho 2 con led7,em nhát quá chạy lun cái jumper trước con trở Reset xuống luôn> // |+++++++++++++++++++++++++++++++++++++++++++++++++ ++| // | CHUONG TRINH HIENTHI NHIET DO TREN 2 LED 7 DOAN | // | BAO CAO THUC TAP MACH SO UNG DUNG | // | NGUYEN TIEN CHUAN-071250520207-07DT2 | // |+++++++++++++++++++++++++++++++++++++++++++++++++ ++| // ||||||||||||---------------------- KET NOI PHAN CUNG --------------------|||||||||||||||| //++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++\ //| RB0->6 KET NOI DEN CAC CHAN A,B,C,D,E,F,G CUA 2 LED 7 DOAN ANODE CHUNG. +\ //| CHAN 8(VCC) CUA 2 LED 7 D0AN DUOC DIEU KHIEN BOI 2 BJT THUAN PNP: A1015 +\ //| CHAN C CUA 2 BJT NOI VOI CHAN VCC CUA 2 LED 7 DOAN DE DIEU KHIEN QUET LED +\ //| CHAN E CUA BJT NOI VOI NGUON +\ //| CHAN B (BAM DIEN TRO 10K )CUA BJT HANG CHUC VA DON VI NOI LAN LUOT VOI CHAN RD1,RD0 +\ //|---------------------------------------------------------------------------------------+\ //| SU DUNG TRINH BIEN DICH PCWH COMPLIER VER:4.018 +\ //| SU DUNG TRINH WINPIC800 DE NAP FILE HEX LEN PIC QUA CHUAN GIAO TIEP ICSP +\ //|+++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++\ #include <16F877A.h> // KHAI BAO SU DUNG PIC 16F877A #include <def_877a.h> // FILE DINH NGHIA CAC THANH GHI VA CAC BIT #device *=16 adc=10 // KHAI BAO SU DUNG CON TRO 16 BIT VA ADC 10 BIT // KHAI BAO CAU HINH CHO PIC 16F877A #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT // KHAI BAO SU DUNG DELAY VOI TAN SO DAO DONG NGOAI #use delay(clock=12000000) int8 high,low; // KHAI BAO CAC BIEN SO NGUYEN 1 BYTE // KHAI BAO BANG MA LED 7 DOAN ANODE CHUNG int8 const a[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; // CHUONG TRINH CON TACH SO HANG CHUC VA HANG DON VI void convert_bcd(int8 x) { low=x%10; // CHU SO HANG DON VI high=x/10; // CHU SO HANG CHUC } // CHUONG TRINH CON HIEN THI RA 2 LED 7 DOAN void display() { PORTB=a[low]; RD0=0; delay_us(500); RD0=1; PORTB=a[high]; RD1=0; delay_us(500); RD1=1; } void main() { float value; int16 i; trisb = 0x00; // THIET LAP CAC CHAN PORTB LA OUTPUT trisd = 0x00; // THIET LAP CAC CHAN PORT D LA OUTPUT trise = 0x00; // THIET LAP CAC CHAN PORT E LA OUTPUT trisa = 0xff; // THIET LAP CAC CHAN PORT A LA INPUT // KHOI TAO ADC setup_adc(ADC_CLOCK_INTERNAL); // THIET LAP THOI GIAN LAY MAU BANG XUNG CLOCK setup_adc_ports(AN0); // THIET LAP CHAN AN0 LA CHAN VAO ADC set_ADC_channel(0) ; delay_us(10); // TRE 10US value=(float)read_adc(); // DOC GIA TRI ADC value = value/2.048; // convert_bcd((int8)value); // GOI CHUONG TRINH CON CONVERT_BCD i=0; while(1) { i++; value =(float) read_adc(); value = value/2.048; if (i==500) { convert_bcd((int8)value); i=0; } display(); } } |
![]() |
![]() |
![]() |
#2 |
Đệ tử 1 túi
Tham gia ngày: Jun 2009
Bài gửi: 20
: |
bác coi giúp e cái !..!
#include <16f877a.h>
#fuses HS,NOWDT #use delay(clock=4000000) #byte trisb=0x86 #byte portb=0x06 #BYTE TRISD=0X88 #BYTE PORTD=0X08 char bang_ma[10]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0}; char n1,n2,n3,n4; char sec,min,h; #int_timer1 void ngat_TMR1() { int time,count; set_timer1(15535); time++; if(time=1);//dc 1/2s //<thuc hien cong viec> { count++; if(count==1) { portb=bang_ma[N1]; OUTPUT_LOW(PIN_A0); DELAY_MS(10); OUTPUT_HIGH(PIN_A0); } if(count==2) { portb=bang_ma[N2]; OUTPUT_LOW(PIN_A1); DELAY_MS(10); } if(count==3) { portD=bang_ma[N3]; OUTPUT_LOW(PIN_A4);DELAY_MS(10); OUTPUT_HIGH(PIN_A4); } if(count==4) { portD=bang_ma[N4]; OUTPUT_LOW(PIN_A5); DELAY_MS(10); } count==0; } time==0; } //SU DUNG HAM NGAT TIMER0 DE HIEN THI #INT_TIMER0 void ngat_timer0() { int dem; set_timer0(15536); //mac dinh gia tri ban dau cho TMR0 dem++; if(dem==20) //20*50000=1s { dem=0; sec++; } if(sec==60) { sec=0; min++; } if(min==60) { min=0; h++; } if(h==24) { h=0; } } VOID main(void) { trisb=0x00; portb=0xff; TRISD=0X00; PORTD=0XFF; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); set_timer0(15536); enable_interrupts(int_timer0); enable_interrupts(global); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); set_timer1(15535); enable_interrupts(int_timer1); enable_interrupts(global); N1=H/10; N2=H%10; N3=SEC/10; N4=SEC%10; while(1) { NGAT_TIMER0(); N1=H/10; N2=H%10; N3=SEC/10; N4=SEC%10; ngat_TMR1(); } } |
![]() |
![]() |
![]() |
#3 | |
Đệ tử 7 túi
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
: |
Trích:
- K ai gọi hàm ngat_timer0() , ngat_timer1() cả ,khi khởi tạo ngắt timer , ta đã đặt thời gian ngắt , cứ khi mô timer tràn thì tạo ngắt , trong ct chính , ta k phảii gọi . Í tui nói ở đây là u xem hàm ngắt timer như 1 hàm con bình thường nên gọi . Hỉu sai chỗ í đó - Đã dùng ngắt timer thì k ai còn gọi thêm delay nữa . Mục đích của ngắt timer là thay thế cho delay - Trong hàm ngắt timer 1 , cuối ct ngắt có count ==0 để trống trơn t k hỉu u chỗ ni mún j , cóa phải u mún xóa biến count ??? Nếu xóa biến count thì ct k thực hiện đc if (count==2) , ==3 ... biết vì sao k ? Thử nhẩm sẽ thấy , vì count k bao h đếm lên đc tới 2 |
|
![]() |
![]() |
![]() |
|
|