本帖最后由 wensir 于 2016-5-30 19:29 编辑
#include <iom8v.h>
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端口无法翻转,请问为什么啊?
此帖出自
小平头技术问答
比如:
static unsigner char testport=0;
if(testport)
{
PORTB =0;
testport =0;
}
else
{
PORTB =0xff;
testport=1;
}
我已经找到原因了,RAM里面的地址,要加上所有特殊功能寄存器的地址才行
哦 你没定义好PORTB的地址 应该是个32位地址吧。如果用ARM 32 的话
一周热门 更多>