我完全新建了一个工程,这次的芯片是辉芒微 FT62F133 ,运行也会有错,全部代码如下
#include "SYSCFG.h"
volatile unsigned char teat,teat2;
void interrupt ISR(void)
{
}
main()
{
TRISA=0x00;
PORTA=0x00;
TRISC=0x00;
PORTC=0x00;
while(1)
{
teat2++;
teat=teat2&0x03;
if(teat) PORTC^=0xFF;
}
}
汇编代码如下
//Deviec:FT62F13X
//-----------------------Variable---------------------------------
_teat EQU 72H
_teat2 EQU 73H
//-----------------------Variable END---------------------------------
ORG 0000H
BCR PCLATH,3 //0000 118A
LJUMP 0BH //0001 380B
ORG 0004H
STR 7EH //0004 01FE
SWAPR STATUS,0 //0005 0703
STR 70H //0006 01F0
LDR PCLATH,0 //0007 080A
STR 71H //0008 01F1
BCR PCLATH,3 //0009 118A
LJUMP 24H //000A 3824
BCR PCLATH,3 //000B 118A
LJUMP 0DH //000C 380D
CLRR 73H //000D 0173
CLRR STATUS //000E 0103
BCR PCLATH,3 //000F 118A
LJUMP 11H //0010 3811
//;000.C: 12: TRISA=0x00;
BSR STATUS,5 //0011 1A83
CLRR 5H //0012 0105
//;000.C: 13: PORTA=0x00;
BCR STATUS,5 //0013 1283
CLRR 5H //0014 0105
//;000.C: 15: TRISC=0x00;
BSR STATUS,5 //0015 1A83
CLRR 7H //0016 0107
//;000.C: 16: PORTC=0x00;
BCR STATUS,5 //0017 1283
CLRR 7H //0018 0107
//;000.C: 19: {
//;000.C: 20: teat2++;
INCR 73H,1 //0019 09F3
//;000.C: 22: teat=teat2&0x03;
LDR 73H,0 //001A 0873
STR 72H //001B 01F2
LDWI 3H //001C 2A03
ANDWR 72H,1 //001D 02F2
//;000.C: 24: if(teat) PORTC^=0xFF;
LDR 72H,0 //001E 0872
BTSC STATUS,2 //001F 1503
LJUMP 19H //0020 3819
LDWI FFH //0021 2AFF
XORWR 7H,1 //0022 0487
LJUMP 19H //0023 3819
ORG 0024H
LDR 71H,0 //0024 0871
STR PCLATH //0025 018A
SWAPR 70H,0 //0026 0770
STR STATUS //0027 0183
SWAPR 7EH,1 //0028 07FE
SWAPR 7EH,0 //0029 077E
RETI //002A 0009
END
运行结果如图
|
看样子 test 既是变量也是中间变量了。如果在中断用到test,在计算前关闭中断,计算结束打开中断。 或者定义一个volatile 中间变量作为过渡,让volatile tmp = test2 &0xf;test = tmp;倒一下脚,国足水平。