kaily
发表于 2025-5-27 10:51:13
乘风飞扬
发表于 2025-5-27 16:09:52
汇编程序-多文件项目
通过 "CSEGAT xx" 设置代码块起始地址。
通过 "xxx SEGMENT CODE" 设置代码块。
通过 "RSEG xxx" 切换到xxx代码块。
EXTRN CODE (xxx) ;申明外部函数
PUBLICxxx ;申明公共函数
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 AT0BH ;1Timer0 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_delaySEGMENT 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
PUBLICF_delay_ms ;申明公共函数
参考例程下载:
kaily
发表于 2025-5-27 17:33:33
kaily
发表于 2025-5-28 17:19:58
kaily
发表于 7 天前
kaily
发表于 5 天前
最新 AI8051U 数据手册 下载
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf
===================================================================
P8-P29的内容请下载本页附件!