对应的文件选中“Generate Assembler SRC File”和“Assemble SRC File”选项,注意源先这两项是灰色选中,鼠标点击后将其确认为黑色选中状态。
(可选)同时编译的时候确保相应的库在Source Group下,如small模式,则加入C51S.lib到项目下。
Keil在DEBUG模式下,右键菜单“Load Hex or Object file ...”可有反汇编外部二进制模块的功能。其实IDA5.x/6.x的对单片机的支持相当不错了,没有误码。其他的反汇编工具多少都有错误的代码译出,IDA对付花指令相当有效。
以下混编例程是一款 红外逻辑分析仪的反汇编整理后的程序。原程序只有HEX码,反编译后加入了C结构,原ASM码的效率高些,但在STC 一周期指令的芯片上基本可以忽略。
原 红外逻辑分析仪 界面
#include
//汇编改写定时器0中断,编译会有CodeOverlay的警告信息,可以忽略,C结构的main入口由STARTUP.A51定义
#pragma ASM
ORG 000BH
LJMP TIMER0
#pragma ENDASM
#define FOSC 22118400L
sbit LED_FLASH=P1^3;
//可以部署在DATA,IDATA数据区
unsigned int ms_count=1000;
void i_exint0() interrupt 0 using 0{ //使用寄存器组,可以实现快速的压/出栈
#pragma ASM
SETB TR0
CLR 0x90.2
CLR TI
SETB ES
MOV SBUF,0x20
MOV 0x20,#0x00
SETB 0x21.7
JNB INT0,$
CLR TI
SETB ES
MOV SBUF,0x20
MOV 0x20,#0x00
#pragma ENDASM
}
void i_serial() interrupt 4 using 0{
#pragma ASM
CLR TI
CLR ES
MOV SBUF,0x21
MOV 0x21,#0x00
#pragma ENDASM
}
#pragma ASM
TIMER0:
MOV A,0x20
ADD A,#0x01
MOV 0x20,A
MOV A,0x21
ADDC A,#0x00
MOV 0x21,A
JNB 0x21.5,_TIMER0_RET
CLR TR0
SETB 0x90.2
MOV 0x20,#0x00
MOV 0x21,#0x00
_TIMER0_RET:
RETI
#pragma ENDASM
void main(void){
SCON=0x40;
TMOD=0x22;
TH1=0xff;
TL1=0xff;
TH0=0xdb;
TL0=0xdb;
PCON=0x80;
#pragma ASM //bdata 数据区
MOV 0x20,#0x00
MOV 0x21,#0x80
#pragma ENDASM
EA=1;
EX0=1;
IT0=0;
ET0=1;
TR1=1;
PS=1;
PT0=1;
INT0=1;
TR0=1;
while(1){ }
}
关键字:Keil Asm
引用地址:
Keil 51 Asm & C 混搭
推荐阅读最新更新时间:2024-03-16 16:16
MCS51单片机的滤波程序
MCS51单片机的滤波程序 ;限幅滤波程序 ;入口 :A,SDAT,DELTY ;占用资源:B ;堆栈需求:2字节 ;出口 :A JUGFILT :MOV B,A CLR C SUBB A,SDAT JNC JUGFT1 CPL A INC A JUGFT1 :SETB A SUBB A,#DELTY JNC JUGFT3 MOV A,SDAT RET JUGFT3 :MOV A,B MOV SDAT,A RET ;中位值滤波程序 ;入口 :ADDPH,ADDPL,N ;占用资源:E
[单片机]
利用51单片机统计脉冲个数,即时输出显示
;利用51单片机设计一个计数显示系统,要求8个数码管显示T1输入脉冲的个数。 ;最好用汇编语言,加注释,尽量别太复杂。尽量快些哈! ;悬赏分:30 | 解决时间:2011-7-20 19:15 | ;===================================================== ;最佳答案: ;题目要求在T1端输入脉冲,统计脉冲个数,并即时输出显示,使用8个LED数码管,显示:0000 0000~9999 9999。 ;计数、显示,很简单的。虽然要求的位数较多,但是循环一下,也就可以了。 ;程序用汇编汇编语言编写好了,指令不超过50行,太简单了。 ;题目只是要求在T1端输入脉冲,并没有指出显示电路,那么
[单片机]
S3C2440—4.时钟系统
一.S3C2440时钟体系介绍 1.总线与时钟 S3C2440有俩个总线:AHB高速总线、APB外围总线。 对应三个时钟源: ARM芯片CPU的FCLK AHB总线的HCLK APB总线的PCLK 三个时钟的工作频率: (可以看出对比STM32中72MHz的频率,ARM时钟的性能有了很大的提高) 2.时钟来源 如何得到三种时钟?系统的时钟来源是12MHz的晶振,通过PLL锁相环硬件设备可以得到高达400MHz的时钟频率,其时钟框图如下: 可以看出系统时钟来源的选择有俩种: 晶振 外部输入 (这里只讨论晶振) 3.选择时钟 通过设置OM 可以选择时钟源: 设置方法如下: 打开原理图查看
[单片机]
触屏尺寸成谜 诺基亚D1C配置全面泄露
此前安兔兔曝光的诺基亚D1C跑分成绩引起了不少人的关注,而现在这款神秘新机又在图形测试网站GFXBench最新公布的信息中浮出水面,确认将搭载骁龙430处理器,拥有3GB RAM+16GB ROM的存储组合,但出人预料的是,该款新机的触控屏尺寸变成了13.8英寸,并且主摄像头规格也略有升级,看上去似乎是一款平板电脑。 配置全面曝光
从此次图形测试网站GFXBench公布的诺基亚D1C的相关信息来看,该机确实搭载的是骁龙430处理器,主频速度为1.4GHz, 采用了Cortex-A53八核架构和集成Adreno 505图形芯片;拥有3GB RAM+16GB ROM的存储组合,并搭载Android 7.0系统,与此前
[手机便携]
C51与汇编混合编程详解
1.在 C文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma ASM ;Assembler Code Here #pragma ENDASM 2.在 Project窗口中包含汇编代码的 C文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态; 3.根据选择的编译模式,把相应的库文件(如 Small模式时,是 Keil\C51\Lib\C51S.Lib)加入工程中,该文件必须作为工程的最后文件; 4.编译,即可生成目标代码。 来个实例吧: #includ
[单片机]
S3C2440开发板文件传输
看着教程里的各种软件,真是晕的不行,好好整理。 一、空白开发板第一步---写bootloader 类似于给电脑装系统,不装系统就是一块集成电路板,鸟用没有。bootloader就等价于bios,常用的bootloader有U-BOOT、supervivi(改进的vivi,加了一个usb下载功能而已)。工具是真的多,各种开发板制作商家都可能开发出自己的一套下载工具,五花八门,想想刚开始接触的时候,试工具都试了几天,想想也是心累,区分一下各种名词: 1、JTAG 开发板在没有写任何系统时,里面啥驱动都没有,芯片是啥都不会认的,usb、串口接了也不会有反应。还好有JTAG协议,原本是用来做芯片测试的,这里拿来写引导程序。 2、JLINK
[单片机]
步进电机加速-匀速-减速运行程序(C51源程序)
ME300系列单片机开发系统+步进电机模块演示程序 功能:步进电机以加速方式启动,转速达到程序规定的最快速度后保持一段时间匀速运转,又开始以减速 方式运行直到步进电机停止转动。由K1键控制演示程序运行。步进电机模块上D1-D4可以指示工作状态。 /******************************************************************/ /* */ /* ME300B单片机开发系统演示程序 - 步进电机加减速运行程序
[单片机]
基于8051单片机的频率测量技术
0 引言 随着无线电技术的发展与普及,"频率"已经成为广大群众所熟悉的物理量。而单片机的出现,更是对包括测频在内的各种测量技术带来了许多重大的飞跃,然而,小体积、价廉、功能强等优势也在电子领域占有非常重要的地位。为此.本文给出了一种以单片机为核心的频率测量系统的设计方法。 1 测频系统的硬件结构 测量频率的方法一般分为无源测频法、有源测频法及电子计数法三种。无源测频法(又可分为谐振法和电桥法),常用于频率粗测,精度在1%左右。有源比较法可分为拍频法和差频法,前者是利用两个信号线性叠加以产生拍频现象,再通过检测零拍现象进行测频,常用于低频测量,误差在零点几Hz;后者则利用两个非线性信号叠加来产生差频现象,然后通过检测零差现象进
[测试测量]