📄 test22.lst
字号:
< .DEFINE C_LVD36V 0x0003; // LVD = 3.6V
<
<
< .EXTERNAL F_SP_Read_INT_Status; // for further use
< .EXTERNAL F_SP_Write_INT_Status; // for further use
< .EXTERNAL F_SP_Set_INT_Vector; // for further use
< .EXTERNAL F_SP_Clear_INT_Vector; // for further use
<
< .EXTERNAL F_SP_Send_Out; //
< .EXTERNAL F_SP_Send_DAC1; //
< .EXTERNAL F_SP_Send_DAC2; //
< .EXTERNAL F_SP_Send_Two_DAC; //
< .EXTERNAL F_SP_Init_HW; //
<
< .EXTERNAL R_InterruptStatus;
<
<
< .EXTERNAL F_SP_RampUpDAC1;
< .EXTERNAL F_SP_RampDnDAC1;
< .EXTERNAL F_SP_RampUpDAC2;
< .EXTERNAL F_SP_RampDnDAC2;
<
< .EXTERNAL F_SP_InitQueue;
< .EXTERNAL F_SP_ReadQueue;
< .EXTERNAL F_SP_WriteQueue;
< .EXTERNAL F_SP_TestQueue;
<
<
<
< .EXTERNAL F_SP_Get_ADC
<
< .EXTERNAL F_SP_Set_P_TimerA_Ctrl
< .EXTERNAL F_SP_Set_P_TimerA_Data
< .EXTERNAL F_SP_Set_P_TimerB_Ctrl
< .EXTERNAL F_SP_Set_P_TimerB_Data
< .EXTERNAL F_SP_Set_P_INT_Ctrl
< .EXTERNAL F_SP_Set_P_INT_Clear
< .EXTERNAL F_SP_Set_P_SystemClock
< .EXTERNAL F_SP_Set_P_DAC_Ctrl
< .EXTERNAL F_SP_Set_P_ADC_Ctrl
<
<
<
< //--------------------------------------------
< SACM_MACRO1: .MACRO
<
< .ENDM
<
< SACM_MACRO2: .MACRO
<
< .ENDM
<
<
<
<
< //.define PC_Play_Enable_A2000 1 // Enable the PC-Play function for SACM-A2000 module
< //.define PC_Play_Enable_S480 1 // Enable the PC-Play function for SACM-S480 module
< //.define PC_Play_Enable_S240 1 // Enable the PC-Play function for SACM-S240 module
< //.define PC_Play_Enable_MS01 1 // Enable the PC-Play function for SACM-MS01 module
<
<
<
< //========================================================================================
< // End of hardware.inc
< //========================================================================================
.define RUN_2Hz_TimeBase_INT 0x0004
00000000 .RAM
00000000 00 00 00 00 DisplayBuff: .DW 4 DUP(0) //定义一个4存储单元的显示缓冲区,存入显示内容
00 00 00 00
00008080 .DATA
//显示段码存放区
DispTbl:
00008080 3F 00 06 00 .DW 0x003F,0x0006,0x005B,0x004F,0x0066 //0,1,2,3,4
5B 00 4F 00
66 00
00008085 6D 00 7D 00 .DW 0x006D,0x007D,0x0007,0x007F,0x006F //5,6,7,8,9
07 00 7F 00
6F 00
0000808A 77 00 7C 00 .DW 0x0077,0x007C,0x0039,0x005E,0x0079 //A,b,C,d,E
39 00 5E 00
79 00
0000808F 71 00 73 00 .DW 0x0071,0x0073,0x00FF,0x0000 //F,P,全亮,全灭
FF 00 00 00
00000004 .RAM
00000004 00 00 .VAR Char
0000805A .CODE
.PUBLIC _main;
//=============================================================
// 函数名称: _main
// 功能描述: 数码管动态显示.
// 语法格式: 无
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=============================================================
_main:
0000805A 09 93 FF 01 R1=0x01FF; //初始化IOA0-IOA7为低电平输出
0000805C 19 D3 02 70 [P_IOA_Dir]=R1;
0000805E 19 D3 03 70 [P_IOA_Attrib]=R1;
00008060 09 93 00 01 R1=0x0100; //IOA8输出高电平,屏蔽按键
00008062 19 D3 00 70 [P_IOA_Data]=R1;
00008064 7C 92 R1=0x003C; //初始化IOB2-IOB5为低电平输出
00008065 19 D3 07 70 [P_IOB_Dir]=R1;
00008067 19 D3 08 70 [P_IOB_Attrib]=R1;
00008069 40 92 R1=0x0000;
0000806A 19 D3 05 70 [P_IOB_Data]=R1;
0000806C 40 92 R1=0x0000
0000806D 19 D3 04 00 [Char]=R1
0000806F 0D 9B 00 00 BP=DisplayBuff //设置显示缓冲区
00008071 52 92 R1=0x0012 //4位数码管全灭
00008072 D5 D2 [BP++]=R1
00008073 D5 D2 [BP++]=R1
00008074 D5 D2 [BP++]=R1
00008075 D5 D2 [BP++]=R1
00008076 44 92 R1=RUN_2Hz_TimeBase_INT //开放2Hz中断
00008077 19 D3 10 70 [P_INT_Ctrl]=R1
00008079 41 F1 int IRQ
Loop:
0000807A 41 92 r1=0x0001 //清看门狗
0000807B 19 D3 12 70 [P_Watchdog_Clear]=r1
0000807D 40 F0 26 80 CALL Display
0000807F 46 EE JMP Loop
00008009 .text
.public _IRQ5
//=============================================================
// 函数名称: _IRQ5
// 功能描述: IRQ5中断有两个中断源:2Hz和4Hz,2Hz中断内不断修改显示缓冲区内容
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=================================================================
_IRQ5:
00008009 A8 DA PUSH R1,R5 to [SP] //压栈保护
0000800A 44 92 R1=0x0004
0000800B 11 C3 10 70 TEST R1,[P_INT_Ctrl] //比较是否为2Hz中断
0000800D 05 4E JNZ IRQ_2Hz //是,则转至对应程序段
IRQ_4Hz:
0000800E 48 92 R1=0x0008
0000800F 19 D3 11 70 [P_INT_Clear]=r1
00008011 A8 90 POP R1,R5 FROM [SP]
00008012 98 9A RETI
IRQ_2Hz:
00008013 11 93 04 00 R1=[Char] //修改显示缓冲区
00008015 0D 9B 00 00 BP=DisplayBuff
00008017 D5 D2 [BP++]=R1
00008018 D5 D2 [BP++]=R1
00008019 D5 D2 [BP++]=R1
0000801A D5 D2 [BP++]=R1
0000801B 41 02 R1+=1;
0000801C 53 42 CMP R1,0x0013
0000801D 01 4E JNE Store
0000801E 40 92 R1=0x0000
Store:
0000801F 19 D3 04 00 [Char]=R1
00008021 44 92 R1=0x0004
00008022 19 D3 11 70 [P_INT_Clear]=R1
00008024 A8 90 POP R1,R5 FROM [SP]
00008025 98 9A RETI
//数码管显示程序
//原理:从A0-A7输出段码,从B2-B5输出位码,均为高电平有效
//入口:显示缓冲区DisplayBuff
//出口:无
Display: .proc
00008026 40 96 R3=0x0000; //初始化计数初值
00008027 0A 95 00 00 R2=DisplayBuff; //R2指向显示缓冲区
00008029 44 98 R4=0x0004; //显示位码
Next:
0000802A 40 92 R1=0x0000 //暂时关闭所有的数码管
0000802B 19 D3 05 70 [P_IOB_Data]=R1
0000802D 0D 9B 80 80 BP=DispTbl; //BP指向段码表
0000802F D2 92 R1=[R2++]; //从显示缓冲区内取显示内容(即偏移量)
00008030 01 0B BP+=R1; //段码表首地址加上偏移量
00008031 C5 92 R1=[BP]; //从段码表中取出段码
00008032 09 A3 00 01 R1|=0x0100
00008034 19 D3 00 70 [P_IOA_Data]=R1; //送出段码
00008036 1C D9 05 70 [P_IOB_Data]=R4; //送出位码
00008038 44 99 R4=R4 LSL 1; //修改位码,以便下一位显示
00008039 41 06 R3+=0x0001; //计数器加1
0000803A 44 46 CMP R3,0x0004 //4位数据显示完否
0000803B 52 0E JB Next //未显示完
0000803C 90 9A RETF
.endp
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -