Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
1,54 MB
Nội dung
Trường đại học bách khoa Hà Nội Viện công nghệ thông tin truyền thông ***************************** Báo cáo môn học Kỹ thuật vi xử lý ghép nối máy tính Thiếtkếđiềukhiểnmáysấynôngsản Sinh viên thực hiện: Phạm Quốc Tuấn SHSV: 2009 3024 Nguyễn Anh Tú SHSV: 2009 3189 Nguyễn Xuân Vinh SHSV: Hướng dẫn : Thầy Bùi Quốc Anh Mục lục trang Giới thiệu đề tài 1.1 Nhu cầu thực tế đề tài 1.2 Tình hình phát triển giới 1.3 Tình hình phát triển Việt Nam 2 Mục tiêu, nội dung phương án thực đề tài 2.1 Mục tiêu đề tài 2.2 Nội dung đề tài 2.2.1 Cơ sở lý thuyết sấynôngsản 2.2.2 Mô hình điềukhiển 2.3 Phương án thực 2.3.1 Sơ lược mạch nguyên lý 2.3.1.1 Khối xử lý trung tâm - vi điềukhiển 16F877A 2.3.1.2 Khối phản hồi nhiệt độ - IC LM35 2.3.1.3 Khối phản hồi thời gian - IC DS1307 2.3.1.4 Khối điềukhiển tốc độ động 2.3.1.5 Khối truyền liệu lên máy tính - IC max232 2.3.1.6 Khối hiển thị kết - IC 74HC595 Led đoạn 2.3.2 Thực mạch 10 2.3.3 Lập trình cho vi điềukhiển 11 Sản phẩm đề tài 3.1 Sản phẩm thực tế đề tài 3.2 Hướng phát triển đề tài Kết luận Tài liệu tham khảo Phụ lục 12 12 14 15 15 16 Giới thiệu đề tài Sản phẩm nôngsản sau thu hoạch cần làm khô để bảo quản Người nông dân chủ yếu sử dụng phương pháp làm kho tự nhiên, nghĩa sử dụng ánh sáng mặt trời để phơi khô nôngsản Phương pháp làm kho tự nhiên có ưu điểm đơn giản, không tốn chi phí bảo quản, độ an toàn thực phẩm nôngsản cao Tuy nhiên, phương pháp có nhược điểm tốn diện tích phơi, suất thấp phụ thuộc nhiều vào thời tiết Việt Nam nước nhiệt đới gió mùa, tình hình thời tiết biến động thất thường Vì nhóm chúng em thực đề tài: “ thiếtkếđiềukhiển cho máysấynông sản” Nhóm em xin chân thành cảm ơn thầy Bùi Quốc Anh giúp đỡ bảo tận tình suốt trình nghiên cứu lí thuyết hoàn thành mô hình vật lí mạch vi điềukhiển Bên cạnh Thầy nhiệt tình giúp đỡ chúng em tiếp cận với sở sản xuất mạch thực tế 1.1 Nhu cầu thực tế đề tài Việt Nam nước nông nghiệp, với nhiều sản phẩm nôngsản xuất gạo, cà phê, hồ tiêu, hạt điều Tuy nhiên, nước nằm khu vực nhiệt đới gió mùa, mưa nắng thất thường Vì việc làm khô bảo quản sản phẩm nôngsản sau thu hoạch người nông dân phụ thuộc nhiều vào thời tiết, điều gặp nhiều rủi ro Vì lẽ nhóm chúng em muốn nghiên cứu, tìm hiểu để chế tạo máysấynôngsản Trong giai đoạn đầu , đề tài này, chúng em thực thiếtkếđiềukhiển cho máysấynôngsản 1.2 Tình hình phát triển giới Trên giới, máy móc phục vụ hoạt động sản xuất nông nghiệp phát triển từ lâu Việc sản xuất nông nghiệp thực theo dây chuyền, với giúp đỡ máy móc từ khâu gieo hạt, chăm sóc , thu hoạch, bảo quản Vì việc sử dụng máysấynôngsản phổ biến.Quy mô “máy” sấy lớn, chúng làm việc với xuất vài nôngsản lần sấy Có nhiều loại máysấy sử dụng Tùy theo nguồn nhiên liệu sử dụng để sấy, người ta chia làm loại máy sấy: máysấy sử dụng than đá, máysấy sử dụng khí đốt, máysấy sử dụng điện, máysấy sử dụng lượng lượng mặt trời, lượng gió 1.3 Tình hình phát triển Việt Nam Ở Việt Nam, việc sử dụng máysấynôngsản chưa phổ biến quy mô sản xuất nhỏ lẻ, hộ gia đình Ở khu vực đồng Bắc bộ, việc sử dụng máysấy gần diện tích sản xuất sản lượng nôngsản hộ nhỏ so với vốn đầu tư máysấynôngsản thị trường Ở vùng đồng Nam tình hình sử dụng máysấy có khả quan Do diện dích sản xuất sản lượng hộ tương đối lớn Đồng thời có nhiều doanh nghiệp, công ty thực thu mua nôngsản xuất nên họ sử dụng máysấynôngsản để đảm bảo chất lượng nôngsản bảo quản Tuy nhiên, máysấynôngsản nước chủ yếu loại máysấy sử dụng than đá Hiệu suất sử dụng máy không cao, xuất sấy không lớn lại dễ gây ô nhiễm môi trường Việc sử dụng loại nhiện liệu cho máysấy bước đầu quan tâm Mục tiêu, nội dung phương án thực đề tài 2.1 Mục tiêu đề tài Thiếtkếđiềukhiển cho máysấynông sản, sử dụng phương pháp sấy tầng sôi, bao gồm phần sau: phản hồi nhiệt độ buồng sấy, đồng hồ theo dõi thời gian sấy, điềukhiển nhiệt độ buồng sấy thông qua điềukhiển tốc độ luồng khí nóng vào buồng sấy cho đảm bảo yêu cầu kỹ thuật việc sấynôngsản Tất thông số phản hồi máy tính trung tâm Ta điềukhiểnmáysấy trực tiếp từ bảng điềukhiểnđiềukhiển qua máy tính Sơ đồ điều khiển: 2.2 Nội dung đề tài 2.2.1 Cơ sở lý thuyết sấynôngsản Mỗi loại nôngsản cần có quy trình sấy riêng biệt để đảm bảo chất lượng sản phẩm Trong báo cáo này, chúng em sử dụng thông số sấy lúa, lấy từ báo cáo chương trình CARD 026/VIE05 “ điều tra kiểm soát nứt hạt lúa đồng ruộng sau thu hoạch đồng sông Mekong Việt Nam” Chương trình trường đại học nông lâm Tp.HCM kết hợp với trường đại học Queensland, Australia thực Dưới thông số trình sấy lúa: Sấy giai đoạn: • Giai đoạn 1: sấy 83oC-87oC 2.5 phút, ủ 73oC 40 phút • Giai đoạn 2: sấy tầng sôi 57 oC 4.9 phút • Giai đoạn 3: thông gió 35 oC 3-4.4 Sấy giai đoạn: • Giai đoạn 1: sấy 80 oC 2.5 phút, ủ 73 oC 40 phút • Giai đoạn 2: sấy tĩnh 35 oC 7-9h 40 oC 5.5 2.2.2 Mô hình điềukhiển Do điều kiện tìm hiểu khả chúng em có hạn nên đề tài này, chúng em sử dụng mô hình mạch điềukhiển gồm: Khối xử lý trung tâm vi điềukhiển 16F877A Khối phản hồi nhiệt độ sấy IC LM35 Khối phản hồi thời gian sấy IC DS1307 Khối điềukhiển tốc độ luồng khí nóng, mô hình điềukhiển tốc độ động sử dụng phương pháp PWM, dùng IC IRF540N để đóng mở động Khối truyền liệu lên máy tính, sử dụng chuẩn RS232 tuyền liệu qua cổng Comm, dùng IC Max232 Khối hiển thị thông số dùng Led đoạn IC dịch 74HC595 Dưới sơ đồ toàn mạch nguyên lý đề tài 2.3 Phương án thực 2.3.1 Sơ lược mạch nguyên lý Mạch nguyên lý gồm khối nêu Sau đây, chúng em xin vào chi tiết khối cụ thể 2.3.1.1 Khối xử lý trung tâm - vi điềukhiển PIC 16F877A Khối xử lý trung tâm nhóm em sử dụng vi điềukhiển Pic 16F877A Dưới sơ đồ chân vi điều khiển: Đây dòng vi điềukhiển bit hãng microchip có 35 lệnh Asembly, độ dài lệnh 14 bit Mỗi lệnh thực chu kỳ máy Tốc độ hoạt động tối đa 20 MHz ( tương ứng chu kỳ lệnh 4*50ns = 200ns) Bộ nhớ chương trình 8K*14 bit, nhớ liệu 368 byte RAM 256 byte EEPROM Bộ nhớ STACK có level Có PORT I/O với 33 chân I/O Ngoài ra, vi điềukhiển có số đặc tính ngoại vi quan trọng sau: - timer gồm timer bit timer 16 bit capture/ compare/PWM (CCP) kênh chuyển đổi ADC 10 bit so sánh điện áp chuẩn Hỗ trợ phần cứng với chuẩn giao tiếp nối tiếp SPI, I2C, USART chuẩn giao tiếp song song PSP Với đặc điểm kỹ thuật trên, vi điềukhiển PIC 16F877A hoàn toàn đáp ứng yêu cầu đề tài Dưới hình ảnh mạch thiếtkế khối xử lý trung tâm 2.3.1.2 Khối phản hồi nhiệt độ - IC LM35 IC LM35 IC chuyên dùng đo nhiệt độ hãng National, xác định nhiệt độ theo thang độ oC khoảng -55 oC đến 150 oC với sai số 0,5 oC nhiệt độ 25 oC LM35 hoạt động theo nguyên tắc biến thiên điện trở theo nhiệt độ Ta cần đặt điện áp chuẩn Vs (trong đề tài chúng em chọn Vs=5V), mức điện áp OUPUT phản ánh nhiệt độ mà đo Khi OUPUT=0 nghĩa nhiệt độ 0oC, điện áp OUTPUT thay đổi lượng 10mV nhiệt độ thay đổi tương ứng oC Do điều kiện yêu cầu đề tài, chúng em chọn điện áp chuẩn IC LM35 lấy từ điện áp nguồn cho vi điềukhiển 2.3.1.3 Khối phản hồi thời gian - IC DS1307 IC DS1307 IC chuyên dùng xác định thời gian thực hãng Dallas IC DS1307 có 64 ghi, ghi xác định thông tin thời gian gồm: giây, phút, giờ, thứ tuần, ngày, tháng, năm; ghi điềukhiển có tác dụng điềukhiển xung clock chân SQW/OUT 56 byte RAM nhớ IC DS1307 hỗ trợ giao tiếp với vi điềukhiển qua chuẩn giao tiếp I2C tiện sử dụng Dưới mạch thiếtkế khối phản hồi thời gian 2.3.1.4 Khối điềukhiển tốc độ động Khối điềukhiển tốc độ động dùng phương pháp PWM để thay đổi điện áp trung bình đặt hai cực động cơ, từ thay đổi vận tốc động Để đóng/mở động dùng FET IRF540N với cặp tranzitor lắp theo kiểu push-pull để kích FET Do động có công suất lớn nên cần cách li với vi điềukhiển qua opto PC817 Ngoài ra, khối điềukhiển động có đường phản hổi tín hiệu từ encoder động vi điềukhiển để giúp ta tính toàn vận tốc thực động Dưới hình ảnh khối điềukhiển tốc độ động 2.3.1.5 Khối truyền liệu lên máy tính - IC max232 RS232 chuẩn giao tiếp nối tiếp dùng định dạng không đồng bộ, kết nối nhiều với thiết bị, chiều dài kết nối lớn cho phép để đảm bảo liệu 50 – 100 feet ( 12.7 đến 25.4 m), tốc độ 20kBít/s tốc độ 115 k Bít/s với số thiết bị đặc biệt Điện áp công Comm +12V, -12V không tương thích với mức điện áp - 5V vi điềukhiển Vì ta cần chuyển mức tín hiệu vi điềukhiểnmáy tính, sử dụng IC Max232 hãng Texas Instruments 3.2 Hướng phát triển đề tài Để phát triển đề tài, trước hết chúng em sử dụng phương pháp điềukhiển PID để điềukhiển xác tốc độ động Ngoài ra, nhóm chúng em dự định tìm hiểu thêm phương pháp sấy tầng sôi để tìm mối liên hệ tốc độ dòng khí nhiệt độ buồng sấy Từ tìm phương án điềukhiển nhiệt độ buồng sấy tối ưu Xa nữa, chúng em tìm hiểu để thiếtkếmáy phần khí cho máysấy nhằm đưa máysấynôngsản vào sản xuất Kết luận Đề tài có tính thực tiễn cao, dễ thực nên có khả áp dụng thực tế Bằng cố gắng, giúp đỡ thầy hướng dẫn anh chị khóa trên, chúng em hoàn thành đề tài đạt số kết định Tuy nhiên, đề tài số thiết sót cần phải hoàn thiện Trong trình làm đề tài, nhóm chúng em nhận giúp đỡ tận tình thầy Bùi Quốc Anh Qua chúng em xin chân thành cảm ơn thầy Bùi Quốc Anh bảo, hướng dẫn chúng em hoàn thành đề tài Tài liệu tham khảo [1] Giáo trình kỹ thuật vi xử lý – Văn Thế Minh, NXB Giáo dục [2] PIC 16F87XA DATA SHEET – Microchip [3] LM35 Precision Centigrade Temperature Sensors – National Semiconductor [4] DS1307/DS1308 64 X Serial Real Time Clock – Dallas Semiconductor [5] MAX232, MAX232I DUAL EIA-232 RIVERS/RECEIVERS – Texas Instruments Phụ lục Phụ lục số Layout mạch in: - Layout LEDs-7SEG: - Layout khối IC 74HC595 : - Layout main board: Phụ lục số Code cho vi điềukhiển Code viết trình biên dịch HT-PIC microchip * File: USART.h #ifndef USART_H #define USART_H //TODO: USER CODE void putch(unsigned char); unsigned char get_data(); #endif ///////////////////////////////////////////////////////////////////////// * File: i2c.h #ifndef i2c_H #define i2c_H //TODO: USER CODE void wait_idle(); void i2c_master(); void i2c_start(); void i2c_restart(); void i2c_stop(); void i2c_ack(); void i2c_nack(); unsigned char i2c_read(unsigned char); unsigned char i2c_write(unsigned char); #endif ///////////////////////////////////////////////////////////////////////// * File: init_func.h #ifndef init_func_H #define init_func_H //TODO: USER CODE void init(); void init_timer0(); void init_timer1(); void init_timer2(); void init_pwm(); // dung ccp1 cho pwm void init_ccp2(); void init_usart(); void init_adc(); void send_to_led(unsigned char); void init_interrupt(); #endif ///////////////////////////////////////////////////////////////////////// * File: motor.h #ifndef motor_H #define motor_H //TODO: USER CODE void set_pwm(unsigned char); unsigned short long get_speed(unsigned short long); #endif ///////////////////////////////////////////////////////////////////////// *FILE maincode.C #include #include #include #include #include #include #include #include CONFIG( CP_OFF & PWRTE_ON & WDTE_OFF & FOSC_HS & WRT_OFF & BOREN_OFF & CPD_OFF & LVP_OFF); #define _XTAL_FREQ 4000000 #define add_write 0b11010000 #define add_read 0b11010001 #define control_reg 0b00010000 //==>> define pinouts #define #define #define #define DS STCK SHCK CLR RB1 RB2 RB3 RB4 //==>> define global variables unsigned char dv,ch,tr,ngh; unsigned char mode=0; unsigned short long n=0, t=0; unsigned short long count[10]={0,0,0,0,0,0,0,0,0,0}; unsigned char num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char convert(unsigned char); //==>> interrupt void interrupt isr() { if (RCIF==1) { RCIF==0; mode=RCREG; switch(mode) { case '1': { printf("\n Che 1: Toc theo nhiet do!"); TRISB0=0; ADON=1; ADIE=1; TMR0IE=0; T0CS=1; CCP2IE=0; INTE=0; GO_DONE=1; count[3]=0; break; } case '2': { } set_pwm(0); TRISB0=1; ADIE=0; ADON=0; CCP2IE=0; TMR0IE=0; T0CS=1; INTE=1; printf("\n Che 2: Hien thi thoi gian :\n"); count[3]=0; break; } case '3': { TRISB0=0; set_pwm(0); ADIE=1; ADON=1; CCP2IE=0; TMR0IE=0; T0CS=1; count[3]=1; GO_DONE=1; printf("\n Che 3: Do nhiet phong!"); break; } default : { TRISB0=0; set_pwm(0); ADIE=0; ADON=0; CCP2IE=0; TMR0IE=0; T0CS=1; count[3]=0; break; } } if(TMR0IF==1) { TMR0IF=0; CCP2IE=0; TMR0IE=0; T0CS=1; if(t/2100) { printf("\n Dangerous!"); set_pwm(99); } else set_pwm(t/2-40); n=get_speed(16*count[1]); CLR=0; CLR=1; t=t/2; dv=t%10; ch=((t-dv)/10)%10; tr=((t-ch*10-dv)/100)%10; send_to_led(0x9c); send_to_led(num[dv]); send_to_led(num[ch]); send_to_led(num[tr]); dv=n%10; ch=((n-dv)/10)%10; tr=((n-ch*10-dv)/100)%10; ngh=((n-tr*100-ch*10-dv)/1000)%10; send_to_led(0x9c); send_to_led(num[dv]); send_to_led(num[ch]); send_to_led(num[tr]); send_to_led(num[ngh]); STCK=1; STCK=0; delay_ms(100); count[1]=0; GO_DONE=1; } if(CCP2IF==1) { CCP2IF=0; count[1]++; } if(ADIF==1) { RD0=0; ADIF=0; t=ADRESH; t=6; if(count[3]==0) { TMR0=0x00; // khoi tao timer0 PS2=1; // chia tan 1:256 PS1=1; // cu 65.536ms thi tran timer0 lan PS0=1; TMR0IE=1; // bat timer0, T0CS=0; // che timer CCP2IE=1; } else { CLR=0; CLR=1; t=t/2; dv=t%10; ch=((t-dv)/10)%10; tr=((t-ch*10-dv)/100)%10; send_to_led(0x9c); send_to_led(num[dv]); send_to_led(num[ch]); send_to_led(num[tr]); STCK=1; STCK=0; delay_ms(300); GO_DONE=1; } } if(INTF==1) { unsigned char sec=0,min=0, hour=0, day=0, date=0, month=0, year=0; INTF=0; i2c_start(); i2c_write(add_write); i2c_write(0x00); i2c_restart(); i2c_write(add_read); sec=i2c_read(1); min=i2c_read(1); hour=i2c_read(1); day=i2c_read(1); date=i2c_read(1); month=i2c_read(1); year=i2c_read(0); i2c_stop(); sec=convert(sec); min=convert(min); hour=convert(hour); day=convert(day); date=convert(date); month=convert(month); year=convert(year); printf("\n %d gio : %d phut : %d giay", hour, min, sec); printf("\n Ngay : %d - %d - 20%d", date, month, year); printf("\n \n"); } } void main() { init(); i2c_master(); i2c_start(); i2c_write(add_write); i2c_write(0x00); // pointer i2c_write(0x00); // sec i2c_write(0x10); // i2c_write(0x03); // hour i2c_write(0x02); // day i2c_write(0x01); // date i2c_write(0x02); // month i2c_write(0x12); // year i2c_write(control_reg); i2c_stop(); init_timer0(); init_adc(); init_ccp2(); init_pwm(); init_timer1(); init_usart(); init_interrupt(); PEIE=1; GIE=1; while(1); } unsigned char convert(unsigned char data) { unsigned char ch=0, dv=0; dv=data%16; ch=data/16; return (ch*10+dv); } //==>=1); temp2=temp1; if((temp2 & 0x0001) == 0x0001) CCP1Y=1; else CCP1Y=0; temp1>>=1; CCPR1L=0xff; CCPR1L=(CCPR1L & temp1); TMR2ON=1; } unsigned short long get_speed(unsigned short long c_pulse) { unsigned short long omega; omega=9*c_pulse/5; return omega; } ///////////////////////////////////////////////////////////////////////// *FILE i2ccode.C #include #include #include void wait_idle() { while((SSPCON2 & 0b00011111)| R_nW){} } void i2c_master() { // khoi tao toan bo cac ghi bang //SSPBUF=0x00; SSPSTAT=0x00; SSPCON=0x00; SSPCON2=0x00; SSPADD=0x00; // thiet lap cac thong so cho I2C TRISC3=1; //tao chan SCL TRISC4=1; //tao chan SDA SMP=1; SSPM3=1; SSPM2=0; SSPM1=0; SSPM0=0; SSPADD=9; // // // // dung toc chuan chon che I2C master f=fosc/(4*(SSPADD)) // f=100kHz SSPEN=1; // khoi dong I2C } void i2c_start() { SEN=1; while(SEN==1); } void i2c_restart() { RSEN=1; while(RSEN==1); } void i2c_stop() { PEN=1; while(PEN==1); } void i2c_ack() { ACKDT=0; ACKEN=1; while(ACKEN==1); } void i2c_nack() { ACKDT=1; ACKEN=1; while(ACKEN==1); } unsigned char i2c_write(unsigned char data) { SSPBUF=data; wait_idle(); return 0; } unsigned char i2c_read (unsigned char mode) { unsigned char data; RCEN=1; // cho phep nhan du lieu tu DS1307 while(RCEN==1); data=SSPBUF; if(mode==1) i2c_ack(); else i2c_nack(); return data; } ///////////////////////////////////////////////////////////////////////// *FILE ds1307code.C #include #include #include #include #define add_write 0b11010000 #define add_read 0b11010001 #define control_reg 0b00010000 void set_ds1307_1(unsigned char sec, unsigned char min, unsigned char hour) // set sec, min, hour { i2c_start(); i2c_write(add_write); i2c_write(0x00); // writing pointer i2c_write(sec); i2c_write(min); i2c_write(hour); i2c_stop(); } void set_ds1307_2(unsigned char day, unsigned char date, unsigned char month, unsigned char year) // set day, date, month, year { i2c_start(); i2c_write(add_write); i2c_write(0x03); i2c_write(day); i2c_write(date); i2c_write(month); i2c_write(year); i2c_stop(); } void set_ds1307_3(unsigned char data_setup) // set up control byte { i2c_start(); i2c_write(add_write); i2c_write(0x07); i2c_write(control_reg); i2c_stop(); } ///////////////////////////////////////////////////////////////////////// *FILE initcode.C #include #include #define DS RB1 #define STCK RB2 #define SHCK RB3 #define CLR RB4 void init() { TRISA=0x00; TRISB=0x00; TRISC=0x00; TRISD=0x00; TRISE=0x00; PORTA=0x00; PORTB=0x00; PORTC=0x00; PORTD=0x00; PORTE=0x00; CLR=1; SHCK=0; STCK=0; DS=0; } void init_timer0() { TMR0IF=0; T0CS=1; // tam dung che timer T0SE=0; PSA=0; TMR0=0x00; PS2=1; PS1=1; PS0=1; TMR0IE=0; // // // // // } void init_timer1() { TMR1L=0x00; TMR1H=0x00; T1CON=0x00; T1CKPS0=1; T1CKPS1=1; TMR1ON=1; canh len tac dong dung chia tan cho timer0 khoi tao timer0 chia tan 1:256 cu 65.536ms thi tran timer0 lan // khoi tao ghi timer1 // khoi tao timer1 // dung chia tan 1:8 cho timer1 // moi lan dem la 8us } void init_pwm() { // thiet lap tan so xung // Pulse cycle= (249+1)*4*5*10^(-8)*16=0.8ms => f= 1.25kHz PR2=249; // thiet lap rong xung ban dau bang 0; CCPR1L=0x00; CCP1X=0; CCP1Y=0; // thiet lap tmr2 TMR2ON=0; TMR2=0x00; T2CKPS0=1; T2CKPS1=1; TMR2IF=0; TMR2ON=1; // prescaler=16 // thiet lap bo CCP o che PWM CCP1M0=1; CCP1M1=1; CCP1M2=1; CCP1M3=1; } void init_ccp2() { TRISC1=1; CCP2CON=0x00; CCP2M0=1; CCP2M1=1; CCP2M2=1; CCP2M3=0; CCP2IF=0; } void init_usart() { TRISC7=1; TRISC6=1; // // // // // // RC1 la chan input khoi tao CCP2CON chon hien tuong la canh len cua xung thu tai chan RC1 SPEN=1; SYNC=0; // truyen BRGH=1; SPBRG=25; TX9=0; TXIE=0; TXEN=1; // nhan RX9=0; RCIE=1; CREN=1; // enable USART // giao tiep bat dong bo // high speed // baud=9600 // bit // khong dung ngat // enable // bit // ngat // truyen-nhan lien tuc } void init_adc() { TRISA0=1; // khoi tao cac ghi lien quan den ADC ADCON0=0x00; ADCON1=0x00; // thiet lap tan so chuyen doi f=fosc/4 ADCS2=0; ADCS1=0; ADCS0=0; // chon kenh chuyen doi AN0; CHS0=0; CHS1=0; CHS2=0; PCFG0=0; PCFG1=0; PCFG2=0; PCFG3=0; // chon luu ket qua lech trai ADFM=0; // khoi dong ADC ADON=1; } void send_to_led(unsigned char data) { unsigned char i, temp; for(i=0;i