导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→AVR单片机的高手请注意!spi端口问题请教![canicula]

 *第19298篇: AVR单片机的高手请注意!spi端口问题请教!

  
楼 主:canicula 2004年2月17日21:00
 AVR单片机的高手请注意!spi端口问题请教!
高手们!!
      小弟想请问ATMEGA8的SPI端口的一些问题!
      我用ATMEGA8的SPI的端口挂其他器件,用SPI的主控方式,发现输出有误。源程序如下:

.INCLUDE "M8def.inc"
.CSEG
.ORG $000
rjmp start
;main program
.ORG $0013
start:
 cli
 ldi r16, (1  <  <DDB1)|(1  <  <DDB2)|(1  <  <DDB3)|(1  <  <DDB5)
 out DDRB, R16
 sbi PORTB, PB2
 cbi PORTB, PB1
 ldi r16, (1  <  <SPE)|(1  <  <MSTR)|(1  <  <CPHA)|(1  <  <SPR1)
 out SPCR, r16
 
 in r16, SPSR
 ldi r16, 0x55
 rcall spi_mastertransmit
init_operation:
 rcall delay_time
 ldi r16, 0x04
 rcall spi_mastertransmit
 rjmp init_operation
 
delay_time:
 ;delay Xms here
 nop
 ret
 
spi_mastertransmit:
 out SPDR, r16
wait_transmit:
 sbis SPSR, SPIF
 rjmp wait_transmit
 ;in r16, SPSR
 ;in r16, SPDR
 ret
  
可以发现,单片机根本不能输出0x04,而只能连续输出0x55,在AVR Studio里做单步运行,可以发现原因可能是spsr寄存器中的spif位没有被清零,造成每次写spdr寄存器,都引起wcol位变成1,也就是说有冲突发生!
  ATMEGA8的说明书中,说Spif位是只读的,只有通过硬件方式清零,或者用读该寄存器的方式清零,事实上不可以。(在wait_transmit子程序里把注释的去掉,也没有用!)
  在此,请问各位高手,怎样才能连续向SPI端口写两个字节呢?或者如何才能真正用软件的方式将spif位清零呢?

  
2楼:任意键 2007年2月10日12:17
 几乎一样的问题.谁知道啊???
请回复xabx@163.com,谢谢!

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:ads里查看变量值的问题,谢谢?

[下一篇主题]:诚聘业务员