如何把下面的C语言转换为汇编语言
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把下面的C语言转换为汇编语言相关的知识,希望对你有一定的参考价值。
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3B31);
#define PORTAIT(adr,bit) ((unsigned)(&adr)*8+(bit)) /*绝对寻址位操作指令*/
static bit PORTA_4 @ PORTAIT(PORTA,4);
const uchar table[]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90;
const uchar table1[]=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x58,0x00,0x10;
uchar a1,a2,a3,a4;
void delay(uint x);
void init();
void SPIINIT();
void SPILED(unsigned char byte);
void disp(uchar num1,uchar num2,uchar num3,uchar num4);
const unsigned char step[6]=0xb1,0xb2,0xb4,0xb8;
uint get_ad();
void didi();
void stepmotorandled();
void main()
uint lednum;
init();
SPIINIT();
while(1)
lednum=get_ad();
a1=lednum/1000;
a2=lednum%1000/100;
a3=lednum%100/10;
a4=lednum%10;
TXREG=lednum/100;
while(!TRMT);
TXREG=lednum%100;
while(!TRMT);
disp(a1,a2,a3,a4);
if(lednum>2400)
didi();
stepmotorandled();
else
PORTD=0X7F;
void delay(uint x)
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
void init()
TRISA=0x01; /*A口设置为输出*/
TRISD=0;
INTCON=0x00; /*关闭所有中断*/
PORTA_4=0;
PORTA=0;
PORTD=0xff;
ADCON0=0x41;
ADCON1=0x8e;
TRISC=0xfe;
RC0=1;
TXSTA=0x24;
RCSTA=0x90;
SPBRG=25;
uint get_ad()
uint adval,i,adver=0;
float advalf;
for(i=10;i>0;i--)
ADGO=1;
while(ADGO);
adval=ADRESH;//00000000 00000011
adval=adval<<8|ADRESL;//00000011 11111111
advalf=adval/1023.0*5.0;//==2.3843
adval=advalf*1000;
adver=adver+adval;
adver=adver/10;
return (adver);
void disp(uchar num1,uchar num2,uchar num3,uchar num4)
uchar c;
PORTA_4=0;
c=0xff;
SPILED(c);
c=0xff;
SPILED(c);
c=table[a4];
SPILED(c);
c=table[a3];
SPILED(c);
c=table[a2];
SPILED(c);
c=table1[a1];
SPILED(c);
PORTA_4=1;
delay(200);
void SPIINIT()
PIR1=0;
SSPCON=0x32; /* SSPEN=1;CKP=0 , FOSC/64 */
SSPSTAT=0xC0;
TRISC=0x00; /*SDO引脚为输出,SCK引脚为输出*/
void SPILED(unsigned char byte)
SSPBUF=byte; /*启动发送*/
do
;
while(SSPIF==0); /*等待发送完毕*/
SSPIF=0; /*清除SSPIF标志*/
byte=SSPBUF;
void didi()
uint m;
for(m=5;m>0;m--)
RC0=0;
delay(50);
RC0=1;
delay(20);
void stepmotorandled()
uchar i,j;
for(j=0;j<255;j++)
for(i=0;i<4;i++)
PORTD=step[i];
delay(5);
for(j=0;j<255;j++)
for(i=0;i<4;i++)
PORTD=step[i];
delay(5);
如何把下面的C语言转换为汇编语言
用的是16F877A芯片
c语言中如何将一个字符ascii码转换为整型数
#include"stdio.h"
#include"string.h"
main()
int i,s;
int num[80];
char str[80],ch[80];
i=0;
s=0;
printf("input a string:");
gets(str);
while(str[i]!='\n')
i++;
str[i]='\0';
for(i=0;i<80;i++)
if(str[i]>='0'&&str[i]<='9')
ch[i]=str[i]-'0';
num[i]=ch[i];
s=s*10+num[i];
printf("%d",s);
printf("\n");
getch();
ASCII码,英文全称:American Standard Code for Information Interchange,是美国信息交换标准代码是一种用于信息交换的美国标准代码。7位字符集广泛用于代表标准美国键盘上的字符或符号。通过将这些字符使用的值标准化,ASCII允许计算机和计算机程序交换信息。ASCII字符集是与ANSI字符集中的前面128个(0-127)字符相同。
美国信息交换标准代码ASCII为"美国信息交换标准代码"十个字对应英文的缩写,ASCII文件是简单的无格式文本文件,可以由任何计算机所识别,Windows中的记事本及任何文字处理程序都可以阅读及创建ASCII文件。ASCII文件通常都具有扩展名.TXT(例如README.TXT)
在计算机中,所有的数据在存储和运算时都要使用二进制数表示,同样的,象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪个数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通讯而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的美国信息交换标准码,统一规定了上述常用符号用哪个二进制数来表示。 参考技术A 删掉ch[i]这个步骤就可以了
ch[i]=str[i]-'0';
num[i]=ch[i];
s=s*10+num[i];
改成
num[i]=str[i]-'0';
s=s*10+num[i]; 参考技术B str[i]-'0'这不就转了吗,直接减去'0'(字符)追问
可是运行结果有错啊?
追答你那是赋值错误,你把整数赋值给了ch[i],你直接打印出来str[i]-'0'看看
参考技术C while(str[i]!='\n')这里改成 while(str[i]!='\0') 参考技术D for循环的错误,不能让他加到80.i<strlen(str);并且gets的用法也有错误,它会直接加‘\0’,不用自己加吧
你的程序写的有点繁琐
#include"stdio.h"
#include"string.h"
main()
int i,s;
char str[80];
i=0;
s=0;
printf("input a string:");
gets(str);
for(i=0;i<strlen(str);i++)
if(str[i]>='0'&&str[i]<='9')
s=s*10+str[i]-'0';
printf("%d",s);
printf("\n");
getchar();
本回答被提问者采纳
以上是关于如何把下面的C语言转换为汇编语言的主要内容,如果未能解决你的问题,请参考以下文章