PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

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
Prev Previous Post   Next Post Next
Old 15-05-2011, 10:20 AM   #34
dongduong_spkt
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);
}

}
dongduong_spkt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 08:30 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam