|
我编了个OS代码实现用定时器中断每隔数秒改变文本显示框的位置。
但是屏幕下载后,文字在快速闪动,也不会变换位置。不知道为什么。
有谁能看下有什么明显错误吗?
还有怎么清空这段OS程序呢?
T5 UID1平台
每隔40.8ms*256=10.44秒,把一个显示控件的描述指针0x8100的位置信息0x8101,由x 50, y 50 改为 x 100, y 100。
- ORG 1000H
- GOTO MAIN
- NOP
- NOP
- GOTO T2INT
- ORG 1080H
- MAIN:
- LDBR R10,0X90,1 ;字节二进制第8位及第5位置1即为0x90,先存到R10
- MOVRD R10,45,1 ;从R10存入DR45,把DR45第8位总开关及第5位定时器2开关打开
- LDWR R10,0x0FF0 ;存入4080
- MOVRD R10,48,2 ;设置中断定时器2定时40.8ms
- LDWR R20,0x0000 ;R20用来记录中断次数
- LDWR R22,0x0100 ;作为中断次数上限值
- LDBR R24,0,1 ;用来记录当前控件移动位置状态
- LDWR R0,0x8101 ;显示控件描述指针位置地址存入R0:R1
- LDWR R26,0x0032 ;原位置x坐标
- LDWR R28,0x0032 ;原位置y坐标
- LDWR R30,0x0064 ;新位置x坐标
- LDWR R32,0x0064 ;新位置y坐标
-
- T2INT:
- INC R20,1,1 ;R20数值+1,使用16bit模式
- JS R22,R20,MOVENEXT ;中断次数上限R22>=R20则继续下一条,否则跳转
- RETI
- MOVENEXT:
- LDWR R20,0x0000 ;定时器次数重新计数
- IJNE R24,0,MOVEBACK ;如果已经在MOVENEXT位置则移回MOVEBACK位置
- LDBR R24,1,1
- MOVXR R30,0,2 ;写入新位置坐标到R0:R1所指的描述指针地址
- MOVEBACK:
- LDBR R24,0,1
- MOVXR R26,0,2 ;写入原位置坐标到R0:R1所指的描述指针地址
复制代码 有几个疑问
程序中没一直跳转循环是不是程序只执行一次?那定时器中断也只执行一次?还是定时器开关没关就会一直执行?
定时器到时间中断后还需要再次设定时间吗?
怎么在屏幕上清空这段程序呢?
|
|