DSP课程设计精Word文档格式.docx
《DSP课程设计精Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP课程设计精Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
![DSP课程设计精Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/30/8da24a09-ecfa-44cd-8bd8-e99389664d6d/8da24a09-ecfa-44cd-8bd8-e99389664d6d1.gif)
*PFDATDIR=*PFDATDIR&
0xFFFB;
}
voidinlinedisable(
{
setcINTM"
intkeyscan(
intk,j;
k=*PFDATDIR&
0x0008;
if(k==0x0008
k=0;
else
k=1;
if(k==1
for(j=30000;
j>
0;
j--
j=j;
return(k;
intkeyserve(
intk;
if(k==0x0000
*PBDATDIR=(*PBDATDIR&
0xFF00+m++;
*PBDATDIR=*PBDATDIR;
main(
disable(;
initial(;
while(1
inti;
i=0;
i=keyscan(;
if(i==1
keyserve(;
voidinterruptnothing(
return;
汇编程序
键盘与发光二极管配合使用程序
st0_temp.usect"
.b20"
1;
60
st1_temp.usect"
61
context.usect"
7;
62-68
STACK.usect"
.stack"
40
IOSFT_REG.usect"
.data0"
显示数据移位寄存器
IO_COUNT.usect"
延时计数寄存器
IO_DATA.usect "
I/O临时数据缓冲区
LEDXS.usect"
LED显示的数据
LEDFLAG.usect"
LED显示标志寄存器
K1FLAG.usect"
K1标志寄存器
KEYDATA.usect"
读得键盘值存放寄存器
DP_USER.set5
.include"
F2407REGS.H"
;
引用头部文件
.def_c_int0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(1)建立中断向量表
.sect"
.vectors"
定义主向量段
RSVECTB_c_int0;
PM0ResetVector1
INT1BPHANTOM;
PM2Intlevel14
INT2BGISR2;
PM4Intlevel25
INT3BPHANTOM;
PM6Intlevel36
INT4BPHANTOM;
PM8Intlevel47
INT5BPHANTOM;
PMAIntlevel58
INT6BPHANTOM;
PMCIntlevel69
RESERVEDBPHANTOM;
PME(AnalysisInt10
SW_INT8BPHANTOM;
PM10UserS/Wint—
SW_INT9BPHANTOM;
PM12UserS/Wint-
SW_INT10BPHANTOM;
PM14UserS/Wint-
SW_INT11BPHANTOM;
PM16UserS/Wint-
SW_INT12BPHANTOM;
PM18UserS/Wint-
SW_INT13BPHANTOM;
PM1AUserS/Wint-
SW_INT14BPHANTOM;
PM1CUserS/Wint-
SW_INT15BPHANTOM;
PM1EUserS/Wint-
SW_INT16BPHANTOM;
PM20UserS/Wint-
TRAPBPHANTOM;
PM22Trapvector-
NMIBPHANTOM;
PM24NonmaskableInt3
EMU_TRAPBPHANTOM;
PM26EmulatorTrap2
SW_INT20BPHANTOM;
PM28UserS/Wint-
SW_INT21BPHANTOM;
PM2AUserS/Wint-
SW_INT22BPHANTOM;
PM2CUserS/Wint-
SW_INT23BPHANTOM;
PM2EUserS/Wint-
SW_INT24BPHANTOM;
PM30UserS/Wint-
SW_INT25BPHANTOM;
PM32UserS/Wint-
SW_INT26BPHANTOM;
PM34UserS/Wint-
SW_INT27BPHANTOM;
PM36UserS/Wint-
SW_INT28BPHANTOM;
PM38UserS/Wint-
SW_INT29BPHANTOM;
PM3AUserS/Wint-
SW_INT30BPHANTOM;
PM3CUserS/Wint-
SW_INT31BPHANTOM;
PM3EUserS/Wint—
中断子向量入口定义pvecs
.pvecs"
定义子向量段
PVECTORSBPHANTOM;
保留向量地址偏移量-0000h
BPHANTOM;
保留向量地址偏移量-0001h
保留向量地址偏移量
保留向量地址偏移量
保留向量地址偏移量-05
SCI_RX_ISR;
SCI_TX_ISR;
保留向量地址偏移量-0A
保留向量地址偏移量-10
保留向量地址偏移量-15
保留向量地址偏移量-1A
保留向量地址偏移量-20
保留向量地址偏移量-25
保留向量地址偏移量-0026h
BT1GP_ISR;
保留向量地址偏移量-0027hT1PINT中断
保留向量地址偏移量-0028h
保留向量地址偏移量-2A
pvectoraddroffset0x02f-T3PINT
保留向量地址偏移量-30
保留向量地址偏移量-35
保留向量地址偏移量-3A
保留向量地址偏移量-3F
CANMBX_ISR;
保留向量地址偏移量-0041h
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(2)主程序
.text
_c_int0
CALLSYSINIT;
调系统初始化程序
CALLKEYLEDINIT;
调键盘和LED初始化程序
LDP#DP_USER;
指向0280h~0300h区
SPLK#01H,IOSFT_REG;
寄存器和标志初始化
SPLK#00H,IO_COUNT
SPLK#001H,IO_DATA
SPLK#001H,LEDXS
SPLK#00H,LEDFLAG;
LEDFLAG.0=1表示K1,K2,K3按下
LEDFLAG.0=0表示K4按下
SPLK#01H,K1FLAG
CLRCINTM;
开总中断
LOOP:
CALLKEY;
调键盘程序,即扫描键盘
LDP#DP_USER
BITLEDFLAG,15
BCNDLEDBD1,TC
LACLIO_COUNT
SUB#03E8H
BCNDWAIT,LEQ;
判10s延时到否
LEDBD1:
SPLK#00H,IO_COUNT
LDP#DP_PF2
LACLPFDATDIR
OR#0404H;
IOPF2=1
SACLPFDATDIR;
开74HC273片选信号
LACLLEDXS
OR#0FF00H;
IOPB口为输出方式
SACLPBDATDIR;
送要显示的数据到IOPB口
AND#0FFFBH;
IOPF2=0
关74HC273片选信号
BCNDLEDBD2,TC
SFL
SACLLEDXS
LACLIOSFT_REG
SACLIOSFT_REG
BITIOSFT_REG,BIT8;
判是否循环完一次
BCNDLOOP1,TC
BWAIT
LOOP1:
LDP#DP_USER
赋初值
LEDBD2:
LACLIO_DATA
WAIT:
NOP
BLOOP
(3)系统初始化程序
SYSINIT:
SETCINTM
CLRCSXM
CLRCOVM
CLRCCNF;
B0区被配置为数据空间
LDP#0E0H;
指向7000h~7080h区
SPLK#81FEH,SCSR1;
时钟4倍频,CLKIN=6M,CLKOUT=24M
SPLK#0E8H,WDCR;
不使能WDT
LDP#0
SPLK#02H,IMR;
使能中断优先级INT2
SPLK#0FFFFh,IFR;
清中断标志
LDP#DP_EVA;
指向7400h~7480h区
SPLK#80H,EVAIMRA;
使能T1PINT中断
SPLK#0FFFFh,EVAIFRA;
清EVA中断标志
SPLK#0,GPTCONA
SPLK#0EA6H,T1PR;
使定时器每10ms产生一次中断
SPLK#0,T1CNT
SPLK#0164CH,T1CON;
设置通用定时器1
RET
(4)键盘和发光二极管初始化程序
KEYLEDINIT:
LACLMCRC
AND#083FFH;
IOPF2,IOPF[3~6]配置为一般的I/O口
SACLMCRC
LACLMCRA
AND#000FFH;
IOPB[0~7]配置为一般的I/O口
SACLMCRA
OR#0400H;
IOPF2为输出方式
AND#08787H;
IOPF[3~6]为输入方式
SACLPFDATDIR
LACLPBDATDIR
IOPB[0~7]为输出方式
SACLPBDATDIR
(5)键盘程序
KEY:
CALLREADKEY;
调读键程序
LACLKEYDATA
BCNDKEYRET,EQ;
ACC=0?
CALLKEYDELAY
材料:
玉米粒50克,胡萝卜30克,生菜30克,鸡蛋3个,面粉100克
椒粉各少许;
做法:
1.先将鸡蛋打散成蛋液,加入少许胡椒粉拌匀,胡萝卜洗净切沥干切碎,葱切花;
2.将胡萝卜粒和玉米粒放入沸水中煮熟后沥干待用;
3.面粉中加入适量的盐,再倒入鸡蛋液,加入适量的水搅拌成
4.放入沥干的胡萝卜粒和玉米粒、生菜、葱花,再加入少许芝
再一次读键值
BCNDKEYRET,EQ
判断按键情况
BITKEYDATA,15
BCNDKEYRET,NTC
CALLK1;
"
+"
键按下
BKEYRET
KEYRET:
LACLKEYDATA
AND#0FFF0H;
清读取的键值寄存器
SACLKEYDATA
(6)读键子程序
READKEY:
LACLPFDATDIR;
取出键值PFDATDIR.3~PFDATDIR.6
RPT#2
SFR;
右移3位
OR#0FFF0H;
屏蔽高4位(用到4个键)
CMPL
SACLKEYDATA;
存放键值
RET
(7)用软件延时30mS消抖动
KEYDELAY:
LACC#6000
KEYD1:
SUB#1
RPT#80
NOP
BCNDKEYD1,NEQ
(8)键子程序
K1:
"
键子程序
READK1:
CALLKEYDELAY
CALLREADKEY
判断按键K1是否松开
BITKEYDATA,15
BCNDREADK1,TC
SPLK#01,LEDFLAG;
关闭LED左移标志,即LED对同一个数不刷新
LACLIO_DATA
ADD#1
SACLIO_DATA
(9)中断程序
GISR2:
优先级INT2中断人口
保护现场
LDP#0;
保存机器上下文
SST#0,st0_temp;
使用自动寻址DP-0
SST#1,st1_temp;
保存状态寄存器到B2DARAM.
SACLcontext;
保存ACC的低16位
SACHcontext+1;
保存ACC的高16位
SARAR1,context+2
SARAR2,context+3
SARAR3,context+4
SARAR4,context+5
SARAR5,context+6
LDP#0E0H
LACCPIVR,1;
读取外设中断向量寄存器(PIVR),并左移一位
ADD#PVECTORS;
加上外设中断入口地址
BACC;
跳到相应的中断服务子程序
T1GP_ISR:
通用定时器1中断入口
SACLIO_COUNT
恢复现场
LDP#DP_EVA
SPLK#0FFFFH,EVAIFRA
LARAR5,context+6
LARAR4,context+5
LARAR3,context+4
LARAR2,context+3
LARAR1,context+2
LACCcontext+1,16
ADDScontext
LST#1,st1_temp
LST#0,st0_temp
开总中断,因为一进中断就自动关闭总中断
(10)假中断程序
PHANTOM
KICK_DOG;
复位看门狗
END