Thông báo

Collapse
No announcement yet.

chuyển code C sang code ASM

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • chuyển code C sang code ASM

    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();
    	}
    }

  • #2
    choy oy ! đọc C ko dễ hỉu hay sao mà phải chuyển wa ASM . mấy cái ứng dụng nhỏ nho ..u dùng C là lẹ & dễ nhất

    Comment


    • #3
      mình đâu có học lập trình C về cái này trên trường chỉ dạy lập trình ASM thôi nên đành bó tay. mong bạn giúp mình với.

      Comment


      • #4
        làng điện tử ơi? có ai có code của keypad viết bằng asem không? cho mình với?

        Comment


        • #5
          Nguyên văn bởi darling Xem bài viết
          làng điện tử ơi? có ai có code của keypad viết bằng asem không? cho mình với?
          tự kiếm đi trong 4rum có mà

          Comment


          • #6
            cac bac giup em doan code c dieu khien lcd nay voi

            em khong biet cach nao de cho lcd 16*2 chay chu tu phai sang trai. voi dieu kien hang 1 chay truoc ,chay het roi den hang 2 chay,hang 1 van giu ket qua. tai con tro no bi thay doi,em khong biet cach lay lai vi tri ma giu nguyen ket qua hang 1. thanks cac bac nha.
            em viet bang c nha cac bac.

            Comment


            • #7
              Nguyên văn bởi longmonkhach Xem bài viết
              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();
              	}
              }
              giải thích chi tiết đoạn code giúp mình được không bạn ơi

              Comment


              • #8
                Nguyên văn bởi longmonkhach Xem bài viết
                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();
                	}
                }
                trong kiel C hinh như có hỗ trợ
                đam mê là không sợ khó khăn

                Comment

                Về tác giả

                Collapse

                longmonkhach Tìm hiểu thêm về longmonkhach

                Bài viết mới nhất

                Collapse

                Đang tải...
                X