[求助] 汇编与C相兼容编程求助

wensir   2016-5-30 19:10 楼主
#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 编辑

回复评论 (3)

如果有问题就在这里 PORTB = ~PORTB; 你可以用变量代表状态
比如:
static unsigner char testport=0;

if(testport)
{
  PORTB =0;
  testport =0;
}
else
{
  PORTB =0xff;
  testport=1;
}
点赞  2016-5-31 14:41
引用: damiaa 发表于 2016-5-31 14:41
如果有问题就在这里 PORTB = ~PORTB; 你可以用变量代表状态
比如:
static unsigner char testport=0;

...

我已经找到原因了,RAM里面的地址,要加上所有特殊功能寄存器的地址才行
点赞  2016-5-31 19:03
哦 你没定义好PORTB的地址 应该是个32位地址吧。如果用ARM 32 的话 本帖最后由 damiaa 于 2016-6-1 12:09 编辑
点赞  2016-6-1 12:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复