这是主程序(c语言的)
#include "stdio.h"
/*#include "mmregs.h"*/
#define imr 0x0000
#define ifr 0x0001
#define tcr 0x0026
#define prd 0x0025
#define pmst 0x001d
ioport unsigned port8001
interrupt void timer()
/*extern void initial()
extern void porta()
extern void portb()*/
int flag=0
int i
interrupt void timer()
{
*(int *)0x300=*(int *)0x300+1
if(*(int *)0x300==0x3E8)
{
*(int *)0x300=0
*(int *)0x302=*(int *)0x302+1
if(flag==0)
{flag=1
i = 0x5555
port8001 = i
}
else
{flag=0
i = 0xaaaa
port8001 = i
}
}
return
}
main()
{
*(int *)0x300=0
*(int *)0x302=0
*(int *)pmst=0x3f9f
asm(" ssbx 1,11")//禁止所有中迟陵祥断
*(int *)ifr=0xffff
*(int *)imr=0x00
*(int *)tcr=0x410
*(int *)prd=0x4e1f
*(int *)tcr=0x420
*(int *)imr=0x08
asm(" rsbx 1,11")
while(1)
}
这是个汪高向量码搏程序(汇编的):
.sect ".vectors"
.ref _c_int00 C entry point
.ref _timer time interrupt point
.align 0x80must be aligned on page boundary
RESET: reset vector
BD _c_int00 branch to C entry point
STM #200,SP stack size of 200
nmi:RETEenable interrupts and return from one
NOP
NOP
NOP NMI~
software interrupts
sint17 .space 4*16
sint18 .space 4*16
sint19 .space 4*16
sint20 .space 4*16
sint21 .space 4*16
sint22 .space 4*16
sint23 .space 4*16
sint24 .space 4*16
sint25 .space 4*16
sint26 .space 4*16
sint27 .space 4*16
sint28 .space 4*16
sint29 .space 4*16
sint30 .space 4*16
int0: RETE
NOP
NOP
NOP
int1: RETE
NOP
NOP
NOP
int2: RETE
NOP
NOP
NOP
tint: b _timer
NOP
NOP
rint0: RETE
NOP
NOP
NOP
xint0: RETE
NOP
NOP
NOP
rint1: RETE
NOP
NOP
NOP
xint1: RETE
NOP
NOP
NOP
int3: RETE
NOP
NOP
NOP
.end
以上两个是编出来的。
还有一些源文件需要添加,就可以运行了。程序是利用定时实现流水灯的。如果有需要完整的其他文件可以把邮箱留下。我到时发给你。
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
对于5系列,亏搭状态寄存器里面不是所有位裂迹都可以写,STO中OVA,OVB可以用置位指令SSBX和复位指令RSBX设置,例如SSBX SXM; 符号扩展SXM=1
RSBX SXM; 禁止符号扩展SXM=0
读可以通过CCS->view->registers->cpu registers 看到CPU的主要寄存器的值。或者查看寄存器所对应肆空并的地址的值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)