![]() |
|
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 |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Jan 2009
Bài gửi: 5
: |
Mở rộng đầu ra của pic 18f4431
Chào các anh chị và các bạn trên diễn đàn, em muốn hỏi vấn đề liên quan đến việc mở rộng đầu ra cho pic .Ở đây em mở rộng bằng cách quét 74151 (dmux), em viết chương trình và mô phỏng trên protues chạy đúng nhưng khi nạp xuống mạch thật lại chạy không đúng.Cụ thể là trong chương trình tại một thời điểm em chỉ quét một địa chỉ và đợi tín hiệu tác động vào đúng chân ứng với địa chỉ đó , ví dụ như a=0,b=0,c=0 ứng với D0 nhưng khi chạy thực tế thì lại không đúng như vậy tác động vào bất kì đầu vào nào ví dụ như D1,d2... đều chạy các chương trình như nhau , em không hiểu tại sao, mong mọi người giúp em với không biết chương trình em sai ở đâu ạ.
Đây là chương trình của em. Code:
#include <18f4431.h> #use delay (clock=20M) #fuses nowdt, hs,noprotect, nolvp,hpol_low #include <lcd_lib_4bitrobo.c> //********************************************* #byte TRISE = 0xF96 #byte TRISD = 0xF95 #byte TRISC = 0xF94 #byte TRISB = 0xF93 #byte TRISA = 0xF92 #byte LATE = 0xF8D #byte LATD = 0xF8C #byte LATC = 0xF8B #byte LATB = 0xF8A #byte LATA = 0xF89 #byte PORTD = 0xF83 #byte PORTC = 0xF82 #byte PORTA = 0xF80 #byte PORTE = 0xF84 #byte PORTB = 0xF81 #bit d1= portd.4 #bit c1= portc.7 #bit b1= portc.6 #bit a1=portc.5 #bit y=portc.4 int8 a,b,c,d; //------------------------------------------------ void main () { trisb=0x00; trisc=0b00010000; trisd=0x00; trisa=0xff; trise=0x00; output_high (pin_b1); output_high (pin_b3); output_high (pin_b4); output_high (pin_d7); setup_power_pwm(PWM_CLOCK_DIV_4 | PWM_FREE_RUN ,1,0,300,0,1,0); setup_power_pwm_pins(PWM_ODD_ON,PWM_ODD_ON,PWM_ODD_ON,PWM_ODD_ON); set_power_pwm0_duty(0); set_power_pwm2_duty(0); set_power_pwm4_duty(0); set_power_pwm6_duty(0); { set_power_pwm0_duty(300); while (true) { d=0;c=1;b=0;a=0; d1=d;c1=c;b1=b;a1=a; if (y==1) { set_power_pwm0_duty(0); set_power_pwm2_duty(500); break;}} delay_ms(500); while (true) { d=0;c=0;b=1;a=0; d1=d;c1=c;b1=b;a1=a; if (y==1) { set_power_pwm2_duty(0); set_power_pwm4_duty(300); break;}} delay_ms(500); while (true) { d=0;c=0;b=0;a=1; d1=d;c1=c;b1=b;a1=a; if (y==1) { set_power_pwm4_duty(0); set_power_pwm6_duty(300); break;}} while (true) { d=0;c=0;b=0;a=0; d1=d;c1=c;b1=b;a1=a; if (y==1) { // set_power_pwm4_duty(0); set_power_pwm6_duty(0); break; } while (true) () } thay đổi nội dung bởi: namqn, 28-02-2010 lúc 04:21 PM. Lý do: định dạng code |
![]() |
![]() |
![]() |
#2 |
Trưởng lão PIC bang
|
Một chương trình mà có đến 5 lệnh while (true) là không ổn. Bạn xem lại thuật toán và cách thể hiện thuật toán.
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Jan 2009
Bài gửi: 5
: |
EM cảm ơn bác nhưng em thấy tuy dùng 5 vong lặp while (true) nhưng khi có điều kiện đúng thì thoát ra khỏi vòng lặp luôn nhờ lệnh break mà. Như vậy em thấy không sai.
|
![]() |
![]() |
![]() |
#4 | |
Trưởng lão PIC bang
|
Trích:
Tại sao không làm theo cách sau (code hình thức): Code:
//Trường hợp 1 {Các lệnh thiết lập ngõ ra cho trường hợp 1} while (ngõ vào == 0); //Chờ đến khi ngõ vào chuyển sang trạng thái '1' {Thực hiện các thao tác cần thiết cho trường hợp 1} // Trường hợp 2 {Các lệnh thiết lập ngõ ra cho trường hợp 2} while (ngõ vào == 0); //Chờ đến khi ngõ vào chuyển sang trạng thái '1' {Thực hiện các thao tác cần thiết cho trường hợp 2} ... // Trường hợp n {Các lệnh thiết lập ngõ ra cho trường hợp n} while (ngõ vào == 0); //Chờ đến khi ngõ vào chuyển sang trạng thái '1' {Thực hiện các thao tác cần thiết cho trường hợp n} while (true) ; //Vòng lặp vô tận chính, không làm gì cả Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#5 |
Nhập môn đệ tử
Tham gia ngày: Jan 2009
Bài gửi: 5
: |
Vâng em đã cảm ơn sự chỉ bảo tận tình của bác , em đã sửa và chạy được chương trình, em sẽ cố gắng hoàn thiện hơn kiến thức của mình .
|
![]() |
![]() |
![]() |
|
|