View Full Version : Cần giúp chọn pic18fxx,chạy nguồn 3,3V có 2 UART
tienchuan
08-04-2011, 10:02 AM
chào mọi người.
mình đang làm 1 mạch sử dụng module sim300 giao tiếp với Pic18F26k20,nhưng do yêu cầu phải thêm giao tiếp với máy tính thông qua RS485 nữa nên h mình cần mọi người tư vấn chọn cho con pic khác có 2 cổng UART để vừa giao tiếp vs máy tính,vừa giao tiếp với module Sim300.
Và mình cần xin thêm tài liệu để thực hiện 2 UART trên cùng 1 pic,có diều khiển gì khác so với điều khiển 1 UART như bt ko ?
Mong được mọi người giúp đỡ.
Chân thành cảm ơn.
Thân chào.
mình đang làm đề tài trên pic18f4431 để điều khiển động cơ có bạn nào đã làm mảng này làm ơn chỉ mình với!
mình đã mày mò viết thử code nhưng ko biết có đúng ko?
đây là lần đầu tiên mình tiếp cận pic nên mong các bạn chỉ giáo!
thanks!
các bạn tham khảo code nhe!
#include<18f4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NODEBUG
#use delay(clock=20000000)
//#bit TBInt_pin = 0xfa4.4
FLOAT MODULATION_INDEX0,MODULATION_INDEX1;
INT16 U_DK2_DUTY;
INT8 adc,i = 0;
Void GENERATE_PWM()
{
set_power_pwm0_duty(U_DK2_DUTY);
}
Void GENERATE_PWM1()
{
set_power_pwm2_duty(U_DK2_DUTY);
}
void adc_init()
{
setup_adc_ports(SAN0);
setup_adc(adc_clock_internal);
set_adc_channel(0);
delay_ms(1000);
}
void pwm_init()
{
setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEM ENTARY,PWM_OFF,PWM_OFF);
setup_power_pwm(PWM_CLOCK_DIV_128|PWM_UP_DOWN|PWM_ DEAD_CLOCK_DIV_16,1,0,62,0,1,0);
MODULATION_INDEX0 = 0;
MODULATION_INDEX1 = 1;
}
void chedo()
{
i=0;
while(i<80)
{
if(input(pin_C3))
{
adc = read_adc();
output_low(pin_d2);
output_high(pin_d3);
// output_low(pin_d1);
{
if(i<25)
{
U_DK2_DUTY = adc*MODULATION_INDEX0;
GENERATE_PWM();
i++;
}
if(25<=i<60)
{
U_DK2_DUTY = adc*MODULATION_INDEX1;
GENERATE_PWM();
i++;
}
if(60<=i<80)
{
U_DK2_DUTY = adc*MODULATION_INDEX0;
GENERATE_PWM();
i++;
}
// if(i == 80) {i == 0;}
}
}
if (input(pin_C4))
{
adc = read_adc();
// output_low(pin_d1);
output_low(pin_d3);
output_high(pin_d2);
//{
if(i<25)
{
U_DK2_DUTY = adc*MODULATION_INDEX0;
GENERATE_PWM1();
i++;
}
if(25<=i<60)
{
U_DK2_DUTY = adc*MODULATION_INDEX1;
GENERATE_PWM1();
i++;
}
if(60<=i<80)
{
U_DK2_DUTY = adc*MODULATION_INDEX0;
GENERATE_PWM1();
i++;
}
// if(i == 80) {i == 0;}
}
//if(i == 80) {i == 0;}
}}
void main()
{
GENERATE_PWM();
// SAN6==0;
// SAN7==0;
adc_init();
pwm_init();
while(true)
chedo();
}
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.