1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一,打开文件(可以随文下载放置在文档中打开)。(如下图1所示)
图1 二,调整原理图大小,适合可视,另存工程文件。(如下图2,3,4所示) 图2 图3 图4 三,点击Source Code标签。(如下图5所示) 图5 四,编辑main.c Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a22_MMC存储卡测试 (如下图6所示) 图6 五,Main.c 代码: //----------------------------------------------------------------- // 名称: MMC存储卡测试 //----------------------------------------------------------------- // 说明: 本例运行时,按下K1将向MMC卡第0块写入512个有序字节,按下K2时 // 将向第1块写入512个随机字节,按下K3与K4时将分别读取并通过 // 虚拟终端显示这些字节数据. // //----------------------------------------------------------------- #include “mmc.h” #include “usart.h” //定义按键操作 #define K1_DOWN() (PINA== (INT8U) ~_BV(PA1)) #define K2_DOWN() (PINA== (INT8U) ~_BV(PA3)) #define K3_DOWN() (PINA== (INT8U) ~_BV(PA5)) #define K4_DOWN() (PINA== (INT8U) ~_BV(PA7)) //当前按键操作代号 INT8U OP = 0; //MMC块字节读写缓冲 INT8U Block_bytes[512]; //MMC卡操作错误标识(为1表示正常,为0表示出错) INT8U ERROR_Flag = 1; //----------------------------------------------------------------- // 以十六进制形式显示所读取的字节 //----------------------------------------------------------------- void Show_Byte_by_HEX(INT8U *Buffer, INT32U Len) { INT32U i; char s[4]; for(i= 0; i< Len; i++) { if(i % 32== 0) PutChar(’r’); sprintf(s, “0x%02x “, Buffer); PutStr(s); } PutStr(”r---------------------Finished!----------------------------r”); } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- int main() { INT32U i; DDRA= 0x00; PORTA= 0xFF; DDRD= 0xFF; PORTD= 0xFF; SPI_Initialise(); Init_USART(); _delay_ms(100); PutStr(“Initialise MMC, Please Waiting…”); ERROR_Flag= MMC_Initialise(); if(ERROR_Flag) PutStr(“OK! rr”); else PutStr(“ERROR! rr”); PutStr(“Please Press K1, K2, K3 or K4 to Play MMC Test…rr”); srand(300); while(1) { while(PINA== 0xFF); if (K1_DOWN()) OP= 1; else if (K2_DOWN()) OP= 2; else if (K3_DOWN()) OP= 3; else if (K4_DOWN()) OP= 4; if(ERROR_Flag== 0) { PutStr(“Re - Initialise MMC, Please Waiting…”); SPI_Initialise(); _delay_ms(100); ERROR_Flag= MMC_Initialise(); if(ERROR_Flag) PutStr(“OK! rr”); else { PutStr(“ERROR! rr”); goto next; } } if(OP== 1) { PutStr(“Write MMC Order Bytes(512)…”); for(i= 0; i< 512; i++) Block_bytes= (INT8U) i; ERROR_Flag= MMC_Write_Block(0, Block_bytes); if(ERROR_Flag) PutStr(“OK! rr”); else PutStr(“ERROR! rr”); } if(OP== 2) { PutStr(“Write MMC Random Bytes(512)…”); for(i= 0; i< 512; i++) Block_bytes= (INT8U) rand(); ERROR_Flag= MMC_Write_Block(512, Block_bytes); if(ERROR_Flag) PutStr(“OK! rr”); else PutStr(“ERROR! rr”); } if(OP== 3) { PutStr("rrrRead MMC DEMO: Order Bytes…"); ERROR_Flag= MMC_Read_Block(0); if(ERROR_Flag) { PutStr(“OK! rr”); Show_Byte_by_HEX(Block_bytes, 512); } else PutStr(“ERROR * * * ! rr”); } if(OP== 4) { PutStr("rrrRead MMC DEMO: Random Bytes…"); ERROR_Flag= MMC_Read_Block(512); if(ERROR_Flag) { PutStr(“OK! rr”); Show_Byte_by_HEX(Block_bytes, 512); } else PutStr(“ERROR * * * ! rr”); } next: while(PINA!= 0xFF); } } usart.h //****************************************************************************************** #ifndef USART_H #define USART_H #include #include #include #include #define INT8U unsigned char #define INT16U unsigned int #define INT32U unsigned long void Init_USART(); void PutChar(char c); void PutStr(char *s); #endif 六,点击构建工程按钮,编译工程。(如下图7所示) 图7 七,点击窗口左下方仿真按钮,可见虚拟温度在虚拟串口显示屏显示。 (如下图8,9,10所示) 图8 图9 图10 八,选择release,点击构建工程按钮,编译工程生成Hex文件。(如下图11所示) 图11 附件Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a22_MMC存储卡测试在已安装Proteus8.9的计算机文件夹中打开即可 |
|
|
|
只有小组成员才能发言,加入小组>>
3323 浏览 9 评论
3000 浏览 16 评论
3498 浏览 1 评论
9073 浏览 16 评论
4093 浏览 18 评论
1198浏览 3评论
614浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2343浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1902浏览 2评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 23:52 , Processed in 1.039515 second(s), Total 78, Slave 59 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号