栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Keil5内嵌汇编

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

经过实测可以使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号