劉翔無聊弱智作品
基于EM78P153S的流水燈
無聊為龐師傅寫于2011年3月21日
#include"EM78x153xx.h"
#define DISI() _asm{disi}
#define ENI() _asm{eni}
#define SLEP() _asm{slep}
#define NOP() _asm{nop}
#define WDTC() _asm{wdtc}
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned short ushort;
#define ledl PORT5
#define ledh PORT6
void delay(void)
{uchar i,j;
for(j=0;j<200;j++)
for(i=0;i<200;i++)NOP();
}
const ushort rundata[16]={0xfffe,0xfffc,0xfff8,0xfff0,
0xffe0,0xffc0,0xff80,0xff00,
0xfe00,0xfc00,0xf800,0xf000,
0xe000,0xc000,0x8000,0x0000};
void main(void)
{uchar i,j,k;
uint run;
WDTC();//清看門狗
DISI();//禁止中斷
STATUS=0X00;//清除狀態標志位
P5CR=0x00;//置P5為輸出口
P6CR=0x00;//置P6為輸出口
PDCR=0x00;//禁止P5,P6下拉
ODCR=0x00;//禁止P6開漏
PHCR=0x00;//禁止P6上拉
for(;;)
for(i=0,k=0;i<16;i++,k--)
{run=rundata[i];
for(j=0;j<k;j++)
{ledl=run;
ledh=(run>>8);
delay();
}
}
}
void _intcall interrupt(void) @ int
{
// Write your code (inline assembly or C) here
//restore ACC,R3,R4
_asm
{
reti //tell Compiler to recover common registers here
SWAP 0X1F ;restore A
SWAPA 0X1F
}
}
void _intcall interrupt_l(void) @ 0x08:low_int 0
{
_asm
{
//save A --> 0x1F
MOV 0X1F,A ;backup A to 0x1F
}
}