求教一下EM78P163N单片机汇编程序的问题

2020-02-08 12:14发布

刚接触义隆单片机,听说eUIDE的C编译系统不好使,所以选择了用汇编写程序,刚写了个小测试程序,结果没能实现预期功能,在此诚心求教啦。
想实现的功能:  
1.外部中断产生---->开启TCC溢出中断---->2.
2.TCC溢出中断满10次---->取反P50引脚电平---->TCC溢出中断满10次---->取反P50引脚电平---->……---->外部中断产生---->3.
3.取反TCC溢出中断使能位---->若是关闭TCC溢出中断则P50置为'1'---->等待再次产生外部中断---->1.
                       ---->若是开启TCC溢出中断---->2.
编译能通过,下载到片子里得不到预期结果,给出外部中断后P50引脚一直为高电平。
程序如下:
INCLUDE "EM78P163N.INC"      
     X_INT     ==  R10
     X_TCC     ==  R3F
     _DELAY_X1 ==  R18
     _DELAY_X2 ==  R28
     ORG 0X000
     JMP MAIN
     ORG 0X003
     JMP EXT_INT
     ORG 0X009
     JMP TCC_INT
EXT_INT:
     CALL DELAY_10MS   ;延迟10ms消抖
     JBC PORT6,0
     JMP EXT_INT_RETI  ;抖动则跳不产生操作,直接跳至结束位置。
     COM X_INT
EXT_INT_RETI:
     MOV A,@11111011B
     AND RF,A
     RETI
TCC_INT:
     DEC X_TCC
     MOV A,@11111110B
     AND RF,A
     RETI  
     ORG 0X030
MAIN:
     DISI              ;关闭全局中断
     MOV A,@0X00       ;P5置为输出
     IOW IOC5
     BS PORT5,0        ;P50置1
     MOV A,@01000000B  ;P61设置为INT引脚
     IOW WDTCR
     MOV A,@0XFF       ;P6设置为输入
     IOW IOC6
     MOV A,@10001111B  ;INT设置为下降沿触发,TCC时钟为256分频
     CONTW
     CLR X_INT         ;X_INT初值为0
     MOV A,@0X0B       ;X_TCC初值为11
     MOV X_TCC,A
     CLR RF            ;清零中断标志位
     MOV A,@00000100B  ;开启外部INT中断
     IOW IOCF
     ENI               ;使能全局中断
LOOP:
     JBS X_INT,0
     JMP LOOP
     CLR RF            ;清楚中断标志位
     MOV A,@00000001B  ;开启TCC溢出中断
     OR IOCF,A
LOOP1:
     DJZA X_TCC
     JMP LOOP1
     MOV A,@00000001B
     XOR PORT5,A       ;P50输出取反
     MOV A,@0X0B       ;重置X_TCC初值
     MOV X_TCC,A
     JBC X_INT,0
     JMP LOOP1
     MOV A,@11111110B
     AND IOCF,A        ;关闭TCC溢出中断  
     AND PORT5,A       ;关灯
     JMP LOOP
DELAY_10MS:
     MOV A,@0X50       ;延时变量初值设置
     MOV _DELAY_X2,A
DELAY_LOOP2:
     MOV A,@0XFA
     MOV _DELAY_X1,A
DELAY_LOOP1:
     DJZ _DELAY_X1
     JMP DELAY_LOOP1
     DJZ _DELAY_X2
     JMP DELAY_LOOP2
     RET
0条回答

一周热门 更多>