51单片机汇编100例 关于基于51单片机的汇编语言编程实例:经典案例解析” 5
示例一:MAIN程序
“`
MAIN: LCALL INIT ; 调用初始化子程序
LOOP: LCALL DIS ; 循环执行显示子程序
AJMP LOOP ; 跳转回LOOP
INIT: SETB SNF ; 设置某个寄存器或引脚为高电平
SETB EWF ; 设置另一个寄存器或引脚为高电平
…(其他初始化代码)…
“`
“`
START_PROGRAM:
CALL INIT_SUBROUTINE ; 调用初始化子程序
REPEAT_LOOP:
CALL DISPLAY_SUBROUTINE ; 循环执行显示子程序
SJMP REPEAT_LOOP ; 跳转回循环开始
INIT_SUBROUTINE:
SETB SingleFunctionBit ; 设置单片机的某个功能位为高电平
…(其他初始化代码)…
“`
题目要求:从片内RAM的20H单元开始,有30个数据,编写程序将正数、负数分别送往51H和71H开始的存储单元,并统计正负数个数存入50H和70H单元。
“`
ORG 0000H ; 程序起始地址
…(其他初始化代码)…
MOVE_DATA:
MOV R1, 20H ; 设置指针R1指向20H单元起始地址
…(循环处理30个数据的逻辑)…
JC POSITIVE_AREA IF_POSITIVE ; 如果数据为正数,则送往51H并统计个数
JC NEGATIVE_AREA IF_NEGATIVE ; 如果为负数,则送往71H并统计个数
…(统计正负数个数的代码)…
POSITIVE_AREA:
MOV DATA_AT_51H, R2 ; 将数据存入51H开始存储单元,并更新计数器等操作
…(其他处理逻辑)…
NEGATIVE_AREA:
MOV DATA_AT_71H, R2 ; 同理处理负数数据和计数器等操作
…(主程序结束和其他子程序定义)…
“`
“`
include
unsigned char PData; // 整体结局寄存器定义,用于存储LED情形等数据。
…(其他LED控制代码)…
DELAY_FUNCTION: // 延时函数定义,用于精确或非精确延时。
…(延时函数实现代码)… // 实现延时逻辑,使用循环或计时器等。
LED_CONTROL: // LED控制子程序定义。
MOV P1, ValueForLED ; 将要显示的LED值写入P1口。ValueForLED是之前计算好的值。
…(其他LED控制逻辑)… // 如亮灭控制、流水灯等逻辑。
“`