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