单片机
返回首页

Keil 51 Asm & C 混搭

2018-10-17 来源:eefocus

对应的文件选中“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 一周期指令的芯片上基本可以忽略。


原 红外逻辑分析仪 界面

Keil <wbr>51 <wbr>Asm <wbr>& <wbr>C <wbr>混搭

#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){   }

}


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章