📄 timertest.asm
字号:
/*--------------------------------------------------------------------------
INCLUDES
--------------------------------------------------------------------------*/
#include <def21065l.h>
/*--------------------------------------------------------------------------
CONSTANT & MACRO DEFINITIONS
--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------
GLOBAL DECLARATIONS
--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
.SEGMENT/DM seg_dmda;
.VAR Flag6Stat;
.ENDSEG;
/*---------------------------------------------------------------------------*/
.SEGMENT/PM seg_int_rst;
NOP; JUMP _main; RTI; RTI;
.ENDSEG;
///////////////////////////////////////////
.SEGMENT/PM seg_int_tmr;
NOP; CALL tmrhdl; RTI; RTI;
.ENDSEG;
//////////////////////////////////////////
.SEGMENT /PM seg_pmco;
/* ---------------------------------------------------------------------------
;
; main: Notes demo main function.
;
----------------------------------------------------------------------------*/
_main:
R0=1;
DM(Flag6Stat)=R0;//初始化指示灯状态变量
////////////定时器初始化//////////
BIT CLR MODE2 TIMEN0; /* timers TMINTL */
BIT CLR MODE2 TIMEN1; /* timers TMINTL */
BIT SET MODE2 PWMOUT0; /*设置定时器0为PWM输出*/
BIT SET MODE2 INT_HI0; //置定时器0使用优先级高的中断
BIT SET MODE1 IRPTEN; //使能全局中断
BIT SET IMASK TMZHI; //打开定时器0中断INT_HI0的屏蔽位
BIT CLR MODE1 NESTM; //使能中断嵌套
////////////////////////////
R0 = 0x00400000; /* 设置定时器0中断周期 */
DM(TPERIOD0) = R0;
R0 = 0x00040000; /* 设置PWM输出的占空比 */
DM(TPWIDTH0) = R0;
BIT SET MODE2 TIMEN0; /* 使能定时器0工作 */
wait: /* 等待中断,以便处理 */
IDLE;
JUMP wait;
_main.end:
.ENDSEG;
//////////////////////////
.SEGMENT /PM seg_pmco;
tmrhdl: nop; //服务程序入口
R0=DM(Flag6Stat);//取出指示灯的状态,进行判断
R1=0x1;
R0=R0 and R1;
if eq jump LightLED6;//如果灯的状态为灭,则跳转到点亮灯的程序段执行
R0 = DM(IOSTAT); //如果灯的状态为亮,则顺序执行使灯灭
R0 = BCLR R0 BY 2;
DM(IOSTAT)=R0;
jump tmrhdl_exit;
LightLED6:
R0 = DM(IOSTAT);
R0 = BSET R0 BY 2;
DM(IOSTAT)=R0;
tmrhdl_exit:
R0=DM(Flag6Stat);//保存当前灯的状态,以便下次使用
R0=R0+1;
DM(Flag6Stat)=R0;
rts;
.ENDSEG;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -