- 打卡等级:初来乍到
- 打卡总天数:2
- 最近打卡:2025-12-16 11:16:07
已绑定手机
新手上路
- 积分
- 14
|
#include "comm\STC32G.h"
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;
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 22; //设置等待参数12MHz
IAP_CMD = 1; //设置IAP读命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_ADDRE=0xFF;
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_();
dat = IAP_DATA; //读IAP数据
IapIdle(); //关闭IAP功能
return dat;
}
void IapProgram(int addr, char dat)
{
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 22; //设置等待参数12MHz
IAP_CMD = 2; //设置IAP写命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_ADDRE=0xFF;
IAP_DATA = dat; //写IAP数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_();
IapIdle(); //关闭IAP功能
}
void IapErase(int addr)
{
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 22; //设置等待参数12MHz
IAP_CMD = 3; //设置IAP擦除命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_ADDRE=0xFF;
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //
IapIdle(); //关闭IAP功能
}
unsigned int eeprom_add_s=0X00;
unsigned char ALARM_statse;
void save_dat(void)
{
unsigned char temp_data;
IapErase(eeprom_add_s);
temp_data=IapRead(eeprom_add_s);
SBUF=temp_data; 这个地方读出来一直 0x00
IapProgram(eeprom_add_s,ALARM_statse);
// ALARM_statse=IapRead(eeprom_add_s);
//SBUF=ALARM_statse;
}
void read_data(void)
{
//unsigned short temp_eep_add=10;
EA=0;
ALARM_statse=IapRead(eeprom_add_s);
EA=1;
//if(ALARM_statse>10)
//{
// ALARM_statse=1;
//}
}
#include "com_b.h"
#include "comm\STC32G.h"
#define MAIN_Fosc 22118400UL // 24000000UL
#define Baudrate2 (65536 - MAIN_Fosc / 115200 / 4)
void Uart1_Init(void) //9600bps@22.1184MHz
{
T2R = 0; //Timer stop
T2_CT = 0; //Timer2 set As Timer
T2x12 = 1; //Timer2 set as 1T mode
T2H = (unsigned char)(Baudrate2 / 256);
T2L = (unsigned char)(Baudrate2 % 256);
ET2 = 0; //禁止中断
T2R = 1; //Timer run enable
SCON = 0x50; //8位数据,可变波特率
// AUXR |= 0x01; //串口1选择定时器2为波特率发生器
// AUXR |= 0x04; //定时器时钟1T模式
// AUXR |= 0x10; //定时器2开始计时
S1BRT=1;
ES=1;
REN = 1; //允许接收
EA=1;
}
void UART1_int (void) interrupt 4
{
if(RI)
{
RI = 0;
}
if(TI)
{
TI = 0;
}
}
void main(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
Uart1_Init();
// read_data();
// SBUF=ALARM_statse;
save_dat();
for(;;)
{
}
}
请高手,看一下那里不对,谢谢
|
|