汇编程序-多文件项目
通过 "CSEG AT xx" 设置代码块起始地址。
通过 "xxx SEGMENT CODE" 设置代码块。
通过 "RSEG xxx" 切换到xxx代码块。
EXTRN CODE (xxx) ;申明外部函数
PUBLIC xxx ;申明公共函数
main.asm
- $include (AI8051U.INC) ;包含头文件
-
- EXTRN CODE (F_delay_ms) ;申明外部函数
-
- ;=========================================================
- CSEG AT 0 ;设置起始地址
- LJMP MAIN
-
- code_seg_main SEGMENT CODE ;设置程序段
- RSEG code_seg_main ; switch to main code segment
-
- MAIN:
- MOV WTST, #00H ;设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
- MOV CKCON,#00H ;提高访问XRAM速度
- ORL P_SW2,#080H ;使能访问XFR
-
- MOV P4M1,#00000000B ;P42,P43设置推挽输出
- MOV P4M0,#00001100B
-
- MOV SP,#3FH
- CLR P4.3 ;P43输出低电平
-
- LOOP:
- CPL P4.2 ;测试端口
- CPL P4.3 ;测试端口
- LCALL F_delay_ms ;延时250ms
- JMP LOOP
-
- ;=========================================================
-
- CSEG AT 0BH ;1 Timer0 interrupt
- LJMP F_Timer0_Interrupt
-
- int0_code_seg SEGMENT CODE ; segment for interrupt function
- RSEG int0_code_seg ; switch to int code segment
-
- F_Timer0_Interrupt: ;Timer0 中断函数
- RETI
-
- ;=========================================================
- END
-
复制代码
Delay.asm
- $include (DELAY.INC) ;包含头文件
-
- code_seg_delay SEGMENT CODE ;设置程序段
- RSEG code_seg_delay ; switch to delay code segment
-
- ;========================================================================
- ; 函数: F_delay_ms
- ; 描述: 延时子程序。
- ; 参数: ACC: 延时ms数.
- ; 返回: none.
- ; 版本: VER1.0
- ; 日期: 2013-4-1
- ; 备注: 除了ACCC和PSW外, 所用到的通用寄存器都入栈
- ;========================================================================
-
- F_delay_ms:
- PUSH 02H ;入栈R2
- PUSH 03H ;入栈R3
- PUSH 04H ;入栈R4
-
- MOV R4,#250
-
- L_delay_ms_1:
- MOV WR2, #(Fosc_KHZ / 4)
-
- L_delay_ms_2:
- DEC WR2, #1 ;1T
- JNE L_delay_ms_2 ;3T
-
- DJNZ R4, L_delay_ms_1
-
- POP 04H ;出栈R4
- POP 03H ;出栈R3
- POP 02H ;出栈R2
- RET
-
- ;========================================================================
- END
复制代码
Delay.inc
- Fosc_KHZ EQU 40000 ;40000KHZ
-
- PUBLIC F_delay_ms ;申明公共函数
复制代码
参考例程下载:
汇编多文件项目.zip
(12.78 KB, 下载次数: 7)
|