-
STC
单片机
?
p>
STC
单片机
是以
51
内核为主的系列单片机,
STC
单
片机是宏晶生产
的单时钟
/
机器周期的
单片机,是高速、低功耗、超强抗干扰的新一代
8051
单片<
/p>
机
,指令代码完全兼容传统
8051
p>
,但速度快
8
—
1
2
倍,内部集成
MAX810
专用复位
电路。
4
路
PWM 8
路高速
10
位
A
、
D
转换,针对电机
控制,
强干扰
场合。
目录
?
?
?
?
STC
单片机主要性能
STC
单片机特点
< br>STC
单片机
AD
和
EEPROM
的驱动
C
程
序
基于
STC
单片机的经济型步进电机控制系统
STC
单片机主要性能
●
高速:
1
个时钟
/
机器周期,
增强型
8051
内核,
速度比普通
8051
快
8
~
12
倍
p>
●
宽电压:
5.5
~
3.8V
,
2.4
< br>~
3.8V
(
STC12LE5
410AD
系列)
●
低功耗设计:空闲模式,掉电模式
(可由外部中断唤醒)
●
工作频率:
0
~
p>
35MHz
,相当于普通
8051
:
0
~
420MHz<
/p>
---
实际可到
48MHz
,相当于
8051
:
0
~
576MHz
●
时钟:外部晶体或内部
RC
振荡器可选,在
ISP
下载编程用户程序时设置
● 12K/10K/8K/6K/4K/2K
字节片内
Flash
程序存储器,
擦写次数
10
万次以上
● 512
字节片内
RAM
数据存储器
●
芯片内
EEPROM
功能
● ISP /
IAP
,在系统可编程
/
在应用可编
程
,
无需编程器
/
仿真器
● 10
位
ADC
,
8
通道
,STC12C2052AD
系列为
8
位
ADC
。
4
路
PWM
还可当
4
路
D/A
使用
● 4
通道捕获
/
比较单元(
PWM/PCA/CCU
),
STC12C2052AD
系列
为
2
通道
---
也可用来再实现
4
个定时器或
4
个外部中断
(支持上升沿
/
下降沿中断)
● 2
个硬件
16
位定时器,兼容普通
8051
的定时器。
4
路
PCA
还可再实
现
4
个定时器
●
硬件看门狗(
WDT
)
●
高速
SPI
通信端口
●
全双工异步串行口
(UART),<
/p>
兼容普通
8051
的串口
●
先进的指令集结构,兼容普通
805
1
指令集
4
组
8
个
8
位通用工作寄存器(共
32
个通用寄存器)
有硬件乘法
/
除法指令
●
通用
I/O
口(
27/23/15
个),复位后为:
准双向口
/
弱上拉(普通
8051
传统
I/O
口)
可设置成四种模式:准双向口
/
弱上拉,推挽
/
强上拉,仅为输入
/
高阻,
开漏每个
I/O
口驱动能力均可达到
20mA
,但整个芯片最大不得
超过
55mA
STC
单片机特点
?
1
、
I / O
口经过特殊处理
2
、轻松过
2KV/4KV
快速脉冲干扰
(EFT
测试)
3
、宽电压,
不怕电源抖动
4
、宽温度范围
, - 4 0
℃~
8 5
℃
5
、高抗静电(
E S D
保护)
6
、单片机内部的时钟电路经过特殊处理
7
、单片机内部的电源供电系统经过特殊处理
8
、单片机内部的看门狗电路经过特殊处理
9
、单片机内部的复位电路经过特殊处理
STC
单片机
AD
和
EEPROM
的驱动
C
程序<
/p>
?
STC
单片机具有在应用编程,调试
起来比较方便;带有
10
位
AD
;内
部
eeprom
;可在
1T/
机器周期下工作,速度是传统
51
单片机的
12
倍;下面
是我写的
AD
和
EE
PROM
的驱动
C
代码:
/*-------------------
---------------------------------------------
*File Name: stc_AD.c -
*Description: A/D
转换程序
*Project: -
*MCU
type: STC12C5410AD -
-
*Company: WY -
*Compiler: KEIL C51 -
*DESINER:
郭准
06.2.7 -
-------
--------------------------------------------------
--------------*/
#include
定义的
系统头文件和全局变量
/*A/D SFR*/
sfr
ADC_LOW2 = 0xBE;
sfr
ADC_CONTR = 0xC5;
sfr
ADC_DATA = 0xC6;
sfr
CLK_DIV = 0xC7; ////////
//
定义变量
uchar code
display_AD_channel_ID[2] = {0x00,0x01};
uchar data
AD_channel_result[2][5]; //
各通道
A/D
转换结果。前是
通道号;后是转换的值
//
定义引用外部
extern void Delay(uint numb
er);//
晶振
=11059200,
机器周期
=1.085069444us,
加
的机器周期
=1
extern void send_char_com(uchar ch);
extern void
send_string_com(uchar *str,uchar strlen);
void Ad_Change(uchar
channel);
//---
--------------------------------------------------
-
//
功能:
A/D
转换
//
入口:
channel =
通道号
.0
:
0
通道;
1
:
1
通道。。。。。。。
//
出口:
AD_channel_1_res
ult: 10
位的数据,
16
进制。
//
设计
:郭准,伟业,
2006/2/7
//------------------------------------------------
------
void Ad_Change(uchar
channel)
{
uint AD_Result_Temp = 0
<
/p>
//---------------------
将
P1.0--P1.1
设置成适合
AD
转换的模式
///
P1 = 0xff; //
将
P1
口
置高,为
A/D
转换作准备
ADC_CONTR = ADC_CONTR|0x80;
//1000,0000
打开
A/D
转
换电源
P1M0 = 0x03;
//0000
,
0011
用于
A/D
转换的
P1.x
口,先设为开漏
P1M1 =
0x03; //0000
,
0011P1.0--P1.1<
/p>
先设为开漏。断开内部上拉电
阻
Delay(20); //20
ADC_CONTR = ADC_CONTR&0xE0; //1110,0000
清
ADC_FLAG,ADC_START
位和低
3
位
ADC_CONTR =
ADC_
CONTR|(display_AD_channel_ID[channel]&0x07);
//
设置
当前通道号
Delay(1);
//
延时使输入电压达到稳定
ADC_DATA = 0; //
清
A/D
转换结果寄存器
ADC_LOW2 = 0;
ADC_CONTR = ADC_CONTR|0x08;
//0000
,
1000ADCS
=
1
,启动
转换
do { }
while((ADC_CONTR & 0x10)==0); //0001,00
00
等待
A/D
转换结束
ADC_CONTR
= ADC_CONTR&0xE7; //1110,0111
清
ADC_FLAG
位,
停止
A/D
转换
AD_Result_Temp =
((AD_Result
_Temp|ADC_DATA)<<2)|(ADC_LOW2&0x03);
<
/p>
//
保存返回
AD
转换的
结果
//-------------------------
---
转换成可由串口显示的字符
AD_channel_result[channel][0] =
AD_Result_Temp/1000+0x30;
AD_channel_result[channel][1] =
(AD_Result_Temp%1000)/100+0x30;
AD_channel_result[channel][2] =
(AD_Result_Temp%100)/10+0x30;
AD_channel_result[channel][3] =
AD_Result_Temp%10+0x30;
p>
//------------------------
串口监视
//
send_char_com(ADC_DATA);
//////
发送转换
的
到的
值,这里只
是
高
8
位,值的转换需要考虑
// send_char_com(ADC_LOW2);
//////
发送转换
的
到的
值,
这里只
是
低
2
位,值的转换需要考虑
send_string_com(AD_c
hannel_result[channel],4);
Delay(1); //
}
/*-------------------------
---------------------------------------
*File Name: STC_EEPROM.c -
*Description: IAP/ISP
功能
-
*Project: -
*MCU
type: STC12C5410AD -
-
*Company: WY -
*Compiler: KEIL C51 -
*DESINER:
郭准
06.2.7 -
-------
--------------------------------------------------
--------------*/
#include
定义的
系统头文件和全局变量
/*IAP
有关功能寄存器
*/
sfr ISP_DATA = 0xE2;
sfr ISP_ADDRH = 0xE3;
sfr ISP_ADDRL = 0xE4;
sfr ISP_CMD = 0xE5;
sfr ISP_TRIG = 0xE6;
sfr ISP_CONTR = 0xE7;
//-------------------------
---
定义常量
#define ENABLE_ISP 0x82 //<20MHz
//#define ENABLE_ISP 0x83
//<12MHz
#define DEBUG_DATA
0x5A
//----------------------------flash
存储的起始地址
#define DATA_FLASH_START_ADDRESS 0x2800
//stc12c2052ad ////////////???????????
uchar tx_buf[3] = {0,0,0};
extern void Delay(uint numb
er);//
晶振
=11059200,
机器周期
=1.085069444us,
加
的机器周期
=1
extern void send_char_com(uchar ch);
extern void
send_string_com(uchar *str,uchar strlen);
uchar Byte_Read(uint
address);
void
Sector_Erase(uint address);
void Byte_Program(uint address,uchar
ch);
/*
void Eeprom_Start(void)
{
P1 = 0xf0;
//
开始工作
Delay(2);
//22us..
原
13us
// SP = 0xE0; //
堆栈指针指向
0E0H
单元
}
*/
//-------------------------------------
-----------------
//
功能:读一字节
;
调用前需打开
IAP
功能
//
入口:
uint address
=页地址
0
~
512
,
为了提高处理速度,
最好用<
/p>
0~256
的范围
//
出口:
//
设计:郭准,伟业,
2006/2/7
//----------
--------------------------------------------
uchar Byte_Read(uint
address)
{
uchar data ch;
ISP_CONTR = ENABLE_ISP; //
打开
IAP
功能,
设置
Flash
操作等待时间
ISP_CMD = 0x01; //
选择读
AP
模式
//--------------------------
address =
DATA_FLASH_START_ADDRESS+address;
ISP_ADDRH = (uchar)(address>>8);
//
填页地址
ISP_ADDRL = (uchar)(address);
//
填页地址
EA = 0;
ISP_TRIG
= 0x46; //
出发
ISP
处理
器
ISP_TRIG =
0xB9;
-
-
-
-
-
-
-
-
-
上一篇:grasshopper运算器名称总结
下一篇:高频课程设计_LC振荡器_克拉泼