本帖最后由 STM32W108 于 2011-1-23 19:13 编辑
开始学ASM,IARSTM8第一个汇编程序,LED闪烁。
IARSTM8新建ASM工程,模板里的启动代码是错误的,需要自己写向量表。
使用与IARSTM8 C语言相同的虚拟寄存器。函数调用寄存器传递规则也参照IAR STM8 C。
(这样汇编,C能够混用,C能调用汇编,汇编也能调用C)
手上没示波器,延时函数延时不准。
#include "proj_incs.h"
//IAR STM8寄存器使用规则:
//A,X,Y,?b0-?b7 草稿寄存器
//?b8-?b15 存储寄存器
PUBLIC main
SECTION `.near_func.text`:CODE:NOROOT(0)
main:
CLR A
LD CLK_CKDIVR, A // 主时钟 = 16MHZ
LD A, #0x01 //PD0设置成推挽输出
LD PD_DDR, A
LD PD_CR1, A
CLR A
LD PD_CR2, A
main_loop:
BRES PD_ODR, #0x0 //PD0输出0
LDW X, #1000 //延时
CALL delay_ms
BSET PD_ODR, #0x0 //PD0输出1
LDW X, #1000 //延时
CALL delay_ms
JRA main_loop
SECTION `.near_func.text`:CODE:REORDER:NOROOT(2)
CODE
delay_ms:
TNZW X
JRNE __delay_ms_2
__delay_ms_0:
RET
__delay_ms_1:
TNZW X
JREQ __delay_ms_0
__delay_ms_2:
DECW X
LDW Y, #0x3d4
__delay_ms_3:
DECW Y
TNZW Y
JREQ __delay_ms_1
JRA __delay_ms_3
END |