如何使十六进制。

G

Guest

Guest
我想外部数据存储器接口与atmega 16 。为此
, 我选择的MMC
, 因为它的代码已书面和在网上。该代码是。

/*********************************************
*芯片类型: ATmega16
*时钟频率: 2457600Hz
*********************************************/
#包括<avr/io.h>
#包括<avr/interrupt.h>
#包括<avr/signal.h>
#包括<inttypes.h>
#包括<avr/iom16.h>

#定义F_OSC 2457600 / *振荡器频率赫兹* /
#定义UART_BAUD_RATE 9600
#定义UART_BAUD_CALC ( UART_BAUD_RATE , F_OSC ) ( ( F_OSC ) / ( ( UART_BAUD_RATE ) *一十六升) -1 )

#定义SPIDI 6 / /端口B位6 ( pin7 ) :数据(数据来自MMC )
中#定义SPIDO 5 / /端口B位5 ( pin6 ) :数据(数据MMC )
中#定义SPICLK 7 / /端口B位7 ( pin8 ) :时钟
#定义SPICS 4 / /端口B位4 ( pin5 :芯片选择的MMC

焦部门[ 512 ] ;

无效delay_ms (无符号短毫秒) (
无符号短outer1 , outer2 ;
outer1 = 200 ;
而( outer1 ) (
outer2 = 1000 ;
而( outer2 ) (
而(
MS )
的 女士- ;
outer2 - ;

outer1 - ;



无效usart_putc (无符号字符三) (
/ /等到尿嘧啶核苷准备
而( ! ( UCSRA & ( 1 “ ” UDRE ) ) ) ;
尿嘧啶核苷=
C的 ; / /发送字符


无效uart_puts (字符*县) (
/ /循环播放
, 直到* s频宽
; =空
而( *县) (
usart_putc ( *县) ;
县 ;



无效的init (无效) (
/ /设置波特率
UBRRH = ( uint8_t ) ( UART_BAUD_CALC ( UART_BAUD_RATE , F_OSC ) “ ”

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="凉爽的" border="0" />

;
UBRRL = ( uint8_t ) UART_BAUD_CALC ( UART_BAUD_RATE , F_OSC ) ;
/ /启用接收器和发射器;使接收中断
UCSRB = ( 1 “ ” RXEN ) | ( 1 “ ” TXEN ) | ( 1 “ ” RXCIE ) ;
/ /异步8N1
UCSRC = ( 1 “ ” URSEL ) | ( 3 “ ” UCSZ0 ) ;


/ /中断可中断
/ /信号不能打断
信号( SIG_UART_RECV ) ( / / USART接收中断
无符号字符,
丙型 ;
ç =尿嘧啶核苷;
usart_putc (
c )
段 ;


无效serialterminate (无效) ( / /终止发送字符串!
而( ! ( UCSRA & ( 1 “ ” UDRE ) ) ) ;
尿嘧啶核苷= 0x0d ;
而( ! ( UCSRA & ( 1 “ ” UDRE ) ) ) ;
尿嘧啶核苷= 0x0a ;


无效SPIinit (无效) (
DDRB & = 〜 ( 1 “ ” SPIDI ) ; / /设置端口B的SPI数据输入输入
DDRB | = ( 1 “ ” SPICLK ) ; / /设置端口B的SPI时钟输出
DDRB | = ( 1 “ ” SPIDO ) ; / /设置端口B的SPI数据输出
DDRB | = ( 1 “ ” SPICS ) ; / /设置端口B的SPI芯片选择输出
SPCR = ( 1 “ ”固相萃取) | ( 1 “ ” MSTR ) | ( 1 “ ” SPR1 ) | ( 1 “ ” SPR0 ) ;
PORTB & = 〜 ( 1 “ ” SPICS ) ; / /设置芯片选择低( MMC中选择)


焦炭的SPI (焦四) ( / /发送字符以上的SPI
焦收到= 0 ;
SPDR =
D的 ;
而( ! ( SPSR & ( 1 “ ” SPIF ) ) ) ;
收到= SPDR ;
返回(收到) ;
)焦司令部(焦befF , uint16_t AdrH , uint16_t AdrL ,焦炭befH )
( / /发送一个命令到MMC
的SPI ( 0xFF ) ;
的SPI ( befF ) ;
的SPI ( ( uint8_t ) ( AdrH “ ”

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="凉爽的" border="0" />

) ;
的SPI ( ( uint8_t ) AdrH ) ;
的SPI ( ( uint8_t ) ( AdrL “ ”

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="凉爽的" border="0" />

) ;
的SPI ( ( uint8_t ) AdrL ) ;
的SPI ( befH ) ;
的SPI ( 0xFF ) ;
返回的SPI ( 0xFF ) ; / /返回最后收到的性质


国际MMC_Init (无效) ( / /初始化的SPI
炭火一;
PORTB | = ( 1 “ ” SPICS ) ; / /禁用的MMC
/ /开始的MMC在SPI模式

一 = 0我“ 10 ,
我 )的SPI ( 0xFF ) ; / /发送10 * 8 = 80个时钟脉冲
PORTB & = 〜 ( 1 “ ” SPICS ) ; / /启用的MMC

如果(命令( 0x40 , 0,0,0 x95 ) ! = 1 )转到mmcerror ; / /重置的MMC

圣: / /如果没有MMC中,模块。循环这里
如果(命令( 0x41 , 0,0,0 xFF ) ! = 0 )转到圣;
返回1 ;
mmcerror :
返回0 ;


无效fillram (无效) ( / /填充内存部门的ASCII字符
诠释一,丙型;
焦mystring [ 18 ] = “队长在这里! ” ;
ç = 0 ;

一 = 0我“ = 512 ;一 ) (
部门[
1 ] = mystring [
C ]
条 ;
C
语言 ;
如果(
三 “ 17 ) ( ç = 0 ; )



国际writeramtommc (无效) ( / /写内存部门的MMC
诠释一;
uint8_t ,
丙型 ;
/ / 512字节写模式
如果(命令( 0x58 , 0,512,0 xFF ) ! = 0 ) (
uart_puts ( “ MMC中:写入错误1 ” ) ;
返回1 ;

的SPI ( 0xFF ) ;
的SPI ( 0xFF ) ;
的SPI ( 0xFE ) ;
/ /写内存部门的MMC

一 = 0我“ 512 ,
我 ) (
的SPI (部门[
1 ] ) ;

/ /结束时,派遣2哑字节
的SPI ( 0xFF ) ;
的SPI ( 0xFF ) ;

ç =的SPI ( 0xFF ) ;
统计= 0x1F ; / / 0x1F = 0b.0001.1111 ;
如果(
三 ! = 0x05 ) ( / / 0x05 = 0b.0000.0101
uart_puts ( “ MMC中:写入错误2 ” ) ;
返回1 ;

/ /等到MMC是不是忙了
而(的SPI ( 0xFF ) ! = (焦) 0xFF ) ;
返回0 ;


国际sendmmc (无效) ( / /发送512字节从MMC通过串口
诠释一;
/ / 512字节阅读模式
如果(命令( 0x51 , 0,512,0 xFF ) ! = 0 ) (
uart_puts ( “三菱:读取错误1 ” ) ;
返回1 ;

/ /等待0xFE -任何传输开始
/ /属性:定型(焦) 0xFE是必须!
而(的SPI ( 0xFF ) ! = (焦) 0xFE ) ;


一 = 0我“ 512 ,
我 ) (
而( ! ( UCSRA & ( 1 “ ” UDRE ) ) ) ; / /等待串口
尿嘧啶核苷=的SPI ( 0xFF ) ; / /发送字符

serialterminate ( ) ;
/ /结束时,派遣2哑字节
的SPI ( 0xFF ) ; / /实际上这个回报的CRC /校验字节
的SPI ( 0xFF ) ;
返回0 ;


国际主要(无效) (
的init ( ) ;
SPIinit ( ) ;

uart_puts ( “单片机在线” ) ;
serialterminate ( ) ;

MMC_Init ( ) ;

uart_puts ( “三菱在线” ) ;
serialterminate ( ) ;

世( ) ; / /使中断

fillram ( ) ;
writeramtommc ( ) ;
sendmmc ( ) ;

uart_puts ( “ 512字节发送” ) ;
serialterminate ( ) ;
uart_puts ( “ LED闪光现在” ) ;
serialterminate ( ) ;

/ /输出使PD5
DDRD | = ( 1 “ ” PD5 ) ;
而( 1 ) (
/ / PIN5 PORTD明确- “率先
PORTD & = 〜 ( 1 “ ” PD5 ) ;
delay_ms ( 500 ) ;
/ / PIN5 PORTD设置- “发光二极管
PORTD | = ( 1 “ ” PD5 ) ;
delay_ms ( 500 ) ;

返回0 ;


代码来源: http://www.captain.at/electronic-atmega-mmc.php
像interrupt.h的文件和其他文件包括令人不安我。我发现其中大多数是网络
, 但就是这些文件的代码而不是十六进制文件。当我尝试编译它们的十六进制文件,我codeVision显示太多的错误。请指导我该软件
, 我使用
, 使之成为一个十六进制文件
, 如果您有任何其他工作代码的MMC与ATMEGA 16或任何其他工作代码对外部存储器然后请员额代码。我使用的ATMEGA 16 。

<img src="http://www.edaboard.com/images/smiles/icon_neutral.gif" alt="中性" border="0" />#包括<avr/io.h>
#包括<avr/interrupt.h>
#包括<avr/signal.h>
#包括<inttypes.h>
#包括<avr/iom16.h>
如果你有这些文件后
, 请他们
, 因为我不知道
, 我的文件或不正确的。

 
这些文件附带的AVR - LIBC的!如果使用的是Windows ,你可以下载WINAVR配备的AVR ,海湾合作委员会的AVR - LIBC的和其他有用的工具...也许您使用的是另一种的AVR C编译器...

 
thankx很多亲爱的。其真正的帮助。我得到我想要什么。再次感谢您...

 

Welcome to EDABoard.com

Sponsor

Back
Top