怎样在单片机C代码中加入汇编延时子程序?

如题所述

(1)、C51语言中调用汇编语言程序;
C51语言调用汇编语言程序要注意以下几点:
1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。
2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\C51\LIB\C51S.LIB)加入工程中。
3:在C51语言中必须声明需要调用的函数为外部函数。extern void DELAY(void);
4:在汇编语言程序中必须声明被调用子程序为公共子程序,在被调用的文件中还需要声明此文件是可从新定位的。
PUBLIC DELAY,DEL
DELAYY SEGMENT CODE
RSEG DELAYY
实例如下:
C51语言文件:
#include "reg51.h"
extern void DELAY(void);
extern void DEL(void);
void main(void)
{
P1=0x00;
DELAY();
DEL();
P1=0xff;
}
汇编语言文件:
PUBLIC DELAY,DEL
DELAYY SEGMENT CODE
RSEG DELAYY

DELAY: MOV R2,#3H
DJNZ R2,$
RET
DEL: MOV R3,#03H
DJNZ R3,$
RET
END
(2)、C51语言中嵌入汇编程序;
在C51语言中嵌套使用汇编语言编写程序要注意以下的几个问题:
1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。
2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\C51\LIB\C51S.LIB)加入工程中。
3:用#pragma asm,和#pragma endasm语句包含嵌入的汇编语言程序。
实例如下:
#include "reg51.h"
void delay(void);
void main(void)
{
void delay(void);
P1=0x00;
#pragma asm
MOV R3,#08H
DJNZ R3,$
#pragma endasm
P1=0xff;
}
void delay(void)
{
#pragma asm
MOV R4,#08H
DJNZ R4,$
#pragma endasm
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-21
在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码:
#pragma ASM
; Assembler Code Here(汇编程序)
#pragma ENDASM

参考资料:http://www.mcu123.com/news/Article/uc/uc8051/200609/340.html

第2个回答  2010-09-21
asm(" EI ");
asm("nop");
asm("ROR _send_dta ");
嵌入这样的语句就可以了!

怎样在单片机C代码中加入汇编延时子程序?
1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\\C51\\LIB\\C51S.LIB)加入工程中。3:在C51语言中必须声明需要调用的函数为外部...

单片机中c语言中如何加入汇编
1、在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码:2、在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;3、根据选择的编译模式,把相应的库文件(如 Small 模式...

C51写单片机程序如何插入汇编指令.
C51些单片机程序插入汇编指令的方法如下:1、以#pragma asm开始,以#pragma endasm结束,用pragma asm和#pragma endasm这两个伪指令将汇编代码包起来。比如:2、但是如果直接这样嵌入汇编代码的时候,编译时会报错,错误代码是:'asm\/endasm' requires src-control to be active 解决办法是:在工程中,...

请帮忙在51系列单片机系统中,编写一个延时1ms的子程序。谢谢。。_百...
1、首先,在电脑中打开keil软件,创建好工程,然后添加c文件,如下图所示。2、然后添加c文件,接下来输入代码,先输入一个头文件命令。3、然后,进行宏定义,代码如图所示。4、然后声明P1口,如下图所示。5、最后,将延时语句全部添加进去,代码按照图中所示的直接敲入即可。6、最后,点击编译,生成HEX...

单片机c语言延时程序
默认会打开Disassembly Window,如下所示(既有C语言原型,又有汇编后的结果),接下来,只需数一数该循环程序体的汇编指令总机器周期数,即可得到精确的延时时间。 279: void delay(uint ms)280: { uchar i;281: for( ; ms > 0 ; ms--)C:0x6807 D3 SETB C C:0x6808 ...

单片机。用汇编语言编程。 设计一软件延时1s的子程序。设晶振频率为12M...
mov a,high(65536-31250)mov TMR0h,a(计数器的赋予初始值的高位寄存器)set tmr0c.4 (打开记数)snz intc0.6 (是否有中断请求标志)(有就跳过)jmp $-1 (退回一步)clr tmr0c.4 (关闭记数)clr intc0.6 (清除中断标志)ret 参考资料:HT46R65/HT46c65 ...

如何用c语言实现单片机延时?
最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响。500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);} ...

单片机中,怎么用汇编语言编写程序实现延迟40ms
1.循环延时的方法 DELAY: ;误差 0us MOV R7,#25H DL1:MOV R6,#9AH DL0:MOV R5,#02H DJNZ R5,DJNZ R6,DL0 DJNZ R7,DL1 RET 不过这不实用。40MS时间单片机都 在这里循环,不作能它事。1.可以用定时中断的方法:ORG 0000H LJMP START ORG 000BH LJMP Timer0Interrupt START:MOV SP...

51单片机用汇编语言设计1S延时子程序,晶振为12MHz。 (麻烦附上详细计算...
如果单纯延时,可以用实验的办法,在keilc51里面仿真 void Delay1S(char n){ char i,j;n=n*4;for(;n;n--){ for(i=6;i;i++){ for(j=7;j;j++) \/\/ 一个循环约为1mS ;} } } 看编译后的汇编:C:0x0805 7D01 MOV R5,#0x06;j=1,1时钟 C:0x0807 0D INC ...

单片机延时子程序流程图
利用以上三条指令的组合就可以比较精确地编写出所需要的延时程序。 三、1 秒延时子程序、流程图及时间计算 (以单片机晶振为12MHz 为例,1 个机器周期需要1μs) 了解了以上的内容,现在让我们来看看 程序总共所需时间:1+10+2560+330240+660480+5120+20+2=998433 μs≈1S 在这里运行这段程序共需998433 μs,还...

相似回答
大家正在搜