#include
unsigned char byte[200] = {0};//初始化100个ram单元
void TestASM(void);
void main(void)
{
TestASM();
while(1)
{
if(byte[5]==100)//取第六个单元数据
{
PORTB = ~PORTB;
}
}
}
以下汇编
_TestASM::
ldi r16,$ff
out DDRB,R16
;sts DDRB,R16
ldi r28,0;初始化Y
ldi r29,0;初始化Y
ldi r18,100
ldi r17,100
st y+,r17;将100装入Ram第一个单元
st y+,r17;将100装入Ram第二个单元
st y+,r17;将100装入Ram第三个单元
st y+,r17;将100装入Ram第四个单元
st y+,r17
st y+,r17
st y+,r17
st y+,r17
st y+,r17
st y+,r17
st y+,r17
st y+,r17
st y+,r17
st y+,r17
;Start:
; st Y+,r17
; inc r18
; CP r17,r18
; BRNE Start
RET
以上程序IO端口无法翻转,请问为什么啊?
本帖最后由 wensir 于 2016-5-30 19:29 编辑
如果有问题就在这里 PORTB = ~PORTB; 你可以用变量代表状态
比如:
static unsigner char testport=0;
if(testport)
{
PORTB =0;
testport =0;
}
else
{
PORTB =0xff;
testport=1;
}
我已经找到原因了,RAM里面的地址,要加上所有特殊功能寄存器的地址才行