Keil5内嵌汇编

单片机:HC32L176JATA

内核:Cotex M0

本单片机在Keil5中内嵌汇编时只支持M0指令集。

下面是将12864液晶屏的驱动改为汇编以提高运行效率。

//原来C代码

void LCD_SdCmd(uint8_t Command)
{
    uint8_t i;
    LCD_A0_RESET();
    LCD_CS_RESET();
    for(i=0;i<8;i++)
    {
        LCD_SCLK_RESET();
        if(Command & 0x80)
            LCD_DATA_SET();
        else
            LCD_DATA_RESET();
        LCD_SCLK_SET();
        Command <<= 1;
    }
    LCD_CS_SET();
}

//内嵌汇编后的代码

void LCD_SdCmd(uint8_t Command)
{
    #define PAOUT_ADDR		0x40020D48
    //下面定义的变量,汇编代码可以直接用,如果用R0这类寄存器则会有警告
    uint32_t port_out=PAOUT_ADDR;
    uint32_t value;
    uint8_t i=8; 
    uint8_t temp;
    __ASM 
    {
    	LDR value, [port_out]
	    BICS value,value, #0X80		//LCD_A0_SET();
	    BICS value, value, #0x1000;	//LCD_CS_RESET();
	    STR value, [port_out]
	
    loop:
	    BICS value, value, #0x2000;	//LCD_SCLK_RESET();
	    STR value, [port_out]

	    BICS value, value, #0x4000;	//LCD_DATA_RESET();
	    ANDS temp, Command, #0X80	//1
	    BEQ loop2				//3
	    ORRS value, value, #0x4000;	//LCD_DATA_SET();	//1
    loop2:
	    STR value, [port_out]	//2
	    ORRS value, value, #0x2000;	//LCD_SCLK_SET(); 
	    STR value, [port_out]
	    LSLS Command, Command, #1		//DData <<= 1;
	    SUBS i, #1
	    BNE loop
	    ORRS value, value, #0x1000;	//LCD_CS_SET();
	    STR value, [port_out]
    }	
}

经过实测可以使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值