evb061test.lst
来自「凌阳科技单片机系统开发板测试程序,可以参考应用。」· LST 代码 · 共 580 行 · 第 1/3 页
LST
580 行
00 00 00 00
00 00
00000005 00 00 .var recNum //接收数据个数
00000006 00 00 .var sendNum //发送数据个数
00008D46 .code
.public _UART;
_UART:
00008D46 09 93 FF FF r1 = 0xffff; //设置A口为输出
00008D48 19 D3 03 70 [P_IOA_Attrib] = r1;
00008D4A 19 D3 02 70 [P_IOA_Dir] = r1;
00008D4C 09 93 FF FF r1 = 0xffff;
00008D4E 19 D3 00 70 [P_IOA_Data] = r1;
00008D50 40 94 r2 = RecData;
_UART_INIT:
F_UART_INIT:
00008D51 40 F1 INT OFF;
00008D52 40 92 R1 = 0x0000; //关闭中断
00008D53 19 D3 10 70 [P_INT_Ctrl] = R1;
00008D55 09 93 80 04 R1 = 0x0480; //设置IOB7为输入IOB10为输出
00008D57 19 D3 08 70 [P_IOB_Attrib] = R1;
00008D59 09 93 00 04 R1 = 0x0400;
00008D5B 19 D3 07 70 [P_IOB_Dir] = R1;
00008D5D 40 92 R1 = 0x0000;
00008D5E 19 D3 05 70 [P_IOB_Data] = R1;
00008D60 09 93 6B 00 R1 = 0x006b; //设置波特率 114.84KHz(~=115.2KHz)
00008D62 19 D3 24 70 [P_UART_BaudScalarLow] = R1;
00008D64 40 92 R1 = 0x0000;
00008D65 19 D3 25 70 [P_UART_BaudScalarHigh] = R1;
00008D67 40 92 R1 = 0x0000;
00008D68 0C 99 C0 00 R4 = 0x00C0; //使能RX和TX
00008D6A 19 D3 21 70 [P_UART_Command1] = R1;
00008D6C 1C D9 22 70 [P_UART_Command2] = R4;
00008D6E 40 96 R3 = 0x00;
00008D6F 40 9A bp = 0x0000
00008D70 C6 DB [sendNum] = bp
00008D71 C5 DB [recNum] = bp
L_sendData:
L_Check_TxRDY:
00008D72 0C 99 FA C6 R4 = SendData; //准备发送数据
00008D74 C6 9B bp = [sendNum]
00008D75 41 26 R3 -= 1;
00008D76 24 5E jz L_TxRDY_TimeOut;
00008D77 45 4A cmp bp,5 //发送是否结束
00008D78 0C 5E je L_Check_RxRDY;
00008D79 11 93 22 70 R1 = [P_UART_Command2];
00008D7B 09 B3 40 00 R1 &= 0x0040; //检测 TxRDY = 1;
00008D7D 07 5E JZ L_Check_RxRDY;
00008D7E 05 09 r4 = r4 + bp
00008D7F C4 98 r4 = [r4]
00008D80 1C D9 23 70 [P_UART_Data] = R4; //发送数据
00008D82 41 0A bp += 1
00008D83 C6 DB [sendNum] = bp //发送数据的个数
L_recData:
00008D84 40 96 R3 = 0x00;
L_Check_RxRDY:
00008D85 41 26 R3 -= 1;
00008D86 14 5E jz L_RxRDY_TimeOut;
00008D87 C5 9B bp = [recNum]
00008D88 0D 05 00 00 r2 = bp + RecData
00008D8A 11 93 22 70 R1 = [P_UART_Command2]; //检测是否有数据接收
00008D8C 09 B3 80 00 R1 &= 0x0080;
00008D8E 5D 5E JZ L_Check_TxRDY;
//接收自己发送的8位十六进制数
00008D8F 40 92 r1 = 0x0000;
//... Get data .................
00008D90 11 93 23 70 R1 = [P_UART_Data]; //取接收的数据
00008D92 C2 D2 [r2] = r1;
00008D93 41 0A bp += 1
00008D94 C5 DB [recNum] = bp //数据是否全部接收
00008D95 45 4A cmp bp ,5
00008D96 52 4E jne L_Check_RxRDY
00008D97 40 92 R1 = 0x0000;
00008D98 19 D3 22 70 [P_UART_Command2] = R1; //禁止接收
00008D9A 00 EE jmp L_TxRDY_TimeOut
L_TxRDY_TimeOut:
L_RxRDY_TimeOut:
00008D9B 40 F0 9E 8D call CmpRecSend;
00008D9D 90 9A retf;
//==============================//
//函数名称:CmpRecSend:
//比较发送数据与接收数据是否相等
//==============================//
CmpRecSend:
00008D9E C5 9B bp = [recNum]
00008D9F 41 2A bp -= 1
loopCmp:
00008DA0 0D 07 00 00 r3 = bp + RecData
00008DA2 0D 09 FA C6 r4 = bp + SendData
// r3 -= 1
00008DA4 C3 96 r3 = [r3]
00008DA5 C4 98 r4 = [r4]
00008DA6 04 47 cmp r3,r4;
00008DA7 06 4E jne UartFail;
00008DA8 41 2A bp -= 1
00008DA9 0D 4B FF FF cmp bp,0xffff
00008DAB 4C 4E jne loopCmp;
00008DAC 41 92 r1 = 0x0001 //成功
00008DAD 90 9A retf
UartFail:
00008DAE 40 92 r1 = 0x0000; //失败
00008DAF 90 9A retf;
//==============================//
// MIC测试部分
//==============================//
00008DB0 .CODE
_InitAD_DA:
00008DB0 40 F1 INT OFF;
00008DB1 70 92 R1 = 0x0030; // 时钟频率为CLKA的Fosc/2
00008DB2 19 D3 0B 70 [P_TimerA_Ctrl] = R1; //
00008DB4 09 93 23 FA R1 = TIMER_DATA_FOR_8KHZ; // 采样率为 8kHz
00008DB6 19 D3 0A 70 [P_TimerA_Data] = R1; //
00008DB8 55 92 R1 = 0x0015; // 设置AGC
//R1 = 0x0011 // 取消AGC
00008DB9 19 D3 15 70 [P_ADC_Ctrl] = R1; // 采用自动方式、且通过MIC_IN通道输入,
00008DBB 09 93 A8 00 R1 = 0x00A8; //通过定时器A的溢出锁存数据,ADC为自动方式
00008DBD 19 D3 2A 70 [P_DAC_Ctrl] = R1;
00008DBF 09 93 00 10 R1 = 0x1000; //
00008DC1 19 D3 10 70 [P_INT_Ctrl] = R1; // 开中断IRQ1_TM
00008DC3 41 F1 INT IRQ;
00008DC4 90 9A retf;
//主程序
.PUBLIC _MICTEST
_MICTEST: .PROC
00008DC5 40 F0 B0 8D call _InitAD_DA // 调用AD 初始化子程序
.ENDP
loop:
00008DC7 00 EE nop
00008DC8 00 EE nop
00008DC9 00 EE nop
00008DCA 00 EE nop
00008DCB 45 EE jmp loop
00008098 .text
.PUBLIC _IRQ1
_IRQ1:
00008098 88 D2 push R1 to [SP]
00008099 11 93 14 70 R1 = [P_ADC]
0000809B 19 D3 17 70 [P_DAC1] = R1
0000809D 19 D3 16 70 [P_DAC2] = R1
0000809F 09 93 00 10 R1 = 0x1000
000080A1 19 D3 11 70 [P_INT_Clear] = R1
000080A3 88 90 pop R1 from [SP]
000080A4 98 9A reti
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?