📄 stc 功能测试程序演示.txt
字号:
/***************************************************************
STC12C5410AD 系列和STC12C2052AD 系列单片机EEPROM/IAP 功能测试程序演示
本演示程序在STC-ISP Ver 3.0A.PCB 的下载编程工具上测试通过,EEPROM 的数据在P1口上显示
本程序根据宏晶科技提供的演示程序改编,是本人学习C51的学习笔记,供有需要的同仁参考
不正确的地方,欢迎指正
***************************************************************/
#include <stc2052.h>
#define uchar unsigned char
#define uint unsigned int
uchar DEBUG_DATA=0x5a; //待编程的数据
uint FLASH_ADDRESS=0x1000; //STC12C2052 EEPROM 测试起始地址
void Do_IAP() //IAP操作
{ ISP_CONTR=0x82; //打开 IAP 功能, 设置 Flash 操作等待时间
ISP_ADDRH=FLASH_ADDRESS/0x100; //起始地址
ISP_ADDRL=FLASH_ADDRESS%0x100;
ISP_TRIG=0x46; //先送46h,再送B9h 到ISP/IAP 触发寄存器
ISP_TRIG=0xb9; //送完B9h 后,ISP/IAP 命令立即被触发起动
ISP_CONTR=0; //关闭 IAP 功能
ISP_CMD=0; //清命令寄存器,使命令寄存器无命令,此句可不用
ISP_TRIG=0; //清命令触发寄存器,使命令触发寄存器无触发,此
句可不用
}
//读一字节
void Byte_Read()
{ ISP_CMD=0x1; //设置为IAP/ISP/EEPROM 字节读模式命令
Do_IAP(); //IAP操作
}
//字节编程
void Byte_Program()
{ ISP_CMD=0x02; //设置为IAP/ISP/EEPROM 字节编程模式命令
ISP_DATA=DEBUG_DATA; //待编程的数据先送进ISP_DATA 寄存器
Do_IAP(); //IAP操作
}
//擦除扇区
void Sector_Erase()
{ ISP_CMD=0x03; //设置为IAP/ISP/EEPROM 扇区擦除模式命令
Do_IAP(); //IAP操作
}
void Delay_ms(uint delay) //带参数延时(delay=10,大约10ms,24MHz,1CLK)
{ uint i;
for (; delay>0; delay--)
for (i=0;i<250;i++);
}
void main()
{ P1=0xf0; //演示程序开始工作,让
P1.0/P1.1/P1.2/P1.3 控制的灯亮
Delay_ms(1000); //延时1s
P1=0x0f; //演示程序开始工作,让
P1.7/P1.6/P1.5/P1.4 控制的灯亮
Delay_ms(1000); //延时1s
do{Byte_Read(); //读一字节
if(ISP_DATA==DEBUG_DATA)
{ P1=0x7f; //亮对的指示灯
Delay_ms(3000); //延时3s
while(1)
P1=~ISP_DATA; //显示信息
}
P1=0xfe; //亮错误指示灯
Delay_ms(3000); //延时3s
P1=~ISP_DATA; //显示信息
Delay_ms(3000); //延时3s
Sector_Erase(); //扇区擦除
Byte_Program(); //字节编程
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -