怎么样在c程序中使用汇编编程
方法一:在每个汇编语句前加asm即可。如
void reset_data(void)
{
asm mov r0,#0dfh
asm do_resetdata:
asm mov @r0,#00h
asm djnz r0,do_resetdata
return ;
}
方法二:把asm作为关键字后续汇编用大括号括起来即可。如下:
void reset_data(void)
{
asm
{ mov r0,#0dfh
do_resetdata:
mov @r0,#00h
djnz r0,do_resetdata
}
return ;
}
keil c6.20c 直接嵌入汇编的方法
发表于 2007-5-24 18:23:17
#ifdef ASM
unsigned long shiftR1(register unsigned long);
#else
extern unsigned long shiftR1(register unsigned long);
#endif
//end of asm.h
//
#define ASM
#include
#include
#pragma OT(4,speed)
unsigned long shiftR1(register unsigned long x)
{
#pragma asm
clr c
mov a,r4
rrc a
mov r4,a
mov a,r5
rrc a
mov r5,a
mov a,r6
rrc a
mov r6,a
mov a,r7
rrc a
mov r7,a
#pragma endasm
return(x);
}
//end of asm.c
将此源文件加入要编译的工程文件,
将光标指向此文件,选择右键菜单“option for file 'asm.c'”,
将属性单“properties”中的“Generate Assembler SRC File”“Assemble SRC File”
两项设置成黑体的“√”将“Link Public Only”的“√”去掉,再编译即可。
用此方法可以在c源代码的任意位置用#pragma asm和#pragma endasm嵌入汇编语句。
但要注意的是在直接使用形参时要小心,在不同的优化级别下产生的汇编代码有所不同,
可以察看对应的.lst文件看一看,得到正确的优化级别后,#pragma OT(x,speed)锁定
优化级别(这里的值是0-9)。
关键字:c51 嵌套汇编
引用地址:
c51中嵌套汇编的方法
推荐阅读最新更新时间:2024-03-16 15:09
C51中编译错误信息
致命错误 致命错误立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不 能访问一个特定的源包含文件时也产生致命错误 致命错误信息采用下面的格式 C51 FATAL-ERROR – ACTION : current action LINE: line in which the error is detected ERROR: corresponding error message C51 TERMIANTED. C51 FATAL-ERROR – ACTION: current action FILE: file in which the error is detected ERROR: corresp
[单片机]
Keil C51中printf()函数的说明
在C51中,使用printf()函数进行格式化输出时,格式控制符与ANSI C有所不同。 在格式控制字符中,b表示byte 以十进制输出uint8_t : %bu 以十进制输出int8_t : %bd #include void tst_printf (void) { char a = 1; int b = 12365; long c = 0x7FFFFFFF; unsigned char x = 'A'; unsigned int y = 54321; unsigned long z = 0x4A6F6E00; float f = 10.0; float g =
[单片机]
c51: DS1820
//DS1820 应用 //分辨率 12位 #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar digit = 0123456789 ; //延时1 毫秒 程序 void delayms(); //延时 s 毫秒 程序 void delaynms(uint); //初始化 LCD void InitLCD(); //写LCD 指令 void WriteInstruction(uchar); //写LCD 数据 void WriteData(uchar); //写地址 vo
[单片机]
如何实现C51单片机和PLC之间通讯
1、 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。 它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机[1]作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2、Modbus通讯协议 Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 M
[单片机]
AVR,C51和PIC单片机比较
八位单片机由于内部构造简单,体积小,成本低廉,在一些较简单的控制器中应用很广。即便到了本世纪,在单片机应用中,仍占有相当的份额。由于八位单片机种类繁多,本文仅将常用的几种在性能上作一个简单的比较,供读者在使用时作参考。 1. 51系列 应用最广泛的八位单片机首推Intel的51系列,由于产品硬件结构合理,指令系统规范,加之生产历史“悠久”,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。有人推测,51芯片可能最终形成事实上的标准MCU芯片。 51系列优点之一是它从内部
[单片机]
C51编程中头文件的使用
头文件在C51的编程中是不可缺少的部分。本文将对keil C中常用头文件予以说明,并就如何编写头文件进行初步介绍。 一、C51常见本征函数库 一些常见的头文件都是keil C自带的,在安装目录下的C51文件夹的INC中可以找到keilC中所有的芯片所对应的头文件。51系列单片机在编程中常用的头文件有:AT89X51.H、INTRINS.H、ABSACC.H、MATH.H。 1、AT89X51.H 本征函数库 头文件AT89X51.H是编程中必需要用到的专用寄存器文件。它与INC中的头文件REG51.H所定义的内容是一样的。主要用来定义特殊功能寄存器的位地址、程序状态寄存器的位地址、定时器/计数器控制寄存器的位地址、中断使能
[单片机]
[C51代码]广告灯的循环移动
#include reg51.h /************************************************/ sbit Key=P2^0; static unsigned char p=0; void delay1ms(unsigned int count) { int x,y; for(x=0;x count;x++) for(y=0;y 120;y++); } /************************************************/ void ScanKey() { if(Key==0) { delay1ms(1); if(Key==0) {
[单片机]
单片机驱动74HC595的c51程序
//该子程序为74HC595发送字符的程序,该程序是先发送的是最低位! //芯片74HC595的时钟引脚为第11脚 //芯片74HC595的数据引脚为第14脚 //芯片74HC595的锁存引脚为第12脚 //当有多片74HC595串联时,只有当所有数据都发送完成后,再锁存信号! //同样74hc164与51单片机连接也可以由这个程序来驱动 #include #define uchar unsigned char #define uint unsigned int sbit clk=P3^5; sbit dat=P3^6; sbit shuo_cun=P3^7; uchar volatile e,f; uchar code ta
[单片机]