|
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 |
15-05-2011, 10:20 AM | #34 |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 3
: |
cho mình hỏi với.mình có code viết cho 16f887a không biết liệu có dùng được cho 16f877a không nhỉ? để chuyển sang dùng 16f877a phải chỉnh sử gì trong code hok nhỉ?
đây là code mong mọi người sủa giúp để có thể dùng cho 16f877a //ccsc pcwhd v8.088 #include <16F887.h> #define INT_RB 0xFF0B08 //sua o day de cho int co the chay #fuses HS,NOWDT,NOPROTECT,NOLVP #device ADC=8 #use delay(clock=20000000) #use fast_io(B) //#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //!#include <input.c> int8 dem_x, dem_y, dem_z; int8 vi_tri_x, vi_tri_y, vi_tri_z; int8 du_lieu_b; int8 gia_tri_adc; // gia_tri_adc int1 step_x, step_y, step_z; int1 dir_x, dir_y, dir_z; BYTE const POSITIONS[4] = {0b0101, 0b1001, 0b1010, 0b0110}; //!BYTE const POSITIONS[8] = {0b0101, //! 0b0001, //! 0b1001, //! 0b1000, //! 0b1010, //! 0b0010, //! 0b0110, //! 0b0100}; void quay_thuan_x(){ vi_tri_x=(vi_tri_x+1)&(sizeof(POSITIONS)-1); dem_x = POSITIONS[ vi_tri_x ]; output_bit (PIN_D0, (bit_test (dem_x, 0))); output_bit (PIN_D1, (bit_test (dem_x, 1))); output_bit (PIN_D2, (bit_test (dem_x, 2))); output_bit (PIN_D3, (bit_test (dem_x, 3))); } void quay_nguoc_x(){ vi_tri_x=(vi_tri_x-1)&(sizeof(POSITIONS)-1); dem_x = POSITIONS[ vi_tri_x ]; output_bit (PIN_D0, (bit_test (dem_x, 0))); output_bit (PIN_D1, (bit_test (dem_x, 1))); output_bit (PIN_D2, (bit_test (dem_x, 2))); output_bit (PIN_D3, (bit_test (dem_x, 3))); } void quay_thuan_y(){ vi_tri_y=(vi_tri_y+1)&(sizeof(POSITIONS)-1); dem_y = POSITIONS[ vi_tri_y ]; output_bit (PIN_D4, (bit_test (dem_y, 0))); output_bit (PIN_D5, (bit_test (dem_y, 1))); output_bit (PIN_D6, (bit_test (dem_y, 2))); output_bit (PIN_D7, (bit_test (dem_y, 3))); } void quay_nguoc_y(){ vi_tri_y=(vi_tri_y-1)&(sizeof(POSITIONS)-1); dem_y = POSITIONS[ vi_tri_y ]; output_bit (PIN_D4, (bit_test (dem_y, 0))); output_bit (PIN_D5, (bit_test (dem_y, 1))); output_bit (PIN_D6, (bit_test (dem_y, 2))); output_bit (PIN_D7, (bit_test (dem_y, 3))); } void quay_thuan_z(){ vi_tri_z=(vi_tri_z+1)&(sizeof(POSITIONS)-1); dem_z = POSITIONS[ vi_tri_z ]; output_bit (PIN_A0, (bit_test (dem_z, 0))); output_bit (PIN_A1, (bit_test (dem_z, 1))); output_bit (PIN_A2, (bit_test (dem_z, 2))); output_bit (PIN_A3, (bit_test (dem_z, 3))); } void quay_nguoc_z(){ vi_tri_z=(vi_tri_z-1)&(sizeof(POSITIONS)-1); dem_z = POSITIONS[ vi_tri_z ]; output_bit (PIN_A0, (bit_test (dem_z, 0))); output_bit (PIN_A1, (bit_test (dem_z, 1))); output_bit (PIN_A2, (bit_test (dem_z, 2))); output_bit (PIN_A3, (bit_test (dem_z, 3))); } void chuyen_dong_step(){ step_x = bit_test(du_lieu_b,4); step_y = bit_test(du_lieu_b,5); step_z = bit_test(du_lieu_b,6); //////////////////////////////////////// dir_x = bit_test(du_lieu_b,0); dir_y = bit_test(du_lieu_b,1); dir_z = bit_test(du_lieu_b,2); ///////////////////////////////////////// if (step_x ){ // motor x if(dir_x ){ // neu quay thuan quay_thuan_x(); } else{ //quay nguoc quay_nguoc_x(); } } //////////////////////////////////////// if (step_y ){ // motor y if(dir_y ){ // neu quay thuan quay_thuan_y(); } else{ //quay nguoc quay_nguoc_y(); } } //////////////////////////////////////// if (step_z ){ // motor z if(dir_z ){ // neu quay thuan quay_thuan_z(); } else{ //quay nguoc quay_nguoc_z(); } } //////////////////////////////////////// } #INT_RB void ngat_RB() { // doc du lieu nhap vao du_lieu_b = input_b(); chuyen_dong_step(); } void main() { enable_interrupts(GLOBAL); enable_interrupts(INT_RB);// turn on interrupts set_tris_B (0xff); // su dung PWM de dieu khien dong vao motor // han che trong khoang 9A cho 3 motor step ma thoi setup_adc_ports(sAN5); setup_adc(ADC_CLOCK_INTERNAL); setup_timer_2 ( T2_DIV_BY_16, 255, 1); setup_ccp1 (CCP_PWM); set_adc_channel(5); output_low (PIN_D0); output_high (PIN_D1); output_low (PIN_D2); output_high (PIN_D3); output_low (PIN_D4); output_high (PIN_D5); output_low (PIN_D6); output_high (PIN_D7); output_low (PIN_A0); output_high (PIN_A1); output_low (PIN_A2); output_high (PIN_A3); while (TRUE) { delay_us(40); gia_tri_adc = read_adc(); //printf("%u",gia_tri_adc); //delay_us(20); set_pwm1_duty(gia_tri_adc); } } |
Ðiều Chỉnh | |
Xếp Bài | |
|
|