Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
Theo toi, Keil co chuong trinh Debug rat day du, co the chay mo phong xem thoi gian thuc thi cua cac chuong trinh delay la bao nhieu rat chinh xac, khong chi la chuong trinh delay ma cac chuong trinh con ton bao nhieu tthoi gian chung ta cung co the quan sat.
Thực ra khi dịch thì Keil sẽ dịch ra asm rồi mới dịch ra file hex, nên trong trường hợp chúng ta cần tính chính xác thời gian của các chương trình con hay đoạn chương trình thì ta có thể chèn thêm đoạn mã asm vào. Dĩ nhiên đoạn asm này chúng ta đã tính toán được rồi. Như thế chúng ta có thể chủ động hơn trong quá trình lập trình. Còn nếu không chúng ta vẫn có thể dùng Keil để tính chính xác thời gian được như bác tramhero nói.
Nhưng chủ động vẫn hơn bị động phải không bác.
Cảm ơn anh em đã giúp đỡ.
Tôi nghĩ trong chương trình đôi lúc cài thêm đoạn asm cũng đơn giản được đôi chút.
Nhất là trong trường hợp đang học viết bằng C chưa thạo, bí quá thì táng một đoạn asm vào chữa cháy.
mà cái kiểu chạy mô phỏng trong keil như thế nào hả bác tramhero, bác có thể hướng dẫn thêm được không?
chương trình debug hỗ trợ nhiều chế độ
như chạy từng lệnh hay chạy cả chương trình
nó cho phép mô phỏng I/0 timer ,counter tính toán thời gian thực
hiện chương trình ..vv
bác vào debug chọn start debug chọn go là chay chương trình
Các bác ơi cho hỏi trong keilc thì sử dụng ngắt như thế nào vậy.Cách khai báo như thế nào. ví dụ như sau:
void Ex0Isr(void) interrupt 0
Có phải là ngắt ngoài 0 không? Số 0 để làm gì vậy?
Và hàm này nữa
void timer0(void)interrupt 1 using 1 //ngắt bộ định thời 0 bank 1(bank 1hay MODE 1)
void Ex1Isr(void) interrupt 1 dùng để làm gì vậy Có phải là khai báo ngắt ngoài 1 không?
Nhờ các bác chỉ dùm một hàm ngắt cơ bản nha.
bác nào rảnh xem giùm tại hạ chương trình này tại sao không chạy nha
#include<AT89X51.h>
unsigned char so[10]={0x40,0xf9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x1 0};
unsigned char i,j,k,h;
unsigned char p1,p2,g1,g2;
Các bác ơi cho hỏi trong keilc thì sử dụng ngắt như thế nào vậy.Cách khai báo như thế nào. ví dụ như sau:
void Ex0Isr(void) interrupt 0
Có phải là ngắt ngoài 0 không? Số 0 để làm gì vậy?
Và hàm này nữa
void timer0(void)interrupt 1 using 1 //ngắt bộ định thời 0 bank 1(bank 1hay MODE 1)
void Ex1Isr(void) interrupt 1 dùng để làm gì vậy Có phải là khai báo ngắt ngoài 1 không?
Nhờ các bác chỉ dùm một hàm ngắt cơ bản nha.
bác nào rảnh xem giùm tại hạ chương trình này tại sao không chạy nha
#include<AT89X51.h>
unsigned char so[10]={0x40,0xf9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x1 0};
unsigned char i,j,k,h;
unsigned char p1,p2,g1,g2;
TMOD=0X21; //TIMER0 CHE DO 1,TIMER1 CHE DO 2
IE=0X8F; // CHO PHEP NGAT CAC NGAT
IT0=0;
IT1=0;
while(1)
{
}
}
Mò mẫm cả buổi mà khồn hiểu gì hết
hề hề ,cái interrupt 1 là ngắt timer có phải ngắt ngoài đâu
còn chương trình của bác dùng dùng đến ngắt ngoài 0 ,1 thì phải khai báo
số hiệu ngắt là 0 và 2
còn bác gán cái TMO=0x21 chả hỉu định làm gì
nếu dùng timer thì phải có lệnh gán TR0=1 để bật timer chứ và nạp giá trị vho th,tl nửa
Bác trả lời sớm chút thì tại hạ khỏi phải vò đầu bứt tai rồi.mò mẫm mãi mới ra Sau khi xem lại số hiệu ngắt mới biết mình ngu.Chương trình trên đúng là không chạy được.Cảm ơn bác GSC nha.
Đây là code sau khi sữa!
#include <regx51.h>
unsigned char i;
unsigned char j;
int tg;
const unsigned char Font[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
unsigned char a[3]={0x01,0x02};
void tang()
{
i=i+1;
if (i==10)
{j=j+1;
i=0;
if (j==10) j=0;
};
}
void delay(unsigned int ms)
{
unsigned int k,l;
for (k=0;k<ms;k++)
for (l=0;l<120;l++)
{};
}
void main()
{while(1)
{
tg=121;
while(tg--)
{P3=a[0];
P2=Font[i];
delay(3);
P3=a[1];
P2=Font[j] ;//hi?n th? s? 1 trên led 1
delay(3);};
tang();
}
}
Khó nhất trên đời làm trang nam tử
Ý chí vững vàng mà tình cảm lại mênh mang
bác giáo sư cần cho mình hỏi một chút. mình lấy cái chương trình LCD của bác sử dụng nhưng mà mình không hiểu ở chổ, LCD có 8 đường dữ liệu, mình không biết khai báo thế nào, dùng Port nào, có phải dòng lệnh sfr LCDdata = 0x80;này không? như vậy nó dùng Port mấy, LCD của mình sử dụng Port0 để gửi dữ liệu đấy. xin bác vui lòng chỉ rõ cho mình, thanks!
Chuyện là mình mới đập hộp con loa kéo Sony SRS-XV900. Do khu vực mình k có sẵn hàng để trải nghiệm thực tế nên chỉ tham khảo các kênh revew online.
Mua về sử dụng thì thấy hơi buồn về chất âm, Mở max k to bằng cái loa kéo china, bass...
Dạ nếu chú đã viết được chương trình cho vđk thì thêm 1 chương trình con chạy động cơ bước chỉ đơn giản là copy phát. Về phần cứng thì vài con cách ly quang, vài con mosfet thôi ạ. thực sự là dễ dàng như bài tập bình thường của sinh viên thôi ạ...
Dạ chú chủ thớt có thời gian và đam mê thì cứ từ từ ngâm cứu đi ạ đừng nghe chú Chú bq... dọa mà sợ ạ. Cái nguồn nhìn cũng lởm có khi hông bằng cái máy hàn tàu của chị hàng xóm hôm nọ tháo ra sửa với chú thợ thông ống nước suốt đêm mới xong. Chú ý an toàn xíu là được ạ...
Bộ nguồn xung ở tầm công suất 2700W này, gần 3 ký, không bao giờ đơn giản để mà sửa ngay cả đối với người có kinh nghiệm chứ đừng nói người không chuyên. Đám linh kiện công suất không tự nhiên cháy mà phải xuất phát từ nguyên nhân...
Comment