keil软件中C语言嵌套汇编

发布者:电子艺术大师最新更新时间:2015-08-17 来源: eefocus关键字:keil软件  C语言  嵌套汇编 手机看文章 扫描二维码
随时随地手机看文章
一、讲解背景

在单片机学习的过程中,掌握一点汇编语言是非常有必有的,作为低级语言汇编语言在单片机开发中有它不可取代的作用,比如每条指令可以精确的确定延时时间,便于理解非常适合硬件工程师学习。但是要提高单片机技能,必须掌握C 语言编程,因为C 语言有强大的模块化管理思想。我想在很多人学习的过程中即学了汇编语言,又学习了C 语言,那么一个问题便随之而产生,如果将C 语言与汇编语言相互结合,达到更好的编程效果,本次讲解就是基于这个问题而生成的。

二、操作步骤

第一步:

在KEIL 中新建工程及文件并复制以下程序并保存为C 文件:

#include

delay()

{

int i,j;

for(i=0;i<1000;i++)

for(j=0;j<120;j++); //12M 晶振下延时1MS

}

main()

{

P2=0x00; //控制8 个LED 亮

delay(); //延时1S

#pragma ASM//汇编嵌套开始

MOV P2,#0FFH //汇编嵌套结束

#pragma ENDASM//汇编嵌套开始

while(1); //C 程序结束

}

第二步:

选中 Project 窗口中的C 文件,比如CX1.C,并右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使复选框的打钩由灰色变成黑色状态(双击即可);

第三步:

将相应的库文件(如 Small 模式时,是 KeilC51LibC51S.Lib)加入工程中, 该文件必须作为工程的最后文件 (将该文件像头文件一样加载到工程中);

第四步:

在KEIL 中编译生成HEX 文件,并按如下图设计仿真图,在仿真中查看效果。


关键字:keil软件  C语言  嵌套汇编 引用地址:keil软件中C语言嵌套汇编

上一篇:单片机晶振电路详解
下一篇:51单片机程序存储器和数据存储器

推荐阅读最新更新时间:2024-03-16 14:28

单片机C语言的知识汇总(2)
C51常量 1、常量数据类型说明: (1)整型常量能表示为十进制如 123,0,-89 等。十六进制则以 0x 开头如 0x34,-0x3B 等。长整型就在数字后面加字母 L,如 104L,034L,0xF340 等。 (2)浮点型常量可分为 十进 制和指数表示形式。指数表 示形式为 数字 e 数字, 中的内容为可选项,其中内容根据具体情 况可有可无,但其余部分必须有,如125e3,7e9,-3.0e-3。 (3)字符型常量是单引号内的字符,如‘a’,‘d’等,不能显示的控制字符,能 在该字符前面加一个反斜杠“”组成专用转义字符。常用转义字符表请看表: (4)字符串型常量由双引号内的字符组成,如“test”,“OK”等。当引号
[单片机]
KST-51单片机:c语言编程实现数码管动态显示秒表的倒计时
/*60S倒计时*/ /*个位每1S变一次,从0~9*/ /*十位,个位为0的下一秒十位发生变化*/ #include reg52.h sbit ADDR0=P1^0; sbit ADDR1=P1^1; sbit ADDR2=P1^2; sbit ADDR3=P1^3; sbit ENLED=P1^4; unsigned char code LedChar = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90 }; void main() { unsigned int cnt=0; //记录中断次数 unsigned int sec=0; //记录
[单片机]
ARM中ADS环境下C语言汇编语言混合编程及示例
稍大规模的嵌入式程序设计中,大部分的代码都是用C来编写的,主要是因为C语言具有较强的结构性,便于人的理解,并且具有大量的库支持。但对于一写硬件上的操作,很多地方还是要用到汇编语言,例如硬件系统的初始化中的CPU 状态的设定,中断的使能,主频的设定,RAM控制参数等。另外在一些对性能非常敏感的代码块,基于汇编与机器码一一对应的关系,这时不能依靠C编译器的生成代码,而要手工编写汇编,从而达到优化的目的。汇编语言是和CPU的指令集紧密相连的,作为涉及底层的嵌入式系统开发,熟练对应汇编语言的使用也是必须的。这里主要讨论C和汇编的混合编程,包括相互之间的函数调用。下面分四种情况来进行讨论,不涉及C++语言。 一、在C语言中内嵌汇编 在C
[单片机]
读内部R/C时钟及ID号C语言参考程序
#include reg51.h #include intrins.h sfr IAP_CONTR = 0xC7; sbit MCU_Start_LED = P1^7; //unsigned char self_command_array = {0x22,0x33,0x44,0x55}; #define Self_Define_ISP_Download_Command 0x22 #define RELOAD_COUNT 0xfb //18.432MHz,12T,SMOD=0,9600bps void serial_port_initial(); void send_UART(unsigned char); void
[单片机]
基于串口通信的单片机仿真和C语言开发
0 引言 本论文题目为基于串口通信的单片机仿真和C 语言开发,研究的是一种基于串口的温度检测数据收发模块。利用DS18B20 温度传感器设计温度监测模块,精确到0.1℃,用液晶显示当前温度,然后通过串口调试助手向单片机发送指令。当单片机收到十六进制指令01时,将当前温度值以1s 为间隔传回PC 机显示,同时PC 机显示Turn on temp;当单片机收到十六进制指令02 时,停止温度值的回传,PC 机显示Turn off temp;当单片机收到其它指令时,PC 机显示Error。 1 总体设计 本系统功能由硬件和软件两大部份协调完成,硬件部分主要完成信息的显示;软件主要完成信号的处理及控制功能等。 本系统的硬件采用模块化
[单片机]
C语言宏定义和宏定义函数
C语言宏定义和宏定义函数 宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。   我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义:   #define MAX( a, b) ( (a) (b) (a) : (b) )   其次,把它用函数来实现:   int max( int a, int b)   {   return (a b a : b)   }   很显然,我们不会选择用函数来完成这个任务,原因有两个:首先,函数
[单片机]
AVR C语言开发简介
Avr单片机和其他单片机一样,有自己的指令和寄存器,特定的IO口操作方法,有定时器,AD转换,串行口,PWM输出,EEPROM等。为了缩短大家学习的时间,快速的了解avr编程思路,拟定avr程序设计系列教程。我使用avr也不是很长时间,技术有限,错误再所难免,还请指出,以期改正。 【说明】:本页是针对从来没有碰过单片机或者用过单片机而没有用c语言的朋友,如果你已经用过其他单片机,此页说明可能对你没有很大帮助,且显得有些幼稚,请你跳过。 本站所有程序都是在icc+avrstudio下进行的,如果你没有配置好环境 采用icc的原因之一是它自带一个非常好用的application builder,生成的代码结构清晰,层次清楚
[单片机]
AVR <font color='red'>C语言</font>开发简介
C语言编译过程中的错误分析
 语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考。    1.书写标识符时,忽略了大小写字母的区别。   main()   {   int a=5;   printf("%d",A);   }   编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved