Conversation Between namqn and dandantran
Showing Visitor Messages 1 to 1 of 1
-
chào a! e vừa lập trình con pic 12f629 mà e có dùng chân số 4(MCLR) làm nút bấm và e khaoi báo là:
#FUSES NOMCLR //Master Clear pin used for I/O
Mạch của e điều khiển moto 12v khi e để mạch lại gần moto thì chạy được thời gian thì tự tắt, thời gian này không cố định. Còn khi để xa mô tơ thì mạch hoạt động ổn định. E nghĩ mạch bị nhiểu nhưng khi e lôi hết linh kiện ra lấy tua vít chạm vào chân (-) hoặc bất cứ chân nào của ic thì nó cũng tắt.
A coi giúp e, code của e có bị lối gì không hoặc khai báo co bi lôi gì không, e cảm ơn nhiều! e bí quá
Đặc biệt là e đổi chân nút bấm sang chân khác thì lấy tua vit cham vào chân (-) thì không tắt.
#include <12F629.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES CPD //Data EEPROM Code Protected
#FUSES PROTECT //Code protected from reads
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES PUT //Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected
#FUSES BANDGAP_HIGH
#use delay(clock=4000000)
int1 value_old_1 =1; // xung o chan so 4
int1 value_new_1;
int8 mode = 0;
int1 on_off= 0; // start/stop programe
int8 role_high =0;
int8 role_low =0;
int8 count_time_low = 0;
int8 count_time_high = 0;
int1 role_status =0;
int8 start =0;
#int_TIMER1
void TIMER1_isr(void)
{
// kiem tra start_stop
value_new_1 =input(PIN_A3); // chan 4 - chan on_off
if((value_old_1 ==0)&&(value_new_1==0)){ // muc logic 0
if(start<20){ // starting/stopping if holding button during 1 second
start++;
if(start > 15) output_high(PIN_A0); // bip
}
else{
if(on_off==1){
on_off =0;
mode = 0;
start =0;
output_low(PIN_A0); // stop bip
}
}
}
else if((value_new_1==0)&&(on_off==0)){
on_off =1;
mode =1;
start =0;
output_low(PIN_A0); // stop bip
}
else start=0;
// chuyen mode
if(on_off){
count_time_low++;
if((value_old_1 ==1)&&(value_new_1==0)){ // canh xuong
output_high(PIN_A0); // bip
mode++;
if(mode==5)
mode =1;
}
else{
if(start<16) output_low(PIN_A0); // stop bip
}
if(count_time_low == 201){ // turn off untill 20 minutes
count_time_high++;
count_time_low = 0;
}
if(count_time_high == 91){
mode =0;
}
}
// increase role value
if(on_off==1){
role_low++;
if(role_low ==100){
role_high++;
role_low =0;
}
if(role_high==9){
if(role_status ==0)
role_status =1;
else
role_status =0;
role_high =0;
}
}
value_old_1 = value_new_1;// luu gia tri value3
}
void main()
{
set_tris_a(0x08);
output_a(0x00);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_comparator(NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
// TODO: USER CODE!!
while(1){
start1: while(on_off ==0){
role_low =0;
role_high =0;
role_status =0;
count_time_low = 0;
count_time_high = 0;
output_low(PIN_A4); // role 1
output_low(PIN_A2); // role 2
output_low(PIN_A5); // motor
output_low(PIN_A1);// den
}
if(mode ==0){
on_off =0;
goto start1;
}
else{
if(role_status){
output_low(PIN_A4);// role 1
output_high(PIN_A2);//role 2
}
else{
output_high(PIN_A4);// role 1
output_low(PIN_A2);//role 2
}
}
if(mode==1){
output_high(PIN_A1); //den
}
else if(mode ==2){
output_high(PIN_A5); // motor
output_low(PIN_A1); // den
}
else if(mode ==3){
output_high(PIN_A5); // motor
output_high(PIN_A1); // den
}
else if(mode ==4){
output_low(PIN_A5); // motor
output_low(PIN_A1);// den
}
}
}