程序僅供參考。
————————————————————————————————————————————————
#include "reg51.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define ID_ADDR_RAM 0xf1 //ID號的存放在RAM區的地址為0F1H
//#define ID_ADDR_RAM 0x71 //對于只有128字節RAM的ID號的存放在RAM區的地址為071H
//ID號的存放在程序區的地址為程序空間的最后7字節
//#define ID_ADDR_ROM 0x03f9 //1K程序空間的MCU(如 STC15F201EA, STC15F101EA)
//#define ID_ADDR_ROM 0x07f9 //2K程序空間的MCU(如 STC15F402EACS, STC15F202EA, STC15F102EA)
//#define ID_ADDR_ROM 0x0bf9 //3K程序空間的MCU(如 STC15F203EA, STC15F103EA)
//#define ID_ADDR_ROM 0x0ff9 //4K程序空間的MCU(如 STC15F804EACS, STC15F404EACS, STC15F204EA, STC15F104EA)
//#define ID_ADDR_ROM 0x13f9 //5K程序空間的MCU(如 STC15F205EA, STC15F105EA)
//#define ID_ADDR_ROM 0x1ff9 //8K程序空間的MCU(如STC15F2K08S2, STC15F808EACS, STC15F408EACS)
//#define ID_ADDR_ROM 0x27f9 //10K程序空間的MCU(如 STC15F410EACS)
//#define ID_ADDR_ROM 0x2ff9 //12K程序空間的MCU(如 STC15F812EACS, STC15F412EACS)
//#define ID_ADDR_ROM 0x3ff9 //16K程序空間的MCU(如STC15F2K16S2, STC15F816EACS)
//#define ID_ADDR_ROM 0x4ff9 //20K程序空間的MCU(如STC15F2K20S2, STC15F820EACS)
//#define ID_ADDR_ROM 0x5ff9 //24K程序空間的MCU(如 STC15F824EACS)
//#define ID_ADDR_ROM 0x6ff9 //28K程序空間的MCU(如 STC15F828EACS)
//#define ID_ADDR_ROM 0x7ff9 //32K程序空間的MCU(如STC15F2K32S2)
//#define ID_ADDR_ROM 0x9ff9 //40K程序空間的MCU(如STC15F2K40S2)
//#define ID_ADDR_ROM 0xbff9 //48K程序空間的MCU(如STC15F2K48S2)
//#define ID_ADDR_ROM 0xcff9 //52K程序空間的MCU(如STC15F2K52S2)
//#define ID_ADDR_ROM 0xdff9 //56K程序空間的MCU(如STC15F2K56S2)
#define ID_ADDR_ROM 0xeff9 //60K程序空間的MCU(如STC15F2K60S2)
//-----------------------------------------
void InitUart();
void SendUart(BYTE dat);
//-----------------------------------------
void main()
{
BYTE idata *iptr;
BYTE code *cptr;
BYTE i;
InitUart(); //串口初始化
iptr = ID_ADDR_RAM; //從RAM區讀取ID號
for (i=0; i<7; i++) //讀7個字節
{
SendUart(*iptr++); //發送ID到串口
}
cptr = ID_ADDR_ROM; //從程序區讀取ID號
for (i=0; i<7; i++) //讀7個字節
{
SendUart(*cptr++); //發送ID到串口
}
while (1); //程序終止
}
/*----------------------------
初始化串口
----------------------------*/
void InitUart()
{
SCON = 0x5a; //設置串口為8位可變波特率
TMOD = 0x00; //定時器1為模式0(16位自動重載)
TL1 = 0xd8; //設置波特率重裝值
TH1 = 0xff; //115200 bps(65536-18432000/4/115200)
TR1 = 1; //定時器1開始啟動
}
/*----------------------------
發送串口數據
----------------------------*/
void SendUart(BYTE dat)
{
while (!TI); //等待前面的數據發送完成
TI = 0; //清除發送完成標志
SBUF = dat; //發送串口數據
} |