本帖最后由 ddllxxrr 于 2014-11-12 00:23 编辑
本程序通过一个按键把FLASH里的数组通过串口打印出来。
程序清单:
/*
* GccApplication14.c
*
* Created: 2014-11-11 18:26:34
* Author: Administrator
*/
#define F_CPU 4000000UL
#include <avr/pgmspace.h>
#include <stdio.h>
#include <avr/io.h>
#include <stdint.h>
typedef unsigned char PROGMEM prog_uchar;
#define K1_DOWN() (PINB & _BV(PB0)) == 0x00
prog_int8_t Flash_Byte_Array[] = {0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,
0xFC,0xFD,0xFE,0xFF};
prog_int16_t Flash_Word_Array[] =
{
0x00AC,0x0198,0x0233,0x03BC,0x0480,0x0598,0x06BE,0x07F8,0x0899,0x09A0};
void Init_USART()
{
UCSRB=_BV(TXEN); //允许发送
UCSRC=_BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0);
UBRRL = (F_CPU/9600/16-1)%256;
UBRRH = (F_CPU/9600/16-1)/256;
}
void PutChar(char c)
{
if(c=='\n') PutChar('\r');
UDR = c;
while(!(UCSRA & _BV(UDRE)));
}
void PutStr(char *s)
{
while(*s) PutChar(*s ++);
}
int main(void)
{
uint8_t Mem_byte;
uint16_t Mem_word,i,j = 0;
char s[6];
Init_USART();
PutStr("\n\n Press K1 to Start Read Data From Program Flash Memory...");
DDRB = 0x00; PORTB = 0xFF;
DDRD = 0xFF;
while(1)
{
if(K1_DOWN())
{
PutStr("\n AVR Program Memory Data Demo........\n");
PutStr("\n ---------------------------------\n");
for(i=0,j=0;i<sizeof(Flash_Byte_Array);i++)
{
Mem_byte = pgm_read_byte(&Flash_Byte_Array[i]);
sprintf(s,"%02X",Mem_byte); PutStr(s);
if(++j==20)
{
j=0;PutStr("\n");
}
}
PutStr("\n_______________________________________\n ");
for(i=0,j=0;i<sizeof(Flash_Word_Array);i++)
{
Mem_word = pgm_read_word(&Flash_Word_Array[i]);
sprintf(s,"%04X",Mem_word); PutStr(s);
if(++j == 10)
{
j= 0; PutStr("\n");
}
}
}
}
}
|