;----------------------------------------------------------------------------------
;常量定义
;----------------------------------------------------------------------------------
year equ 2004 ;当前的年月日
month equ 6 ;当写入FLASH时,需要与当前的实际
;---------------------------------------------------------------------------------
;RAM 变量定义
;---------------------------------------------------------------------------------
ram1 equ 200h ;
ram2 equ 202h ;
;---------------------------------------------------------------------------------
;程序段
;---------------------------------------------------------------------------------
_asm_main
mov ram1, R15 ; 直接访问equ定义的数据,并将flag1作为地址使用
rla R15 ; ram1*2
add R15,PC
jmp seg1
jmp seg2
jmp seg3
jmp seg4
seg1
mov.b #CAEX+CARSEL+CAREF0+CAON,&CACTL1
; +Comp = 0.25*Vcc ,CA on 立即数变量用#代替,目标寄存器用&,表示将前面的立即数写到该地址寄存器中
mov.b #P2CA0+CAF,&CACTL2
mov.w #TASSEL1+MC1+TACLR,&TACTL
call #Charge ; 调用某个函数用call,被调用函数名字前需要加#
jmp end ; 跳转到某个函数用jmp,后面直接跟跳转到的函数名字
seg2
bic #CCIE, &CCTL0 ; CCIE CCTL0均是头文件中define宏定义的变量,当立即数使用加#,当作地址使用加&
bic.b #04fh, &P1DIR ; 其实CCTL0 P1DIR宏定义时都指的是该寄存器的地址
bis.b #04fh, &CAPD
mov &CCR1,R15 ; 宏变量如CCR1无论是作为目标操作数还是源操作数,如取出该地址的数都得加&
sub ram2,R15 ; 直接将内存地址ram2指向的内容读出来,放到r15中
mov R15, ram3 ; equ定义的ram3作为地址,直接使用
call #Charge ; 调用charge函数
jmp end
seg3
……………………
charge
mov #year,R5 ; 将equ定义的year作为立即数使用时,需要在前面加#
mov #month,R6
rla R6
mov #year, Year ;year,Year都是用equ定义的常量,前者作为立即数,后者作为内存地址
mov #month, Month
end
nop
总结:define定义的常量,作为立即数时需要加#,作为地址时需要加&
equ定义的常量,作为立即数时需要加#,作为地址时不需要加额外符号。
调用一个函数用call,后面的函数段名必须加#,
如果用jmp跳转程序,则后面的函数段名不必加#