芯片简介
赛元SC92F7250单片机,是国产的超低成本选择。对于功能简单,控制不复杂的场景,非常适用。
管脚配置如下:
最大时钟可配24M,内部4Kbytes flash ROM + 256 bytes SRAM + 128bytes EEPROM,支持Flash读写、低电压复位、11位看门狗、基本定时器、高级定时器、外部中断、8位PWM可调、12位精度的ADC等功能,支持IDLE/Stop模式切换。
SC92F7250型号的MCU采用8051内核,其指令完全兼容标准8051内核单片机。
开发环境
赛元MCU采用Keil C平台开发,支持汇编语言和C语言编程。
安装Keil C51
如果本机已经安装了Keil其它系列软件,可以安装在同一路径下,不会覆盖已有版本,比如已经Keil ARM,同样可以再安装Keil C51。
安装过程比较简单,填写基本的信息、选择安装路径,一直next下去就可以了。
安装SOC Keil插件
安装完成后,可以在赛元微电子官方网站下载开发需要用到的资料和软件开发包,链接:https://www.socmcu.com/index.php?m=Product&a=tools&bid=49
下载SOC_KEIL.rar并安装,完成后可以在Keil工具内支持SOC的型号和开发包。
配置Keil环境
打开Keil软件,新建空工程,需要配置以下几个地方:
基本功能开发
在官方下载变成demo,文件SC92F7252_7251_7250_Demo_Code.rar,参考其功能代码。
将demo中的SC92F725x_C.H文件拷贝到新建的工程中使用。
gpio操作
gpio配置示例:
static void gpio_config(void)
{
// P12 P13 -> output
// P27 -> output
// P20 P21 P26 -> input
P1CON = 0x0c; // 00xx 1100
P2CON = 0x80; // 1000 xx00
// P21 pull up
P1PH = 0x00; // 00xx 0000
P2PH = 0x02; // 0000 xx10
}
外部中断
示例:配置外部中断2
void ext2_irq(void) interrupt 10
{
if (P21 == 0) {
; // INT25
}
}
void gpio_ext_config(void)
{
// int2 pull down
INT2F = 0x20; // xx10 xxxx
INT2R = 0x00; // xx00 xxxx
// enable int2
IE1 |= 0x08; // xxxx 100x
IP1 |= 0x08; // xxxx 100x
EA = 1;
}
定时器
示例(100us定时器,12MHz系统时钟):
void timer0_irq(void) interrupt 1
{
TH0 = 0x9b;
TL0 = 0x9b;
if (timer_timeout != 0) {
timer_timeout--;
}
}
static void timer_config(void)
{
// t0 freq = fsys/12
TMCON = 0x0; // xxxx x000
// t0=timer mode=2(8 bit timer)
TMOD = 0x02; // x000 x010
// enble timer0 interrupt
ET0 = 0x1;
// interrupt priority
IPT0 = 0x1;
// 12M / 12 = 1us, 100us
TH0 = 0x9b;
TL0 = 0x9b;
// start timer
//TCON = 0x10; // 0001 xxxx
// open interrupt
TR0 = 0;
EA = 1;
TR0 = 1;
}
static void sleep_100us(unsigned short usec)
{
timer_timeout = usec;
while(timer_timeout != 0);
}
看门狗
通过修改烧录Option信息中WDT来选择打开/关闭看门狗功能。
配置WDTCON寄存器来清除WDT计数值、选择WDT溢出时间:
EEPROM
对EEPROM的读写操作示例如下:
// 0x00:选择ROM区操作 0x02:选择EEPROM区操作
#define IapEPPROM 0x02
static void IAPWrite(unsigned char addr, unsigned char value, unsigned char area)
{
EA = 0;
IAPDAT = value; //写入数据Data
IAPADH = ((addr >> 8) & 0x7f); //写入地址的高5位
IAPADL = addr; //写入地址的低8位
IAPADE = area; // IAPArea=0x00:选择ROM区操作 IAPArea=0x02:选择EEPROM区操作
IAPKEY = 240; // IAP开启保护控制时间
IAPCTL = 0x06; // CPU hold time为2ms,写入操作命令
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
IAPADE = 0x00; //MOVC指向ROM
EA = 1;
}
static unsigned char IAPRead(unsigned char addr, unsigned char area)
{
unsigned char value = 0x00;
EA = 0;
IAPADE = area;
value = *(IapAddr + addr); //读取的数据
IAPADE = 0x00; //MOVC指向ROM
EA = 1;
return value;
}
注意事项
SC92F7250型号的MCU不支持在线仿真调试。
烧录Option信息配置LVR,低电压复位电压根据实际使用来选择,否则导致无法启动。