|
|
程序僅供參考。
————————————————————————————————————————————————
#include "reg51.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define ID_ADDR_RAM 0xf1 //ID號(hào)的存放在RAM區(qū)的地址為0F1H
//#define ID_ADDR_RAM 0x71 //對(duì)于只有128字節(jié)RAM的ID號(hào)的存放在RAM區(qū)的地址為071H
//ID號(hào)的存放在程序區(qū)的地址為程序空間的最后7字節(jié)
//#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區(qū)讀取ID號(hào)
for (i=0; i<7; i++) //讀7個(gè)字節(jié)
{
SendUart(*iptr++); //發(fā)送ID到串口
}
cptr = ID_ADDR_ROM; //從程序區(qū)讀取ID號(hào)
for (i=0; i<7; i++) //讀7個(gè)字節(jié)
{
SendUart(*cptr++); //發(fā)送ID到串口
}
while (1); //程序終止
}
/*----------------------------
初始化串口
----------------------------*/
void InitUart()
{
SCON = 0x5a; //設(shè)置串口為8位可變波特率
TMOD = 0x00; //定時(shí)器1為模式0(16位自動(dòng)重載)
TL1 = 0xd8; //設(shè)置波特率重裝值
TH1 = 0xff; //115200 bps(65536-18432000/4/115200)
TR1 = 1; //定時(shí)器1開始啟動(dòng)
}
/*----------------------------
發(fā)送串口數(shù)據(jù)
----------------------------*/
void SendUart(BYTE dat)
{
while (!TI); //等待前面的數(shù)據(jù)發(fā)送完成
TI = 0; //清除發(fā)送完成標(biāo)志
SBUF = dat; //發(fā)送串口數(shù)據(jù)
} |
|