单片机c语言内部ram,stc单片机读片外扩展RAM,内部R/C时钟及ID号C语言程序

stc单片机读片外扩展RAM,内部R/C时钟及ID号C语言程序

来源:--

作者:--

浏览:659

时间:2016-08-10 14:18

标签:

摘要:

#include #include sfr  IAP_CONTR =  0xC7; sbit MCU_Start_LED  =  P1^7; //unsigned char self_command_array[4]

#include

#include

sfr  IAP_CONTR =  0xC7; sbit MCU_Start_LED  =  P1^7;

//unsigned char self_command_array[4] =  {0x22,0x33,0x44,0x55};

#define Self_Define_ISP_Download_Command  0x22

//#define RELOAD_COUNT  0xfb   //18.432MHz,12T,SMOD=0,9600bps

#define RELOAD_COUNT  0xfd   //11.0592MHz,12T,SMOD=0,9600bps

void serial_port_initial();

void send_UART(unsigned char);

void UART_Interrupt_Receive(void);

void SOFt_reset_to_ISP_Monitor(void);

void delay(void);

void display_MCU_Start_Led(void); void main(void)

{

unsigned  char i = 0;

unsigned  char j = 0;

unsigned  char temp_data = 0;

unsigned  int  k = 0;

unsigned char xdata *xdata_point;

//    unsigned char idata *idata_point;     serial_port_initial();      //串口初始化

//    display_MCU_Start_Led();    //点亮发光二极管表示 单片机 开始工作

//    send_UART(0x34);            //串口发送数据表示 单片机 串口正常工作

//    send_UART(0xa7);            //串口发送数据表示 单片机 串口正常工作 //    xdata_point = 0x400;

xdata_point = 0x0000;

//    temp_data = 0;

temp_data = 0xff;

for(k=0;k<32768;k++)

{

*xdata_point = temp_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 = temp_data;

temp_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);

} void serial_port_initial()

{

SCON    =   0x50;   //0101,0000 8位可变波特率,无奇偶校验位

TMOD    =   0x21;   //0011,0001 设置顶时器1为8位自动重装计数器

TH1     =   RELOAD_COUNT;   //设置定时器1自动重装数

TL1     =   RELOAD_COUNT;

TR1     =   1;    //开定时器1

ES      =   1;    //允许串口中断

EA      =   1;    //开总中断

} void send_UART(unsigned char i)

{

ES     =   0;  //关串口中断

TI     =   0;  //清零串口发送完成中断请求标志

SBUF   =   i;

while(TI ==0); //等待发送完成

TI     =   0;  //清零串口发送完成中断请求标志

ES     =   1;  //允许串口中断

} void UART_Interrupt_Receive(void) interrupt 4

{

unsigned char   k   =   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;

}

} void soft_reset_to_ISP_Monitor(void)

{

IAP_CONTR   =    0x60;   //0110,0000   软复位到系统ISP监控区

} void delay(void)

{

unsigned int j  =   0;

unsigned int g  =   0;

for(j=0;j<5;j++)

{

for(g=0;g<60000;g++)

{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

void display_MCU_Start_Led(void)

{

unsigned  char i = 0;

for(i=0;i<3;i++)

{

MCU_Start_Led   =   0;  //顶亮MCU开始工作指示灯

delay();

MCU_Start_Led   =   1;  //熄灭MCU开始工作指示灯

delay();

MCU_Start_Led   =   0;  //顶亮MCU开始工作指示灯

}

}

分享到:

10e8228c7d9c48ff5d812b53005e0bae.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值