混编的方式下,atmeg单片机向无线芯片发数出错

2019-03-24 21:11发布

单片机通过一个管脚向一个无线芯片写数据,采用c写总的架构,然后数据写到管脚用的汇编,但是出来的数据总是不对,请高手指教。大致的程序如下

unsigned char ctrl[7]={0x22,0x33,0xed,0xac,0x56,0x78,0xf7};

unsigned char *p=ctrl;


void main()
{
...
for(i=0;i<7;i++)
{
send(*(p+i));

}



汇编函数如下(通过移位,写出去的bit都是从进位位C里出去的)
_send::
JJ:
  LDI R24,$08; 一字节发8次
XZJ:
  ROL R16
BRCS C_1
C_0:
CBI ,0X08,2   ;PORTD的2脚往外写数据,0x8是portd的地址
RCALL **(这里延时1ms)
RJMP PD
C_1:
SBI ,0X08,2   ;PORTD的2脚往外写数据,0x8是portd的地址
RCALL **(这里延时1ms)

PD:
DEC R24
  BRNE XZJ
RET


找不到程序在哪里出错,上面的程序分别包含在.C,.S文件里,感觉参数的传递也不会有错。虽然汇编写常数是16进制$,但是c里面是0x,这点没问题,可是单片机发出来的数据就是不对。是个周期数据

此帖出自小平头技术问答
0条回答

一周热门 更多>