![]() |
help me
code của em không chạy các bác ơi
Code:
#include<16f877a.h> |
while (true); /// mình nghĩ có vấn đề ở dấu ' ; '
|
Code:
#include<16F887.h> |
Trích:
Chương trình của bạn không có một vòng lặp vô tận ở cuối để tránh cho vi điều khiển chạy tiếp những lệnh vô nghĩa phía sau mã chương trình. Với loại bài toán thay đổi trạng thái LED, không nên dùng Proteus để mô phỏng. Thân, |
Trích:
|
không hiểu tại sao khi em chép <DEF_16F877A.H> vào thư mục Devices rồi mà khi kiểm lỗi vẩn báo lỗi , các bác giúp em với. chưởng trình như sau
/*******BAT DAU CHUONG TRINH************/ #INCLUDE <16F877A.H> #INCLUDE <DEF_16F877A.H> #DEFINE STOP PIN_B4 #DEFINE DKTH PIN_B5 #DEFINE DKNG PIN_B6 #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) //SU DUNG THACH ANH 20MHZ #USE FAST_IO(A) #USE FAST_IO(B) #USE FAST_IO(D) INT8 I,BCHUC,BDVI,VDVI,VCHUC; INT8 SBUOC=0,A,SVONG=0; INT8 R_KEY=0; CONST UNSIGNED CHAR DIG[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X9 0}; CONST UNSIGNED CHAR ROTATE[]={14,12,13,9,11,3,7,6}; /************************************************** ******* CHUONG TRINH DIEU KHIEN LED QUAY THUAN SU DUNG LOAI DONG CO BUOC 48 RANG DIEU KHIEN NUA BUOC */ //CHUONG TRINH NGAT RB #INT_RB VOID NGAT_RB() { IF(RBIF==1) { IF(INPUT(STOP)==0){A=0;} IF(INPUT(DKTH)==0){A=1;} IF(INPUT(DKNG)==0){A=2;} } RBIF=0; } //CHUONG TRINH DOI SO BUOC, SO VONG RA SO BCD HEX_BCD() { VCHUC=SVONG/10; VDVI=SVONG%10; BCHUC=SBUOC/10; BDVI=SBUOC%10; } HIENTHI1() { PORTC=DIG[BDVI]; //HIEN THI SO BUOC DON VI PORTD=0X0F; DELAY_US(100); PORTD=0; //CHONG LEM PORTC=DIG[BCHUC]; //HIEN THI SO BUOC CHUC PORTD=0X17; DELAY_US(100); PORTD=0; PORTC=0XBF; //HIEN THI DAU GACH PHAN CACH PORTD=0X1B; DELAY_US(100); PORTD=0; PORTC=DIG[VDVI]; //HIEN THI SO VONG DON VI PORTD=0X1D; DELAY_US(100); PORTD=0; PORTC=DIG[VCHUC]; //HIEN THI SO VONG CHUC PORTD=0X1E; DELAY_US(100); PORTD=0; } HIENTHI() { I=0; SBUOC++; IF(SBUOC>95){ SBUOC=0; SVONG++; IF(SVONG>99){SVONG=0;} } HEX_BCD(); WHILE(I<10) { HIENTHI1(); I++; } } QUAYTHUAN() { PORTA=ROTATE[R_KEY]; HIENTHI(); IF (R_KEY < 7){R_KEY++;} ELSE R_KEY=0; } QUAYNGICH() { IF (R_KEY > 0){R_KEY--;} ELSE R_KEY=7; PORTA=ROTATE[R_KEY]; HIENTHI(); } STP() { OUTPUT_A(0XFF); HEX_BCD(); HIENTHI1(); } VOID MAIN () { SET_TRIS_A(0); // PORTA DIEU KHIEN DONG CO BUOC SET_TRIS_B(0XFF); // PORTB LA PORT NHAP DU LIEU SET_TRIS_C(0); // PORTC XUAT MA HIEN THI SET_TRIS_D(0); // PORTD QUET LED ENABLE_INTERRUPTS(GLOBAL); //CHO PHEP NGAT TOAN CUC ENABLE_INTERRUPTS(INT_RB); //CHO PHEP NGAT RB EXT_INT_EDGE(H_TO_L); //CHO PHEP NGAT CANH XUONG A=0; WHILE(1) { SWITCH(A) { CASE 0 : STP(); //NEU A=0 THI STOP BREAK; CASE 1 : QUAYTHUAN(); //NEU A=1 THI QUAY THUAN BREAK; CASE 2 : QUAYNGICH(); //NEU A=2 THI QUAY NGHICH BREAK; } } } |
không hiểu tại sao khi em chép <DEF_16F877A.H> vào thư mục Devices rồi mà khi kiểm lỗi vẩn báo lỗi , các bác giúp em với. chưởng trình như sau
/*******BAT DAU CHUONG TRINH************/ #INCLUDE <16F877A.H> #INCLUDE <DEF_16F877A.H> #DEFINE STOP PIN_B4 #DEFINE DKTH PIN_B5 #DEFINE DKNG PIN_B6 #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20000000) //SU DUNG THACH ANH 20MHZ #USE FAST_IO(A) #USE FAST_IO(B) #USE FAST_IO(D) INT8 I,BCHUC,BDVI,VDVI,VCHUC; INT8 SBUOC=0,A,SVONG=0; INT8 R_KEY=0; CONST UNSIGNED CHAR DIG[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X9 0}; CONST UNSIGNED CHAR ROTATE[]={14,12,13,9,11,3,7,6}; /************************************************** ******* CHUONG TRINH DIEU KHIEN LED QUAY THUAN SU DUNG LOAI DONG CO BUOC 48 RANG DIEU KHIEN NUA BUOC */ //CHUONG TRINH NGAT RB #INT_RB VOID NGAT_RB() { IF(RBIF==1) { IF(INPUT(STOP)==0){A=0;} IF(INPUT(DKTH)==0){A=1;} IF(INPUT(DKNG)==0){A=2;} } RBIF=0; } //CHUONG TRINH DOI SO BUOC, SO VONG RA SO BCD HEX_BCD() { VCHUC=SVONG/10; VDVI=SVONG%10; BCHUC=SBUOC/10; BDVI=SBUOC%10; } HIENTHI1() { PORTC=DIG[BDVI]; //HIEN THI SO BUOC DON VI PORTD=0X0F; DELAY_US(100); PORTD=0; //CHONG LEM PORTC=DIG[BCHUC]; //HIEN THI SO BUOC CHUC PORTD=0X17; DELAY_US(100); PORTD=0; PORTC=0XBF; //HIEN THI DAU GACH PHAN CACH PORTD=0X1B; DELAY_US(100); PORTD=0; PORTC=DIG[VDVI]; //HIEN THI SO VONG DON VI PORTD=0X1D; DELAY_US(100); PORTD=0; PORTC=DIG[VCHUC]; //HIEN THI SO VONG CHUC PORTD=0X1E; DELAY_US(100); PORTD=0; } HIENTHI() { I=0; SBUOC++; IF(SBUOC>95){ SBUOC=0; SVONG++; IF(SVONG>99){SVONG=0;} } HEX_BCD(); WHILE(I<10) { HIENTHI1(); I++; } } QUAYTHUAN() { PORTA=ROTATE[R_KEY]; HIENTHI(); IF (R_KEY < 7){R_KEY++;} ELSE R_KEY=0; } QUAYNGICH() { IF (R_KEY > 0){R_KEY--;} ELSE R_KEY=7; PORTA=ROTATE[R_KEY]; HIENTHI(); } STP() { OUTPUT_A(0XFF); HEX_BCD(); HIENTHI1(); } VOID MAIN () { SET_TRIS_A(0); // PORTA DIEU KHIEN DONG CO BUOC SET_TRIS_B(0XFF); // PORTB LA PORT NHAP DU LIEU SET_TRIS_C(0); // PORTC XUAT MA HIEN THI SET_TRIS_D(0); // PORTD QUET LED ENABLE_INTERRUPTS(GLOBAL); //CHO PHEP NGAT TOAN CUC ENABLE_INTERRUPTS(INT_RB); //CHO PHEP NGAT RB EXT_INT_EDGE(H_TO_L); //CHO PHEP NGAT CANH XUONG A=0; WHILE(1) { SWITCH(A) { CASE 0 : STP(); //NEU A=0 THI STOP BREAK; CASE 1 : QUAYTHUAN(); //NEU A=1 THI QUAY THUAN BREAK; CASE 2 : QUAYNGICH(); //NEU A=2 THI QUAY NGHICH BREAK; } } } |
em đã tim ra lỗi, cam ơn
|
sao mình sử dụng chương trình CCS để viết chương trình cho PIC thì sau khi viết xong lại không thể compile để chuyển thành file .hex được vì nút compile đó bị mờ đi, mình bấm thử F9 cũng không được, xin mọi người chỉ giúp. Đa tạ!
|
hix, các bác ơi. Khó hiểu thật. Em dùng timer0 để tạo thời gian trễ là 1s. Nháy leg hiển thị số. Em nghĩ đã đúng rồi, vì thử các led nháy 1s đúng mà sao khi bỏ vào led bảy đoạn nó lại chạy quá nhanh kô như ý muốn được. Hix vậy là sao đây ạ?? Muốn xử lý thì thế nào ??
code: #include <16f877a.h> #fuses HS, NOWDT #use delay(clock=4000000) #byte portb=0x06 #byte trisb=0x86 #byte INTCON=0x0b #bit TMR0IF=INTCON.2 #byte TMR0=0x01 #use fast_IO (b) void tre1s (int so) { int i,j; TMR0IF=0; setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_16); set_timer0 (6); for (i=0;i<=so;i++) { while (TMR0IF==0) { } } } void main () { int a,b; int C[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; set_tris_b (0x00); a=0; while (1) { for (a=0;a<=9;a++) { tre1s (250); portb=C[a]; tre1s (250); } } } |
Trích:
|
bác nói rõ hơn một chút được kô ạ?? Còn cái 1s đó kô wan trọng. Theo em nghĩ mình tính toán cũng đúng mà. Thời gian để i tăng lên 1 đơn vị: (255-6+1)*1*16 = 40000. Vậy giá trị số phải là 250. Em wen ở đó kô có dấu bằng xảy ra.
Vấn đề em thắc mắc ở đây. Là cái đoạn sau. Nếu em thay đoạn sau: void main () { int a=0b00000001; set_tris_b(0x00); while (1) { portb=a; tre1s (250); rotate_left (&a,1); } } thì đèn led ở portb của em nháy từng con với thời gian trễ là 1s. Còn nếu em thay cái đoạn trên thì nó nhảy gì gì đâu ấy à. Em kô hiểu được |
Kô ai giúp em với!! Hix em chờ lâu quá mà kô thấy. Cũng tìm khắp diễn đàn rồi mà kô thấy có chỗ nào nói về cái này cả
|
mh cũng gốp zui thêm 1 số chưg trìh ccs,các ct này chạy tốt trên protues7.4
http://www.mediafire.com/?xzynn5nmgnz |
Trích:
Hàm tre1s() của bạn chỉ đơn giản là thực hiện các lệnh trong đó mỗi lệnh tốn khoảng vài us làm sao mà trễ đc đến 1s cơ chứ. |
Múi giờ GMT. Hiện tại là 11:38 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam