📄 test16.asm
字号:
//======================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================
//============================================================
// 工程名称:test16.spj
// 功能描述: 采用自动方式即定时器A溢出执行ADC转换,通过A/D将MIC_IN输入的语音信
// 号转换为数字信号,再将AD值通过DA通道转换为模拟电压,从AUD1和AUD2播放。
// 文件来源:《实验仪实验指导书》 "实验十九 一路输入的录音" 第65页
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.4
//
// 涉及的库:
// 组成文件:
// test16.asm
//============================================================
//============================================================
// 文件名称:test16.asm
// 实现功能: 采用自动方式即定时器A溢出执行ADC转换,通过A/D将MIC_IN输入的语音信
// 号转换为数字信号,再通过D/A 的两个通道AUD1和AUD2播放。
//============================================================
.define TIMER_DATA_FOR_8KHZ 0xfa00;
.define P_TimerA_Ctrl 0x700b;
.define P_TimerA_Data 0x700a;
.define P_ADC 0x7014;
.define P_ADC_Ctrl 0x7015;
.define P_DAC1 0x7017;
.define P_DAC2 0x7016;
.define P_DAC_Ctrl 0x702A;
.define P_INT_Ctrl 0x7010;
.define P_INT_Clear 0x7011;
.define P_Watchdog_Clear 0x7012;
//AD初始化子程序
.code
_InitAD_DA:
INT OFF;
r1 = 0x0030; //时钟频率为CLKA的Fosc/2
[P_TimerA_Ctrl] = r1;
r1 = TIMER_DATA_FOR_8KHZ; //采样率为8kHz
[P_TimerA_Data] = r1;
// r1 = 0x003d; //设置AGC
r1 = 0x0039; //设置AGC
[P_ADC_Ctrl] = r1;
//采用自动方式、且通过MIC_IN通道输入,
r1 = 0x00A8;
//通过定时器A的溢出锁存数据,ADC为自动方式
[P_DAC_Ctrl] = r1;
r1 = 0x1000;
[P_INT_Ctrl] = r1; //开中断IRQ1_TM
INT IRQ;
retf;
.PUBLIC _main;
//=============================================================
// 函数名称: _main
// 功能描述: 采用自动方式即定时器A溢出执行ADC转换,通过A/D将MIC_IN输入的语音信
// 号转换为数字信号,再通过D/A 的两个通道AUD1和AUD2播放。
// 语法格式: _main
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=================================================================
_main:
call _InitAD_DA; //调用AD初始化子程序
loop:
nop;
nop;
nop;
nop;
r1=0x0001 //清看门狗
[P_Watchdog_Clear] = r1
jmp loop;
.text
.PUBLIC _IRQ1 ;
//=============================================================
// 函数名称: _IRQ1
// 功能描述: 通过D/A 的两个通道AUD1和AUD2播放。
// 语法格式: _IRQ1
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=================================================================
_IRQ1:
push r1 to [SP]; //r1压栈保护
r1 = [P_ADC]; //读出P_ADC的值
[P_DAC1] = r1; //将ADC采样的数据送给P_DAC1播放
[P_DAC2] = r1; //将ADC采样的数据送给P_DAC2播放
r1 = 0x1000;
[P_INT_Clear] = r1; //清除P_INT_Clear单元的值
pop r1 from [SP];
reti;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -