ai đó giúp mình viết lại hoàn chỉnh đoạn code này dưới dạng code ASM với. mình dùng phần mềm keil C để đổi rồi nhưng đọc không hiểu. đây là đoạn code C viết cho mạch đo nhiệt độ dùng IC 89S52 hiển thị lên led 7 đoạn:
Code:
#include<reg52.h>
#include<stdio.h>
float read_temp1(void);
float read_temp1_filter(void);
sbit Data = P1^1;
sbit CLK = P1^2;
sbit CS = P1^3;
sbit CLK2 = P1^6;
sbit DIN = P1^5;
sbit STR = P1^4;
char segment[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};
char timer3;
char cputick;
char buffer[4];
int x1,x2,x3,x4,x5;
unsigned int temp1;
int read_ADC(char n)
{ int k;
char i,channel;
k=0;
CS=0;
if(n==0) channel=0x0d;
else channel=0x0f;
for(i=0;i<4;i++)
{
CLK = 0;
if(channel&8) Data = 1;
else Data = 0;
CLK = 1;
channel <<=1;
}
Data = 1;
CLK = 0;
for(i=0;i<12;i++)
{
k<<=1;
CLK=1;
CLK=0;
if(Data) k|=1;
else k&=~1;
}
CS = 1;
return k&=0xfff;
}
void write_led()
{
char m,n;
for(n=0;n<4;n++)
{
for(m=0;m<8;m++)
{
if(buffer[n]&0x80) DIN=1;
else DIN=0;
CLK2=1;
buffer[n]<<=1;
CLK2=0;
}
}
STR=1;
;
STR=0;
}
void update()
{
temp1=read_temp1_filter()*10;
buffer[3]=segment[temp1/100];
temp1=temp1%100;
buffer[2]=segment[temp1/10];
buffer[2]|=0x80;
buffer[1]=segment[temp1%10];
buffer[0]=segment[10];
}
void print_ADC()
{
if(++timer3>10)
{
timer3=0;
update();
write_led();
}
}
int low_pass_filter1(void)
{
x5=x4;
x4=x3;
x3=x2;
x2=x1;
x1=read_ADC(0);
return(x1+x2+x3+x4+x5)/5;
}
float read_temp1_filter(void)
{
return(0.0323*low_pass_filter1()-15.122);
}
void timer0int(void) interrupt 1 using 1
{
TH0|=0xdc;
cputick++;
}
void main()
{
EA=1;
ET0=1;
TMOD|=0x01;
TR0=1;
cputick=0;
while(1)
{
while(!cputick)
continue;
cputick=0;
print_ADC();
}
}

Comment