自行撰写的常用库,包含各种实用函数,串口发送,EEPROM操作等等,分为.c文件和.h文件
.c文件
#ifndef _SINZOC51LAB_H
#include "sinzoC51lab.h"
#endif
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4)
#define WT_30M 0x80
#define WT_24M 0x81
#define WT_20M 0x82
#define WT_12M 0x83
#define WT_6M 0x84
#define WT_3M 0x85
#define WT_2M 0x86
#define WT_1M 0x87
void UartInit()
{
SCON = 0x5a;
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x15;
}
void UartSend(char dat)
{
while (!TI);
TI = 0;
SBUF = dat;
}
void UartPrint(char *str)
{
while(str[0] != '\0')
{
UartSend(str[0]);
str+=1;
}
}
void IapIdle()
{
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除触发寄存器
IAP_ADDRH = 0x80; //将地址设置到非IAP区域
IAP_ADDRL = 0;
}
char IapRead(int addr)
{
char dat;
char i =1;
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 1; //设置IAP读命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_();
while(i--);
dat = IAP_DATA; //读IAP数据
IapIdle(); //关闭IAP功能
return dat;
}
void IapProgram(int addr, char dat)
{
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 2; //设置IAP写命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写IAP数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_();
IapIdle(); //关闭IAP功能
}
void IapErase(int addr)
{
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 3; //设置IAP擦除命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //
IapIdle(); //关闭IAP功能
}
void EEPROM_sample()
{
UartInit();
IapErase(0x0400);
UartSend(IapRead(0x0400));
IapProgram(0x0400, 0x12);
UartSend(IapRead(0x0400));
while (1);
}
void Delay10us(int tim) //@11.0592MHz
{
unsigned char i, j;
int k;
i = 35;
for(k=0;k<tim;k++)
{
do
{
} while (--i);
}
}
void delay(int tim) //@11.0592MHz 10ms
{
unsigned char i, j;
int k;
i = 9;
j = 3;
for(k=0;k<tim;k++)
{
do
{
while (--j);
} while (--i);
}
}
.h文件
#include <intrins.h>
#include "STC8.h"
//延时
void _nop_();
void Delay10us(int tim);
void delay(int tim) ;
//EEPROM
void EEPROM_sample();
void IapErase(int addr);
void IapProgram(int addr, char dat);
void IapIdle();
char IapRead(int addr);
//串口操作
void UartSend(char dat);
void UartInit();
void UartPrint(char *str);
|