DSP电子钟程序可在c5416上运行Word文档格式.docx
《DSP电子钟程序可在c5416上运行Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP电子钟程序可在c5416上运行Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
ucharloca=0;
uintk=0x0;
ioportunsignedportc001;
//键盘地址
ioportunsignedportc000;
//数码管地址
voiddisplay(void);
staticconstuchartabled[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voidcpu_init()/*初始化DSP*/
{
asm("
ssbxintm"
);
ssbxxf"
//总清零
PMST=0xe8;
SWWSR=0x7fff;
SWCR=0x0001;
IMR=0x000c;
IFR=0xffff;
CLKMD=0x000;
PRD0=4;
TCR0=0X669;
rsbxintm"
rsbxxf"
//打开数据口
}
voiddelay(unsignedintx)
inti;
while(x--)
for(i=1000;
i>
0;
i--);
}
voiddelay10ms()
{intj,k;
for(j=0;
j<
2;
j++)
for(k=0;
k<
k++);
/*************************主程序**************************************/
voidmain()
{
cpu_init();
while
(1)
{
display();
//voiddisplay(unsignedcharhour,unsignedcharminute,unsignedcharsecond)
voiddisplay(void)
loca++;
if(loca==8)loca=0;
switch(loca)//显示程序
{case0:
portc000=0x0100+tabled[second%10];
break;
case1:
portc000=0x0200+tabled[second/10];
case2:
portc000=0x0440;
//显示-
case3:
portc000=0x0800+tabled[minute%10];
break;
case4:
portc000=0x1000+tabled[minute/10];
case5:
portc000=0x2040;
case6:
portc000=0x4000+tabled[hour%10];
case7:
portc000=0x8000+tabled[hour/10];
default:
}
}
/***************************************************************************/
interruptvoidtimer()//定时器测试
count=count+1;
if(count==1000)//1000
count=0x0;
count1=count1+1;
if(count1==100)//1000*100
count1=0x0;
flag=0x01;
second++;
if(second==60)
{second=0;
minute++;
if(minute==60)
minute=0;
hour++;
if(hour==24)
hour=0;
interruptvoiddjout()
interruptvoidkeyint0()//键盘测试
inta;
a=portc001;
a=a&
0xff00;
if(a!
=0xff00)
delay10ms();
switch(a)
case0xfe00:
//秒++
if(a==0xfe00)
delay(5);
if(a==0xfe00)
{
if(second>
59)
{second=0;
minute++;
if(minute>
{minute=0;
nop"
case0xfd00:
if(a==0xfd00)
if(a==0xfd00)
second--;
//秒--
if(second<
1){second=59;
case0xfb00:
//fen++
if(a==0xfb00)
if(a==0xfb00)
hour++;
if(hour>
23)
case0xf700:
//fen--
if(a==0xf700)
if(a==0xf700)
minute--;
if(minute<
1){minute=59;
case0xef00:
//shi++
if(a==0xef00)
if(a==0xef00)
//
23){hour=0;
case0xdf00:
//shi--
if(a==0xdf00)
if(a==0xdf00)
hour--;
if(hour<
1){hour=23;
case0xbf00:
//offtimer
if(a==0xbf00)
if(a==0xbf00)
TCR0=0X0010;
case0x7f00:
//opentimer
if(a==0x7f00)
if(a==0x7f00)
voidvect()
.ref_c_int00"
.ref_keyint0"
.ref_djout"
.ref_timer"
b_c_int00"
/*reset*/
rete"
/*nmi*/
rete"
/*int0*/
/*int1*/
b_keyint0"
/*int2*/
b_timer"
/*tint0*/
/*brint0*/
/*bxint0*/
/*dmac0*/
/*tint1*/
b_djout"
/*int3*/
/*hpint*/
/*brint1*/
/*bxint1*/
/*dmac4*/
/*dmac5*/
.cmd文件
-c
-h
test.obj
-mtest.map
-lrts.lib
-stack0x800
MEMORY
PAGE0:
PROG:
origin=080h,length=4000h
PAGE1:
DATA:
origin=800h,length=4000h
SECTIONS
.text>
PROGPAGE0
.cinit>
.switch>
vect>
80hPAGE0
.data>
DATAPAGE1
.const>
.bss>
.sysmem>
.stack>