一、讲解背景
在单片机学习的过程中,掌握一点汇编语言是非常有必有的,作为低级语言汇编语言在单片机开发中有它不可取代的作用,比如每条指令可以精确的确定延时时间,便于理解非常适合硬件工程师学习。但是要提高单片机技能,必须掌握C 语言编程,因为C 语言有强大的模块化管理思想。我想在很多人学习的过程中即学了汇编语言,又学习了C 语言,那么一个问题便随之而产生,如果将C 语言与汇编语言相互结合,达到更好的编程效果,本次讲解就是基于这个问题而生成的。
二、操作步骤
第一步:
在KEIL 中新建工程及文件并复制以下程序并保存为C 文件:
/*
功能:C 语言里嵌套汇编语言,起到抛砖引玉的作用
作者:三维电子杨荣国
日期:2010-5-16
*/
#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 模式时,是 Keil\C51\Lib\C51S.Lib)加入工程中, 该文件必须作为工程的最后文件 (将该文件像头文件一样加载到工程中);
第四步:
在KEIL 中编译生成HEX 文件,并按如下图设计仿真图,在仿真中查看效果。
三、演示效果
如下图,如果你在你自己的仿真软件PROTEUS 上看到单片机P2 口控制的8 个LED 先亮延时1S 左右自动熄灭的效果。那说明你已经完全掌握C 语言里嵌套汇编语言的方法了。
作业:实现C 语言嵌套汇编语言,C 语言实现控制P2.0 的红色LED 以0.1S 的时间间隔闪烁5 次,汇编语言实现控制P2.1 的绿色LED 以0.1S 的时间间隔闪烁3 次,并停止。
关键字:KEIL C语言 嵌套 汇编语言
引用地址:
在KEIL中实现C语言嵌套汇编语言
推荐阅读最新更新时间:2024-03-16 13:07
C语言的博大精深之数组和结构体的赋值操作
第一话,先谈谈数组赋值吧。恩,在C语言中数组赋值和结构体赋值很简单,就是使用=,memcpy操作嘛. 但最近在看关于队列调度的内核实现代码时,发现如下奇怪的赋值语句。(具体程序见linux-2.6.8:net/core/Rtnetlink.c的539行) #define RTM_MAX (RTM_BASE+47) #define RTM_GETLINK (RTM_BASE+2) struct rtnetlink_link { int (*doit)(struct sk_buff *, struct nlmsghdr*, void *attr); int (*dumpit)(stru
[单片机]
Keil4 编译时出现RL-ARM is not allowed with this license
最近在用MDK编译一个别人的工程时,有如上提示: 原因是没有注册Real-Time OS; 解决方法: 打开MDK的注册机,按如上所设,再生成一个序列号,注册Real-Time OS; 注:CID从MDK的file- license Management中复制得来,点击Generate,生成序号,添加进去。 OK!问题解决
[单片机]
做自己的LPC17xx keil固件库的方法
做自己的LPC17xx固件,主要解决LPC17xx活用问题。 Lpc之做自己的keil固件库 习惯于 keil 的环境,也刚学了点 stm32,觉得 stm32 的固件库用起很方便的, 在 LPCXpresso 上师兄些都讲得过多,也过细,我想“另类”一点,写一篇 keil 的文章 Lpc 没有提供有固件库,但看它的例子,想了一下,何不将例子中的文件做成固件库呢? 以 gpio 为例: 我用的是 mdk410prc.exe,可以从网上下 Lpc 的例子 lpc1343.examples.zip 将 lpc1343.examples.zip 解压开 打开 keil Project- New uVision Projec
[单片机]
Keil c51调试总结
简介:Keil c51调试有关问题总结 1.出现warning C182 : pointer to different objects. re: A pointer was assigned the address of a different type. 2.出现warning L16 : uncalled segment, ignored for overlay proess segment Keil c51调试有关问题总结 1. 出现warning C182 : pointer to different objects. re: A pointer was assigned the address of a diff
[单片机]
keil5(MDK5)配置S3C2440裸机开发调试环境
引言 用于arm裸机程序开发的IDE基本有 以下3个:MDK或者称Keil,IAR,还有ADS。其中ADS已经停止更新,不建议使用了。它们的具体情况在这里我就不多说了,百度一下就明白了。 由于之前开发c51的时候都使用了MDK开发环境,而且MDK的界面确实看起来舒服多了,所以我选择了MDK作为我的s3c2440裸机开发的IDE。以下主要介绍一下如何使用MDK配合J-link来调试基于s3c2440的开发板。 MDK、J-link的安装 MDK5软件包请自行百度下载,官方网站上的需要注册下载略显麻烦。安装后需要注册码,否则使用有限制。个人学习研究可尝试破解,安装和破解方法请自行百度。 这里我只提醒需要特别注意的地方:MDK5以后的
[单片机]
STM32基础入门(三)——Keil的使用
1. Keil概述 Keil MDK,也称MDK-ARM、Realview MDK、I-MDK、uVision4 等。 MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。 MDK-ARM有四个可用版本,分别是MDK-Lite、MDK-Basic、MDK-Standard、MDK-Professional。所有版本均提供一个完善的C / C++开发环境,其中MDK-Professional还包含大量的中间库。 完美支持Cortex-M、Cortex-R4、A
[单片机]
网络单片机PIC18F97J60的开发与应用
Microchip公司生产的PICl8F97J60单片机将PIC18系列高端8位单片机与完整的以太网控制器集成在一起,并且包括了MAC、PHY和RAM收发缓冲器。利用这一64或100引脚封装的系列器件享有的完善网络连接功能,可以实现成本低、简单易用的以太网应用方案。此外,利用Microchip公司免费提供的TCP/IP软件栈,能够大大缩短开发时间。 1 PICl8F97J60网络单片机 1.1 网络特性 PICl8F97J60系列器件具有嵌入式以太网控制器模块。这是一个完整的连接解决方案,完全实现了介质访问控制(Media Access Control,MAC)和物理层收发器(Physical Layer Tr
[单片机]
s3c2440 ads程序移植到keil中(二) 初步完成
如果我把参数配置发生改变呢 然后再一次编译 要包错误 如下所示 错误如下 这个错误解决不了 最后查看了网上网友的方法 又可以修改 但是引入了nand文件 最后反正知道了2440init.s文件要修改许多 所以我就不再这里继续整了 浪费时间 直接运用网上网友的东西即可 网友编写的地址 https://blog.csdn.net/hannibaychty/article/details/44873327 从买板子到现在,想想也有2个月啦,开始就想跑裸奔的,可是工程都是在ADS下,win7系统根本不能用,于是就想着怎么在MDK跑,可是MDK上s3c2440的启动文件是不完整的,因此不推荐使用,为此蛋疼聊好长一段时间,查了很
[单片机]