?? main.c
字號:
//
//
// CPU: STC89C52RC
// FOSC: 22.1184MHz
// XRAM: 32K @0x8000
// FLASH: 512K @0x2000
//
#include<reg52.h>
#include <string.h>
#include <intrins.h>
#include <stdio.h>
#include <absacc.h>
#include"FlashRam.h"
#include"xmodem.h"
extern unsigned char data FlashType;
int TimeTick; // 定時計數器
int TimeSec; // 秒
bit busy;
//STC89C52RC
sfr P4 = 0xE8;
sfr AUXR = 0x8E;
sfr WDTCR = 0xE1;
sbit led = P1^4;
sbit rst_pin = P1^5;
// -,-,EN_WDT,CLR_WDT,IDLE_WDT,PS2,PS1,PS0
//#define WDTCR_VAL 0x34 // 1 1 0 1 0 0
#define WDTCR_VAL 0x14
#define BAUD_128000_22118400 0xFFFB
#define BAUD_115200_22118400 0xFFFA
void dog(void)
{
WDTCR = WDTCR_VAL;
}
void init(void)
{
IE = 0;
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
P4 = 0xFF;
AUXR = 0x02; // 禁用內部擴展RAM
WDTCR = WDTCR_VAL; // 打開內部看門狗
PCON = 0x80 | PCON;
//RCAP2=65535 - Fosc/(32*Baud)
RCAP2H=0xFF; //115200BPS @ 22.1184MHz
RCAP2L=0xFA;
T2CON=0x34;
SCON = 0x52;
// ES = 1;
TCON = 0x05;
TMOD &= 0xf0;
TMOD |= 0x01;
//TH0 = (65535 - 36864)>>8;
//TL0 = 65535 - 36864;
TH0=TL0=0;
//ET0 = 1;
//TR0 = 1;
//EA = 1;
}
void delay(int n)
{
int a,b,c;
for (a=0; a<n; a++)
{
for (b=0; b<5; b++)
{
led = 0;
for(c=0; c<800; c++)dog();
led = 1;
for(c=0; c<8000; c++)dog();
}
}
}
void Mon_RstPin(void)
{
rst_pin = 1;
rst_pin = 1;
if (!rst_pin)
{
IE = 0;
for(;;);
}
}
void main(void)
{
unsigned char ctmp;
init();
delay(3);
puts("\n\nFlash Programmer 1.00 <1K-xmodem>\n");
puts("Test Flash.....");
if (eepGetChipId()) // 檢測FLASH存儲器
{
switch(FlashType)
{
case SST28SF040A:
puts("SST28SF040A\n");
break;
case SST29SF040:
puts("SST29SF040");
break;
default:
printf("UnKnow=%02bx\n",FlashType);
break;
}
}
else
{
puts("None Flash\n");
}
puts("\n \"s\" --- write a file to FLASH");
puts("\n \"C\" --- read file from FLASH\n\n");
delay(3);
if(!led)
{
eepEraseChip();
eepEraseSector(0);
eepProgramByte(0,0);
eepReadByte(0);
eepWriteRam(0,0);
Mon_RstPin();
}
while(1)
{
dog();
ctmp = serial_get_char();
if (ctmp == 'C')
{
led=0;
xmodem_tx();
fclose();
led=1;
}
else if (ctmp == 's')
{
led=0;
xmodem_rx();
led=1;
}
}
((void (code *)(void)) 0)();
}
//
void isr_ext0(void) interrupt 0
{
}
void isr_timer0(void) interrupt 1
{
++TimeTick;
if (TimeTick > 28 )
{
TimeTick=0;
++TimeSec;
// if(TimeSec>=60)
// {
// TimeSec=0;
// }
if (!busy)led = !led;
}
TF0=0;
}
void isr_ext1(void) interrupt 2
{
}
void isr_timer1(void) interrupt 3
{
}
void isr_uart(void) interrupt 4
{
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -