📄 function.c
字号:
#include "main.h"
//-*********************************-//
// 延时程序
//-*********************************-//
void delay(unsigned int a) //delay
{
uint i;
for(i=0;i<a;i++)
{
wait100us();
}
}
//-**********************************-// wait 100us
void wait100us(void) {
asm {
LDD #((BUS_FREQUENCY/3)-4-2-4) /* minus cycles needed for BSR, LDA and RTS */
loop:
DBNE D,loop /* 3 cycles per iteration */
}
}
//-*******************************-//wait 10us
void wait10us(void) {
asm{
LDD #((BUS_FREQUENCY/30)-4-2-4) /* minus cycles needed for BSR, LDA and RTS */
loop:
DBNE D,loop /* 3 cycles per iteration */
}
}
//-*******************************-//wait 5us
void wait5us(void) {
asm{
LDD #((BUS_FREQUENCY/60)-4-2-4) /* minus cycles needed for BSR, LDA and RTS */
loop:
DBNE D,loop /* 3 cycles per iteration */
}
}
//-*********************************-//
// 串口接收与发送
//-*********************************-//
void put_char(char c) //串口向外发送一个char字符
{
while((SCI0SR1&0x80)==0);
SCI0DRL=c;
}
void put_word(int w)
{
put_char((char)w);
w>>=8;
put_char((char)w);
}
char get_char(void) //从串口收一个字符
{
while ((SCI0SR1&0x20)==0);
return SCI0DRL;
}
//-********************************-//
#ifndef NOERROR
#define NOERROR 0
#endif
#ifndef ERROR
#define ERROR 1
#endif
//#define Erase_Verify 0x05
//#define Word_Program 0x20
//#define Sector_Erase 0x40
//#define Mass_Erase 0x41
//#define Sector_Modify 0x60
#define ERASECMD 0x20
#define PROGCMD 0x20
void Init_Eeprom(void)
{
ECLKDIV=0x4C; //Erase or Prog frequence 167KHz
INITEE=17;
asm nop;
MISC=1;
}
//擦写:
unsigned char EepromErase(unsigned int *pAddress, unsigned char size)
{
if(ECLKDIV_EDIVLD == 1)
{
if((ESTAT_ACCERR == 0) && (ESTAT_PVIOL == 0))
{
while(size)
{
if(ESTAT_CBEIF == 1)
{
*pAddress = 0xFFFF;
pAddress += 2;
ECMD =ERASECMD;
ESTAT_CBEIF = 1;
if((ESTAT_ACCERR == 1) || (ESTAT_PVIOL == 1))
return ERROR;
while (ESTAT_CCIF == 0);
size--;
}
}
return NOERROR;
}
else return ERROR;
}
else return ERROR;
}
/////////////////////////////////////////////////////////////////////
unsigned char EepromProgram(unsigned int *pAddress, unsigned int *pData, unsigned char size)
{
if(ECLKDIV_EDIVLD == 1)
{
if((ESTAT_ACCERR == 0) && (ESTAT_PVIOL == 0))
{
while(size)
{
if(ESTAT_CBEIF == 1)
{
*pAddress++ = *pData++;
ECMD = PROGCMD;
ESTAT_CBEIF = 1;
if((ESTAT_ACCERR == 1) || (ESTAT_PVIOL == 1))
return ERROR;
while (ESTAT_CCIF == 0);
size--;
}
}
return NOERROR;
}
else return ERROR;
}
else return ERROR;
}
//////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -