51单片机C与汇编的混编问题

51单片机C与汇编的混编把下面的中断函数程序Timet0_port()改写为汇编怎么改?怎么样让C和汇编连接起来?请高手教下多写点注释 如下列程序是每一秒中让p10口求反一次
#include <reg51.h>
#include <stdio.h>
int cishu=20;
data int s=0;
sbit p10=ox90;
uart_Init();
main()
{uart_Init();
TMOD=ox21;
TH0=ox3c;
TL0=oxb0;
TF0=0;
EA=1;
ET0=1;
TR0=1;
while(1)
{if(s==1) }
{ s=0;
p10=~p1; }// 求反
}
}
uart_Init()
{scon=ox52; //设置串口方式
TMOD=ox20; //12MHZ时钟频率 波特率2400
TCON=ox69;
TH1=oxf3;}
void Timer0_port() inrterrupt 1 using 0 //中断函数
{TR0=0;
TH0=ox3c;//中断一次50ms 20次1秒钟
TL0=oxB0;
cishu--;
if(cishu==0)
|{ cishu=20; s=1;}
TR0=1;
}
由于打的太快 倒数第2行的 | 这个符号是没有的 还有倒数第9行函数名void Timer0_port() inrterrupt 1 using 0 括号后面的应该是interrupt 1 using 0

51里C语言嵌入汇编的方法:
用C语言做个框架,编译后改为汇编框架,填入汇编程序,一般可以保证和C语言兼容.注意格式
_asm
{
.......
........
......
}
把asm作关键字,其后的汇编用大括号阔起如:
void set_time(void)
{
asm
{
del1:
mov r4,#0fh
del2:
mov r5,#0fh
djnz r5,del2
djnz r4,del1
}
}

void set_time(void)
{ asm del1:
asm mov r4,#0fh
asm del2:
asm mov r5,#0fh
asm djnz r5,del2
asm djnz r4,del1
}
还有编译器的设置问题
===================================================
KEILC51中是可以直接嵌入汇编,方法为
#Pragma asm 汇编行 #pragma ,注意在写汇编之后要记得加 END

阁下的中断函数里有修改了参数cishu,要嵌入汇编的话要加绝对地址头文件的。

#include <reg51.h>
#include <stdio.h>
#include <absacc.h> //绝对地址头文件

#define cishu DBYTE[0x75];//只有加了绝对地址头文件,此句才有效
#define s DBYTE[0x76];//
unsigned char cishu=20;
//定义成无符号char型就可以,定义成整形自找麻烦

data unsigned char s=0;
//定义成无符号char型就可以,定义成整形自找麻烦
sbit p10=ox90;
uart_Init();
main()
{uart_Init();
TMOD=ox21;
TH0=ox3c;
TL0=oxb0;
TF0=0;
EA=1;
ET0=1;
TR0=1;
while(1)
{if(s==1) }
{ s=0;
p10=~p1; }// 求反
}
}
uart_Init()
{scon=ox52; //设置串口方式
TMOD=ox20; //12MHZ时钟频率 波特率2400
TCON=ox69;
TH1=oxf3;}
void Timer0_port() inrterrupt 1 using 0 //中断函数
{
ASM CLR TR0
ASM MOV TH0 ,#3CH ;中断一 次50ms 20次1秒钟
ASM MOV TL0, #0B0H
ASM DEC 75H
ASM MOV A,75H
ASM JNZ WW
ASM MOV 75H ,#20
ASM MOV 76H,#1
ASM WW: STEB TR0
}
温馨提示:答案为网友推荐,仅供参考
相似回答