Keil5内嵌汇编

Keil5内嵌汇编,第1张

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]
    }	
}

经过实测可以使用。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5610207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存