📄 isp._c
字号:
#include <iom8v.h>
#include <macros.h>
#include <eeprom.h>
/* 位操作宏 */
#define set_bit(x,y) (x|=(1<<y))
#define clr_bit(x,y) (x&=~(1<<y))
#define get_bit(x,y) (x&(1<<y))
#define fosc 8000000
#define baud 19200
#define device 0x76
extern unsigned char read_flash(unsigned int add);
/* UART初始化 */
void uart_init(void)
{
OSCCAL=read_flash(0x1f20);
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收
UBRRL=(fosc/16/(baud+1))%256;
UBRRH=(fosc/16/(baud+1))/256;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
}
/* 字符输出函数 */
void putchar(unsigned char c)
{
while (!(UCSRA&(1<<UDRE)));
UDR=c;
}
/* 字符输入函数 */
unsigned char getchar(void)
{
while(!(UCSRA& (1<<RXC)));
return UDR;
}
#pragma interrupt_handler isp:iv_USART_RXC
void isp(void)
{
static unsigned int adder;
unsigned char val;
val=UDR;
switch (val)
{
case 0x1b:{
break;
}
case 't':{
putchar(device);
putchar(0x00);
break;
}
case 'P':{
clr_bit(DDRC,0);
CLI();
putchar(13);
break;
}
case 'a':{
putchar('Y');
break;
}
case 'A':{
adder=(getchar()<<8);
adder|=getchar();
putchar(13);
break;
}
case 'D':{
EEPROMwrite(adder,getchar());
putchar(13);
adder++;
break;
}
case 'd':{
putchar(EEPROMread(adder));
adder++;
break;
}
case 'L':{
set_bit(DDRC,0);
SEI();
putchar(13);
break;
}
case 'T':{
if(getchar()==0x38)
putchar(13);
else
putchar('?');
break;
}
case 'F':{
putchar(00);
break;
}
case 's':{
putchar(2);
putchar(1);
putchar(0);
break;
}
case 'S':{
putchar('A');
putchar('V');
putchar('R');
putchar('B');
putchar('O');
putchar('O');
putchar('T');
break;
}
case 'p':{
putchar('S');
break;
}
case 'V':{
putchar('1');
putchar('0');
break;
}
case 'v':{
putchar('1');
putchar('0');
break;
}
case 'x':{
getchar();
putchar(13);
break;
}
case 'y':{
getchar();
putchar(13);
break;
}
case 'm':{
putchar(13);
break;
}
default:{
putchar('?');
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -