单片机: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条)