F
freakkaito
Guest
私AT89S51にATMEGA32 SPIポートを介してから
の データを送信するには
、 私は混乱し、作る
の を助けることができる誰かが私です。
私 AT89s51初期化するが、このコードを行ったrespon
すべて では
ない 。マイavr xtal 4MHzのとAT89sを使用
し、 1 MHzの転送クロックは16MHzを使用している( 1月4日avrクロックまたは1月16日at89s時計、それが何もデータシートに書いて) 。私はそれをコンパイルするにはWinAVRを使用します。
#含まれ<stdio.h>
#含まれ<stdlib.h>
#含まれ<string.h>
#含まれ<avr/pgmspace.h>
#含まれ<avr/io.h>
#含まれ<avr/interrupt.h>#
" global.h "を含む
# " lcd.h
" など
SPI_USEINT定義#
INTはtargetInit (ボイド) ;
ボイドtargetClear (ボイド) ;
uint8_t spiTransferByte ( uint8_tデータ) ;
u08 spiTransferComplete揮発性;
ボイドspiInit (ボイド) ;INTはメイン(ボイド)
(
# ifdef SPI_USEINT
( SIG_SPI )信号
(
= TRUEをspiTransferComplete ;
)
# endifのlcd_init ( LCD_DISP_ON ) ;
spiInit ( ) ;
開始:
場合( ! targetInit ( ) )
(
lcd_gotoxy ( 0,1 ) ;
lcd_puts ( "目標エラー" ) ;delay1s ( ) ;
後藤開始;
)
その他の
(
lcd_clrscr ( ) ;
lcd_puts ( "ターゲット
[ OK
] を" ) ;
)
targetClear ( ) ;
_delay_ms ( 100 ) ;
spiTransferByte ( 0xAA ) ; / /ターゲットに0xAAを書く
)
INTはtargetInit (ボイド)
(
spiTransferByte ( 0xac ) ; / /最初のバイトを送信する
spiTransferByte ( 0x53 ) ; / / 2番目のバイトを送信する
spiTransferByte ( 0 ) ; / / 3バイトを送る
もし( spiTransferByte ( 0 ) == 105 ) / / respon 105 10進数または69の16進
する必要があります(
リターン( 1 ) ;
)
その他の
(
リターン( 0 ) ;
)
)
ボイドtargetClear (ボイド)
(
spiTransferByte ( 0xac ) ; / /ターゲットの明確な命令
spiTransferByte ( 0x80を) ;
spiTransferByte ( 0 ) ;
spiTransferByte ( 0 ) ;
)
uint8_t spiTransferByte ( uint8_tデータ)
(
# ifdef SPI_USEINT
= FALSEをspiTransferComplete ;
outb ( SPDR 、データ) ; / /データを送信
中( !
) spiTransferComplete ;
#他
outb ( SPDR 、データ) ; / /データを送信
中( ! ( inb ( SPSR ) & ( 1 < <会社のイニシャル入り切手) ) ) ; / /終わるまで待つ
# endifの
戻りinb ( SPDR ) ; / /戻りデータ
を取得)ボイドspiInit (ボイド)
(sbi (ポート、 7 ) ; / /最高裁のハイ
セットsbi ( DDRB 、 7 ) ; / /出力として最高裁に設定
cbi ( DDRB 、 6 ) ; / /入力
として 味噌セット
sbi ( DDRB 、 5 ) ; / /出力としてMOSI設定
sbi ( DDRB 、 4 ) ; / / ßマスターモードのために働く
に 出力する必要があります/ /セットアップのSPIインタフェース:
sbi ( SPCR 、 MSTR ) ; / /マスターモード
cbi ( SPCR 、 SPR0 ) ; / /クロック=金/ 4
cbi ( SPCR 、 SPR1 ) ;
cbi ( SPCR 、 DORD ) ; / / MSBファースト
sbi ( SPCR 、 SPE ) ; / /
SPIは 有効
inb ( SPSR ) ;/ /割り込みのSPIを有効にする
sbi ( SPCR 、 SPIE ) ;
)
私の16x2液晶diplayされています。私の体を助けてください....
の データを送信するには
、 私は混乱し、作る
の を助けることができる誰かが私です。
私 AT89s51初期化するが、このコードを行ったrespon
すべて では
ない 。マイavr xtal 4MHzのとAT89sを使用
し、 1 MHzの転送クロックは16MHzを使用している( 1月4日avrクロックまたは1月16日at89s時計、それが何もデータシートに書いて) 。私はそれをコンパイルするにはWinAVRを使用します。
#含まれ<stdio.h>
#含まれ<stdlib.h>
#含まれ<string.h>
#含まれ<avr/pgmspace.h>
#含まれ<avr/io.h>
#含まれ<avr/interrupt.h>#
" global.h "を含む
# " lcd.h
" など
SPI_USEINT定義#
INTはtargetInit (ボイド) ;
ボイドtargetClear (ボイド) ;
uint8_t spiTransferByte ( uint8_tデータ) ;
u08 spiTransferComplete揮発性;
ボイドspiInit (ボイド) ;INTはメイン(ボイド)
(
# ifdef SPI_USEINT
( SIG_SPI )信号
(
= TRUEをspiTransferComplete ;
)
# endifのlcd_init ( LCD_DISP_ON ) ;
spiInit ( ) ;
開始:
場合( ! targetInit ( ) )
(
lcd_gotoxy ( 0,1 ) ;
lcd_puts ( "目標エラー" ) ;delay1s ( ) ;
後藤開始;
)
その他の
(
lcd_clrscr ( ) ;
lcd_puts ( "ターゲット
[ OK
] を" ) ;
)
targetClear ( ) ;
_delay_ms ( 100 ) ;
spiTransferByte ( 0xAA ) ; / /ターゲットに0xAAを書く
)
INTはtargetInit (ボイド)
(
spiTransferByte ( 0xac ) ; / /最初のバイトを送信する
spiTransferByte ( 0x53 ) ; / / 2番目のバイトを送信する
spiTransferByte ( 0 ) ; / / 3バイトを送る
もし( spiTransferByte ( 0 ) == 105 ) / / respon 105 10進数または69の16進
する必要があります(
リターン( 1 ) ;
)
その他の
(
リターン( 0 ) ;
)
)
ボイドtargetClear (ボイド)
(
spiTransferByte ( 0xac ) ; / /ターゲットの明確な命令
spiTransferByte ( 0x80を) ;
spiTransferByte ( 0 ) ;
spiTransferByte ( 0 ) ;
)
uint8_t spiTransferByte ( uint8_tデータ)
(
# ifdef SPI_USEINT
= FALSEをspiTransferComplete ;
outb ( SPDR 、データ) ; / /データを送信
中( !
) spiTransferComplete ;
#他
outb ( SPDR 、データ) ; / /データを送信
中( ! ( inb ( SPSR ) & ( 1 < <会社のイニシャル入り切手) ) ) ; / /終わるまで待つ
# endifの
戻りinb ( SPDR ) ; / /戻りデータ
を取得)ボイドspiInit (ボイド)
(sbi (ポート、 7 ) ; / /最高裁のハイ
セットsbi ( DDRB 、 7 ) ; / /出力として最高裁に設定
cbi ( DDRB 、 6 ) ; / /入力
として 味噌セット
sbi ( DDRB 、 5 ) ; / /出力としてMOSI設定
sbi ( DDRB 、 4 ) ; / / ßマスターモードのために働く
に 出力する必要があります/ /セットアップのSPIインタフェース:
sbi ( SPCR 、 MSTR ) ; / /マスターモード
cbi ( SPCR 、 SPR0 ) ; / /クロック=金/ 4
cbi ( SPCR 、 SPR1 ) ;
cbi ( SPCR 、 DORD ) ; / / MSBファースト
sbi ( SPCR 、 SPE ) ; / /
SPIは 有効
inb ( SPSR ) ;/ /割り込みのSPIを有効にする
sbi ( SPCR 、 SPIE ) ;
)
私の16x2液晶diplayされています。私の体を助けてください....