E thử làm vài bài quét led sử dụng con 89C51, viết code rồi nạp file hẽ để mô phỏng nhưng không hiểu sao không chạy. Mọi người xem giùm em coi lỗi gì nhé.
Bài 1:
Phần cứng:

Code C: Em biên dịch ra file hex bằng keilC
Bài 2:
Phần cứng

Code C:
Em đọc kĩ thì thấy code không có vấn đề gì, lỗi ở keilC chăng, em viết 1 VD đơn giản bằng ASM thì mô phỏng được còn C thì không
Bài 1:
Phần cứng:

Code C: Em biên dịch ra file hex bằng keilC
Code:
#include<reg52.h>
sbit led1=P0^0;
sbit led2=P0^1;
int k,dem;
unsigned char led_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay_ms(int t)
{ int m,n;
for(m=0;m<=100;m++)
for(n=0;n<=t;n++);
}
void hienthi()
{
led2=1;
P2=led_data[k/10];delay_ms(10);led2=0;
led1=1;
P2=led_data[k/10];delay_ms(10);led1=0;
}
void main()
{
while(1)
{
TMOD=0x10;
IE=0x88;EA=1;
IP=0;
TH1=-25000/256;
TL1=-25000/256;
TR1=1;TF1=0;
hienthi();
}
}
void ngat_T1() interrupt 3
{
TH1=-25000/256;
TL1=-25000/256;
dem++;
if(dem>10) {dem=0;k++;};
if(k>99) k=0;
}
Phần cứng

Code C:
Code:
// Chuong trinh 8 led ket noi port1 chay cac kieu
#include <regx51.h> // khai bao chuong trinh thu vien 8051
#define led P1 // Led ket noi port 1
void delay (unsigned int ms) // Ham tao thoi gian tre ms
{
unsigned int i ;
unsigned char j ; //Khai bao bien 1 byte
for (i=0;i<ms;i++)
{
for (j=0;j<125;j++)
// 1vong lap for mat 8us
//Nhu vay ta co: ms*(125*8)=1000*1000 ~= 1ms
// *********************************************
{} // Khong lam gi ca
}
}
void sangdon(void)
{
P1=0x00;//0x00=00000000
delay(1000);// ham tre 1000ms=1s
P1=0xff;//0xff=11111111
delay(1000);
}
void sangdan(void)
{
P1=0x00;// hien thi 0 led;
delay(1000);// tre 1000ms=1s;
P1=0x01;//hien thi 1 led;
delay(1000);
P1=0x03;//hien thi 2 led;
delay(1000);
P1=0x07;//hien thi 3 led;
delay(1000);
P1=0x0f;//hien thi 4 led;
delay(1000);
P1=0x1f;//Hien thi 5 led;
delay(1000);
P1=0x3f;//hien thi 6 led;
delay(1000);
P1=0x7f;//hien thi 7 led;
delay(1000);
P1=0xff;//hien thi 8 led
delay(1000);
}
void sangduoi(void)
{
P1=0X01;delay(1000);
P1=0X02;delay(1000);
P1=0X04;delay(1000);
P1=0X08;delay(1000);
P1=0X10;delay(1000);
P1=0X20;delay(1000);
P1=0X40;delay(1000);
P1=0X80;delay(1000);
}
main ()
{
while (1)
{
sangdon();delay(1000);
sangdan();delay(1000);
sangduoi();delay(1000);
}
}

Comment