📄 timerc1.c
字号:
//实验箱晶振14.318MHz,不倍频,因为定时时间TINT=时钟周期T*(TDDR+1)(PRD+1)
//TDDR最大值为0Fh,PRD最大值为0FFFFh,所以最大定时时间约为73ms。
//设定时时间为70ms,则计算出TDDR=0Fh,PRD=0xF4B2;
ioport unsigned port802c; //定义交通灯端口
#define light port802c //light表示交通灯端口
ioport unsigned int port8028;//定义发光管端口
#define led port8028 //led表示发光管端口
#define TCR*(volatile unsigned int*)0x26 //定义映射寄存器地址
#define PRD*(volatile unsigned int*)0x25
#define IFR*(volatile unsigned int*)0x01
#define IMR*(volatile unsigned int*)0x00
#define PMST*(volatile unsigned int*)0x1D
#define SWWSR*(volatile unsigned int*)0x28
#define CLKMD*(int*)0x58
/* 定时器0初始化*/
void timer0_init(void)
{
SWWSR=0x0000; //不插入等待时间
TCR=0x0010; //TSS=1,关闭定时器
PRD=0xF4B2; //定时常数
TCR=0x003f; /*定时常数TDDR=0Fh,TSS=0启动定时器,
TRB=1,TIM减至0时,自动加载PRD*/
}
/*系统初始化*/
void system_init(void)
{
PMST=0x00e0; /*中断向量指向0080单元*/
asm (" ssbx INTM ");//关闭所有可屏蔽中断
IFR=0x0080; //清除还没处理完的定时器中断
IMR=0x000C; //开放定时器0中断,并开放了INT2中断(暂时没用)
asm (" rsbx INTM ");//开放所有中断
}
unsigned int i=0;
void main(void)
{
system_init(); //系统初始化
timer0_init(); //定时器0初始化,使定时器每70ms中断一次
while(1)
{;
}
}
/*interrupt serve program*/
void interrupt tint0(void) //中断服务程序,每次中断到来时控制灯的不同点亮
{
if(i==1)
{
light=0x99;
led=0x0f;
i=0;
}
else
{
light=0x66;
led=0xf0;
i=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -