stc单片机读片外扩展RAM,内部R/C时钟及ID号C语言程序
扫描二维码
随时随地手机看文章
#include
#include
sfrIAP_CONTR=0xC7;
sbitMCU_Start_LED=P1^7;
//unsignedcharself_command_array[4]={0x22,0x33,0x44,0x55};
#defineSelf_Define_ISP_Download_Command0x22
//#defineRELOAD_COUNT0xfb//18.432MHz,12T,SMOD=0,9600bps
#defineRELOAD_COUNT0xfd//11.0592MHz,12T,SMOD=0,9600bps
voidserial_port_initial();
voidsend_UART(unsignedchar);
voidUART_Interrupt_Receive(void);
voidSOFt_reset_to_ISP_Monitor(void);
voiddelay(void);
voiddisplay_MCU_Start_Led(void);
voidmain(void)
{
unsignedchari=0;
unsignedcharj=0;
unsignedchardata=0;
unsignedintk=0;
unsignedcharxdata*xdata_point;
//unsignedcharidata*idata_point;
serial_port_initial();//串口初始化
//display_MCU_Start_Led();//点亮发光二极管表示单片机开始工作
//send_UART(0x34);//串口发送数据表示 单片机 串口正常工作
//send_UART(0xa7);//串口发送数据表示 单片机 串口正常工作
//xdata_point=0x400;
xdata_point=0x0000;
//data=0;
data=0xff;
for(k=0;k<32768;k++)
{
*xdata_point=data;
xdata_point++;
}
xdata_point=0x0000;
for(k=0;k<32768;k++)
{
i=0;
//P0=0xFF;
i=*xdata_point;
send_UART(i);
xdata_point++;
}
/*
for(j=0;j<255;j++)
{
*xdata_point=data;
data++;
xdata_point++;
}
//xdata_point=0x400;
xdata_point=0x7800;
for(j=0;j<255;j++)
{
i=0;
//P0=0xFF;
i=*xdata_point;
send_UART(i);
xdata_point++;
}
idata_point=0xF1;
for(j=0;j<15;j++)
{
i=*idata_point;
send_UART(i);
idata_point++;
}
*/
while(1);
}
voidserial_port_initial()
{
SCON=0x50;//0101,00008位可变波特率,无奇偶校验位
TMOD=0x21;//0011,0001设置顶时器1为8位自动重装计数器
TH1=RELOAD_COUNT;//设置定时器1自动重装数
TL1=RELOAD_COUNT;
TR1=1;//开定时器1
ES=1;//允许串口中断
EA=1;//开总中断
}
voidsend_UART(unsignedchari)
{
ES=0;//关串口中断
TI=0;//清零串口发送完成中断请求标志
SBUF=i;
while(TI==0);//等待发送完成
TI=0;//清零串口发送完成中断请求标志
ES=1;//允许串口中断
}
voidUART_Interrupt_Receive(void)interrupt4
{
unsignedchark=0;
if(RI==1)
{
RI=0;
k=SBUF;
if(k==Self_Define_ISP_Download_Command)//是自定义下载命令
{
delay();//延时1秒就足够了
delay();//延时1秒就足够了
soft_reset_to_ISP_Monitor();//软复位到系统ISP监控区
}
send_UART(k);
}
else
{
TI=0;
}
}
voidsoft_reset_to_ISP_Monitor(void)
{
IAP_CONTR=0x60;//0110,0000软复位到系统ISP监控区
}
voiddelay(void)
{
unsignedintj=0;
unsignedintg=0;
for(j=0;j<5;j++)
{
for(g=0;g<60000;g++)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
voiddisplay_MCU_Start_Led(void)
{
unsignedchari=0;
for(i=0;i<3;i++)
{
MCU_Start_Led=0;//顶亮MCU开始工作指示灯
delay();
MCU_Start_Led=1;//熄灭MCU开始工作指示灯
delay();
MCU_Start_Led=0;//顶亮MCU开始工作指示灯
}
}